;;; -*- Mode:MIDAS -*- TITLE PR FANCY FILE PRINTER ;Written by ... JMB 8/23/76 ;LSC feature changed since DM gone now ... CSTACY 1/30/84 ;LSC feature updated again since KL-MC about to die -- Zvona 5/12/86 ;Has special print modes depending upon JNAME: ; :DOC {:CALL :UUO :USET :SUSET :TTYVAR :INTRUP} ; :LSC gets you the current LSC movie schedule ; :PRIM ==> PRINT TO IMLAC ; :TVDOC ==> TRIVIA DOCUMENTATION ;See .INFO.;PR INFO FOR COMPLETE DETAILS .MLLIT==1 ;ACCUMULATOR DEFINITIONS N=0 ;NUMBER OF OUTPUT CHARACTERS A=1 B=2 C=3 D=4 E=5 CC=6 ;CHARACTER COUNT FOR INDEX MAKING PSBP=7 ;PAGE STRING BP PSNUM=10 ;STRING LENGTH P=11 ;STACK POINTER SWTCHS=12 ;CONTAINS ALL SWITCHES DES=13 ;DESCRIPTOR NAME MSK=14 ;MASK FOR DESCRIPTOR MATCHING OBP=15 ;OUTPUT BYTE POINTER IBP=16 ;INPUT BYTE POINTER Z=17 ;RETURN ADDRESS FOR JSP ;SWITCH DEFINITIONS AS==1 ;DON'T PRINT CONTROL-ATSIGNS CS==4 ;STOP AT FIRST ^C (DEFAULTS ON) DS==10 ;NEXT NAME IS DESCRIPTOR FS==40 ;OUTPUT FILE IN USE IS==400 ;OUTPUT IN IMAGE MODE TO TTY LS==4000 ;LIST DOCUMENTATION DIRECTORY PS==100000 ;PAGE AT ^L OR ^_ ;DEVICE DEFINITIONS TTYI==0 TTYO==1 ;OUTPUT FILE, NOT NECESSARILY A TTY DSKBI==2 DSKIO==3 ;INSTRUCTION DEFINITIONS ERROR==JRST LOC 42 JSR TSINT LOC 100 ;RANDOM LOCATIONS JCL: BLOCK 16 FN1: 0 ;FIRST NAME FLAG FN2: 0 ;SECOND NAME FLAG NAME: 0 ;SLOT TO BUILD A NAME IN JNAM: 0 ;JOB NAME DEVICE: 0 ;INPUT FILE NAMES, SNAME: 0 ;DEFAULTS FROM DDT OR OUTPUT FILE NAMES FNAME1: 0 FNAME2: 0 ONAME1: 0 ;OUTPUT FILE NAMES, ONAME2: 0 ;DEFAULTS FROM DDT ODEVIC: 0 OSNAME: 0 XFNAME: 0 YFNAME: 0 IXNAME: 0 CHARS: 0 TSROL: 0 ;SCROLL MODE? TYP: 0 ;DESCRIPTOR TYPE GETDES: 0 ;DESCRIPTOR SEARCH LOOP? NEWDES: 0 ;SEARCHING FOR NEW DESCRIPTOR? BUFLEN==1000 BFR: BLOCK BUFLEN ENDBFR: 10700,,BFR+BUFLEN-1 ;END OF INPUT BUFFER OBUFLN==100 OBUF: BLOCK OBUFLN PDL: BLOCK 20 ;INITIAL SETUP START: MOVEI P,PDL ;SET UP PDL .OPEN TTYO,[.UAO,,'TTY] .LOSE 1000 .OPEN TTYI,[.UAI,,'TTY] .LOSE 1000 .SUSET [.SIMSK2,,[3]] ;ENABLE TTY INTERRUPTS .CALL TTYSET ;SET UP TTY TO TAKE CONTROL-S .LOSE 1000 .CALL TTYGET ;CHECK FOR SCROLLAGE .LOSE 1000 TLNE A,%TSROL SETOM TSROL MOVE IBP,ENDBFR MOVE OBP,[440700,,OBUF] SETZ N, MOVEI SWTCHS,CS ;C SWITCH STARTS SET (STOP AT ^C) .SUSET [.RXJNAME,,JNAM] ;GET JOB NAME MOVE A,JNAM CAME A,[SIXBIT /CALL/] ;SPECIAL FORMS OF DOC CAMN A,[SIXBIT /.CALL/] JRST DOCTYP CAME A,[SIXBIT /UUO/] CAMN A,[SIXBIT /USET/] JRST DOCTYP CAME A,[SIXBIT /TVDOCT/] CAMN A,[SIXBIT /TVDOC/] JRST DOCTYP CAME A,[SIXBIT /MUD/] CAMN A,[SIXBIT /MUDDLE/] JRST DOCTYP CAME A,[SIXBIT /SUSET/] CAMN A,[SIXBIT /TTYVAR/] JRST DOCTYP CAMN A,[SIXBIT /INTRUP/] JRST DOCTYP CAMN A,[SIXBIT /PRIM/] JRST PRIM CAMN A,[SIXBIT /LSC/] ;IF LSC, GO TO SPECIAL ROUTINE JRST LSC ; CAMN A,[SIXBIT /NLSC/] ;IF NLSC, GO TO SPECIAL ROUTINE ; JRST NLSC JRST GETJCL PRIM: .CALL CNSGET .LOSE 1000 TLNN A,%TOIML JRST FINIS XORI SWTCHS,IS .CALL SCPOS .LOSE 1000 JRST GETJCL DOCTYP: MOVEM A,TYP ;SAVE DOC TYPE FOR LATER REFERENCE MOVE A,[SIXBIT /DOC/] MOVEM A,JNAM GETJCL: .BREAK 12,[5,,JCL] ;GET JCL LINE MOVE D,[440700,,JCL] ;GET BP TO JCL MOVE E,TYP CAME E,[SIXBIT /TVDOC/] .BREAK 12,[6,,DEVICE] ;SET UP DEFAULTS FROM DDT MOVE A,FNAME1 MOVEM A,XFNAME MOVE B,FNAME2 MOVEM B,YFNAME ;JCL PARSER LOOP: SETZM NAME MOVE C,[440600,,NAME];CLEAR NAME SLOT GETCHR: CAIE B,^X ;CATCH LEFTOVER ^X OR ^Y CAIN B,^Y JRST FIELD ILDB B,D JUMPE B,FOPEN CAIE B,40 CAIN B,11 JRST GETCHR FIELD: CAIE B,40 ;HERE TO GET A NAME CAIN B,11 JRST FNAM ;SPACE AND TAB MAKE FNAME1 AND 2 CAIE B,0 CAIN B,15 JRST FNAM ;SO DOES 0 AND CAIN B,": JRST DEV CAIN B,"; JRST DIR CAIN B,"_ JRST OFILE CAIN B,"/ JRST SWITCH CAIE B,^X ;TRAP ^X AND ^Y CROCKS CAIN B,^Y JRST XYNAME CAIN B,^Q ;HANDLE QUOTING ILDB B,D CAIGE B,40 ;SUBI B,40 < 0 (BAD CHARACTER) ERROR ILLCHR SUBI B,40 CAIL B,100 SUBI B,40 ;CASE CONVERSION TLNE C,770000 ;IGNORE MORE THAN 6 CHARACTERS, JRST NXTCHR-1 MOVE A,JNAM TRNN SWTCHS,DS ;UNLESS D SWITCH IS SET, CAMN A,[SIXBIT /DOC/] ;OR JNAME IS DOC, CAIA JRST NXTCHR LDB E,[360600,,NAME] CAIE E,'. ;AND FIRST CHAR IN NAME WAS "." JRST NXTCHR MOVE E,NAME ;IF ALL THAT WAS TRUE, FLUSH "." & ADD NEW CHAR LSH E,6 MOVEM E,NAME DPB B,C SKIPA IDPB B,C NXTCHR: ILDB B,D JRST FIELD ;FILE NAME STORERS DEV: MOVE A,NAME MOVEM A,DEVICE JRST LOOP DIR: MOVE A,NAME MOVEM A,SNAME JRST LOOP FNAM: TRNE SWTCHS,DS JRST DESNAM MOVE A,NAME JUMPE A,LOOP SKIPN FN1 JRST FNAM1 SETOM FN2 MOVEM A,FNAME2 JRST LOOP FNAM1: MOVEM A,FNAME1 SETOM FN1 JRST LOOP DESNAM: MOVE DES,NAME TRZ SWTCHS,DS JRST LOOP OFILE: MOVE B,DEVICE ;TRANSFER CURRENT NAMES TO OUTPUT FILE NAME SLOTS MOVEM B,ODEVIC MOVE B,SNAME MOVEM B,OSNAME MOVE B,FNAME1 MOVEM B,ONAME1 MOVE B,FNAME2 MOVEM B,ONAME2 .BREAK 12,[6,,DEVICE] ;RESET DEFAULTS FROM DDT MOVE A,FNAME1 MOVEM A,XFNAME MOVE B,FNAME2 MOVEM B,YFNAME SETZM FN2 MOVE A,NAME TRNN SWTCHS,DS JRST .+3 SETZM FN1 JRST DESNAM SKIPE FN1 JRST .+4 JUMPE A,LOOP MOVEM A,ONAME1 JRST LOOP SETZM FN1 JUMPE A,LOOP MOVEM A,ONAME2 JRST LOOP ;HANDLERS FOR SPECIAL JCL COMMANDS SWITCH: ILDB B,D CAIE B,"C CAIN B,"c JRST CSWI CAIE B,"P CAIN B,"p JRST PSWI CAIE B,"A CAIN B,"a JRST ASWI CAIE B,"L CAIN B,"l JRST LSWI CAIE B,"D CAIN B,"d JRST DSWI CAIE B,"I CAIN B,"i JRST ISWI JRST ILLSWI CSWI: XORI SWTCHS,CS ;COMPLEMENT APPROPRIATE BIT JRST NXTCHR PSWI: XORI SWTCHS,PS JRST NXTCHR ASWI: XORI SWTCHS,AS JRST NXTCHR LSWI: XORI SWTCHS,LS JRST NXTCHR DSWI: TRO SWTCHS,DS SKIPE NAME JRST FNAM+2 JRST NXTCHR ISWI: XORI SWTCHS,IS JRST NXTCHR XYNAME: SKIPE NAME ;CAUSE BREAK IF NAME AROUND JRST FNAM MOVE A,XFNAME CAIE B,^X MOVE A,YFNAME MOVEM A,NAME MOVEI B,40 JRST FNAM ;DISK AND TTY OPENS LSC: .CALL LSCOPN ;Get channel to LSC movies file ERROR NOLSC JRST PLOOP ;Print the file until ^C seen. ;NLSC: .CALL NLSCOP ;GET CHANNEL TO LSC MOVIES FILE ; ERROR MVELST ; JRST NLSCRD FOPEN: MOVE A,JNAM CAME A,[SIXBIT /DOC/] JRST FOPEN1 SKIPN TYP ;IF DOC TYPE COMES FROM JNAME, DO FIXUPS JRST FOPEN2 SKIPE FN1 MOVE DES,FNAME1 JRST FOPEN3 FOPEN2: SKIPN FN1 ;IF NO TYPE NAME, GIVE POSSIBILITIES ERROR DLIST MOVE A,FNAME1 MOVEM A,TYP SKIPE FN2 MOVE DES,FNAME2 FOPEN3: SKIPN DES ;IF NO DESCRIPTOR, LIST DIRECTORY IORI SWTCHS,LS MOVE A,[SIXBIT /DSK/] MOVEM A,DEVICE MOVE B,TYP CAME B,[SIXBIT /MUD/] CAMN B,[SIXBIT /MUDDLE/] CAIA JRST DITS MOVE A,[SIXBIT /MUDMAN/] MOVEM A,SNAME MOVE A,[SIXBIT /MUDDLE/] MOVEM A,FNAME1 MOVE A,[SIXBIT /ORDER/] JRST FOPEN0 DITS: MOVE A,[SIXBIT /.INFO./] MOVEM A,SNAME MOVE A,[SIXBIT /ITS/] MOVEM A,FNAME1 CAME B,[SIXBIT /CALL/] CAMN B,[SIXBIT /.CALL/] JRST [MOVE A,[SIXBIT /.CALLS/] JRST FOPEN0] CAMN B,[SIXBIT /UUO/] JRST [MOVE A,[SIXBIT /UUOS/] JRST FOPEN0] CAME B,[SIXBIT /SUSET/] CAMN B,[SIXBIT /USET/] JRST [MOVE A,[SIXBIT /USETS/] JRST FOPEN0] CAMN B,[SIXBIT /TTYVAR/] JRST [MOVE A,B JRST FOPEN0] CAMN B,[SIXBIT /INTRUP/] JRST [MOVE A,[SIXBIT /%PI/] JRST FOPEN0] CAME B,[SIXBIT /TVDOCT/] CAMN B,[SIXBIT /TVDOC/] JRST [MOVE A,TYP JRST FOPEN0] ERROR BADTYP FOPEN0: MOVEM A,FNAME2 JUMPE B,FOPEN1 TRZ A,7777 IOR A,[SIXBIT / IX/] MOVEM A,IXNAME FOPEN1: .CALL DSKOPN ;DO ALL OF THE NORMAL OPENS ERROR ILFILE SKIPN ODEVIC ;IF OUTPUT FILE GIVEN, JRST FOPEN4 .CALL OFOPEN ;OPEN IT AS "TTYO", .LOSE 1000 TRZ SWTCHS,PS ;TURN OFF PAGING, TRO SWTCHS,FS ;AND TURN ON F SWITCH FOPEN4: JUMPN B,DOCRD TRNE SWTCHS,IS ;IF I SWITCH IS SET, JRST ILOOP ;DO SUPERIMAGE OUTPUT SKIPE ODEVIC ;IF OUTPUT FILE GIVEN, TRO SWTCHS,IS ;TURN ON IMAGING (JUST TO FOOL MOREAGE) TRNE SWTCHS,PS ;IF P SWITCH IS SET, SKIPE TSROL ;AND NOT SCROLLING, JRST PLOOP0 MOVEI PSNUM,2 ;CLEAR PAGE BEFORE STARTING MOVE PSBP,[440700,,[ASCII /C/]] .CALL PBLOCK .LOSE 1000 JRST PLOOP ;READ AND PRINT LOOPS FOR VARIOUS MODES PLOOP0: TRNN SWTCHS,FS .IOT TTYO,[^J] PLOOP: JSP Z,CIN ;HERE TO PRINT FILE JRST CFINIS CAIE A,^C JRST .+3 TRNE SWTCHS,CS ;STOP IF ^C AND C SWITCH IS SET JRST CFINIS TRNN SWTCHS,PS ;SKIP THIS SECTION IF P SWITCH NOT SET JRST .+4 CAIE A,^L CAIN A,^_ JRST PAGE CAIN A,^@ ;DON'T PRINT ^@ IF A SWITCH SET TRNN SWTCHS,AS JSP Z,COUT JRST PLOOP ILOOP: SETZ B, ILOOP1: JSP Z,CIN ;HERE TO PRINT FILE IN SUPERIMAGE MODE JRST FINIS CAIN A,^C AOJA B,ILOOP1 JUMPE B,ILOOP3 MOVE C,A MOVEI A,^C ILOOP2: .CALL IMGIOT .LOSE 1000 SOJN B,ILOOP2 MOVE A,C ILOOP3: .CALL IMGIOT ;OUTPUT CHAR .LOSE 1000 JRST ILOOP1 ;LSCRD: JSP Z,CIN ;READ UNTIL ^@ ; ERROR MVELST ; JUMPN A,LSCRD ;PRLOOP: JSP Z,CIN ;READ & PRINT UNTIL NEXT ^@ ; JRST CFINIS ; JUMPE A,CFINIS ; JSP Z,COUT ; JRST PRLOOP ; ;NLSCRD: JSP Z,CIN ;READ UNTIL " ; ERROR MVELST ; CAIE A,"" ; JRST NLSCRD ; MOVEI PSNUM,2 ;CLEAR PAGE BEFORE STARTING ; MOVE PSBP,[440700,,[ASCII /C/]] ; .CALL PBLOCK ; .LOSE 1000 ;NPLOOP: JSP Z,CIN ;READ & PRINT UNTIL NEXT " ; JRST CFINIS ; CAIN A,"" ; JRST NMDONE ; CAIE A,"\ ;HANDLE QUOTING ; JRST .+3 ; JSP Z,CIN ; JRST CFINIS ; JSP Z,COUT ; JRST NPLOOP ;NMDONE: JSP Z,CIN ;LOOK FOR A ( ; JRST CFINIS ; CAIE A,"( ; JRST NMDONE ;NMDON1: JSP Z,CIN ;NOW GET A " ; JRST CFINIS ; CAIE A,"" ; JRST NMDON1 ; JSP Z,OBCLR ; PUSHJ P,MORE ;DO MOREAGE ; JRST NPLOOP ;NOW PRINT THIS MESSAGE DOCRD: LDB A,[360600,,DES];FLUSH LEADING DOTS IN DESCRIPTOR CAIE A,'. JRST .+3 LSH DES,6 JRST DOCRD TRNE SWTCHS,LS JRST DOCRD1 MOVEI A,DSKBI .CALL RFDATE ERROR RFDLST MOVE D,B MOVEI A,.UII .CALL IDXOPN JRST MAKIDX MOVEI A,DSKIO .CALL RFDATE ERROR RFDLST CAME B,D JRST [ .CALL [ SETZ SIXBIT /DELEWO/ SETZI DSKIO] .LOSE 1000 JRST MAKIDX] MOVE A,DES ;SET UP MASK FOR DESCRIPTOR COMPARISON MOVEI B,[ 0 770000,,0 777700,,0 -1,,0 -1,,770000 -1,,777700 -1] MLOOP: ANDCM A,(B) SKIPE A AOJA B,MLOOP MOVE MSK,(B) SETOM GETDES JRST GETDOC MAKIDX: MOVEI PSNUM,46. MOVE PSBP,[440700,,[ASCII /New documentation file, must index, hang on.../]] .CALL PBLOCK .LOSE 1000 MOVEI A,.UIO .CALL IDXOPN ERROR IDOLST JRST DOCRD1 ;FIRST PAGE DOESN'T HAVE TO START WITH ^L DOCRD0: JSP Z,CIN ;READ UNTIL ^L OR ^_ JRST DOCEND CAIE A,^L CAIN A,^_ JRST DOCRD1 JRST DOCRD0 DOCRD1: SETZ E, ;USE E TO KEEP TRACK OF LEADING DOTS JSP Z,CIN ;READ UNTIL A LETTER/NUMBER IS FOUND JRST DOCEND CAIE A,". JRST .+3 MOVE E,A JRST DOCRD1+1 CAIG A,40 JRST DOCRD1 MOVE B,[440600,,C] SETZ C, MOVEM CC,CHARS SOS CHARS GNLOOP: SUBI A,40 ;GET DESCRIPTOR NAME ON THIS PAGE IDPB A,B JSP Z,CIN JRST DOCEND CAIE A,"* ;THESE SPECIAL CHARACTERS MAY BE PART OF A NAME CAIN A,"+ JRST GDCHAR CAIE A,"- CAIN A,"/ JRST GDCHAR CAIE A,"= CAIN A,"? JRST GDCHAR CAIL A,"0 ;NON-LETTER/NUMBER SIGNALS END OF NAME CAILE A,"Z JRST DOCRD2 CAILE A,"9 CAIL A,"A SKIPA JRST DOCRD2 GDCHAR: TLNE B,770000 ;IGNORE MORE THAN SIX CHARACTERS JRST GNLOOP DOCRD2: TRNN SWTCHS,LS ;IF L SWITCH SET, LIST NAMES AS PASSED JRST INDEX SKIPE E ;PRINT DOT IF THERE WAS ONE BEFORE NAME .IOT TTYO,E JSP Z,OSIX ;PRINT DESCRIPTOR NAME DOCRD3: .IOT TTYO,A ;PRINT REST OF LINE CAIN A,^J JRST DOCRD0 JSP Z,CIN JRST DOCEND JRST DOCRD3 DOCEND: TRNE SWTCHS,LS ;IF IN LIST MODE, END AT EOF JRST FINIS .IOT DSKIO,[0] .CALL SFDATE ERROR SFDLST .CLOSE DSKIO, MOVE IBP,[10700,,BFR+BUFLEN-1] MOVEM IBP,ENDBFR JRST FOPEN1 INDEX: .IOT DSKIO,C ;WRITE OUT DESCRIPTOR NAME SKIPE E ;IF THERE WAS A DOT, SOS CHARS ; ALLOW SPACE FOR IT .IOT DSKIO,CHARS ;WRITE OUT POSITION JRST DOCRD0 DESCMP: .IOT DSKIO,C GETDOC: .IOT DSKIO,C SKIPN C JRST [ SKIPN NEWDES ERROR DOCLST JRST FINIS] AND C,MSK ;FLUSH UNWANTED PART CAME C,DES ;SEE IF THIS IS DESIRED DESCRIPTOR JRST DESCMP SKIPN NEWDES JRST PRDOC MOVE IBP,[10700,,BFR+BUFLEN-1] MOVEM IBP,ENDBFR PUSHJ P,MORE TRNE SWTCHS,FS .IOT TTYO,[12.] SETZM NEWDES PRDOC: .IOT DSKIO,C ;YES, CLEAR PAGE & PRINT NAME IDIVI C,5 .ACCESS DSKBI,C TRNE SWTCHS,FS ;IF NOT OUTPUT FILING, JRST SLOOP SKIPE TSROL ;OR SCROLLING, JRST SLOOP-1 MOVEI PSNUM,2 ;CLEAR SCREEN MOVE PSBP,[440700,,[ASCII /C/]] .CALL PBLOCK .LOSE 1000 JRST SLOOP .IOT TTYO,[^M] .IOT TTYO,[^J] SLOOP: JUMPE D,CPLOOP JSP Z,CIN ERROR FILLST SOJA D,SLOOP CPLOOP: JSP Z,CIN ;READ & PRINT UNTIL NEXT ^L OR ^_ OR EOF JRST CFINIS CAIE A,^L CAIN A,^_ JRST NXTDES CAIN A,^C TRNN SWTCHS,CS CAIA JRST NXTDES JSP Z,COUT JRST CPLOOP NXTDES: JSP Z,OBCLR SETOM NEWDES JRST GETDOC ;PAGER FOR READING PAGED FILES (^L OR ^_) WITH P SWITCH SET; MORE HANDLER PAGE: JSP Z,OBCLR SETZ B, ;B USED FOR SPACE COUNTER JSP Z,CIN JRST FINIS ;DON'T PAGE IF AT END OF FILE CAIE A,^C JRST .+3 TRNE SWTCHS,CS JRST FINIS CAIE A,^M ;FLUSH TRAILING CARRIAGE-RETURNS & LINE-FEEDS CAIN A,^J JRST PAGE CAIN A,40 AOJA B,PAGE+1 PUSHJ P,MORE JUMPE B,PAGEND MOVEI C,40 .IOT TTYO,C ;PRINT SPACES, IF ANY SOJG B,.-1 PAGEND: .IOT TTYO,A JRST PLOOP MORE: TRNE SWTCHS,IS+FS ;IF I SWITCH OR F SWITCH IS ON, POPJ P, ;DO NOTHING PUSH P,PSNUM PUSH P,PSBP PUSH P,A SKIPE NEWDES JRST [ MOVEI PSNUM,14. MOVE PSBP,[440700,,[ASCII /--Next Match--/]] JRST DMORE] MOVEI PSNUM,8. MOVE PSBP,[440700,,[ASCII /--More--/]] DMORE: .CALL PBLOCK ;PAGER USING ^P HACKERY .LOSE 1000 .LISTEN A, .CALL PEEK .LOSE 1000 CAIN A,40 JRST MORE1 CAIE A,177 CAIN A,^S CAIA JRST MORE2 .CALL TYI .LOSE 1000 MORE2: MOVEI PSNUM,7 MOVE PSBP,[440700,,[ASCII /Flushed/]] .CALL PBLOCK .LOSE 1000 SKIPE GETDES CAIE A,177 JRST FINIS SKIPE NEWDES JRST FINIS MOVEI A,NXTDES MOVEM A,TSINT+1 MOVE OBP,[440700,,OBUF] SETZ N, JRST MPOPS MORE1: .CALL TYI .LOSE 1000 MOVEI PSNUM,4 MOVE PSBP,[440700,,[ASCII /TL/]] SKIPN TSROL JRST .+3 MOVEI PSNUM,2 MOVE PSBP,[440700,,[ASCII / /]] .CALL PBLOCK .LOSE 1000 MPOPS: POP P,A POP P,PSBP POP P,PSNUM POPJ P, ;ERROR MESSAGE PRINTER (WORD POINTER IN C) ERRPRT: MOVEI PSNUM,2 MOVE PSBP,[440700,,[ASCII /A/]] .CALL PBLOCK .LOSE 1000 HRLI C,440700 ERLOOP: ILDB B,C JUMPE B,ERRDON .IOT TTYO,B JRST ERLOOP ERRDON: .IOT TTYO,[^M] .IOT TTYO,[^J] JRST FINIS ;SIXBIT OUTPUT ROUTINE (PUT WORD IN C, USES B & D) OSIX: MOVE B,[440600,,C] OLOOP: ILDB D,B JUMPE D,(Z) ADDI D,40 .IOT TTYO,D TLNE B,770000 JRST OLOOP JRST (Z) ;IOT SIMULATOR FOR READING FROM DISK FILE CIN: CAMN IBP,ENDBFR JRST CIN1 ILDB A,IBP AOJ CC, ;INCREMENT CHARACTER COUNT JRST 1(Z) ;NORMAL RETURN CIN1: MOVE A,ENDBFR CAME A,[10700,,BFR+BUFLEN-1] JRST (Z) ;EOF RETURN MOVE A,[-BUFLEN,,BFR] .IOT DSKBI,A MOVE IBP,[10700,,BFR-1] SKIPL A JRST CIN SOJ A, HRRM A,ENDBFR JRST CIN ;IOT SIMULATOR FOR WRITING TO TTY & REAL STRING OUTPUTER COUT: IDPB A,OBP AOJ N, CAIE N,OBUFLN*5 JRST (Z) OBCLR: JUMPE N,(Z) MOVE OBP,[440700,,OBUF] .CALL [ SETZ SIXBIT /SIOT/ 1000,,TTYO OBP SETZ N] .LOSE 1000 MOVE OBP,[440700,,OBUF] JRST (Z) ;INTERRUPT HANDLER TSINT: 0 0 PUSH P,A MOVE A,TSINT NXTINT: TRZE A,2 PUSHJ P,MORE TRZE A,1 JRST TYIINT INTRET: POP P,A .DISMIS TSINT+1 TYIINT: MOVEI A,TTYI .ITYIC A, JRST INTRET ;IGNORE FALSE CHAR INTERRUPTS .RESET TTYO, ;FLUSH OUTPUT .RESET TTYI, ;AND INPUT .IOT TTYO,A JRST FINIS ;VARIOUS CALL BLOCKS DSKOPN: SETZ SIXBIT /OPEN/ 5000,,.BAI 1000,,DSKBI DEVICE FNAME1 FNAME2 SETZ SNAME IDXOPN: SETZ SIXBIT /OPEN/ 4000,,A 1000,,DSKIO DEVICE FNAME1 IXNAME SETZ SNAME OFOPEN: SETZ SIXBIT /OPEN/ 5000,,.UAO 1000,,TTYO ODEVIC ONAME1 ONAME2 SETZ OSNAME RFDATE: SETZ SIXBIT /RFDATE/ A SETZM B SFDATE: SETZ SIXBIT /SFDATE/ 1000,,DSKIO SETZ D LSCOPN: SETZ SIXBIT /OPEN/ 5000,,.BAI 1000,,DSKBI [SIXBIT /KS/] [SIXBIT /MOVIES/] [SIXBIT /LSC/] SETZ [SIXBIT /COMAIL/] ;NLSCOP: SETZ ; SIXBIT /OPEN/ ; 5000,,.BAI ; 1000,,DSKBI ; [SIXBIT /DM/] ; [SIXBIT /SPECS/] ; [SIXBIT /545MVE/] ; SETZ [SIXBIT /.BATCH/] PBLOCK: SETZ SIXBIT /SIOT/ 5000,,%TJDIS ;ENABLE ^P HACKERY 1000,,TTYO PSBP SETZ PSNUM IMGIOT: SETZ SIXBIT /IOT/ 5000,,%TJSIO 1000,,TTYO SETZ A TYI: SETZ SIXBIT /IOT/ 5000,,%TIACT 1000,,TTYI SETZ A PEEK: SETZ SIXBIT /IOT/ 5000,,%TIPEK+%TIACT 1000,,TTYI SETZ A TTYSET: SETZ SIXBIT /TTYSET/ 1000,,TTYI [404040,,404040] SETZ [414040,,500040] TTYGET: SETZ SIXBIT /TTYGET/ 1000,,TTYI 2000,,A 2000,,A SETZM A CNSGET: SETZ SIXBIT /CNSGET/ 1000,,TTYI 2000,,A 2000,,A 2000,,A 2000,,A SETZM A SCPOS: SETZ SIXBIT /SCPOS/ 1000,,TTYI 1000,,0 SETZI ;ERROR CRUFTIES DEFINE DEFERR NAME,STRING NAME: MOVEI C,[ASCIZ/!STRING!/] JRST ERRPRT TERMIN DEFERR ILLCHR,[Illegal character in JCL] DEFERR ILFILE,[File not found] DEFERR ILLSWI,[Illegal switch] DEFERR MVELST,[Information not currently available] DEFERR NOLSC,[The LSC movie guide seems to be missing.] DEFERR DOCLST,[No such descriptor found in this DOC file] DEFERR DLIST,[Known documentation types: CALL UUO USET SUSET TTYVAR INTRUP MUD(DLE)] DEFERR BADTYP,[Bad DOC type, use DOC^K to list possibilities] DEFERR SFDLST,[Set-file-date CALL lost] DEFERR RFDLST,[Read-file-date CALL lost] DEFERR IDOLST,[Open for output of new index file lost] DEFERR FILLST,[Documentation file or index in bad format] ;NORMAL EXIT CFINIS: JSP Z,OBCLR FINIS: .VALUE [ASCIZ ":KILLî:VKî"] END START