Annotation of researchv8dc/cmd/gsi.c, revision 1.1

1.1     ! root        1: /* modified for 300S
        !             2:        enter plot with ACK
        !             3:        leave plot with ESC ACK BEL
        !             4:        supposedly compatible with 300
        !             5: */
        !             6: 
        !             7: #include <stdio.h>
        !             8: #include <signal.h>
        !             9: #include <sgtty.h>
        !            10: 
        !            11: #define        ACK     006     /* ack */
        !            12: #define BEL    007     /* exit plot mode */
        !            13: #define        ESC     033     /* escape */
        !            14: #define        HFWD    '9'
        !            15: #define        HREV    '8'
        !            16: #define        FREV    '7'
        !            17: #define        SO      016     /* shift out - enter greek */
        !            18: #define        SI      017     /* shift in */
        !            19: #define        UP      013     /* vt */
        !            20: #define        DN      012
        !            21: #define        RT      ' '
        !            22: #define        LF      '\b'
        !            23: 
        !            24: #define        enterplot       putchar(ACK)
        !            25: #define        leaveplot       putchar(ESC); putchar(ACK)
        !            26: int    restore();
        !            27: struct sgttyb ttymode;
        !            28: 
        !            29: main(argc,argv) int argc; char **argv; {
        !            30:        int c, textmode;
        !            31: 
        !            32:        gtty(1, &ttymode);
        !            33:        if (signal(SIGINT, SIG_IGN) != SIG_IGN)
        !            34:                signal(SIGINT, restore);
        !            35:        ttymode.sg_flags &= ~(CRMOD|ALLDELAY);
        !            36:        stty(1, &ttymode);
        !            37:        textmode = 1;
        !            38:        while( (c=getchar()) != EOF ){
        !            39:                if( c==SO ){
        !            40:                        special();
        !            41:                        continue;
        !            42:                }
        !            43:                if (c== ACK) textmode = 1-textmode;
        !            44:                if (c==BEL) textmode = 1;
        !            45:                if( c=='\n' && textmode )
        !            46:                        putchar(015);   /* CR */
        !            47:                if( c!=ESC ){
        !            48:                        putchar(c);
        !            49:                        continue;
        !            50:                }
        !            51:                enterplot;
        !            52:                c = getchar();
        !            53:                if( c == HREV )
        !            54:                        nplot(4,UP);
        !            55:                else if( c == HFWD )
        !            56:                        nplot(4,DN);
        !            57:                else if( c == FREV )
        !            58:                        nplot(8,UP);
        !            59:                leaveplot;
        !            60:        }
        !            61:        restore();
        !            62: }
        !            63: 
        !            64: restore(){
        !            65:        stty(1, &ttymode);
        !            66:        exit(0);
        !            67: }
        !            68: 
        !            69: int    tab[] = {
        !            70:        'A',    /* alpha */
        !            71:        'B',    /* beta */
        !            72:        'D',    /* delta */
        !            73:        'W',    /* DELTA */
        !            74:        'S',    /* epsilon */
        !            75:        'N',    /* eta */
        !            76:        '\\',   /* gamma */
        !            77:        'G',    /* GAMMA */
        !            78:        'o',    /* infinity - not in M37 */
        !            79:        '^',    /* integral */
        !            80:        'L',    /* lambda */
        !            81:        'E',    /* LAMBDA */
        !            82:        'M',    /* mu */
        !            83:        '[',    /* nabla (del) */
        !            84:        '_',    /* not */
        !            85:        '@',    /* nu */
        !            86:        'C',    /* omega */
        !            87:        'Z',    /* OMEGA */
        !            88:        ']',    /* partial */
        !            89:        'U',    /* phi */
        !            90:        'F',    /* PHI */
        !            91:        'V',    /* psi */
        !            92:        'H',    /* PSI */
        !            93:        'J',    /* pi */
        !            94:        'P',    /* PI */
        !            95:        'K',    /* rho */
        !            96:        'Y',    /* sigma */
        !            97:        'R',    /* SIGMA */
        !            98:        'I',    /* tau */
        !            99:        'O',    /* theta */
        !           100:        'T',    /* THETA */
        !           101:        'X',    /* xi */
        !           102:        'Q',    /* zeta */
        !           103:        0
        !           104: };
        !           105: 
        !           106: int alpha[]    = {LF,'c',RT,RT,'(',LF,0};
        !           107: int beta[]     = {'B',LF,LF,DN,DN,'|',RT,RT,UP,UP,0};
        !           108: int delta[]    = {'o',UP,UP,'<',DN,DN,0};
        !           109: int DELTA[]    = {LF,LF,'/',-3,DN,'-',-4,RT,'-',-3,UP,'\\',LF,LF,0};
        !           110: int epsilon[]  = {'<','-',0};
        !           111: int eta[]      = {'n',RT,RT,DN,DN,'|',LF,LF,UP,UP,0};
        !           112: int gamma[]    = {')',RT,'/',LF,0};
        !           113: int GAMMA[]    = {LF,LF,'|',RT,RT,-3,UP,'-',-3,DN,RT,RT,'`',LF,LF,0};
        !           114: int infinity[] = {LF,LF,'c',-4,RT,'o',LF,LF,0};
        !           115: int integral[] = {'|','\'',RT,RT,'`',-3,LF,-6,DN,'\'',LF,'`',RT,RT,-6,UP,0};
        !           116: int lambda[]   = {'\\',-4,DN,LF,'\'',DN,LF,'\'',-5,UP,RT,RT,0};
        !           117: int LAMBDA[]   = {LF,LF,'/',-4,RT,'\\',LF,LF,0};
        !           118: int mu[]       = {'u',LF,LF,',',RT,RT,0};
        !           119: int nabla[]    = {LF,LF,'\\',-3,UP,'-',-4,RT,'-',-3,DN,'/',LF,LF,0};
        !           120: int not[]      = {'-',-2,RT,UP,',',DN,-2,LF,0};
        !           121: int nu[]       = {LF,'(',-3,RT,'/',LF,LF,0};
        !           122: int omega[]    = {LF,'u',-3,RT,'u',LF,LF,0};
        !           123: int OMEGA[]    = {'O',DN,DN,LF,'-',RT,RT,'-',LF,UP,UP,0};
        !           124: int partial[]  = {'o',RT,DN,'`',LF,UP,'`',LF,UP,'`',RT,DN,0};
        !           125: int phi[]      = {'o','/',0};
        !           126: int PHI[]      = {'o','[',']',0};
        !           127: int psi[]      = {'/','-',DN,DN,RT,RT,'\'',-4,LF,'\'',RT,RT,UP,UP,0};
        !           128: int PSI[]      = {'[',']','-',DN,DN,RT,RT,'\'',-4,LF,'`',RT,RT,UP,UP,0};
        !           129: int pi[]       = {UP,'-',-3,DN,'"',DN,'"',-3,UP,0};
        !           130: int PI[]       = {LF,LF,'[',']',-4,RT,'[',']',LF,LF,-3,UP,'-',-3,DN,0};
        !           131: int rho[]      = {'o',LF,LF,DN,DN,'|',UP,UP,RT,RT,0};
        !           132: int sigma[]    = {'o',DN,RT,RT,'~',UP,LF,LF,0};
        !           133: int SIGMA[]    = {'>',-2,DN,'-',-5,UP,'-',-3,DN,0};
        !           134: int tau[]      = {'t',DN,RT,RT,'~',LF,LF,LF,'~',RT,UP,0};
        !           135: int theta[]    = {'O','-',0};
        !           136: int THETA[]    = {'O','=',0};
        !           137: int xi[]       = {'c',RT,DN,',',LF,-3,UP,'c',LF,DN,'`',RT,DN,0};
        !           138: int zeta[]     = {'c',RT,DN,',',LF,-3,UP,'<',DN,DN,0};
        !           139: 
        !           140: int    *trans[] = {
        !           141:        alpha,
        !           142:        beta,
        !           143:        delta,
        !           144:        DELTA,
        !           145:        epsilon,
        !           146:        eta,
        !           147:        gamma,
        !           148:        GAMMA,
        !           149:        infinity,
        !           150:        integral,
        !           151:        lambda,
        !           152:        LAMBDA,
        !           153:        mu,
        !           154:        nabla,
        !           155:        not,
        !           156:        nu,
        !           157:        omega,
        !           158:        OMEGA,
        !           159:        partial,
        !           160:        phi,
        !           161:        PHI,
        !           162:        psi,
        !           163:        PSI,
        !           164:        pi,
        !           165:        PI,
        !           166:        rho,
        !           167:        sigma,
        !           168:        SIGMA,
        !           169:        tau,
        !           170:        theta,
        !           171:        THETA,
        !           172:        xi,
        !           173:        zeta,
        !           174:        0
        !           175: };
        !           176: 
        !           177: special(){
        !           178:        int c,i;
        !           179:    loop:
        !           180:        if( (c=getchar()) == SI )
        !           181:                return;
        !           182:        for( i=0; tab[i]!=0; i++)
        !           183:                if( c==tab[i] ){
        !           184:                        plot(trans[i]);
        !           185:                        goto loop;
        !           186:                }
        !           187:        putchar(c);
        !           188:        goto loop;
        !           189: }
        !           190: 
        !           191: plot(s) int *s; {
        !           192:        int i,c;
        !           193:        enterplot;
        !           194:        for( i=0; (c=s[i])!=0; i++ )
        !           195:                if( c<0 )
        !           196:                        nplot(-c,s[++i]);
        !           197:                else
        !           198:                        nplot(1, c);
        !           199:        leaveplot;
        !           200:        putchar(' ');
        !           201: }
        !           202: 
        !           203: nplot(n,c) int n,c; {
        !           204:        while(n--) {
        !           205:                if( c == UP )
        !           206:                        putchar(ESC);
        !           207:                putchar(c);
        !           208:        }
        !           209: }

unix.superglobalmegacorp.com

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