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 3.07A ')
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