File PRINT5.AS (Source fil)

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

15 ;*******************************************
25 ; SOURCE  PRINT5
35 ;*******************************************
45 ;
55 ; SEARCH NAME TABLE FOR MATCH TO 'WORD'
65 ;
75 SEARCH,	I=
85 	FINDSW=
95 SERCH1,	INCR I
105 	IF (I.GT.NAMEI) RETURN
115 	DATANE=DATANT(I)
125 	IF (DATANM.NE.WORD) GOTO SERCH1
135 	FINDSW='X'
145 	RETURN
155 ;
165 ;GET NEXT LINE AND INSIST ON DIRECTIVE
175 ;
185 GETDIR,	CALL GETLIN
195 	CALL GATOM
205 	IF (FATALI.NE.0) GOTO GETDIR
215 	IF (ATMTYP.EQ.1) RETURN
225 	ERRCOD=20
235 	CALL FATALA
245 	GOTO GETDIR
255 ;
265 ;PUT OUT A SOURCE LINE
275 ;
285 LISTIN,	LPTLIN=
295 	IF (FATALI.NE.0) GOTO LIST1
305 	IF (LPTSW.EQ.SPACE) RETURN
315 LIST1,	ERRLNM=#INLNUM(1,1)*64+#INLNUM(2,2)
325 	ERRLIN=INLINE
335 	IF (LINES.LE.0) CALL LISTOF
345 	XMIT (2,ERRECD(1,INLSIZ+7))
355 	LINES=LINES-1
365 	IF (FATALI.NE.0) CALL ERROUT
375 	RETURN
385 ;
395 ;PUT OUT HEADING AT TOP OF PAGE
405 ;
415 LISTOF,	IF (LPTOPN.NE.SPACE) GOTO LSTOF1
425 	INIT (2,LPT)
435 	LPTOPN='X'
445 LSTOF1,	FORMS (2,0)
455 	INCR PAGES
465 	SHPAGE=PAGES
475 	XMIT (2,SHDR)
485 	FORMS (2,1)
495 	LINES=58
505 	RETURN
515 ;
525 ; PUT OUT DIAGNOSTIC MESSAGES
535 ;
545 ERROUT,	IF (FATALI.EQ.0) RETURN
555 	ERRECD=
565 	K=4
575 	I=
585 	ICOL=
595 ERROR2,	J=FATALE(K,K+2)
605 	ERRLIN(J,J)='^'
615 	IF (J.LE.ICOL) GOTO ERROR3
625 	ICOL=J
635 ERROR3,	K=K+6
645 	INCR I
655 	IF (I.LT.FATALI) GOTO ERROR2
665 	XMIT (2,ERRECD(1,ICOL+7))
675 	LINES=LINES-1
685 	ERRLIN=
695 	ERRFLG='****'
705 	K=1
715 	I=
725 ERROR4,	IF (LINES.LE.0) CALL LISTOF
735 	J=FATALE(K,K+2)
745 	ERRLIN(1,3)=FATALE(K+3,K+5)
755 	ERRLIN(7,36)=ERRMES(J)
765 	ERRLIN(4,4)='-'
775 	XMIT (2,ERRECD(1,43))
785 	LINES=LINES-1
795 	K=K+3
805 	INCR I
815 	IF (I.LT.FATALI) GOTO ERROR4
825 	FORMS (2,1)
835 	LINES=LINES-1
845 	FATALI=
855 	RETURN
865 ;
875 ;GET INTEGER FROM SOURCE
885 ;
895 GETINT,	CALL GATOM
905 	IF (ATMTYP.NE.3) GOTO GTINT1
915 	IF (DPCOL.EQ.0) RETURN
925 GTINT1,	ERRCOD=11
935 	NUMLIT(1,1)=1
945 	ATOMSZ=1
955 	GOTO FATALA
965 ;
975 ;GET NEXT WORD
985 ;IF INTEGER, TREAT IT AS IF IT WERE A WORD
995 ;
1005 WDINT,	CALL GATOM
1015 	IF (ATMTYP.EQ.1) RETURN
1025 	IF (ATMTYP.EQ.3) GOTO WDINT2
1035 WDINT1,	WORD=
1045 	ERRCOD=1
1055 	GOTO FATALA
1065 WDINT2,	IF (DPCOL.NE.0) GOTO WDINT1
1075 	IF (ATOMSZ.LE.6) GOTO WDINT3
1085 	ATOMSZ=6
1095 WDINT3,	WORD(1,ATOMSZ)=NUMLIT(1,ATOMSZ)
1105 	RETURN
1115 ;
1125 ;READ AN INPUT LINE
1135 ;
1145 GETLIN,	IF (LPTLIN.NE.SPACE) CALL LISTIN
1155 	FATALI=
1165 GETL1,	XMIT (1,INPUTL,GETL3)
1175 	INLSIZ=(4096-(#XLINE(3,3)*64+#XLINE(4,4)))*2-2
1185 ;
1195 ;GET RID OF TABS
1205 ;
1215 	BLANKX=
1225 	HOLDIR=
1235 	K=1
1245 	J=1
1255 GETL2,	IF (#INLINE(J,J).NE.61) GOTO GETL2A
1265 	K=(K+7)/8*8+1
1275 	GOTO GETL2B
1285 GETL2A,	HOLDIR(K,K)=INLINE(J,J)
1295 	INCR K
1305 	IF (INLINE(J,J).EQ.SPACE) GOTO GETL2B
1315 	BLANKX='X'
1325 GETL2B,	INCR J
1335 	IF (J.LE.INLSIZ) GOTO GETL2
1345 	INLINE=HOLDIR
1355 	INLSIZ=K
1365 	LPTLIN='X'
1375 	IF (BLANKX.NE.SPACE) GOTO GETL6
1385 	GOTO GETLIN
1395 GETL3,	FINI (1)
1405 	ON ERROR GETL4
1415 	INIT (1,SYS)
1425 	GOTO GETL1
1435 GETL4,	INLINE='END'
1445 	INLSIZ=3
1455 GETL6,	ICOL=
1465 	EOL=
1475 	RETURN
1485 ;
1495 ;GET NEXT ATOM
1505   
1515 GATOM,	ATMTYP=
1525 	LETSW=
1535 	DPCOL=
1545 	CALL SCANF		;FIND FIRST NON-SPACE
1555 	IF (ICHAR.EQ.SPACE) RETURN
1565 	ACOL1=ICOL		;REMEMBER FIRST COLUMN
1575 	IF (ICHAR.EQ.SQUOTE) GOTO GATM20
1585 ;
1595 GATOM1,	IF (ICHAR.LT.'0') GOTO GATOM4
1605 	IF (ICHAR.LE.'9') GOTO GATOM6
1615 	IF (ICHAR.LT.'A') GOTO GATOM8
1625 	IF (ICHAR.GT.'Z') GOTO GATOM8
1635 	LETSW='X'
1645 	GOTO GATOM6
1655 ;
1665 ;CHARACTER IS NEITHER LETTER NOR DIGIT
1675 ;
1685 GATOM4,	IF (ICHAR.NE.'.') GOTO GATOM8
1695 	IF (DPCOL.NE.0) GOTO GATOM5
1705 	DPCOL=ICOL
1715 	GOTO GATOM6
1725 GATOM5,	ERRCOD=2
1735 	CALL FATALB
1745 GATOM6,	CALL GETCH
1755 	GOTO GATOM1
1765 ;
1775 ;END OF ATOM
1785 ;
1795 GATOM8,	ACOL2=ICOL
1805 	ATOMSZ=ACOL2-ACOL1
1815 	IF (LETSW.EQ.SPACE) GOTO GATM10
1825 	ATMTYP=1
1835 	WORD=
1845 	IF (ATOMSZ.LE.6) GOTO GATOM9
1855 	ATOMSZ=6
1865 GATOM9,	WORD=INLINE(ACOL1,ACOL1+ATOMSZ-1)
1875 	ERRCOD=3
1885 	IF (DPCOL.NE.0) CALL FATALA
1895 	GOTO GATM30
1905 ;
1915 ;IT IS EITHER A NUMERIC LITERAL, OR NULL
1925 ;
1935 GATM10,	IF (ATOMSZ.EQ.0) RETURN
1945 	ATMTYP=3
1955 	IF (DPCOL.EQ.0) GOTO GATM11
1965 	ATOMSZ=ATOMSZ-1
1975 GATM11,	ERRCOD=5
1985 	IF (ATOMSZ.LE.0) GOTO GATM15
1995 ;
2005 	ERRCOD=4
2015 	IF (ATOMSZ.GT.015) GOTO GATM15
2025 	IF (DPCOL.EQ.0) GOTO GATM14
2035 	J=1
2045 	I=DPCOL-ACOL1
2055 	IF (I.EQ.0) GOTO GATM13
2065 	NUMLIT(J,I)=INLINE(ACOL1,DPCOL-1)
2075 	J=J+I
2085 GATM13,	IF (J.GT.ATOMSZ) GOTO GATM30
2095 	NUMLIT(J,ATOMSZ)=INLINE(DPCOL+1,ACOL2-1)
2105 	ATOMDP=ACOL2-DPCOL-1
2115 	GOTO GATM30
2125 GATM14,	NUMLIT(1,ATOMSZ)=INLINE(ACOL1,ACOL2-1)
2135 	ATOMDP=
2145 	GOTO GATM30
2155 ;
2165 GATM15,	CALL FATALA
2175 	ATOMSZ=1
2185 	DPCOL=
2195 	ATOMDP=
2205 	NUMLIT(1,1)=1
2215 	GOTO GATM30
2225 ;
2235 ;IT IS AN NON-NUMERIC LITERAL
2245 ;
2255 GATM20,	ATMTYP=4
2265 	I=1
2275 	ERRCOD=10
2285 GATM21,	IF (ICOL.GE.INLSIZ) GOTO GATM24
2295 	CALL GETCH
2305 	IF (ICHAR.NE.SQUOTE) GOTO GATM21
2315 	INCR ACOL1
2325 	ATOMSZ=ICOL-ACOL1
2335 	CALL SCANF
2345 	ERRCOD=4
2355 	IF (ATOMSZ.GT.ALFMAX) GOTO GATM24
2365 	IF (ATOMSZ.GT.0) RETURN
2375 	ERRCOD=5
2385 GATM24,	CALL FATALA
2395 	ATOMSZ=1
2405 	GOTO GATM30
2415 ;
2425 ;FINISH UP
2435 ;
2445 GATM30,	IF (ICHAR.EQ.SPACE) CALL SCANF
2455 	IF (ICHAR.LT.'0') GOTO GATM31
2465 	IF (ICHAR.LE.'9') GOTO GATM32
2475 	IF (ICHAR.LT.'A') RETURN
2485 	IF (ICHAR.GT.'Z') RETURN
2495 	GOTO GATM32
2505 GATM31,	IF (ICHAR.EQ.';') GOTO GATM33
2515 	IF (ICHAR.EQ.'.') GOTO GATM32
2525 	IF (ICHAR.NE.SQUOTE) RETURN
2535 GATM32,	ICOL=ICOL-1
2545 	GOTO GATM34
2555 GATM33,	EOL='X'
2565 GATM34,	ICHAR=SPACE
2575 	RETURN
2585 ;
2595 ; SCAN A PICTURE
2605 ;
2615 SCANP,	CALL SCANF
2625 	ACOL1=ICOL
2635 	GOTO SCANP2
2645 SCANP1,	CALL GETCH
2655 SCANP2,	IF (ICHAR.NE.SPACE) GOTO SCANP1
2665 	ATOMSZ=ICOL-ACOL1
2675 	IF (ATOMSZ.LE.PICMAX) GOTO SCANP3
2685 	ERRCOD=3
2695 	CALL FATALA
2705 	ATOMSZ=PICMAX
2715 SCANP3,	EOL='X'
2725 	RETURN
2735 ;
2745 ;FIND FIRST NON-BLANK INPUT CHARACTER
2755 ;
2765 SCANF,	CALL GETCH
2775 	IF (ICHAR.NE.SPACE) RETURN
2785 	IF (EOL.EQ.SPACE) GOTO SCANF
2795 	RETURN
2805 ;
2815 ;GET NEXT INPUT CHARACTER
2825 ;
2835 GETCH,	IF (EOL.NE.SPACE) GOTO GETCH3
2845 	INCR ICOL
2855 	IF (ICOL.GT.INLSIZ) GOTO GETCH2
2865 	ICHAR=INLINE(ICOL,ICOL)
2875 	RETURN
2885 GETCH2,	EOL='X'
2895 GETCH3,	ICHAR=SPACE
2905 	RETURN
2915 ;
2925 ; CREATE PICTURE FOR DECIMAL ITEM
2935 ;
2945 BLDPIC,	IF (J.LE.15) GOTO BLDPC1
2955 	J=15
2965 BLDPC1,	K=1
2975 	J=J-DATADP
2985 	IF (J.LE.0) GOTO BLDPC2
2995 	J=PICMSP(J)
3005 	LISTPC(1,J)=PICMSK(20-J,19)
3015 	K=J+1
3025 BLDPC2,	IF (DATADP.EQ.0) GOTO BLDPC4
3035 	J=DATADP
3045 	LISTPC(K,K)='.'
3055 	INCR K
3065 BLDPC3,	LISTPC(K,K)='X'
3075 	INCR K
3085 	J=J-1
3095 	IF (J.GT.0) GOTO BLDPC3
3105 BLDPC4,	LISTPC(K,K)='-'
3115 	LISTIS=K
3125 	RETURN
3135 ;
3145 ;DETERMINE WIDTH OF HEADING
3155 ;
3165 HWIDTH,	LISTNH=1
3175 	LISTHW=
3185 	J=1
3195 	K=1
3205 HWID1,	IF (LISTIT(J,J).NE.'*') GOTO HWID3
3215 	INCR LISTNH
3225 	K=J-K
3235 	IF (K.LE.LISTHW) GOTO HWID2
3245 	LISTHW=K
3255 HWID2,	K=J+1
3265 HWID3,	INCR J
3275 	IF (J.LE.ATOMSZ) GOTO HWID1
3285 	IF (LISTNH.LE.NUMHDR) RETURN
3295 	NUMHDR=LISTNH
3305 	RETURN
3315 ;PUT ERROR CODE IN TABLE
3325 ;
3335 SYNTAX,	ERRCOD=1
3345 	GOTO FATALB
3355 FATALA,	ERRCOL=ACOL1
3365 	GOTO FATAL
3375 FATALB,	ERRCOL=ICOL
3385 FATAL,	INCR FATALI
3395 	INCR FATALC
3405 	IF (FATALI.GT.ERRMAX) RETURN
3415 	FATALM(1,3)=ERRCOD
3425 	FATALM(4,6)=ERRCOL
3435 	FATALE(FATALI)=FATALM
3445 	RETURN
3455 ;
3465 ;OPEN UP FIRST SYS FILE
3475 ;
3485 OPNSYS,	ON ERROR NOSYS
3495 	INIT (1,SYS)
3505 	FINI (1)
3515 	ON ERROR NOSYS
3525 	INIT (1,SYS)
3535 	RETURN
3545   
3555 NOSYS,	XMIT (8,"?NO SOURCE FILES')
3565 	STOP



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