Annotation of 43BSD/usr.bin/ratfor/r0.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)r0.c       1.2 (Berkeley) 8/11/83";
                      3: #endif
                      4: 
                      5: #include "r.h"
                      6: 
                      7: int    swlevel = -1;
                      8: int    swexit[5];
                      9: int    nextcase[5];
                     10: 
                     11: swcode() {
                     12:        transfer = 0;
                     13:        putcom("switch");
                     14:        swlevel++;
                     15:        if (swlevel >= 5)
                     16:                error("Switches nested > 5");
                     17:        swexit[swlevel] = yyval = genlab(1);
                     18:        outcode("\tI");
                     19:        outnum(yyval);
                     20:        outcode(" = ");
                     21:        balpar();
                     22:        outdon();
                     23:        nextcase[swlevel] = 0;
                     24:        indent++;
                     25: }
                     26: 
                     27: getcase() {
                     28:        int t, lpar;
                     29:        char token[100];
                     30: 
                     31:        if (nextcase[swlevel] != 0) {
                     32:                outgoto(swexit[swlevel]);
                     33:                outcont(nextcase[swlevel]);
                     34:        }
                     35:        indent--;
                     36:        outcode("\tif(.not.(");
                     37:        do {
                     38:                outcode("I");
                     39:                outnum(swexit[swlevel]);
                     40:                outcode(".eq.(");
                     41:                lpar = 0;
                     42:                do {
                     43:                        if ((t=gtok(token)) == ':')
                     44:                                break;
                     45:                        if (t == '(')
                     46:                                lpar++;
                     47:                        else if (t == ')')
                     48:                                lpar--;
                     49:                        else if (t == ',') {
                     50:                                if (lpar == 0)
                     51:                                        break;
                     52:                                }
                     53:                        outcode(token);
                     54:                } while (lpar >= 0);
                     55:                if (lpar < 0)
                     56:                        error("Missing left parenthesis in case");
                     57:                if (t == ',')
                     58:                        outcode(").or.");
                     59:        } while (t != ':');
                     60:        if (lpar != 0)
                     61:                error("Missing parenthesis in case");
                     62:        outcode(")))");
                     63:        nextcase[swlevel] = genlab(1);
                     64:        outgoto(nextcase[swlevel]);
                     65:        indent++;
                     66: }
                     67: 
                     68: getdefault() {
                     69:        char token[20];
                     70:        if (gnbtok(token) != ':')
                     71:                error("Missing colon after default");
                     72:        outgoto(swexit[swlevel]);
                     73:        outcont(nextcase[swlevel]);
                     74:        indent--;
                     75:        putcom("default");
                     76:        indent++;
                     77: }
                     78: 
                     79: endsw(n, def) {
                     80:        if (def == 0)
                     81:                outcont(nextcase[swlevel]);
                     82:        swlevel--;
                     83:        if (swlevel < -1)
                     84:                error("Switches unwound too far");
                     85:        indent--;
                     86:        outcont(n);
                     87: }

unix.superglobalmegacorp.com

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