Annotation of researchv9/jtools/src/Jpic/jp.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     jp - interpret pic on jerq
                      3:  */
                      4: 
                      5: #include <jerq.h>
                      6: #define        YFUDGE  5       /* move chars down this much */
                      7: extern POINT current;
                      8: char   input[10000];
                      9: char   *ip = input;
                     10: POINT  mpos;
                     11: POINT  scanpoint();
                     12: 
                     13: main(argc, argv)
                     14: char *argv[];
                     15: {
                     16:        jinit();
                     17:        sysinit();
                     18:        spl0();
                     19:        jBonW();        /* black on white */
                     20:        getpic();
                     21:        printpic();
                     22:        for (;;) {
                     23:                if (button1()) {
                     24:                        jclear();
                     25:                        printpic();
                     26:                } else if (button23()) {
                     27:                        jclear();
                     28:                        getpic();
                     29:                        printpic();
                     30:                }
                     31:        }
                     32: }
                     33: 
                     34: getpic()
                     35: {
                     36:        char temp[10];
                     37:        register char *start, *ip;
                     38:        static POINT pos = {20,20};
                     39: 
                     40:        ip = input;
                     41:        do {
                     42:                start = ip;
                     43:                while ((*ip++ = jgetchar()) != '\n')
                     44:                        ;
                     45:        } while (*start != 'S');
                     46:        *ip++ = 0;
                     47:        sprintf(temp, "%d", ip-input);
                     48:        jmoveto(pos);
                     49:        jstring(temp);
                     50: }
                     51: 
                     52: printpic()
                     53: {
                     54:        register int c;
                     55:        int i, n;
                     56:        POINT pos, pos1, pos2;
                     57:        char s[100];
                     58: 
                     59:        mpos = mouse.xy;
                     60:        cursinhibit();
                     61:        for (ip = input; *ip; ) {
                     62:                switch (*ip++) {
                     63:                case ' ':
                     64:                case '\n':
                     65:                case '\t':
                     66:                        break;
                     67:                case 'm':
                     68:                        pos = scanpoint();
                     69:                        jmoveto(add(pos, mpos));
                     70:                        break;
                     71:                case 'e':
                     72:                        pos = scanpoint();
                     73:                        scanint();
                     74:                        scanint();
                     75:                        break;
                     76:                case 'c':
                     77:                        pos = scanpoint();
                     78:                        jcircle(add(pos, mpos), scanint(), F_STORE);
                     79:                        break;
                     80:                case 'a':
                     81:                        pos = add(scanpoint(), mpos);
                     82:                        pos2 = add(scanpoint(), mpos);
                     83:                        pos1 = add(scanpoint(), mpos);
                     84:                        jarc(pos, pos1, pos2, F_STORE);
                     85:                        break;
                     86:                case 'l':
                     87:                        pos = scanpoint();
                     88:                        jmoveto(add(pos, mpos));
                     89:                        pos = scanpoint();
                     90:                        jlineto(add(pos, mpos), F_STORE);
                     91:                        break;
                     92:                case 'b':
                     93:                        pos1 = add(scanpoint(), mpos);
                     94:                        pos2 = add(scanpoint(), mpos);
                     95:                        jmoveto(pos1);
                     96:                        pos.x = pos2.x;
                     97:                        pos.y = pos1.y;
                     98:                        jlineto(pos, F_STORE);
                     99:                        jlineto(pos2, F_STORE);
                    100:                        pos.x = pos1.x;
                    101:                        pos.y = pos2.y;
                    102:                        jlineto(pos, F_STORE);
                    103:                        jlineto(pos1, F_STORE);
                    104:                        break;
                    105:                case 't':
                    106:                        pos = scanpoint();
                    107:                        while ((c = *ip++) == ' ')
                    108:                                ;       /* find type */
                    109:                        for (i = 0; (s[i++] = *ip++) != '\n'; )
                    110:                                ;
                    111:                        s[i] = 0;
                    112:                        pos.y += YFUDGE;
                    113:                        n = strwidth(s);
                    114:                        switch (c) {
                    115:                        case 'C':
                    116:                                pos.x -= n/2;
                    117:                                break;
                    118:                        case 'L':
                    119:                                break;
                    120:                        case 'R':
                    121:                                pos.x -= n;
                    122:                                break;
                    123:                        }
                    124:                        jmoveto(add(pos, mpos));
                    125:                        jstring(s);
                    126:                        break;
                    127:                case '~':       /* spline, expressed in delta's */
                    128:                        dospline();
                    129:                        break;
                    130:                default:
                    131:                        while (*ip++ != '\n')
                    132:                                ;
                    133:                        break;
                    134:                }
                    135:        }
                    136:        cursallow();
                    137: }
                    138: 
                    139: dospline()
                    140: {
                    141:        long w, t1, t2, t3;
                    142:        int x[50], y[50];
                    143:        int i, j, xp, yp, n;
                    144:        long scale = 1000;
                    145:        int steps = 10;
                    146:        POINT p;
                    147: 
                    148:        n = scanint();
                    149:        for (i = 1; i <= n; i++) {
                    150:                x[i] = scanint();
                    151:                y[i] = scanint();
                    152:        }
                    153:        x[0] = x[1]; y[0] = y[1];
                    154:        x[n+1] = x[n]; y[n+1] = y[n];
                    155:        p.x = x[0]; p.y = y[0];
                    156:        jmoveto(add(p, mpos));
                    157: 
                    158:        for (i = 0; i < n; i++) {
                    159:                for (j = 0; j < steps; j++) {
                    160:                        w = scale * j / steps;
                    161:                        t1 = w * w / (2 * scale);
                    162:                        w = w - scale/2;
                    163:                        t2 = 3*scale/4 - w * w / scale;
                    164:                        w = w - scale/2;
                    165:                        t3 = w * w / (2*scale);
                    166:                        p.x = (t1*x[i+2] + t2*x[i+1] + t3*x[i] + scale/2) / scale;
                    167:                        p.y = (t1*y[i+2] + t2*y[i+1] + t3*y[i] + scale/2) / scale;
                    168:                        jlineto(add(p, mpos), F_STORE);
                    169:                }
                    170:        }
                    171: }
                    172: 
                    173: jclear()
                    174: {
                    175:        cursinhibit();
                    176:        jrectf(screenmap.rect, F_CLR);
                    177:        cursallow();
                    178: }
                    179: 
                    180: POINT
                    181: scanpoint()
                    182: {
                    183:        POINT p;
                    184: 
                    185:        p.x = scanint();
                    186:        p.y = scanint();
                    187:        return p;
                    188: }
                    189: 
                    190: scanint()
                    191: {
                    192:        register int n, c;
                    193: 
                    194:        while ((c = *ip++) == ' ' || c == '\t')
                    195:                ;
                    196:        n = 0;
                    197:        do {
                    198:                n = 10 * n + c - '0';
                    199:        } while ((c = *ip++) >= '0' && c <= '9');
                    200:        return(n);
                    201: }

unix.superglobalmegacorp.com

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