File DAFTB.AS (Source fil)

Directory of image this file is from
This file as a plain text file

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 <A,B> 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 <A,B> DATA +')
1690 	XMIT(TTY,"TYPE N <A,B>+')
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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search