X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=x2p%2Fa2py.c;h=84fdc4873701a02afc2c8bc40372c92b18bd4383;hb=6b99f28a36db89d4a6baa5b8598d15bfe4b998cb;hp=1b1d00ebab3b6acc0b69c80ece58e790350f7712;hpb=3f939f220e50adb6f28f2dd14f06461c7cebfe14;p=p5sagit%2Fp5-mst-13.2.git diff --git a/x2p/a2py.c b/x2p/a2py.c index 1b1d00e..84fdc48 100644 --- a/x2p/a2py.c +++ b/x2p/a2py.c @@ -1,23 +1,25 @@ -/* $RCSfile: a2py.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:14 $ +/* a2py.c * - * Copyright (c) 1991-1997, Larry Wall + * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + * 2000, 2001, 2002, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. - * - * $Log: a2py.c,v $ */ -#if defined(OS2) || defined(WIN32) +#if defined(OS2) || defined(WIN32) || defined(NETWARE) #if defined(WIN32) #include #endif +#if defined(NETWARE) +#include "../netware/clibstuf.h" +#endif #include "../patchlevel.h" #endif #include "util.h" -char *filename; -char *myname; +const char *filename; +const char *myname; int checkers = 0; @@ -28,8 +30,12 @@ int oper3(int type, int arg1, int arg2, int arg3); int oper4(int type, int arg1, int arg2, int arg3, int arg4); int oper5(int type, int arg1, int arg2, int arg3, int arg4, int arg5); STR *walk(int useval, int level, register int node, int *numericptr, int minprec); +#ifdef NETWARE +char *savestr(char *str); +char *cpy2(register char *to, register char *from, register int delim); +#endif -#if defined(OS2) || defined(WIN32) +#if defined(OS2) || defined(WIN32) || defined(NETWARE) static void usage(void); static void @@ -48,12 +54,21 @@ usage() } #endif +#ifdef __osf__ +#pragma message disable (mainparm) /* We have the envp in main(). */ +#endif + int -main(register int argc, register char **argv, register char **env) +main(register int argc, register const char **argv, register const char **env) { register STR *str; int i; STR *tmpstr; + /* char *namelist; */ + + #ifdef NETWARE + fnInitGpfGlobals(); /* For importing the CLIB calls in place of Watcom calls */ + #endif /* NETWARE */ myname = argv[0]; linestr = str_new(80); @@ -90,7 +105,7 @@ main(register int argc, register char **argv, register char **env) case 0: break; default: -#if defined(OS2) || defined(WIN32) +#if defined(OS2) || defined(WIN32) || defined(NETWARE) fprintf(stderr, "Unrecognized switch: %s\n",argv[0]); usage(); #else @@ -102,8 +117,8 @@ main(register int argc, register char **argv, register char **env) /* open script */ - if (argv[0] == Nullch) { -#if defined(OS2) || defined(WIN32) + if (argv[0] == NULL) { +#if defined(OS2) || defined(WIN32) || defined(NETWARE) if ( isatty(fileno(stdin)) ) usage(); #endif @@ -111,14 +126,13 @@ main(register int argc, register char **argv, register char **env) } filename = savestr(argv[0]); - filename = savestr(argv[0]); if (strEQ(filename,"-")) argv[0] = ""; if (!*argv[0]) rsfp = stdin; else rsfp = fopen(argv[0],"r"); - if (rsfp == Nullfp) + if (rsfp == NULL) fatal("Awk script \"%s\" doesn't seem to exist.\n",filename); /* init tokener */ @@ -193,6 +207,8 @@ main(register int argc, register char **argv, register char **env) "The operation I've selected may be wrong for the operand types.\n"); } exit(0); + /* by ANSI specs return is needed. This also shuts up VC++ and his warnings */ + return(0); } #define RETURN(retval) return (bufptr = s,retval) @@ -237,10 +253,10 @@ yylex(void) if (!rsfp) RETURN(0); line++; - if ((s = str_gets(linestr, rsfp)) == Nullch) { + if ((s = str_gets(linestr, rsfp)) == NULL) { if (rsfp != stdin) fclose(rsfp); - rsfp = Nullfp; + rsfp = NULL; s = str_get(linestr); RETURN(0); } @@ -410,7 +426,14 @@ yylex(void) maxfld = tmp; XOP(FIELD); } + for (d = s; isALPHA(*s) || isDIGIT(*s) || *s == '_'; ) + s++; split_to_array = set_array_base = TRUE; + if (d != s) + { + yylval = string(d,s-d); + XTERM(SVFIELD); + } XOP(VFIELD); case '/': /* may either be division or pattern */ @@ -538,7 +561,7 @@ yylex(void) else if (strEQ(d,"function")) XTERM(FUNCTION); if (strEQ(d,"FILENAME")) - d = "ARGV"; + ID("ARGV"); if (strEQ(d,"foreach")) *d = toUPPER(*d); else if (strEQ(d,"format")) @@ -642,14 +665,14 @@ yylex(void) SNARFWORD; if (strEQ(d,"ORS")) { saw_ORS = TRUE; - d = "\\"; + ID("\\"); } if (strEQ(d,"OFS")) { saw_OFS = TRUE; - d = ","; + ID(","); } if (strEQ(d,"OFMT")) { - d = "#"; + ID("#"); } if (strEQ(d,"open")) *d = toUPPER(*d); @@ -677,8 +700,8 @@ yylex(void) case 'r': case 'R': SNARFWORD; if (strEQ(d,"RS")) { - d = "/"; saw_RS = TRUE; + ID("/"); } if (strEQ(d,"rand")) { yylval = ORAND; @@ -719,7 +742,7 @@ yylex(void) XTERM(FUN1); } if (strEQ(d,"SUBSEP")) { - d = ";"; + ID(";"); } if (strEQ(d,"sin")) { yylval = OSIN; @@ -854,7 +877,7 @@ scanpat(register char *s) } void -yyerror(char *s) +yyerror(const char *s) { fprintf(stderr,"%s in file %s at line %d\n", s,filename,line); @@ -897,7 +920,7 @@ scannum(register char *s) } int -string(char *ptr, int len) +string(const char *ptr, int len) { int retval = mop;