X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=x2p%2Fa2py.c;h=3a3cb5275d1b02860f43ce5c7a05bd3f15e11235;hb=0146554f605695de389f3b8c36a7b3b994325cb4;hp=59c22414a5da095c6bf5229aeee368e878f799dd;hpb=a0d0e21ea6ea90a22318550944fe6cb09ae10cda;p=p5sagit%2Fp5-mst-13.2.git diff --git a/x2p/a2py.c b/x2p/a2py.c index 59c2241..3a3cb52 100644 --- a/x2p/a2py.c +++ b/x2p/a2py.c @@ -1,6 +1,6 @@ /* $RCSfile: a2py.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:14 $ * - * Copyright (c) 1991, Larry Wall + * Copyright (c) 1991-1997, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -12,15 +12,22 @@ #include "../patchlevel.h" #endif #include "util.h" -char *strchr(); char *filename; char *myname; int checkers = 0; + +int oper0(); +int oper1(); +int oper2(); +int oper3(); +int oper4(); +int oper5(); STR *walk(); #ifdef OS2 +static void usage() { printf("\nThis is the AWK to PERL translator, version 5.0, patchlevel %d\n", PATCHLEVEL); @@ -35,13 +42,14 @@ usage() exit(1); } #endif + +int main(argc,argv,env) register int argc; register char **argv; register char **env; { register STR *str; - register char *s; int i; STR *tmpstr; @@ -72,6 +80,9 @@ register char **env; case 'n': namelist = savestr(argv[0]+2); break; + case 'o': + old_awk = TRUE; + break; case '-': argc--,argv++; goto switch_end; @@ -148,11 +159,10 @@ register char **env; /* second pass to produce new program */ tmpstr = walk(0,0,root,&i,P_MIN); - str = str_make("#!"); - str_cat(str, BIN); - str_cat(str, "/perl\neval \"exec "); + str = str_make(STARTPERL); + str_cat(str, "\neval 'exec "); str_cat(str, BIN); - str_cat(str, "/perl -S $0 $*\"\n\ + str_cat(str, "/perl -S $0 ${1+\"$@\"}'\n\ if $running_under_some_shell;\n\ # this emulates #! processing on NIH machines.\n\ # (remove #! line above if indigestible)\n\n"); @@ -189,6 +199,7 @@ register char **env; int idtype; +int yylex() { register char *s = bufptr; @@ -828,6 +839,7 @@ register char *s; return s; } +void yyerror(s) char *s; { @@ -872,8 +884,10 @@ register char *s; return s; } +int string(ptr,len) char *ptr; +int len; { int retval = mop; @@ -888,6 +902,7 @@ char *ptr; return retval; } +int oper0(type) int type; { @@ -901,6 +916,7 @@ int type; return retval; } +int oper1(type,arg1) int type; int arg1; @@ -916,6 +932,7 @@ int arg1; return retval; } +int oper2(type,arg1,arg2) int type; int arg1; @@ -933,6 +950,7 @@ int arg2; return retval; } +int oper3(type,arg1,arg2,arg3) int type; int arg1; @@ -952,6 +970,7 @@ int arg3; return retval; } +int oper4(type,arg1,arg2,arg3,arg4) int type; int arg1; @@ -973,6 +992,7 @@ int arg4; return retval; } +int oper5(type,arg1,arg2,arg3,arg4,arg5) int type; int arg1; @@ -998,6 +1018,7 @@ int arg5; int depth = 0; +void dump(branch) int branch; { @@ -1025,6 +1046,7 @@ int branch; } } +int bl(arg,maybe) int arg; int maybe; @@ -1039,6 +1061,7 @@ int maybe; return arg; } +void fixup(str) STR *str; { @@ -1064,6 +1087,7 @@ STR *str; } } +void putlines(str) STR *str; { @@ -1140,6 +1164,7 @@ STR *str; } } +void putone() { register char *t; @@ -1162,6 +1187,7 @@ putone() fputs(tokenbuf,stdout); } +int numary(arg) int arg; { @@ -1176,6 +1202,7 @@ int arg; return arg; } +int rememberargs(arg) int arg; { @@ -1198,6 +1225,7 @@ int arg; return arg; } +int aryrefarg(arg) int arg; { @@ -1212,6 +1240,7 @@ int arg; return arg; } +int fixfargs(name,arg,prevargs) int name; int arg; @@ -1250,6 +1279,7 @@ int prevargs; return numargs; } +int fixrargs(name,arg,prevargs) char *name; int arg; @@ -1267,10 +1297,10 @@ int prevargs; numargs = fixrargs(name,ops[arg+3].ival,numargs); } else { - char tmpbuf[128]; - + char *tmpbuf = safemalloc(strlen(name) + (sizeof(prevargs) * 3) + 5); sprintf(tmpbuf,"%s:%d",name,prevargs); str = hfetch(curarghash,tmpbuf); + safefree(tmpbuf); if (str && strEQ(str->str_ptr,"*")) { if (type == OVAR || type == OSTAR) { ops[arg].ival &= ~255;