Annotation of researchv10no/cmd/pico/x.y, revision 1.1

1.1     ! root        1: %{
        !             2: #include <stdio.h>
        !             3: #include "pico.h"
        !             4: #include "pico2.h"
        !             5: 
        !             6: #define usedboth       usedold=usednew=1
        !             7: 
        !             8: #define YYDEBUG        1
        !             9: 
        !            10: extern short CURSCRATCH, CUROLD;
        !            11: extern char *progr;
        !            12: extern struct SRC src[MANY];
        !            13: extern int nsrc, nrparams, LO, linenumber, whichdevice;
        !            14: extern char usednew, usedold, faster, frameb, metheus;
        !            15: extern char isglobal, seetree, optim, touchedcmap;
        !            16: extern FILE *INPUT;
        !            17: %}
        !            18: 
        !            19: %union{
        !            20:        Node    *node;
        !            21:        Symbol  *sym;
        !            22:        int     resu;
        !            23:        struct SNode *snode;
        !            24: }
        !            25: 
        !            26: %type  <node>  stmnt sstmnt pprog pbody rval assign ifpre whpre
        !            27: %type  <node>  aparams fcall elist expr chann
        !            28: %type  <snode> iarray lval
        !            29: %type  <resu>  array SPEC eval vval arname
        !            30: %type  <sym>   ANAME XYI pathn defpr
        !            31: %token <sym>   VARIABLE AUTO ARRAY FCT BLTN NAME
        !            32: %token <resu>  VAL STRING
        !            33: 
        !            34: %start         comm
        !            35: %token         A WINDOW C DEF DEL SCOM ECOM
        !            36: %token         UP DOWN RUN F H Q R SET SETF
        !            37: %token         GET W PCONST RETURN
        !            38: %token         OPEN CLOSE DECL INT GLOBAL
        !            39: %token         X Y I OLD TMP CMAP
        !            40: %token         FOR DO WHILE JUMP IF ELSE
        !            41: %token         COLOR NOCOLOR ZAP FASTER SLOWER HELP
        !            42: %token         FRAMEBUFFER METHEUS BLIND SEETREE OPTIM
        !            43: %right         ','
        !            44: %right         ASSIGN
        !            45: %right         '?' ':' ';'
        !            46: %right         OPER
        !            47: %left          OROR
        !            48: %left          ANDAND
        !            49: %left          OR
        !            50: %left          '^'
        !            51: %left          AND
        !            52: %left          EQ NE
        !            53: %left          GT GE LT LE
        !            54: %left          LSH RSH
        !            55: %left          '+' '-'
        !            56: %left          '*' '/' '%'
        !            57: %right         POST
        !            58: %right         UNARYMINUS NOT '$' '~'
        !            59: %right         RCHAN GCHAN BCHAN BW RGB
        !            60: %right         POW
        !            61: %right         '.'
        !            62: 
        !            63: %%
        !            64: comm:  pcom ';'                { return 1; }
        !            65: |      RUN SPEC                { munge($2); return 1; }
        !            66: |      defpr YoN SPEC          { postfunct($1); return 1; }
        !            67: |      R pathn ';'             { redirect($2->name);
        !            68:                                  checkit();
        !            69:                                  return 1;
        !            70:                                }
        !            71: |      Q ';'                   { return 0; }
        !            72: 
        !            73: defpr: DEF NAME '(' rglst ')'  { prefunct($2, nrparams); $$ = $2; }
        !            74: |      DEF FCT  '(' rglst ')'  { prefunct($2, nrparams); $$ = $2; }
        !            75: 
        !            76: pcom:  /* empty */             { /* if (INPUT == stdin) linenumber--; */ }
        !            77: |      A pathn                 { append( 0,  0,  0,  0, $2->name); }
        !            78: |      A vval vval vval vval pathn { append($2, $3, $4, $5, $6->name); }
        !            79: |      DEL pathn               { discard($2->name); }
        !            80: |      DEL array               { if ($2 > 1 && $2 <= nsrc-1)
        !            81:                                        discard(src[$2].fname);
        !            82:                                  else
        !            83:                                        yyerror("unknown file number %d", $2);
        !            84:                                }
        !            85: |      DEL VAL                 { if ($2 > 1 && $2 <= nsrc-1)
        !            86:                                        discard(src[$2].fname);
        !            87:                                  else
        !            88:                                        yyerror("unknown file number %d", $2);
        !            89:                                }
        !            90: |      F                       { files(); }
        !            91: |      GET                     { getscreen(Old); }
        !            92: |      GET arname              { getter($2); }
        !            93: |      GET pathn               { getter(append( 0,  0,  0,  0, $2->name)); }
        !            94: |      GET vval vval vval vval pathn { getter(append($2, $3, $4, $5, $6->name)); }
        !            95: |      H hnmlst
        !            96: |      FASTER                  { faster = 1; }
        !            97: |      SLOWER                  { faster = 0; }
        !            98: |      SEETREE                 { seetree = 1 - seetree; }
        !            99: |      OPTIM                   { optim = 1 - optim; }
        !           100: |      NOCOLOR                 { Old->nchan = Scratch->nchan = 1; }
        !           101: |      COLOR                   { Old->nchan = Scratch->nchan = 3;
        !           102:                                  checkpix(Old); checkpix(Scratch);
        !           103:                                }
        !           104: |      HELP                    { dohelp(); }
        !           105: |      SET                     { showvars(); }
        !           106: |      SET ANAME               { showsym($2); }
        !           107: |      SETF                    { showfcts(); }
        !           108: |      WINDOW vval vval vval vval  { setwindow($2, $3, $4, $5); }
        !           109: |      W pathn                 { putdpix($2->name, PICO); }
        !           110: |      W '-' pathn             { putdpix($3->name, 0); }
        !           111: 
        !           112: arname:        array                   { $$ = $1; }
        !           113: |      vval vval array         { $$ = append($1, $2,  0,  0, src[$3].fname); }
        !           114: |      vval vval vval vval array { $$ = append($1, $2, $3, $4, src[$5].fname); }
        !           115: 
        !           116: hnmlst:        pathn                   { interpret($1->name); }
        !           117: |      hnmlst pathn            { interpret($2->name); }
        !           118: 
        !           119: rglst: /* empty */
        !           120: |      arglst
        !           121: 
        !           122: arglst:        NAME                    { automa($1, nrparams++); }
        !           123: |      arglst ',' NAME         { automa($3, nrparams++); }
        !           124: 
        !           125: SPEC:  sstmnt                  { compile($1, progr); $$ = BLOOP; }
        !           126: |      chann ';'               { compile($1, progr); $$ = SLOOP; }
        !           127: |      pprog ';'               { compile($1, progr); $$ = NLOOP; }
        !           128: 
        !           129: chann: CMAP ASSIGN expr                { $$ = mapall(cast($3)); }
        !           130: |      CMAP '.' RGB   ASSIGN expr      { $$ = mapall($5); }
        !           131: |      CMAP '.' RCHAN ASSIGN expr      { $$ = mapred(cast($5)); }
        !           132: |      CMAP '.' GCHAN ASSIGN expr      { $$ = mapgrn(cast($5)); }
        !           133: |      CMAP '.' BCHAN ASSIGN expr      { $$ = mapblu(cast($5)); }
        !           134: 
        !           135: YoN:   /* empty */
        !           136: |      ';'
        !           137: 
        !           138: decls: glob INT declst ';'
        !           139: |      glob DECL decars ';'
        !           140: 
        !           141: glob:  GLOBAL                  { isglobal = 1; }
        !           142: |      /* none */              { isglobal = 0; }
        !           143: 
        !           144: declst:        declo
        !           145: |      declst ',' declo
        !           146: 
        !           147: decars:        decar
        !           148: |      decars ',' decar
        !           149: 
        !           150: declo: XYI
        !           151: |      NAME                    { decvar($1, 0); }
        !           152: |      VARIABLE                { decvar($1, 0); }
        !           153: |      NAME ASSIGN eval        { decvar($1, $3); }
        !           154: |      VARIABLE ASSIGN eval    { decvar($1, $3); }
        !           155: 
        !           156: decar: NAME  '[' eval ']'      { decarray($1, $3); }
        !           157: |      ARRAY '[' eval ']'      { decarray($1, $3); }
        !           158: 
        !           159: XYI:   X                       { $$ = newsym("x"); }
        !           160: |      Y                       { $$ = newsym("y"); }
        !           161: |      I                       { $$ = newsym("i"); }
        !           162: 
        !           163: pprog: OPEN pbody YoN CLOSE    { $$ = $2; }
        !           164: 
        !           165: pbody: stmnt                   { $$ = $1; }
        !           166: |      pbody stmnt             { $$ = new(OCOMMA, $1, $2, Z); }
        !           167: 
        !           168: aparams: '(' ')'               { $$ =  Z; }
        !           169: |       '(' elist ')'          { $$ = $2; }
        !           170: 
        !           171: elist: expr                    { $$ = cast($1); }
        !           172: |      expr ',' elist          { $$ = new(ACOMMA, cast($1), $3, Z); }
        !           173: 
        !           174: ifpre: IF '(' expr ')' YoN     { $$ = $3; }
        !           175: whpre: WHILE '(' expr ')' YoN  { $$ = $3; }
        !           176: 
        !           177: ANAME: NAME                    { $$ = $1; }
        !           178: |      VARIABLE                { $$ = $1; }
        !           179: |      FCT                     { $$ = $1; }
        !           180: |      BLTN                    { $$ = $1; }
        !           181: |      AUTO                    { $$ = $1; }
        !           182: |      ARRAY                   { $$ = $1; }
        !           183: |      XYI                     { $$ = $1; }
        !           184: |      STRING                  { $$ = lookup($1); }
        !           185: 
        !           186: pathn: ANAME                   { $$ = $1; }
        !           187: 
        !           188: stmnt: pprog ';'               { $$ = $1; }
        !           189: |      ANAME ':' stmnt         { $$ = new(LABL,$3, Z, $1); }
        !           190: |      JUMP ANAME ';'          { $$ = new(GOTO, Z, Z, $2); }
        !           191: |      sstmnt                  { $$ = $1; }
        !           192: |      chann ';'               { $$ = $1; }
        !           193: 
        !           194: sstmnt:        assign ';'              { $$ = $1; }
        !           195: |      decls                   { $$ = Z; }
        !           196: |      fcall ';'               { $$ = $1; }
        !           197: |      ifpre stmnt             { $$ = new(CONDI, $2, Z, $1); }
        !           198: |      ifpre stmnt ELSE YoN stmnt              { $$ = new(CONDI, $2, $5, $1); }
        !           199: |      FOR '(' expr ';' expr ';' expr ')' YoN stmnt {
        !           200:                                  $$ = newloop($3, $5, $7, $10); }
        !           201: |      whpre stmnt             { $$ = newhile($1, $2); }
        !           202: |      DO YoN stmnt WHILE '(' expr ')' ';'     { $$ = newuntil($3, $6); }
        !           203: |      RETURN  expr ';'        { $$ = new(ORETURN, $2, Z, Z); }
        !           204: 
        !           205: iarray:        BW                      { usedboth; $$ = super(CURSCRATCH, Z, BW); }
        !           206: |      RGB                     { usedboth; $$ = super(CURSCRATCH, Z, RGB); }
        !           207: |      RCHAN                   { usedboth; $$ = super(CURSCRATCH, Z, RCHAN); }
        !           208: |      GCHAN                   { usedboth; $$ = super(CURSCRATCH, Z, GCHAN); }
        !           209: |      BCHAN                   { usedboth; $$ = super(CURSCRATCH, Z, BCHAN); }
        !           210: |      array                   { $$ = super($1, Z, (src[$1].nchan == 1)?BW:RGB); }
        !           211: |      array '.' RGB           { $$ = super($1, Z, RGB); }
        !           212: |      array '.' BW            { $$ = super($1, Z, BW);  }
        !           213: |      array '.' RCHAN         { $$ = super($1, Z, RCHAN); }
        !           214: |      array '.' GCHAN         { $$ = super($1, Z, GCHAN); }
        !           215: |      array '.' BCHAN         { $$ = super($1, Z, BCHAN); }
        !           216: |      array '[' elist ']'     { $$ = super($1, $3,(src[$1].nchan == 1)?BW:RGB); }
        !           217: |      array '[' elist ']' '.' RGB     { $$ = super($1, $3, RGB); }
        !           218: |      array '[' elist ']' '.' BW      { $$ = super($1, $3, BW);  }
        !           219: |      array '[' elist ']' '.' RCHAN   { $$ = super($1, $3, RCHAN); }
        !           220: |      array '[' elist ']' '.' GCHAN   { $$ = super($1, $3, GCHAN); }
        !           221: |      array '[' elist ']' '.' BCHAN   { $$ = super($1, $3, BCHAN); }
        !           222: |      array '.'   RGB '[' elist ']'   { $$ = super($1, $5, RGB); }
        !           223: |      array '.'    BW '[' elist ']'   { $$ = super($1, $5, BW);  }
        !           224: |      array '.' RCHAN '[' elist ']'   { $$ = super($1, $5, RCHAN); }
        !           225: |      array '.' GCHAN '[' elist ']'   { $$ = super($1, $5, GCHAN); }
        !           226: |      array '.' BCHAN '[' elist ']'   { $$ = super($1, $5, BCHAN); }
        !           227: |      ARRAY '[' elist ']'     { $$=nsup(RL(($1->u.ar->base),Index($3)),0,0,128);}
        !           228: |      ARRAY                   { $$=nsup(RL(($1->u.ar->base),DII), 0,0,128); }
        !           229: 
        !           230: assign:        lval POST               { $$ = weird($1, notnew(LO, $1->n, NR(1))); }
        !           231: |      lval OPER expr  { $$ = weird($1, notnew(LO, $1->n, $3)); }
        !           232: |      lval ASSIGN expr        { $$ = weird($1, $3); }
        !           233: 
        !           234: rval:  lval                    { $$ = $1->n; }
        !           235: |      fcall                   { $$ = $1;    }
        !           236: 
        !           237: lval:  X                       { $$ = nsup(new(REG, Z, Z, XREG), 0, 0, 128); }
        !           238: |      Y                       { $$ = nsup(new(REG, Z, Z, YREG), 0, 0, 128); }
        !           239: |      I                       { $$ = nsup(new(REG, Z, Z, IREG), 0, 0, 128); }
        !           240: |      iarray                  { $$ = $1; }
        !           241: |      NAME                    { yyerror("undeclared variable %s", $1->name); }
        !           242: |      VARIABLE                { $$ = nsup(new(VAR,  Z, Z, &$1->u.val), 0,0,128);}
        !           243: |      AUTO                    { $$ = nsup(new(OARG, Z, Z,  $1->u.val), 0,0,128);}
        !           244: 
        !           245: fcall: FCT aparams             { if ($1->u.fu->usednew == -1 && notrecurcall($1))
        !           246:                                        yyerror("undefined function %s", $1->name);
        !           247:                                  argcount($1->u.fu->nrparams, $2, $1->name);
        !           248:                                  usednew += $1->u.fu->usednew;
        !           249:                                  usedold += $1->u.fu->usedold;
        !           250:                                  $$ = new(OCALL, $2, Z, $1->u.fu->fct);
        !           251:                                }
        !           252: |      BLTN aparams            { argcount($1->u.bl->nrparams, $2, $1->name);
        !           253:                                  usednew += $1->u.bl->usednew;
        !           254:                                  $$ = new(CCALL, $2, Z, $1->u.bl->faddr);
        !           255:                                }
        !           256: 
        !           257: vval:  VAL                     { $$ = $1; }
        !           258: |      '-' VAL                 { $$ = -$2; }
        !           259: 
        !           260: eval:  VAL                     { $$ = $1; }
        !           261: |      VARIABLE                { $$ = $1->u.val; }
        !           262: |      fcall                   { compile($1, progr); $$ = callit(); }
        !           263: 
        !           264: expr:  rval                    { $$ = $1; }
        !           265: |      assign                  { $$ = $1; }
        !           266: |      '(' expr ')'            { $$ = $2; }
        !           267: |      '[' elist ']'           { $$ = new(COMP, $2, Z, Z); }
        !           268: |      VAL                     { $$ = NR($1); }
        !           269: |      STRING                  { $$ = NR($1); }
        !           270: |      expr '?' expr ':' expr { $$ = new(CONDI, $3, $5, $1); }
        !           271: |      '-' expr %prec UNARYMINUS  { $$ = new(OMINUS, $2, Z, Z); }
        !           272: |      '~' expr                { $$ = new(ONEG, $2, Z, Z); }
        !           273: |      NOT expr                { $$ = new(ONOT, $2, Z, Z); }
        !           274: |      expr '+' expr           { $$ = notnew(OADD, $1, $3); }
        !           275: |      expr '-' expr           { $$ = notnew(OSUB, $1, $3); }
        !           276: |      expr '*' expr           { $$ = notnew(OMUL, $1, $3); }
        !           277: |      expr '/' expr           { $$ = notnew(DIVV, $1, $3); }
        !           278: |      expr '%' expr           { $$ = notnew(MODU, $1, $3); }
        !           279: |      expr '^' expr           { $$ = notnew(OXOR, $1, $3); }
        !           280: |      expr POW expr           { $$ = notnew(OPOW, $1, $3); }
        !           281: |      expr GT expr            { $$ = notnew(OGT,  $1, $3); }
        !           282: |      expr GE expr            { $$ = notnew(OGE,  $1, $3); }
        !           283: |      expr LT expr            { $$ = notnew(OLT,  $1, $3); }
        !           284: |      expr LE expr            { $$ = notnew(OLE,  $1, $3); }
        !           285: |      expr EQ expr            { $$ = notnew(OEQ,  $1, $3); }
        !           286: |      expr NE expr            { $$ = notnew(ONE,  $1, $3); }
        !           287: |      expr ANDAND expr        { $$ = notnew(OANDAND, $1, $3); }
        !           288: |      expr OROR expr          { $$ = notnew(OOROR, $1, $3); }
        !           289: |      expr OR expr            { $$ = notnew(OOR,  $1, $3); }
        !           290: |      expr AND expr           { $$ = notnew(OAND, $1, $3); }
        !           291: |      expr LSH expr           { $$ = notnew(OLSH, $1, $3); }
        !           292: |      expr RSH expr           { $$ = notnew(OLSH, $1, notnew(OMINUS, $3, Z)); }
        !           293: 
        !           294: array: TMP                     { usednew=usedold=1; $$ = CURSCRATCH; }
        !           295: |      OLD                     { usedold=1; $$ = CUROLD; }
        !           296: |      '$' TMP                 { usednew=usedold=1; $$ = CURSCRATCH; }
        !           297: |      '$' OLD                 { usedold=1; $$ = CUROLD; }
        !           298: |      '$' VAL                 { int x = $2;
        !           299:                                  if (x < 0 || x > nsrc-2)
        !           300:                                        yyerror("unknown file number %d", x);
        !           301:                                  x = (x == 0) ? CUROLD : x+1;
        !           302:                                  if (x == CUROLD)
        !           303:                                        usedold=1;
        !           304:                                  else
        !           305:                                        src[x].used = 1;
        !           306:                                  $$ = x;
        !           307:                                }
        !           308: |      '$' ANAME               { int x = whatarray($2->name);
        !           309:                                  if (x <= 0)
        !           310:                                        x = prepare($2->name);
        !           311:                                  if (x <= 0)
        !           312:                                        yyerror("unknown file %s", $2->name);
        !           313:                                  src[x].used = 1;
        !           314:                                  $$ = x;
        !           315:                                }
        !           316: %%

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.