1: #include <stdio.h>
   2: 
   3: int tabflg;
   4: int labno   = 1;
   5: FILE    *curbuf;
   6: FILE    *obuf;
   7: 
   8: main(argc, argv)
   9: char **argv;
  10: {
  11: /*
  12: 	A1 -> A
  13: 	A2    B
  14: 	A     O
  15: 	B1    C
  16: 	B2    D
  17: 	BE    L
  18: 	BF    P
  19: 	C1    E
  20: 	C2    F
  21: 	F     G
  22: 	H     H
  23: 	R     I
  24: 	R1    J
  25: 	S     K
  26: 	I     M
  27: 	M     N
  28: 
  29: 		*	+1
  30: 		S	+2
  31: 		C	+4
  32: 		1	+8
  33: 
  34: 	z  -> 4
  35: 	c     10
  36: 	a     14
  37: 	e     20
  38: 	n     63
  39: 	*	+0100
  40: */
  41: 
  42:     int c, snlflg, nlflg, t, smode, m, ssmode, peekc;
  43: 
  44:     smode = nlflg = snlflg = ssmode = 0;
  45:     if (argc>1)
  46:         if (freopen(argv[1], "r", stdin) == NULL) {
  47:             fprintf(stderr, "%s?\n", argv[1]);
  48:             return(1);
  49:         }
  50:     if (argc>2)
  51:         if (freopen(argv[2], "w", stdout) == NULL) {
  52:             fprintf(stderr, "%s?\n", argv[2]);
  53:             return(1);
  54:         }
  55:     if ((obuf = fopen("cvopt.tmp", "w")) == NULL) {
  56:         fprintf(stderr, "cvopt.tmp?\n");
  57:         exit(1);
  58:     }
  59:     curbuf = obuf;
  60: loop:
  61:     c = getchar();
  62:     if (c!='\n' && c!='\t')
  63:         nlflg = 0;
  64:     if (ssmode!=0 && c!='%') {
  65:         ssmode = 0;
  66:         curbuf = stdout;
  67:         fprintf(curbuf, "L%d:<", labno++);
  68:     }
  69:     switch(c) {
  70: 
  71:     case EOF:
  72:         fprintf(obuf, "0\n");
  73:         fclose(obuf);
  74:         fprintf(stdout, ".even\n");
  75:         if (freopen("cvopt.tmp", "r", stdin) == NULL) {
  76:             fprintf(stderr, "tmp?\n");
  77:             exit(1);
  78:         }
  79:         while ((c = getchar()) != EOF)
  80:             putchar(c);
  81:         unlink("cvopt.tmp");
  82:         return(0);
  83: 
  84:     case ':':
  85:         if (!smode)
  86:             fprintf(curbuf, "=.+2; 0"); else
  87:             put(':');
  88:         goto loop;
  89: 
  90:     case 'A':
  91:         if ((c=getchar())=='1' || c=='2') {
  92:             put(c+'A'-'1');
  93:             goto loop;
  94:         }
  95:         put('O');
  96:         ungetc(c, stdin);
  97:         goto loop;
  98: 
  99:     case 'B':
 100:         switch (getchar()) {
 101: 
 102:         case '1':
 103:             put('C');
 104:             goto loop;
 105: 
 106:         case '2':
 107:             put('D');
 108:             goto loop;
 109: 
 110:         case 'E':
 111:             put('L');
 112:             goto loop;
 113: 
 114:         case 'F':
 115:             put('P');
 116:             goto loop;
 117:         }
 118:         put('?');
 119:         goto loop;
 120: 
 121:     case 'C':
 122:         put(getchar()+'E'-'1');
 123:         goto loop;
 124: 
 125:     case 'F':
 126:         put('G');
 127:         goto subtre;
 128: 
 129:     case 'R':
 130:         if ((c=getchar()) == '1')
 131:         put('J'); else {
 132:             put('I');
 133:             ungetc(c, stdin);
 134:         }
 135:         goto loop;
 136: 
 137:     case 'H':
 138:         put('H');
 139:         goto subtre;
 140: 
 141:     case 'I':
 142:         put('M');
 143:         goto loop;
 144: 
 145:     case 'S':
 146:         put('K');
 147: subtre:
 148:         snlflg = 1;
 149:         t = 'A';
 150: l1:
 151:         switch (c=getchar()) {
 152: 
 153:         case '*':
 154:             t++;
 155:             goto l1;
 156: 
 157:         case 'S':
 158:             t =+ 2;
 159:             goto l1;
 160: 
 161:         case 'C':
 162:             t =+ 4;
 163:             goto l1;
 164: 
 165:         case '1':
 166:             t =+ 8;
 167:             goto l1;
 168: 
 169:         case '2':
 170:             t =+ 16;
 171:             goto l1;
 172:         }
 173:         ungetc(c, stdin);
 174:         put(t);
 175:         goto loop;
 176: 
 177:     case '#':
 178:         if(getchar()=='1')
 179:             put('#'); else
 180:             put('"');
 181:         goto loop;
 182: 
 183:     case '%':
 184:         if (smode)
 185:             curbuf = obuf;
 186:         if (ssmode==0) {
 187:             if ((peekc=getchar())=='[') {
 188:                 curbuf = stdout;
 189:                 while((c=getchar())!=']')
 190:                     put(c);
 191:                 getchar();
 192:                 fprintf(curbuf, ";");
 193:                 curbuf = obuf;
 194:                 goto loop;
 195:             }
 196:             ungetc(peekc, stdin);
 197:         }
 198: loop1:
 199:         switch (c=getchar()) {
 200: 
 201:         case ' ':
 202:         case '\t':
 203:             goto loop1;
 204:         case 'a':
 205:             m = 16;
 206:             t = flag();
 207:             goto pf;
 208: 
 209:         case ',':
 210:             put(';');
 211:             goto loop1;
 212: 
 213:         case 'i':
 214:             m = 12;
 215:             t = flag();
 216:             goto pf;
 217:         case 'z':
 218:             m = 4;
 219:             t = flag();
 220:             goto pf;
 221: 
 222:         case 'r':
 223:             m = 9;
 224:             t = flag();
 225:             goto pf;
 226: 
 227:         case '1':
 228:             m = 5;
 229:             t = flag();
 230:             goto pf;
 231: 
 232:         case 'c':
 233:             t = 0;
 234:             m = 8;
 235:             goto pf;
 236: 
 237:         case 'e':
 238:             t = flag();
 239:             m = 20;
 240:             goto pf;
 241: 
 242:         case 'n':
 243:             t = flag();
 244:             m = 63;
 245: pf:
 246:             if ((c=getchar())=='*')
 247:                 m =+ 0100; else
 248:                 ungetc(c, stdin);
 249:             fprintf(curbuf, ".byte %o,%o", m, t);
 250:             goto loop1;
 251:         case '[':
 252:             fprintf(curbuf, "L%d=", labno++);
 253:             while ((c=getchar())!=']')
 254:                 put(c);
 255:             ssmode = 0;
 256:             smode = 0;
 257:             goto loop;
 258: 
 259:         case '\n':
 260:             fprintf(curbuf, "\nL%d\n", labno);
 261:             ssmode = 1;
 262:             nlflg = 1;
 263:             smode = 1;
 264:             goto loop;
 265:         }
 266:         put(c);
 267:         goto loop1;
 268: 
 269:     case '\t':
 270:         if (nlflg) {
 271:             nlflg = 0;
 272:             goto loop;
 273:         }
 274:         if (smode) {
 275:             tabflg++;
 276:             goto loop;
 277:         }
 278:         put('\t');
 279:         goto loop;
 280: 
 281:     case '\n':
 282:         if (!smode)  {
 283:             put('\n');
 284:             goto loop;
 285:         }
 286:         if (nlflg) {
 287:             nlflg = 0;
 288:             fprintf(curbuf, "\\0>\n");
 289:             curbuf = obuf;
 290:             smode = 0;
 291:             goto loop;
 292:         }
 293:         if (!snlflg)
 294:             fprintf(curbuf, "\\n");
 295:         snlflg = 0;
 296:         fprintf(curbuf, ">\n<");
 297:         nlflg = 1;
 298:         goto loop;
 299: 
 300:     case 'X':
 301:     case 'Y':
 302:     case 'T':
 303:         snlflg++;
 304:     }
 305:     put(c);
 306:     goto loop;
 307: }
 308: 
 309: flag() {
 310:     register c, f;
 311: 
 312:     f = 0;
 313: l1:
 314:     switch(c=getchar()) {
 315: 
 316:     case 'w':
 317:         f = 1;
 318:         goto l1;
 319: 
 320:     case 'i':
 321:         f = 2;
 322:         goto l1;
 323: 
 324:     case 'b':
 325:         f = 3;
 326:         goto l1;
 327: 
 328:     case 'f':
 329:         f = 4;
 330:         goto l1;
 331: 
 332:     case 'd':
 333:         f = 5;
 334:         goto l1;
 335: 
 336:     case 'u':
 337:         f = 9;
 338:         goto l1;
 339: 
 340:     case 's':
 341:         f = 6;
 342:         goto l1;
 343: 
 344:     case 'l':
 345:         f = 8;
 346:         goto l1;
 347: 
 348:     case 'p':
 349:         f =+ 16;
 350:         goto l1;
 351:     }
 352:     ungetc(c, stdin);
 353:     return(f);
 354: }
 355: 
 356: put(c)
 357: {
 358:     if (tabflg) {
 359:         tabflg = 0;
 360:         fprintf(curbuf, ">;.byte %o;<", c+0200);
 361:     } else
 362:         putc(c, curbuf);
 363: }

Defined functions

flag defined in line 309; used 7 times
main defined in line 8; never used
put defined in line 356; used 25 times

Defined variables

labno defined in line 4; used 3 times
tabflg defined in line 3; used 3 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 888
Valid CSS Valid XHTML 1.0 Strict