X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/3f939f220e50adb6f28f2dd14f06461c7cebfe14..181d2a7c6b5c41b580bc3ad1952713a0badcd9ad:/x2p/a2py.c diff --git a/x2p/a2py.c b/x2p/a2py.c index 1b1d00e..aec2a0e 100644 --- a/x2p/a2py.c +++ b/x2p/a2py.c @@ -1,23 +1,27 @@ -/* $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" +#include "../unicode_constants.h" +#define DELETE_CHAR DEL_NATIVE -char *filename; -char *myname; +const char *filename; +const char *myname; int checkers = 0; @@ -27,9 +31,13 @@ int oper2(int type, int arg1, int arg2); 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); +STR *walk(int useval, int level, int node, int *numericptr, int minprec); +#ifdef NETWARE +char *savestr(char *str); +char *cpy2(char *to, char *from, int delim); +#endif -#if defined(OS2) || defined(WIN32) +#if defined(OS2) || defined(WIN32) || defined(NETWARE) static void usage(void); static void @@ -48,12 +56,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(int argc, const char **argv, const char **env) { - register STR *str; + 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 +107,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 +119,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 +128,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 +209,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) @@ -205,9 +223,9 @@ int idtype; int yylex(void) { - register char *s = bufptr; - register char *d; - register int tmp; + char *s = bufptr; + char *d; + int tmp; retry: #if YYDEBUG @@ -237,10 +255,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); } @@ -273,11 +291,7 @@ yylex(void) case ':': tmp = *s++; XOP(tmp); -#ifdef EBCDIC - case 7: -#else - case 127: -#endif + case DELETE_CHAR: s++; XTERM('}'); case '}': @@ -383,7 +397,7 @@ yylex(void) #define SNARFWORD \ d = tokenbuf; \ - while (isALPHA(*s) || isDIGIT(*s) || *s == '_') \ + while (isWORDCHAR(*s)) \ *d++ = *s++; \ *d = '\0'; \ d = tokenbuf; \ @@ -410,7 +424,14 @@ yylex(void) maxfld = tmp; XOP(FIELD); } - split_to_array = set_array_base = TRUE; + for (d = s; isWORDCHAR(*s); ) + s++; + split_to_array = TRUE; + if (d != s) + { + yylval = string(d,s-d); + XTERM(SVFIELD); + } XOP(VFIELD); case '/': /* may either be division or pattern */ @@ -441,8 +462,6 @@ yylex(void) case 'a': case 'A': SNARFWORD; - if (strEQ(d,"ARGC")) - set_array_base = TRUE; if (strEQ(d,"ARGV")) { yylval=numary(string("ARGV",0)); XOP(VAR); @@ -538,7 +557,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")) @@ -575,7 +594,6 @@ yylex(void) if (strEQ(d,"in")) XTERM(IN); if (strEQ(d,"index")) { - set_array_base = TRUE; XTERM(INDEX); } if (strEQ(d,"int")) { @@ -621,7 +639,6 @@ yylex(void) case 'm': case 'M': SNARFWORD; if (strEQ(d,"match")) { - set_array_base = TRUE; XTERM(MATCH); } if (strEQ(d,"m")) @@ -630,7 +647,7 @@ yylex(void) case 'n': case 'N': SNARFWORD; if (strEQ(d,"NF")) - do_chop = do_split = split_to_array = set_array_base = TRUE; + do_chop = do_split = split_to_array = TRUE; if (strEQ(d,"next")) { saw_line_op = TRUE; XTERM(NEXT); @@ -642,14 +659,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 +694,8 @@ yylex(void) case 'r': case 'R': SNARFWORD; if (strEQ(d,"RS")) { - d = "/"; saw_RS = TRUE; + ID("/"); } if (strEQ(d,"rand")) { yylval = ORAND; @@ -696,11 +713,9 @@ yylex(void) case 's': case 'S': SNARFWORD; if (strEQ(d,"split")) { - set_array_base = TRUE; XOP(SPLIT); } if (strEQ(d,"substr")) { - set_array_base = TRUE; XTERM(SUBSTR); } if (strEQ(d,"sub")) @@ -719,7 +734,7 @@ yylex(void) XTERM(FUN1); } if (strEQ(d,"SUBSEP")) { - d = ";"; + ID(";"); } if (strEQ(d,"sin")) { yylval = OSIN; @@ -809,9 +824,9 @@ yylex(void) } char * -scanpat(register char *s) +scanpat(char *s) { - register char *d; + char *d; switch (*s++) { case '/': @@ -854,16 +869,16 @@ 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); } char * -scannum(register char *s) +scannum(char *s) { - register char *d; + char *d; switch (*s) { case '1': case '2': case '3': case '4': case '5': @@ -897,7 +912,7 @@ scannum(register char *s) } int -string(char *ptr, int len) +string(const char *ptr, int len) { int retval = mop; @@ -1010,9 +1025,9 @@ int depth = 0; void dump(int branch) { - register int type; - register int len; - register int i; + int type; + int len; + int i; type = ops[branch].ival; len = type >> 8; @@ -1050,8 +1065,8 @@ bl(int arg, int maybe) void fixup(STR *str) { - register char *s; - register char *t; + char *s; + char *t; for (s = str->str_ptr; *s; s++) { if (*s == ';' && s[1] == ' ' && s[2] == '\n') { @@ -1075,8 +1090,8 @@ fixup(STR *str) void putlines(STR *str) { - register char *d, *s, *t, *e; - register int pos, newpos; + char *d, *s, *t, *e; + int pos, newpos; d = tokenbuf; pos = 0; @@ -1151,7 +1166,7 @@ putlines(STR *str) void putone(void) { - register char *t; + char *t; for (t = tokenbuf; *t; t++) { *t &= 127; @@ -1181,7 +1196,6 @@ numary(int arg) str_cat(key,"[]"); hstore(symtab,key->str_ptr,str_make("1")); str_free(key); - set_array_base = TRUE; return arg; }