Annotation of researchv10no/cmd/pico/main.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #include <signal.h>
        !             3: #include <setjmp.h>
        !             4: #include "pico.h"
        !             5: #include "pico2.h"
        !             6: 
        !             7: int DEF_LL = 512;              /* default linelength            */
        !             8: int DEF_NL = 512;              /* default number of lines       */
        !             9: 
        !            10: short CURSCRATCH = 1;
        !            11: short CUROLD     = 0;
        !            12: 
        !            13: char *progr;
        !            14: struct SRC src[MANY];
        !            15: int nsrc = 2;                  /* 0,1 reserved for Old, and Scratch */
        !            16: 
        !            17: char frameb    = 0;            /* open framebuffer   */
        !            18: char metheus   = 0;            /* open metheus display */
        !            19: char faster    = 1;            /* update display 1 line iso 1 pel at a time */
        !            20: char usednew   = 0;            /* did program use Scratch  ?    */
        !            21: char usedold   = 0;            /* did program use Old      ?    */
        !            22: char seetree   = 0;
        !            23: char optim     = 1;
        !            24: 
        !            25: int  nrparams  = 0;
        !            26: char isglobal  = 0;
        !            27: int whichdevice        = 0;
        !            28: 
        !            29: extern char nesting;
        !            30: extern int linenumber, nalloc;
        !            31: FILE *INPUT = stdin;
        !            32: jmp_buf begin;
        !            33: int  (*oldquit)();
        !            34: 
        !            35: onquit()
        !            36: {
        !            37:        fprintf(stderr, "\ninterrupted\n");
        !            38:        oldquit = signal(SIGINT, onquit);
        !            39:        if (INPUT != stdin) undirect();
        !            40:        fflush(stderr);
        !            41:        longjmp(begin, 0);
        !            42: }
        !            43: 
        !            44: Reset()
        !            45: {
        !            46:        if (linenumber < 1) linenumber = 1;
        !            47:        nalloc = 0; nesting = 0;
        !            48:        usednew = usedold = nrparams = 0;
        !            49: }
        !            50: 
        !            51: main(argc, argv)
        !            52:        char **argv;
        !            53: {
        !            54:        int i=1, base=1;
        !            55:        char c;
        !            56: 
        !            57:        Reset();
        !            58:        while (argc > base && argv[base][0] == '-')
        !            59:        {       while ((c = argv[base][i++]) != '\0')
        !            60:                        switch (c) {
        !            61:                        case 'f': frameb  = 1; break;
        !            62:                        case 'm': metheus = 1; break;
        !            63:                        case 't': seetree = 1; break;
        !            64:                        case 'o': optim   = 1 - optim; break;
        !            65:                        case 'd': DEF_LL = 1280; DEF_NL = 1024; break;
        !            66:                        case 'w': DEF_LL = atoi(&argv[base][i]); goto done;
        !            67:                        case 'h': DEF_NL = atoi(&argv[base][i]); goto done;
        !            68:                        case '0': case '1': case '2':
        !            69:                        case '3': case '4': case '5':
        !            70:                        case '6': case '7': case '8': case '9':
        !            71:                                whichdevice = c - '0';
        !            72:                                break;
        !            73:                        default : Usage("unknown option");
        !            74:                        }
        !            75: done:          base++; i = 1;
        !            76:        }
        !            77:        Init();
        !            78:        Old->nchan = Scratch->nchan = 1;
        !            79:        snore()
        !            80:        fprintf(stderr, "b&w, %dx%d pel, ", DEF_LL, DEF_NL);
        !            81:        if (metheus)
        !            82:                fprintf(stderr, "metheus display\n");
        !            83:        else if (frameb)
        !            84:                fprintf(stderr, "framebuffer\n");
        !            85:        else
        !            86:                fprintf(stderr, "no display\n");
        !            87: 
        !            88:        setwindow(0, 0, DEF_LL, DEF_NL);
        !            89:        for (; base < argc; base++)
        !            90:                prepare(argv[base]);
        !            91: 
        !            92:        linenumber = i = 1;
        !            93:        setjmp(begin);
        !            94:        signal(SIGINT, onquit);
        !            95: 
        !            96:        if (i && (i = open("/usr/lib/pico/defines", 0)) > 0)
        !            97:        {       close(i);
        !            98:                redirect("/usr/lib/pico/defines");
        !            99:                linenumber = i = 0;     /* to avoid a loop via longjmp */
        !           100:        }
        !           101: 
        !           102:        do {    Reset();
        !           103:                Prompt;
        !           104:        } while (yyparse());
        !           105: 
        !           106: }
        !           107: 
        !           108: Init()
        !           109: {
        !           110:        syminit();                              /* initialize symbol table */
        !           111:        nopix(Old);                             /* allocate workspace */
        !           112:        nopix(Scratch);
        !           113:        ABSENT
        !           114: }
        !           115: 
        !           116: extern char lastyy, operator, nolf;
        !           117: static int curline;
        !           118: 
        !           119: yyerror(s1, d)
        !           120:        char *s1;
        !           121: {      extern int pline;
        !           122:        extern char *thisfun;
        !           123: 
        !           124:        if (nesting > 0)
        !           125:                fprintf(stderr, "line %d/%d: ", linenumber-curline, pline);
        !           126:        fprintf(stderr, s1, d);
        !           127:        fprintf(stderr, "\n");
        !           128: 
        !           129:        if (lastyy != '\n')
        !           130:                do; while(yylex() != ';' || nolf);
        !           131:        nesting = 1; operator = 0; sympurge(); nesting = 0;
        !           132:        thisfun = '\0';
        !           133:        if (INPUT != stdin) undirect();
        !           134: 
        !           135:        longjmp(begin, 0);
        !           136: }
        !           137: 
        !           138: redirect(s)
        !           139:        char *s;
        !           140: {      extern char lastyy;
        !           141: 
        !           142:        if (INPUT != stdin)
        !           143:        {       fprintf(stderr, "cannot redirect recursively\n");
        !           144:                return 0;
        !           145:        }
        !           146:        curline = linenumber;
        !           147:        if ((INPUT = fopen(s, "r")) == NULL)
        !           148:        {       fprintf(stderr, "cannot open %s\n", s);
        !           149:                INPUT = stdin;
        !           150:                return 0;
        !           151:        }
        !           152:        ungetc('\n', stdin);
        !           153:        lastyy = '\n';
        !           154:        return 1;
        !           155: }
        !           156: 
        !           157: undirect()
        !           158: {
        !           159:        if (INPUT != stdin)
        !           160:        {       fclose(INPUT);
        !           161:        } else
        !           162:        {       fprintf(stderr, "\n");
        !           163:                exit(0);
        !           164:        }
        !           165:        INPUT = stdin;
        !           166:        linenumber = curline-1; /* 1 <cr> was unget */
        !           167:        curline = 0;
        !           168: }
        !           169: 
        !           170: dohelp()
        !           171: {      int pid, rpid, retcode;
        !           172: 
        !           173:        if ((pid = fork()) == 0)
        !           174:        {       signal(SIGINT, oldquit);
        !           175:                execl("/bin/cat", "/bin/cat", "/usr/lib/pico/help", 0);
        !           176:                fprintf(stderr, "pico: /bin/cat not found...\n");
        !           177:                exit(0100);
        !           178:        }
        !           179:        signal(SIGINT, SIG_IGN);
        !           180:        while ((rpid = wait(&retcode)) != pid && rpid != -1)
        !           181:                ;
        !           182:        signal(SIGINT, onquit);
        !           183: }

unix.superglobalmegacorp.com

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