117 lines
2.8 KiB
C
Executable File
117 lines
2.8 KiB
C
Executable File
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
|
|
/* All Rights Reserved */
|
|
|
|
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
|
|
/* The copyright notice above does not evidence any */
|
|
/* actual or intended publication of such source code. */
|
|
|
|
#ident "@(#)main.c 1.7 93/04/16 SMI"
|
|
|
|
#include "stdio.h"
|
|
#include "ctype.h"
|
|
#include "awk.def"
|
|
#include "awk.h"
|
|
#include "wctype.h"
|
|
#include "getwidth.h"
|
|
|
|
int dbg = 0;
|
|
int svargc;
|
|
wchar_t **svargv;
|
|
eucwidth_t eucwidth;
|
|
|
|
extern FILE *yyin; /* lex input file */
|
|
wchar_t *lexprog; /* points to program argument if it exists */
|
|
extern errorflag; /* non-zero if any syntax errors; set by yyerror */
|
|
|
|
int filefd, symnum, ansfd;
|
|
extern int maxsym, errno;
|
|
main(argc, argv) int argc; char **argv; {
|
|
register wchar_t *p, **wargv;
|
|
register int i;
|
|
static wchar_t L_dash[] = L"-";
|
|
static wchar_t L_dashd[] = L"-d";
|
|
|
|
setlocale(LC_ALL, "");
|
|
|
|
#ifndef TEXT_DOMAIN
|
|
#define TEXT_DOMAIN "SYS_TEST"
|
|
#endif
|
|
|
|
textdomain(TEXT_DOMAIN);
|
|
|
|
getwidth(&eucwidth);
|
|
if (argc == 1)
|
|
{
|
|
fprintf(stderr,
|
|
gettext("awk: Usage: awk [-Fc] [-f source | 'cmds'] [files]\n"));
|
|
exit(2);
|
|
}
|
|
syminit();
|
|
if ((wargv = (wchar_t **)malloc((argc+1) * sizeof (wchar_t*))) == NULL)
|
|
error(FATAL, "Insuffcient memory on argv");
|
|
for (i = 0; i < argc; i++) {
|
|
if ((p = (wchar_t *)malloc((strlen(argv[i]) + 1)
|
|
* sizeof (wchar_t))) == NULL)
|
|
error(FATAL, "Insuffcient memory on argv");
|
|
mbstowcs(p, argv[i], strlen(argv[i]) + 1);
|
|
wargv[i] = p;
|
|
}
|
|
wargv[argc] = NULL;
|
|
while (argc > 1) {
|
|
argc--;
|
|
wargv++;
|
|
/* this nonsense is because gcos argument handling */
|
|
/* folds -F into -f. accordingly, one checks the next */
|
|
/* character after f to see if it's -f file or -Fx. */
|
|
if (wargv[0][0] == L'-' && wargv[0][1] == L'f' &&
|
|
wargv[0][2] == 0) {
|
|
if (argc <= 1)
|
|
error(FATAL, "no argument for -f");
|
|
yyin = (wscmp(wargv[1], L_dash) == 0)
|
|
? stdin
|
|
: fopen(toeuccode(wargv[1]), "r");
|
|
if (yyin == NULL)
|
|
error(FATAL, "can't open %ws", wargv[1]);
|
|
argc--;
|
|
wargv++;
|
|
break;
|
|
} else if (wargv[0][0] == L'-' && wargv[0][1] == L'F') {
|
|
if (wargv[0][2] == L't')
|
|
**FS = L'\t';
|
|
else
|
|
/* set field sep */
|
|
**FS = wargv[0][2];
|
|
continue;
|
|
} else if (wargv[0][0] != L'-') {
|
|
dprintf("cmds=|%ws|\n", wargv[0], NULL, NULL);
|
|
yyin = NULL;
|
|
lexprog = wargv[0];
|
|
wargv[0] = wargv[-1]; /* need this space */
|
|
break;
|
|
} else if (wscmp(L_dashd, wargv[0])==0) {
|
|
dbg = 1;
|
|
}
|
|
}
|
|
if (argc <= 1) {
|
|
wargv[0][0] = L'-';
|
|
wargv[0][1] = 0;
|
|
argc++;
|
|
wargv--;
|
|
}
|
|
svargc = --argc;
|
|
svargv = ++wargv;
|
|
dprintf("svargc=%d svargv[0]=%ws\n", svargc, svargv[0], NULL);
|
|
*FILENAME = *svargv; /* initial file name */
|
|
yyparse();
|
|
dprintf("errorflag=%d\n", errorflag, NULL, NULL);
|
|
if (errorflag)
|
|
exit(errorflag);
|
|
run(winner);
|
|
exit(errorflag);
|
|
}
|
|
|
|
yywrap()
|
|
{
|
|
return (1);
|
|
}
|