1195 START ; DAFT COMMAND SUBROUTINES 1200 ADV, CALL NUMBER 1205 RECNO=NUMBR 1210 CALL PLUCHK 1215 ADV2, CALL REED 1220 RECNO=RECNO-1 1225 IF (RECNO .GT. 0) GOTO ADV2 1230 GOTO START 1235 1240 BACK, IF (UPFLAG .EQ. 0) GOTO NOBACK 1245 CALL NUMBER 1250 NUMBR=RECNUM-NUMBR 1255 IF (NUMBR .LE. 0) GOTO STUCK 1260 RECNUM=NUMBR 1265 GOTO GOTORD 1270 NOBACK, XMIT(TTY,"CANT BACKSPACE WITH SEQUENTIAL INPUT') 1275 GOTO START 1280 STUCK, XMIT(TTY,"CANT BACKSPACE PAST BEGIN OF FILE.') 1285 GOTO START 1290 1295 WRITE, CALL NUMBER 1300 RECNO=NUMBR 1305 PLUS=1 1310 GOTO ADV2 1315 1320 CHANGE, CALL GETKEY 1325 CALL GETDATA 1330 IF (KEYHI .GT. RECLEN) GOTO FOOL 1335 I(KEYLOW,KEYHI)= 1340 I(KEYLOW,KEYHI)=DATA(1,LENG) 1345 GOTO START 1350 FOOL, XMIT(TTY,"KEY EXTENDS PAST RECORD END') 1355 GOTO START 1360 1365 DISPLAY,CALL NUMBER 1370 IF (NUMBR .GT. 130) GOTO MUMBLE 1375 IF (FLAG .EQ. 1) GOTO DREV 1380 GRIDLEN=NUMBR 1385 GOTO START 1390 DREV, GRID=1-GRID 1395 GOTO START 1400 MUMBLE, XMIT(TTY,"EXCESSIVE GRID SIZE') 1405 GOTO START 1410 1415 EXIT, IF (OUTFLG .EQ. 0) STOP 1420 XMIT(TTY,"OUTPUT FILE STILL OPEN') 1425 GOTO START 1430 1435 FINI, IF (OUTFLG.NE.1) GOTO NOUT 1440 CALL PLUCHK 1445 IF (PLUS .EQ. 1) CALL EX 1450 FINI(OUT) 1455 OUTNAM='/NONE/' 1460 OUTFLG= 1465 IF (UPFLAG.EQ.0) GOTO START 1470 UPFLAG= 1475 INFLG= 1480 RECNAM = OUTNAM 1485 FINI (IN) 1490 GOTO START 1495 1500 EX, IF (INFLG .EQ. 0) GOTO NOIN 1505 EX2, CALL WRIT 1510 IF(UPFLAG.EQ.1) GOTO SPEOF 1515 XMIT(IN,INREC,SPEOF) 1520 CALL RD3 1525 GOTO EX2 1530 SPEOF, INFLG= 1535 RECNUM= 1540 STATUS='THRU' 1545 RETURN 1550 1555 GOTO, CALL NUMBER 1560 CALL PLUCHK 1565 IF (UPFLAG .EQ. 0) GOTO SPAN 1570 RECNUM=NUMBR 1575 GOTORD, CALL RDUP 1580 GOTO START 1585 SPAN, IF (NUMBR .LT. RECNUM) GOTO NOBACK 1590 RECNO=NUMBR-RECNUM 1595 IF (RECNO .EQ. 0) GOTO START 1600 GOTO ADV2 1605 1610 HELP, XMIT(TTY,"ADVANCE N+') 1615 XMIT(TTY,"BACKSPACE N') 1620 XMIT(TTY,"CHANGE DATA') 1625 XMIT(TTY,"DISPLAY N') 1630 XMIT(TTY,"EXIT') 1635 XMIT(TTY,"FINI +') 1640 XMIT(TTY,"GOTO N+') 1645 XMIT(TTY,"HELP') 1650 XMIT(TTY,"INPUT LABEL/UNIT') 1655 XMIT(TTY,"KEY A,B') 1660 XMIT(TTY,"LIST N KEY+') 1665 XMIT(TTY,"OUTPUT LABEL/UNIT') 1670 XMIT(TTY,"PUT N') 1675 XMIT(TTY,"QUERY') 1680 XMIT(TTY,"REWIND') 1685 XMIT(TTY,"SEARCH DATA +') 1690 XMIT(TTY,"TYPE N +') 1695 XMIT(TTY,"UPDATE LABEL/UNIT') 1700 XMIT(TTY,"VERSION') 1705 XMIT(TTY,"WRITE N') 1710 XMIT(TTY,"X') 1715 GOTO START 1720 1725 KEY, CALL KEYSUB 1730 KEYL=KEYLOW 1735 KEYH=KEYHI 1740 GOTO START 1745 1750 KEYSUB, CALL NUMBER 1755 IF (FLAG .EQ. 1) GOTO DEFAULT 1760 IF (COM(SCAN) .NE. ',') GOTO BADKEY 1765 KEYLOW=NUMBR 1770 SCAN=SCAN+1 1775 CALL NUMBER 1780 KEYHI=NUMBR 1785 IF (KEYHI .LT. KEYLOW) GOTO BADKEY 1790 IF (KEYHI .LE. 510) RETURN 1795 BADKEY, XMIT(TTY,"BAD KEY') 1800 KEYLOW=1 1805 KEYHI=510 1810 GOTO START 1815 1820 LIST, DEVICE=LPT 1825 CALL PRINT 1830 GOTO START 1835 DEFAULT,KEYLOW=1 1840 KEYHI=510 1845 RETURN 1850 1855 PRINT, IF (RECNUM .EQ. 0) GOTO NOIN 1860 CALL NUMBER 1865 RECNO=NUMBR 1870 CALL GETKEY 1875 CALL PLUCHK 1880 PRIN2, CALL XINFO 1885 LOW = KEYLOW 1890 HIGH=LOW+GRIDLEN-1 1895 KYHI=KEYHI 1900 IF (KEYLOW .GT. RECLEN) GOTO OUTOFR 1905 IF (KEYHI .GT. RECLEN) CALL HIFIX 1910 PRLOOP, IF (HIGH .GT. KYHI) GOTO RECEND 1915 CALL XM 1920 XMIT(DEVICE," ') 1925 LOW=HIGH+1 1930 HIGH=LOW+GRIDLEN-1 1935 GOTO PRLOOP 1940 RECEND, HIGH=KYHI 1945 IF(LOW.GT.HIGH)GO TO PRIN5 1950 CALL XM 1955 PRIN5, RECNO=RECNO-1 1960 IF (RECNO .EQ. 0) RETURN 1965 CALL REED 1970 GOTO PRIN2 1975 XM, DIF=HIGH-LOW+1 1980 IF (GRID .EQ. 1) CALL DIRG 1985 PAD= 1990 GBUFF= 1995 GBUF=I(LOW,HIGH) 2000 OUTDIF, XMIT(DEVICE,GBUFF(1,DIF+3)) 2005 RETURN 2010 OUTOFR, XMIT(DEVICE,"KEY ENTIRELY PAST END OF RECORD') 2015 GOTO PRIN5 2020 HIFIX, KYHI=RECLEN 2025 RETURN 2030 2035 DIRG, D3=LOW-1 2040 GBUF=GRIDA(D2+1,D2+DIF) 2045 D3=LOW 2050 IF (HUNS .EQ. HIGH(1,1)) GOTO NOHUND 2055 GBUF(100-D2,100-D2)=HUNS+1 2060 NOHUND, PAD=HUNS 2065 GBUF(1,1)=TENS 2070 IF (PAD .NE. '0') GOTO NOBLNK 2075 PAD= 2080 NOBLNK, D3=HIGH 2085 GBUF(DIF,DIF)=TENS 2090 XMIT(DEVICE,GBUFF(1,DIF+3)) 2095 D3=LOW-1 2100 GBUF=GRIDB(UNITS+1,UNITS+DIF) 2105 PAD= 2110 GOTO OUTDIF 2115 2120 PUT, CALL NUMBER 2125 RECNO=NUMBR 2130 PUT2, CALL WRIT 2135 RECNO=RECNO-1 2140 IF (RECNO .GT. 0) GOTO PUT2 2145 GOTO START 2150 QUERY, RICN=RECNAM 2155 XMIT(TTY,QIN) 2160 XMIT(TTY,QINU) 2165 XMIT(TTY,QOUT) 2170 XMIT(TTY,QOUTU) 2175 XMIT(TTY,QKEY) 2180 DEVICE=TTY 2185 CALL XINFO 2190 GOTO VERSION 2195 REWIND, IF (UPFLAG .EQ. 0) GOTO REINIT 2200 RECNUM=1 2205 GOTO GOTORD 2210 REINIT, IF (INFLG .EQ. 0) GOTO NOIN 2215 FINI(IN) 2220 INIT(IN,INPUT,RECNAM,INUNIT) 2225 RECNUM=0 2230 GOTO READ 2235 2240 SEARCH, CALL GETKEY 2245 CALL GETDATA 2250 CALL PLUCHK 2255 SRCH2, IF (I(KEYLOW,KEYHI) .EQ. DATA(1,LENG)) GOTO AHA 2260 SRCH3, CALL REED 2265 GOTO SRCH2 2270 AHA, IF (KEYHI .GT. RECLEN) GOTO SRCH3 2275 FNOM=RECNUM 2280 XMIT(TTY,FOUNDM) 2285 GOTO START 2290 2295 TYPE, DEVICE=TTY 2300 CALL PRINT 2305 GOTO START 2310 SYSINP, XMIT(SYS,COMMAND,EOJ) ;READ COMMAND FROM FILE 2315 COM (1,126) = COM (3,128) ;KILL LINE NUMBER 2320 XMIT(TTY,COMMAND(1,129-2*#TRICK2(4))) 2325 GO TO TERM 2330 EOJ, ON ERROR EOJSYS 2335 INIT(SYS,SYS) 2340 SYSFLG=1 2345 GO TO START 2350 EOJSYS, INIT (KBD,KBD) 2355 SYSFLG= 2360 GO TO START 2365 2370 VERSION, XMIT(TTY,"DAFT VERSION 8.00') 2375 GOTO START 2380 2385 GETKEY, IF (COM(SCAN) .NE. '<') GOTO USEDEF 2390 SCAN=SCAN+1 2395 CALL KEYSUB 2400 IF (COM(SCAN) .NE. '>') GOTO BADKEY 2405 SCAN=SCAN+1 2410 CALL FLOW 2415 RETURN 2420 USEDEF, KEYLOW=KEYL 2425 KEYHI=KEYH 2430 RETURN 2435 START ; DAFT UTILITY SUBROUTINES 2440 PASS, SCAN=SCAN+1 2445 IF(COM(SCAN) .EQ. ';') RETURN 2450 IF (COM(SCAN) .NE. ' ') GOTO PASS 2455 CALL FLOW 2460 RETURN 2465 2470 NUMBER, CALL FLOW 2475 LEFT=SCAN 2480 NUMLOOP,CHAR=COM(SCAN) 2485 IF (CHAR .EQ. ' ') GOTO PAST 2490 IF (CHAR .LT. '0') GOTO PAST 2495 IF (CHAR .GT. '9') GOTO PAST 2500 SCAN=SCAN+1 2505 GOTO NUMLOOP 2510 PAST, RIGHT=SCAN-1 2515 CALL FLOW 2520 IF (RIGHT .LT. LEFT) GOTO NODIGS 2525 FLAG=0 2530 ON ERROR BADNUM 2535 NUMBR=COM(LEFT,RIGHT) 2540 IF (NUMBR .GT. 0) RETURN 2545 BADNUM, XMIT(TTY,"NUMBER TOO BIG OR 0') 2550 XMIT(TTY,"0 NOT ALLOWED.') 2555 GOTO START 2560 NODIGS, NUMBR=1 2565 FLAG=1 2570 RETURN 2575 LABEL, LFT=SCAN 2580 LABLOOP,LETTR=COM(SCAN) 2585 SCAN=SCAN+1 2590 IF (LETTR .EQ. ' ') GOTO NOUNIT 2595 IF(LETTR .EQ. ';') GOTO NOUNIT 2600 IF (LETTR .NE. '/') GOTO LABLOOP 2605 RT=SCAN-2 2610 CALL NUMBER 2615 UNIT=NUMBR 2620 GOTO LABNAME 2625 NOUNIT, UNIT=0 2630 RT=SCAN-2 2635 LABNAME,IF (RT .LT. LFT) GOTO NONAME 2640 NAME= 2645 NAME=COM(LFT,RT) 2650 RETURN 2655 NONAME, XMIT(TTY,"NO LABEL NAME.') 2660 GOTO START 2665 PLUCHK, CALL FLOW 2670 IF (COM(SCAN) .EQ. '+') GOTO PLUINC 2675 RETURN 2680 PLUINC, PLUS=1 2685 SCAN=SCAN+1 2690 CALL FLOW 2695 IF(COM(SCAN) .EQ. ';') RETURN 2700 XMIT(TTY,"EXTRA CHARS') 2705 GOTO START 2710 GETDATA,IF (COM(SCAN) .EQ. QUOTE) GOTO GETALPHA 2715 IF (COM(SCAN) .EQ. ' ') GOTO DATER2 2720 LEFT=SCAN 2725 NLOOP, IF (COM(SCAN) .EQ. ';') GOTO GOTN 2730 SCAN=SCAN+1 2735 GOTO NLOOP 2740 GOTN, RIGHT=SCAN-1 2745 LENG=KEYHI-KEYLOW+1 2750 IF (LENG .GT. 100) GOTO DATERR 2755 ON ERROR BADDIG 2760 NDATA(1,LENG)=COM(LEFT,RIGHT) 2765 RETURN 2770 BADDIG, XMIT(TTY,"BAD DIGIT IN DATA') 2775 RETURN 2780 DATER2, XMIT(TTY,"NO DATA') 2785 RETURN 2790 GETALPHA,SCAN=SCAN+1 2795 LEFT=SCAN 2800 QLOOP, IF (COM(SCAN) .EQ. QUOTE) GOTO GOTQ 2805 SCAN=SCAN+1 2810 GOTO QLOOP 2815 GOTQ, RIGHT=SCAN-1 2820 SCAN=SCAN+1 2825 LENG=KEYHI-KEYLOW+1 2830 IF (LENG .GT. 100) GOTO DATERR 2835 DATA(1,LENG)= 2840 DATA(1,LENG)=COM(LEFT,RIGHT) 2845 RETURN 2850 DATERR, XMIT(TTY,"KEY TOO BIG') 2855 GOTO START 2860 XINF, CALL XINFO 2865 GOTO START 2870 2875 XINFO, XMIT(DEVICE," ') 2880 XMIT(DEVICE,INFO) 2885 XMIT(DEVICE," ') 2890 RETURN 2895 END