X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape7%2FEDIT.PA;fp=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape7%2FEDIT.PA;h=ace47114ebdbb5b1d5c838e9970b847e639ac13f;hb=7af5ad59491ddf2066641aef1e0025a337c0f247;hp=0000000000000000000000000000000000000000;hpb=919757fd611e482003ce51f366f6783cab73dea3;p=pdp8.git diff --git a/sw/os8/v3d/sources/system/dectapes/dectape7/EDIT.PA b/sw/os8/v3d/sources/system/dectapes/dectape7/EDIT.PA new file mode 100644 index 0000000..ace4711 --- /dev/null +++ b/sw/os8/v3d/sources/system/dectapes/dectape7/EDIT.PA @@ -0,0 +1,2868 @@ +/5 OS/8 SYMBOLIC EDITOR, V12 +/ +/ +/ +/ +/ +/ +/ +// +/ +/ +/ +/ +/COPYRIGHT (C) 1977 +/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. +/ +/ +/ +/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A +/SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- +/SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER +/COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE +/TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO +/AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE +/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. +/ +/ +/THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT +/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL +/EQUIPMRNT COROPATION. +/ +/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS +/SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. +/ +/ +/ +/ +/ +/ + /5 JULY 1972 EF + +/COPYRIGHT 1971,1972 DIGITAL EQUIPMENT CORPORATION +/ MAYNARD, MASSACHUSSETTS 01754 + +/THE SYMBOLIC EDITOR IS A LINE-ORIENTED +/TEXT EDITOR WITH CHARACTER AND STRING +/SEARCH CAPABILITIES. IT IS DESIGNED +/TO BE COMPATIBLE WITH THE OS/8 SYSTEM. + +/THE DESIGN OF THE EDITOR IS SIMILAR +/TO THAT OF THE PAPER TAPE SYMBOLIC +/EDITOR AND THE DISK MONITOR SYSTEM +/EDITOR. + + +/ OS/8 V3 CHANGES S.R. + +/1. ?5 ERROR REMOVED +/2. ALLOW CHAINING TO EDIT +/3. ADDED VERSION # COMMAND (#) +/4. COMBINED ^C ROUTINES, TAKING OUT BRANCH THRU 17667 +/5. ALLOWED PARITY CHARACTERS EVERYWHERE +/ +/ +/ FIX FOR V10 J.K. 1975 +/ +/ THE CLOSE ERROR MESAGE 2? WAS BEING +/ GIVEN INSTEAD OF FILE FULL MESSAGE +/ WHEN THE INPUT FILE FIT INTO THE EDIT BUFFER +/ BUT WAS TOO LARGE FOR THE AVAILIBLE SPACE ON THE +/ OUTPUT DEVICE. + +/ V11 CHANGES 25-MAY-77 DAVID SPECTOR + +/1. ESCAPE KEY NO LONGER ECHOED +/2. SCOPE MODE SUPPORTED +/3. ONCE-ONLY CODE MOVED TO INPUT HANDLER +/ AREA IN ORDER TO FREE LOCS 3000-3177 + +/ V12 CHANGES 27-JUN-77 EDWARD P. STEINBERGER +/ +/ALLOWED ESCAPE(233) TO BE AN INPUT CHARACTER IN TEXT MODE. +/ECHOS AS "$" ON TERMINAL OR LINEPRINTER (IF V), OUTPUT +/TO FILE AS ESCAPE + + /THE LOADING AND SAVING PROCEDURE FROM PAPER TAPE IS: +/ .R ABSLDR +/ *PTR:/9$^ +/ .SAVE SYS EDIT +/ + +/THE STARTING ADDRESS IS 00200. + +/COMMAND DECODER RULES: +/*OUTPUT FILE OR LINE FEED +EXNEX, TAD THSN /PRINT NEXT LINE + IAC + SNA /IS IT AN EXISTING LINE? + ERROR /NO + DCA ARG0 /YES SAVE EFFECTIVE ARGUMENTS + CMA + DCA ARG1 +/HANDLER FOR L COMMAND +LIST, TAD LOW /SET KEYBOARD AS OUTPUT + DCA OUTDEV + ISZ TABIND /SET TAB INDICATOR + JMS LISTER /OUTPUT LINE(S) + JMP I TE1 /*RETURN TO COMMAND MODE* + +/LISTING OUTPUT ROUTINE +/OUTPUTS LINES INDICATED BY ARG0,ARG1 + +LISTER, 0 + TAD ARG0 + SZA CLA /ANY ARGUMENTS? + JMP L0 /YES - SET THEM UP + TAD LSTCHK /ALLOW 0L? + SZA CLA + ERROR /NOPE + TAD LSTN /NO - SET TO LIST BUFFER + CIA + DCA ARG1 + ISZ ARG0 /SET TO LINE 1 +L0, TAD ARG0 + CIA + TAD LSTN + SPA CLA /ARGUMENTS IN RIGHT RANGE? +L1, ERROR /NO -( OR JMP I TE1) + TAD ARG0 + JMS I FIN1 /GET POINTERS + DCA THIS /SAVE POINTER + CMA + CDF 10 + TAD I THIS /GET START + DCA AXOUT + TAD I AXOUT /SAVE POINTER FOR SEARCH + DCA XSAV + TAD AXOUT /SAVE OBJECT LINE FOR GARBAGE COLLECT + DCA MARK + CDF 0 + CMA + DCA XCT + TAD ARG0 /SET POINTER + DCA THSN + ISZ ARG0 /SET FOR NEXT LINE +/(HANDLER FOR FORM FEED DURING CHARACTER SEARCH) +L2, JMS I UTR1 /UNPACK A CHARACTER + JMS I OUT1 /PRINT A CHARACTER + JMS I CPTSTI /WAS IT ^O OR ^C FROM KEYBOARD? + JMP L3 /NO - CONTINUE + TAD C317 /YES - ^O + JMS I UPAROI /GENERATE ^O + JMP I TE1 /*RETURN TO COMMAND MODE* +L3, TAD CHAR /OR (JMP SLOOK) + TAD MCR + SZA CLA /WAS IT END OF LINE? + JMP L2 /NO - KEEP UNPACKING + ISZ ARG1 /YES - DONE YET? + JMP L0 /NO - GET NEXT LINE + JMP I LISTER /YES --RETURN-- + +CPTSTI, CTRLP /TEST FOR ^O AND ^C +C317, 317 + +/------------------------------------------------------------ +/SEARCH ROUTINES + + +/HANDLER FOR CARRIAGE RETURN +SRETN, JMS I ENDLNI /TERMINATE THIS LINE + TAD MARK /AND NOW GARBAGE COLLECT + JMS I GRBAGE + ISZ ARG1 /DONE YET? + JMP I LIS1 /NO - GET NEXT LINE + JMP I TE1 /YES*RETURN TO COMMAND MODE* + +SLOOK, JMS I SORTJ /SEARCH DONE? + LIST3-1 /(CARRIAGE RETURN OR SEARCH CHARACTER) + LISTGO-LIST3 /YES - GO TO ITS HANDLER + JMS I PACK1 /NO-PACK SEARCHED CHARACTERS + JMP I L2I /CONTINUE SEARCH + + IFNZRO SLOOK&1000 + +/HANDLER FOR ^G DURING CHARACTER SEARCH +/CHANGE SEARCH CHARACTER +SCONT, JMS I KEYBD /FETCH NEW SEARCH CHARACTER + DCA LIST3+1 /STORE IT IN LIST + JMP I L2I /CONTINUE SEARCH + +/HANDLER FOR LINE FEED DURING SEARCH +SLINE, TAD CCR + DCA CHAR + JMS I ENDLNI + ISZ ARG0 /MOVE POINT + ISZ THSN /BUMP CURRENT LINE COUNT + ISZ LSTN /ADD A LINE. +/HANDLER FOR _ DURING SEARCH +SBAR, TAD CCR /CTRL-U + JMS I OUT1 /OUTPUT CARRIAGE RETURN + TAD BUFR /RESTART PACK BUFFER + DCA AXIN + DCA XCTIN +/------------------------------------------------------------------- +SFOUND, JMS I CHI1 /GET A CHARACTER + JMS I SORTJ /SPECIAL SEARCH COMMAND? + LIST6-1 + SRNLST-LIST6 /YES - GO TO HANDLER +/HANDLER FOR SEARCH CHARACTER FOUND +SGOT, JMS I PACK1 /NO-PACK INSERTS + JMP SFOUND /CONTINUE INPUT + + + +/TELETYPE CHARACTER FETCH ROUTINE +/ENTER WITH AC CLEAR +/EXIT WITH CHARACTER IN CHAR AND AC +/FORCE CHANNEL 8 +/BLANK TAPE & LEADER TRAILER IGNORED + +CHIN, 0 + DCA CHAR /CLEAR CHARACTER + JMS I KEYBD + AND P177 /MASK PARITY + SNA /IGNORE BLANK AND L/T + JMP CHIN+1 + TAD C200 /RESTORE CHARACTER + JMS I OUT1 /ECHO INPUT + TAD CHAR + JMP I CHIN /--RETURN-- + + +/SEARCH TEXT BUFFER FOR LINE +/WHOSE NUMBER IS ONE LESS THAN +/THE CONTENTS OF THE AC +/EXIT WITH ADDRESS OF LINK CELL IN AC + +FIND, 0 /LOCATE LINE BUFFER + CIA + SMA /IS LINE NUMBER TOO SMALL? + ERROR /YES + DCA TEMP /NO - STORE NEGATIVE OF LINE # + TAD TEMP + IAC + TAD LSTN + SPA CLA /IS LINE NUMBER TOO LARGE? + ERROR /YES + TAD CFRS /NO + JMP FIND1 +FIND2, CDF 10 + TAD I SAVE /CHAIN THROUGH LIST + CDF 0 + SZA /FAILSAFE +FIND1, DCA SAVE + ISZ TEMP /DONE YET? + JMP FIND2 /NO - KEEP CHAINING + TAD SAVE /YES - GET LINE NUMBER + JMP I FIND /--RETURN-- + + +CON, 6030 /CONVERSION CONSTANTS + 7634 + 7766 + 7777 + +BOX=COUNTP +VAL=ARG0 + +/HANDLER FOR : OR = +/PRINTS REQUESTED LINE NUMBER +/WHICH IS FOUND IN ARG2 ON ENTRY + +PRNT, TAD ARG2 + DCA VAL /SET NUMBER TO BE PRINTED + TAD M4 + DCA CNT /SET CHARACTER COUNT + TAD ADDR + DCA XYZ+2 +FLOOZ, DCA BOX + CLL + TAD VAL /IF VAL IS TOO LARGE, IT LOOKS + SMA CLA /LIKE A NEG NO. THE LINK + TAD K50 /DETERMINES THE END POINT IN THAT CASE + TAD K7430 /7430=SZL; 7500=SMA + DCA XYZ+3 + JMP .+4 + ISZ BOX + CLL +XYZ, DCA VAL + TAD VAL + NOP /TAD CON +() SOME DISPLACEMENT + SMA /OR, IF VAL TOO BIG,SZL + JMP XYZ-2 /KEEP ADDING THE SAME CONSTANT + CLA + TAD BOX /BOX HAS THE NUMBER COUNT + TAD C260 /MAKE ASCII DIGIT + JMS I OUTL1 /OUTPUT THE DIGIT + ISZ XYZ+2 /ADD IN NEXT CONVERSION CONSTANT LATER + ISZ CNT /DONE ALL FOUR? + JMP FLOOZ /NO - KEEP CONVERTING + JMP I TE1 /YES*RETURN TO COMMAND MODE* + +C260, 260 +ADDR, TAD CON +K50, 50 +K7430, 7430 + +/CHARACTER OUTPUT ROUTINE + +OUT, 0 + DCA CHAR +/ESC PATCH 25-MAY-77 DS +/ TAD ECHOSW +/ SNA CLA /ECHO SUPPRESSED? + JMS I .+1 /DS + ESCPA /DS + JMP I OUT /YES--RETURN-- + JMS I SORTJ /NO - IS IT A FORMAT CHARACTER? + LIST4-1 /YES - EXIT TO ITS HANDLER + OUTLIS-LIST4 + ISZ TCNT /NO - COUNT ONE LETTER + TAD CHAR +OUTX, JMS I OUTDEV /OUTPUT THE CHARACTER + JMP I OUT /--RETURN-- + + +/CARRIAGE RETURN HANDLER + +OUTCRL, TAD CCR + JMS I OUTDEV /OUTPUT CARRIAGE RETURN + DCA TCNT /CLEAR TAB COUNTER + TAD CLF /OUTPUT LINE FEED + JMP OUTX + + +/TAB HANDLER - TAB/RUBOUT + +OUTRT, TAD CTAB + JMS I OUTDEV /OUTPUT TAB + CIF 10 + JMS I POTYPE /TEST TYPE OF OUTPUT + SPA CLA /IS IT DIRECTORY DEVICE? + JMP I OUT /YES--RETURN-- + TAD CRO /NO - OUTPUT RUBOUT + JMP OUTX + + +/TAB HANDLER - SPACES + +OUTTAB, TAD TABIND + SNA CLA /OUTPUT TAB/RUBOUT INSTEAD? + JMP OUTRT /YES - GO TO OTHER TAB HANDLER + TAD TCNT /NO - + TAD MTABS /REDUCE SPACE COUNT TO 8 OR LESS + SMA + JMP .-2 + DCA TCNT + TAD C240 /OUTPUT SPACES + JMS I OUTDEV + ISZ TCNT /DONE YET? + JMP .-3 /NO - CONTINUE + JMP I OUT /YES--RETURN-- + + +/----------------------------------------------------------------------- +/I-O SUBROUTINES + + +/HANDLER FOR S COMMAND + +XCRET, JMS I KEYBD /GET THE SEARCH CHARACTER + DCA LIST3+1 /SAVE IT IN LIST + TAD SXS2 + DCA I L3I /MAKE LISTER JUMP TO SLOOK + TAD BUFR + DCA AXIN /BUILD NEW TEXT IMAGE HERE + DCA XCTIN + TAD CHI1 /READ POINT IS CHIN + IAC + DCA IGNORE + JMP I LIS1 + +/LIST OF SPECIAL CHARACTERS FOR G COMMAND +TAGLIST=. + GTAG2 /SPACE + GTAG2 // + GTAG2 /ESC + GTAG2 /TAB + GTAG2 /CARRIAGE RETURN + +/----------------------------------------------------------------------- + + +/LOW SPEED OUTPUT ROUTINE +/ENTER WITH CHARACTER IN AC + +OUTL, 0 + TLS + TSF + JMP .-1 + CLA + JMP I OUTL /--RETURN-- + +/LOW SPEED INPUT ROUTINE +/CHECKS FOR ^C +/EXIT WITH CHARACTER IN AC + +I33, 0 + KSF + JMP .-1 + JMS CTCK + KRB + AND P177 + TAD C200 + JMP I I33 /NO--RETURN-- + +/SET UP APPEND, CHANGE, INSERT TO WORK +/EACH READS KEYBOARD, NOT DEVICE + +CNGEL, CNGE1-XNS1 +XNSL, XNS1-APP1 + +/HANDLER FOR C COMMAND +CNGE, TAD CNGEL + +/HANDLER FOR I COMMAND +XNS, TAD XNSL + +/HANDLER FOR A COMMAND +APP, TAD APPL + DCA DEST /RETURN POINT + ISZ ECHOSW + JMS I PSETUP + CHIN /KEYBOARD INPUT +DEST, APP1 + + +/SPECIAL OUTPUT LIST +OUTLIS=. + ESCOUT /233 - ESC - V12 + OUTTAB /211 - TAB + OUTCRL /215 - CARRIAGE RETURN + OUTX+1 /212 - LINE FEED + OUTX+1 /214 - FORM FEED + OUTX+1 /377 - RUBOUT + CTRLN /216 - CNTRL N + + /CHECK TTY FOR ^C OR ^O INPUT +/EXIT TO MONITOR ON ^C +/SKIP ON ^O + +CTRLP, 0 + KSF + JMP I CTRLP /--RETURN-- + JMS CTCK + TAD M14 /NO - IS IT ^O? + SZA CLA + JMP I CTRLP /NO--RETURN-- + ISZ CTRLP /YES + KCC + JMP I CTRLP /--RETURN-- + +M14, -14 +CTCK, 0 + TAD C200 + KRS + TAD X203 + SNA + JMP I MONITOR + JMP I CTCK + + + +/HANDLER FOR P COMMAND + +PUNCH, ISZ ECHOSW + TAD BUFWTI /SETUP TO WRITE INTO OUTPUT BUFFER + DCA OUTDEV +PUNC, JMS I LIS /WRITE THE EDITOR BUFFER + TAD C214 /OUTPUT FORM FEED + JMS I OUTDEV +/HANDLER FOR T COMMAND +PUNCT, CDF 10 + TAD I K7600 + CDF 0 + SNA CLA /IS THERE AN OUTPUT DEVICE? + JMP I TE1 /NO*RETURN TO COMMAND MODE* + TAD BUFWTI /YES - SET UP TO WRITE INTO + DCA OUTDEV /OUTPUT BUFFER + TAD M40 + DCA CTRLP /SET TRAILER COUNTER + CIF 10 + JMS I POTYPE / + SMA CLA /DIRECTORY DEVICE FOR OUTPUT? + JMS I OUTDEV /NO - OUTPUT LEADER TRAILER + ISZ CTRLP /DONE YET? + JMP .-5 /NO - CONTINUE + TSF /YES - RESET FLAG + JMP .-1 + JMP I TE1 /*RETURN TO COMMAND MODE* + /HANDLER FOR R COMMAND + +TELE=. +TELEN, TSF + JMP .-1 + DCA ECHOSW /INHIBIT ECHO + JMS I PSETUP /SETUP TO READ FROM + BUFRD /INPUT DEVICE +APPL, APP1 /APPEND TEXT TO BUFFER + +/HANDLER FOR Y COMMAND + +YANK, TAD COM1 /YANK KILLS 'P' PART OF N + JMP COMBOA + +/HANDLER FOR N COMMAND + +COMBO, TAD JMPCH /YANK WIPES COM1-1 +COMBOA, DCA I CCON+1 + TAD ARG0 + SNA /ANY ARGUMENTS + IAC /NO - ASSUME 1 + CIA + DCA COUNTP /SET NUMBER OF PAGES TO YANK + TAD CCON /(JMP I AXCOMB) + DCA I TE1 /SET TE1 TO ALLOW LOOPING +COMB, TAD CCON+1 /THROUGH PUNCH, KILL, READ + DCA AXCOMB /CYCLE + DCA ARG0 /CLEAR ARGUMENTS + DCA ARG2 + DCA LSTCHK /DON'T INHIBIT LISTER! + DCA TABIND /CLEAR IN CASE OF MULTIPLE N + JMP PUNC /OUTPUT BUFFER +COM1, JMP I KILL1 /KILL BUFFER + JMP TELEN /READ NEW BUFFER FULL + ISZ COUNTP /DONE YET? + JMP COMB /NO - CONTINUE + CLA CLL CML RAL /YES-AC=1 - RESET CURRENT LINE NUMBER + DCA THSN /.=1 ON RETURN +COM5, TAD CZ /RESTORE TE1 + DCA I TE1 + JMP I TE1 /*RETURN TO COMMAND MODE* +/IT IS VITAL TO KEEP DUMB1 AND COM5 ON THE SAME PAGE +DUMB1, JERK1 +PSETUP, SETUP /V3 + +/----------------------------------------------------------------------- + +LIST1=. + 212 /LINE FEED + 240 /SPACE + 253 /PLUS (+) + 254 /COMMA (,) + 255 /MINUS (-) + 256 /PERIOD (.) + 257 /SLASH (/) + 274 /< + 275 /= + 276 /> + 000 /(DUMMY ENTRY) + 375 /ALTMODE ASR-33 + 376 /ALTMODE ASR-35 + 233 /ESCAPE KEY + 242 /DOUBLE QUOTE (") + 244 /DOLLAR SIGN ($) + 377 /RUBOUT + 272 /COLON (:) +LIST1A, 215 /CARRIAGE RETURN + 225 /^U + 203 /^C + + +/HANDLER FOR G COMMAND + +GETTAG, ISZ THSN + TAD ARG0 + SNA /ANY ARGUMENTS + TAD THSN /NO - BEGIN WITH NEXT LINE (.+1) + DCA ARG0 /YES - SET ARGUMENTS + SKP +GTAG2, ISZ ARG0 + IAC + TAD ARG0 + JMS I FIN1 /GET NEXT LINE + DCA AXOUT + CMA + DCA XCT + JMS I UTR1 /UNPACK FIRST CHARACTER + JMS I SORTJ /DOES IT BEGIN A TAG? + LIST7-1 /NO - TAGLIST EXITS + TAGLIST-LIST7 /TO GTAG2 + JMP I LIS1 /YES - PRINT LINE + +MP1=ARG1 +MP2=ARG0 +MP3=ARG2 + +/HANDLER FOR M COMMAND +/ENTER WITH FIRST LINE TO MOVE IN MOV1 +/LAST LINE TO MOVE IN MOV2 +/MOV2 .GT. MOV1 +/DESTINATION LINE IN ARG2 + + +MOVEM, TAD MOV1 + CIA /ARG2 MAY NOT BE BETWEEN + TAD ARG2 /MOV1 AND MOV2 + SPA CLA /IS MOV1 .GT. ARG2? +/----------------------------------------------------------------------- + JMP .+6 /YES - O.K. + TAD MOV2 + CMA + TAD ARG2 + SPA SNA CLA /IS MOV2 .LT. ARG2? + ERROR /NO-FAULTY LOGIC IN COMMAND + TAD MOV1 /YES + JMS I FIN1 + DCA MP1 /STORE FIRST LINE POINTER + IAC + TAD MOV2 + JMS I FIN1 + DCA MP2 /STORE LAST LINE POINTER + TAD ARG2 + JMS I FIN1 + DCA MP3 /STORE DESTINATION LINE POINTER + CDF 10 /ALL FOUND + TAD I MP1 /SWAP POINTERS- + DCA TEMP /RESET THE LINK COORDS + TAD I MP2 + DCA I MP1 + TAD I MP3 + DCA I MP2 + TAD TEMP + DCA I MP3 + CDF 0 + JMP I TE1 /*RETURN TO COMMAND MODE* + +SRNLST=. + SBAR /BACK ARROW (_) + L2 /FORM FEED + SCONT /BELL + SLINE /LINE FEED + RUB1 /RUB OUT + +LISTGO=. + SRETN /CARRIAGE RETURN + SGOT /SEARCH CHARACTER FOUND + +/HANDLER FOR RUBOUT IN TEXT OR SEARCH +RUB1, TAD AXIN + CIA + TAD BUFR + TAD XCTIN + SZA CLA /IS THERE ANYTHING ON THIS LINE? + TAD ECHOSW /OR ECHO INHIBITED? + SNA CLA + JMP I IGNORE /YES-IGNORE RUBOUT +/SCOPE PATCH 25-MAY-77 DS +/ TAD SPLAT /NO- +/ JMS I OUT1 /OUTPUT BACKSLASH + JMS I .+1 /DS + RUBPA /DS +/DELETE CHAR FROM BUFFER + TAD AXIN /GET LAST WORD OF INPUT + DCA MOV1 + CDF 10 + DCA I BUFR /PREVENTS INFINITE RUBOUTS + TAD I MOV1 + ISZ XCTIN /WHICH HALF OF WORD? + JMP RUB2 + AND C77 + TAD M77 + SZA CLA /TEST EXTENSION + JMP RUB4 +RUB3, CMA + DCA XCTIN + CMA + TAD AXIN + DCA AXIN + TAD I MOV1 + AND P7700 +RUB4, DCA ADD + CDF 0 + JMP I IGNORE /CHIN+1 +RUB2, AND P7700 + TAD C100 + SZA CLA + JMP RUB3 + DCA I MOV1 + JMP RUB3+1 + +/HANDLER FOR SPACE IN TEXT MODE +SPACES, TAD ECHOSW + CLA /OR SZA CLA IF B OPTION + JMP I SPCNO /PACK IT - (MOR+4) + CMA /SET COUNTER +SP2, DCA CNT + JMS I BUFRDI /GET LAST CHARACTER + TAD M240 + SNA CLA /WAS IT SPACE? + JMP SP2 /YES-IGNORE EXTRA SPACES +/----------------------------------------------------------------------- + TAD CHAR /NO + DCA SAVE /SAVE NON-SPACE + ISZ CNT /WAS THERE MORE THAN 1 SPACE? + TAD M27 /YES- STORE TAB + TAD C240 /NO-STORE SPACES + DCA CHAR + JMS I PACK1 + TAD SAVE + JMP I SPCGO /SORT - (MOR+1) + +/HANDLER FOR $ (PART OF M COMMAND) + +MOVE, TAD ARG0 /ARG2 .GE. ARG0 + CIA + TAD ARG2 + SPA CLA /ARE LINES TO BE MOVED LEGITIMATE + ERROR /NO + TAD ARG0 /YES- + DCA MOV1 /SET POINTER TO FIRST LINE + TAD ARG2 + DCA MOV2 /SET POINTER TO LAST LINE + JMP I ONUM /CONTINUE COMMAND INPUT + +OPS1, EXNEX /LINE FEED + GEXP /SPACE + GEXP /PLUS + FIRS /COMMA + GMIN /MINUS + PERI /POINT(.) + SLAS /SLASH + EXLAS /BACKUP(<) + PRNT /= + EXNEX /ALT(>) + DBCV2 /DUMMY + AMODE /ALTMODE ASR-33 + AMODE /ALTMODE ASR-35 + AMODE /ESCAPE KEY + DBLQUO /" + MOVE /DOLLAR SIGN + ELIM /COMMAND RUBOUT + PRNT /: + GTOP-2 /CARRIAGE RETURN + START /^U + MONIT /^C (MONITOR RESTART) +OPS1A, RETRN /RETURN +/----------------------------------------------------------------------- +OLDTE1, START /^U + MONIT /^C + +/HANDLER FOR E COMMAND + +ENDFIL, TAD EKILLL /IS E COMMAND ALLOWED? + SZA CLA + ERROR /NO-NO INPUT SPECIFIED + CLA CMA /YES-RESET ARGUMENTS + DCA ARG0 + TAD JMPTE1 /SKIP LISTER IF EMPTY BUFFER + DCA I L1I + TAD FLCLSI /CLOSE FILE SETUP + DCA ELIM /CLOSES FILE ON READ FAILURE + JMP I COMBOP + +COMBOP, COMBO +FLCLSI, JMP I CLFLI +AONEI, AONE + +/HANDLER FOR ^U IN TEXT MODE +CTRLU, JMS CTRLU1 /GENERATE A ^U + JMP I AONEI /AND CONTINUE + +/PRINT ^U +CTRLU1, 0 + TAD C325 + JMS I UPAROI /PRINT ^U + TAD CCR /AND A CR/LF + JMS I OUT1 + JMP I CTRLU1 /--RETURN-- +C325, 325 + +/CHECK VALIDITY OF ARGUMENTS +/FOR D COMMAND +CHKARX, 0 + TAD ARG0 + CIA + IAC + TAD ARG1 + TAD LSTN + SPA CLA /DO LINES EXIST? + ERROR /NO + JMP I CHKARX /YES--RETURN-- + +/HANDLER FOR . +PERI, TAD THSN + SKP +/HANDLER FOR / +SLAS, TAD LSTN + DCA TEMP /SAVE LINE NUMBER + DCA CHAR + ISZ LSTCHK /GOT EITHE . OR / IN ARGS + JMP I .+1 /FETCH REST OF ARGUMENT + GLOM + +/END OF A NEW TEXT LINE +/PACK CARRIAGE RETURN INTO BUFFER +/SET LINK CELLS AROUND NEW LINE +/ENTER WITH: +/ CHAR CONTAINS CARRIAGE RETURN +/ THIS CONTAINS ADDRESS OF LINK +/ CELL OF PRECEDING TEXT LINE +/ XSAV CONTAINS ADDRESS OF LINK +/ CELL OF FOLLOWING TEXT LINE +/ BUFR CONTAINS ADDRESS OF LINK +/ CELL OF NEW TEXT LINE + +ENDLN, 0 + JMS I PACK1 /PACK CARRIAGE RETURN + CDF 10 + TAD ADD + SZA + DCA I AXIN + TAD BUFR /RESET LINK CELL + DCA I THIS /OF PREVIOUS LINE + TAD XSAV + DCA I BUFR /RESET LINK CELL OF NEW LINE + TAD BUFR + DCA THIS /RESET POINTER TO LINK CELL + ISZ AXIN + TAD AXIN + DCA BUFR /RESET FOR NEXT LINE + DCA XCTIN /CR CHARACTER SWITCH + CDF 0 + JMP I ENDLN /--RETURN-- + + +/HANDLER FOR ^C +/AND OTHER EXITS TO MONITOR + +MONIT, JMS FXSTWD /SET JOB STATUS TO SAVE CORE + TSF /MAKE SURE TTY FLAG IS SET + JMP .-1 + JMP I K7600 /****EXIT TO MONITOR**** + +/CLEAR BIT 11 OF JOB STATUS WORD + +FXSTWD, 0 + CIF 10 + JMS I JSWSET /IF NONZERO TEXT,SAVE BUFFER + JMP I FXSTWD /--RETURN-- +SPCP1A, SPACES+1 +BUFRD1, BUFRD+1 + +/RESET POINTERS AND SAVE BUFFERS + +RESET3, JMS FXSTWD +CIFTEN, CIF 10 /CLEAR BIT 11 OF JSW + JMS I P7700 /CALL USER SERVICE ROUTINES + 10 /*LOCK USR IN CORE* + TAD CIFTEN /RESET POINTERS + DCA I BUFRD1 + DCA EKILLL + TAD OLDTE1 + DCA TE1 + TAD CZ + DCA I TE1 + TAD K7600 + DCA ELIM + TAD K7600 + DCA I SPCP1A + TAD LOW + DCA OUTDEV + ISZ ECHOSW + TAD JMPCH + DCA I CCON+1 + ISZ FXSTWD /WASTE TIME FOR TTY FLAG + JMP .-3 + CIF CDF 10 + JMP I .+1 /GO CALL COMMAND DECODER + START1 +JSWSET, INSET + + +/----------------------------------------------------------------------- +/----------------------------------------------------------------------- + +/READ,WRITE,AND RELATED ROUTINES + + OURECS=4 /SIZE OF OUTPUT BUFFER + +*2000 + +/HANDLER FOR Q COMMAND + +Q, JMS I FXSWDI /CLEAR BIT 11 OF JSW + CDF 10 + TAD I K7600 + CDF 0 + SNA CLA /WAS AN OUTPUT DEVICE SPECIFIED? + ERROR /NO- +FLCLOS, TAD LSTN + SNA CLA /IS BUFFER EMPTY? + JMP FLCLS1 /YES-CLOSE FILE + TAD FLCLI /NO- + DCA TE1 /SET UP RETURN FROM P COMMAND + JMP I .+1 + PUNCH /WRITE CURRENT BUFFER + +/CLOSE FILE ON E OR Q COMMAND + +FLCLS1, JMS I PTCH1 /GO TO PATCH TO HANDLE FILE FULL + CLA CMA /TELL SYSTEM I/O MONITOR IS IN CORE + CDF 10 + DCA I P7700 + CDF 0 + JMP I K7600 /****EXIT TO MONITOR*** +/ +PTCH1, PATCH1 + + +/INPUT ROUTINE FROM DEVICE +/VIA INPUT DEVICE HANDLER +BUFRD, 0 + CIF 10 + JMS I ICHARI /FETCH A CHARACTER + JMP ERRD /ERROR IN READING FROM BUFFER + DCA CHAR /INTERFACE LOCATION + TAD CHAR + AND P177 + SNA /IS IT L/T? + JMP BUFRD+1 /YES-GET NEXT CHARACTER + TAD C200 /NO RESTORE CHARACTER + JMP I BUFRD /--RETURN-- + +ERRD, SPA CLA /FATAL OR EOF? + JMP I SERR0I /FATAL-OUTPUT ERROR MESSAGE + TAD ERSW /DISABLE FURTHER READS + DCA BUFRD+1 + TAD I COMM5 /IF THIS IS NEGATIVE, DO ONE + SMA CLA /MORE SEARCH (POSSIBLY) IN THE CASE + JMP BUFRD+1 /THAT NO FINAL FORM FEED EXISTS + CLA IAC /SET CURRENT LINE TO 1 AND SEARCH + DCA THSN /ONCE MORE + JMP I .+1 + SFIND2 + +ICHARI, ICHAR /CHARACTER ROUTINES +FLCLI, FLCLS1 + + +/OUTPUT ROUTINE TO DEVICE +/VIA OUTPUT DEVICE HANDLER + +BUFWT, 0 + CIF 10 + JMS I OCHARI /OUTPUT A CHARACTER + JMP ERWT /OUTPUT FAILED +BUFRTN, TAD BUFWTI /RESET OUTPUT DEVICE HANDLER POINTER + DCA OUTDEV + JMP I BUFWT /--RETURN-- + +ERWT, SPA CLA /FATAL, OR NO MORE ROOM? + JMP I SERR1I /FATAL-OUTPUT ERROR MESSAGE + JMS I FXSWDI /FIX JOB STATUS WORD-NO MORE ROOM + TAD I TE1 /STORE POINTERS + DCA PTE1 + TAD ELIM + DCA PELIM + TAD TE1 + DCA PPTE1 + CDF 10 + ISZ I PANICI /SET PANIC DUMP + TAD MORECS /PREPARE TO CLOSE PRESENT OUT FILE + TAD I OCNTI /THIS GIVES OPTIMUM CLOSE LENGTH + SPA + JMP PATCH2 + DCA I OCNTI + TAD I OREC /WRITE A ^Z + DCA CLSREC /DIRECTLY TO THE DEVICE + TAD I OHNDL /HANDLER ENTRY POINT + DCA TEMPO + CDF 0 + JMS I TEMPO /CALL OUTPUT DEVICE HANDLER + 4110 /THE BUFFER IS A PAGE OF THE EDITOR + 7000 /WITH A 232 IN THE FIRST LOCATION +CLSREC, 0 /RECORD NUMBER HERE + JMP I SERR1I /**WRITE FAILURE** 1* + CDF CIF 10 + JMS I OCLSI /CLOSE THE FILE IN PANIC MODE + JMP I SERR2I /**FILE CLOSE FAILED**2* + CIF 10 + JMS I C200 /CALL USER SERVICE ROUTINES + 11 /*DISMISS USR FROM CORE* +PATCH2, CLA + CDF 0 + TAD POINT /PRINT OUT"FULL" AND RETURN + DCA AXIN + TAD I AXIN /FETCH CHARACTER + SNA /DONE YET? + JMP I RST3I /YES-RESET & CALL COMMAND DECODER + JMS I OUTL1 /NO - OUTPUT CHARACTER + JMP .-4 /GET NEXT CHARACTER + +FXSWDI, FXSTWD +OCNTI, OUCCNT +PANICI, PANIC +OCHARI, OCHAR +MORECS, -OURECS+1 /THIS ALLOWS US TO 'MANUALLY' WRITE + /A FORM FEED AND A ^Z. + +POINT, FULLST-1 +OREC, OUREC +OHNDL, OUHNDL + +/RESET POINTERS STORED PREVIOUSLY +BUFRET, TAD PPTE1 + DCA TE1 + TAD PTE1 + DCA I TE1 + TAD PELIM + DCA ELIM + JMP BUFRTN + +PPTE1, 0 +PELIM, 0 +PTE1, 0 +OCLSI, OCLOSE /V3 FILE CLOSE ROUTINE + +/----------------------------------------------------------------------- + +/ERROR MESSAGE- FULL - +FULLST, 306 /F + 325 /U + 314 /L + 314 /L + 215 /CARRIAGE RETURN + 212 /LINE FEED + 0 /DELIMITER + +SRCBUF, ZBLOCK 24 /SEARCH BUFFER + + +/SPECIAL CHARACTER LIST FOR STRING SEARCH +SLST=. + 247 /" + 242 /' + 377 /RUBOUT + 203 /^C + 225 /^U +/----------------------------------------------------------------------- +NEXBUF, DUMB1&177+5600 /JMP I DUMB1 + +/DISPATCH LIST FOR STRING SEARCH + +OSLST, QUO1 /" + QUO2 /' + FORGET /RUBOUT + MONIT /^C + RLEAS /^U IN STRING SEARCH + + +/GENERATE ^ FOLLOWED BY THE CHARACTER +/WHICH IS IN AC ON ENTRY + +UPAROW, 0 + DCA TEMPO /SAVE CHARACTER + TSF + JMP .-1 + TAD C336 + JMS I OUTL1 /PRINT ^ + TAD TEMPO + JMS I OUTL1 /PRINT CHARACTER + JMP I UPAROW /--RETURN-- +C336, 336 + + +/HANDLER FOR ^U DURING STRING SEARCH +RLEAS, JMS I (CTRLU1 + JMP I (START /^U GETS US BACK TO # + +/HANDLER FOR ALTMODE + +AMODE, DCA STRIND /NEED SETUP + JMS I STRFIN /SEARCH FOR STRING + ERROR + TAD THSN /RESULT IS LINE NUMBER + JMP I .+1 /LINK TO COMMAND STRUCTURE + GTOP+1 + + +/HANDLER FOR J COMMAND + +JERK, DCA STRIND /SETUP FOR SEARCH +JERK1, JMS I STRFIN /SEARCH FOR STRING + JMP GMOR /GET NEXT BUFFER + TSF + JMP .-1 /JUST TO BE SURE + TAD CZ /RESTORE MONITOR EXIT + DCA I TE1 + JMP I TE1 /*POSSIBLE RETURN TO COMMAND MODE* + +/GET NEXT BUFFER FOR S SEARCH + +GMOR, TAD I CNTRI + SNA CLA /IS BUFFER EMPTY? + ERROR /NO + ISZ STRIND /YES-BYPASS SETUP + TAD NEXBUF + DCA I COMM5 /SET UP READ OF ONE BUFFER + IAC + DCA ARG0 + TAD EKILLL + SZA CLA /IS THERE AN OUTPUT DEVICE? + JMP I .+2 /NO + JMP I .+2 /YES + YANK /NO OUTPUT + COMBO /THERE IS OUTPUT + + +/HANDLER FOR F COMMAND + +BARROW, ISZ STRIND /CONTINUES LOOKING FOR EXISTING STRING + ISZ THSN /INCREMENT FOR NEXT LINE + JMP JERK1 +CNTRI, CNTR + +/HANDLER FOR " + +DBLQUO, ISZ THSN /USES STRING NOW IN BUFFER + ISZ STRIND /NO SETUP REQUIRED + JMP AMODE+1 + +/HANDLER FOR B COMMAND + +CORSPC, CLL + TAD BUFR + TAD K1320 + SZL CLA /IS ANY CORE LEFT? + JMP ZROCOR /NO + TAD BUFR /YES-SET UP NUMBER OF LOCATIONS + CIA /IN ARG2 + TAD BUFEND + TAD K360 +ZROCOR, DCA ARG2 + JMP I .+1 + PRNT +K360, 360 + +/HANDLER FOR K COMMAND + +KILL, TAD ARG0 /IN CASE HE TYPED N,MK + SZA CLA /INSTEAD OF N,ML. SAVE HIM!! + ERROR + TAD END /RESET BUFFER POINTERS + DCA BUFR /TO REFLECT EMPTY BUFFER + DCA LSTN + DCA THSN + CDF 10 /ZERO FIELD 1 POINTER + DCA I CFRS + CDF 0 + JMP I TE1 /*RETURN TO COMMAND MODE* + +/ROUTINE TO REASSIGN INPUT HANDLER +/AFTER A PANIC DUMP AND RESTART + +PIASGN, CDF CIF 10 + TAD I PINEOF + SZA CLA /IS THERE A HANDLER TO RESTORE? + JMP I PIRETN /NO - BACK TO FIELD 1 + TAD I IHPAGE /YES - + DCA PIHND /GET HANDLER PAGE + TAD I IDVNO + CDF 0 /I/O MONITOR IS IN CORE AT THIS POINT + JMS I C200 /CALL USER SERVICE ROUTINES + 1 /*FETCH HANDLER* +PIHND, 0 + JMP I SERR4I /**DEVICE HANDLER ERROR**+** + TAD PIHND + CDF CIF 10 + DCA I PIHNDL /PUT NEW HANDLER ADDRESS BACK + JMP I PIRETN /AND RETURN + +PIRETN, PANOPN /GO OPEN OUTPUT FILES +PIHNDL, INHNDL +IHPAGE, I1 /I1 CONTAINS "INDEVH+1" +IDVNO, INDEV +PINEOF, INEOF + +/HANDLER FOR # COMMAND + +VERSN, TAD ("V /V3 + JMS I OUTL1 /V3 PRINT V + TAD (VERSION&70%10+260 /V3 + JMS I OUTL1 /V3 PRINT VERSION # + TAD (VERSION&7+260 + JMS I OUTL1 /V3C PRINT 2ND NUMBER OF VERSION # + TAD (PATCH /V3 + JMS I OUTL1 /V3 PRINT PATCH LEVEL + JMP I TE1 /V3 RESTART + *2400 +/----------------------------------------------------------------------- +/----------------------------------------------------------------------- +/STRING SEARCH ROUTINE +/CALLED BY $(ALTMODE) AND J COMMAND HANDLERS + +SFIND1, 0 + ISZ ECHOSW + TAD STRIND /IS SETUP NECESSARY + SZA CLA + JMP SFIND2 /NO. + TAD MSCNT + DCA BUFCNT /SET COUNTER + TAD SBUF + DCA AXIN /BEGIN SEARCH BUFFER + TAD ATSIGN + JMS I OUTL1 /OUTPUT $ + ISZ TABIND +RLOOP, JMS I CHI1 /FETCH CHARACTER FROM TTY + JMS I SORTJ /IS IT SPECIAL FOR SEARCH STRING? + SLST-1 /YES-HANDLE IT + OSLST-SLST + ISZ BUFCNT /NO-SEARCH BUFFER FULL? + JMP STORE /NO-STORE THIS CHARACTER + CLA CMA + DCA BUFCNT /YES-DON'T ALLOW ANY MORE + JMP RLOOP-1 /BUT KEEP ECHOING HIS +STORE, TAD CHAR /STORE CHARACTER IN SEARCH BUFFER + DCA I AXIN + JMP RLOOP + +/HANDLER FOR " +QUO2, TAD THSN /START AT .+1 +/HANDLER FOR ' +QUO1, IAC /START AT .=1 + DCA THSN + TAD AXIN + CIA /MAKE UP COUNT OF NO. CHARS NOW IN + TAD SBUF /SEARCH BUFFER + DCA CNTR + DCA I AXIN /END STRING WITH A 0 +SFIND2, TAD CNTR + SNA CLA /IS BUFFER EMPTY? + JMP ER1 /YES-PREPARE TO EXIT + JMS NUCHAR /NO GET FIRST STRING CHARACTER + TAD THSN + JMS I FIN1 /GET APPROPRIATE POINTER + DCA THIS /THE TRICK IS TO GET THE NEXT + DCA CHFND + CDF 10 /POINTER SO THAT WE NEVER HAVE TO GO + TAD I THIS /BACK TO THE FIND ROUTINE + +COMBAK, DCA TMP2 + TAD I TMP2 + DCA NEXTPT + CDF 0 + TAD THSN + CIA + TAD LSTN + SPA CLA /LAST LINE? + JMP ER1 /YES-FINISHED WITH BUFFER + TAD TMP2 /NO + DCA AXOUT /SET TO UNPACK CHARACTERS + CMA + DCA XCT +UPK1, JMS I UTR1 /UNPACK A CHARACTER + DCA TMP2 + TAD TMP2 + TAD MCR + SZA CLA /END OF LINE? + JMP NOCR /NO + ISZ THSN /YES-INCREMENT LINE COUNTER + JMS NUCHAR /FORGET PREVIOUS MATCHES ON NEW LINE + DCA CHFND + CDF 10 + TAD NEXTPT /AND GET NEXT LINE + JMP COMBAK + +NOCR, TAD TMP2 /CHARACTER OTHER THAN CARRIAGE RETURN + TAD TMP1 /GET A CHARACTER FROM SEARCH BUFFER + SZA CLA /DO THEY MATCH + JMP UPK /NO + ISZ CHFND /YES-BUMP A RANDOM POINTER + CLA CMA + DCA FMATCH /SIGNIFY FIRST MATCH + JMS NUCHA /GET NEXT SEARCH CHARACTERR + JMP UPK1 /AND ANOTHER BUFFER CHARACTER + +UPK, ISZ FMATCH /WAS THIS FIRST MATCH? + JMP NOTSO /NO-NO PROBLEM + TAD XCT /YES-DON'T LET THE POINTERS BE + SPA CLA /BE CHANGED + JMP WREK + CMA + TAD AXOUT + DCA AXOUT + CMA +WREK, DCA XCT +NOTSO, JMS NUCHAR /GET FIRST CHARACTER OF SEARCH STRING + DCA CHFND + JMP UPK1 /TRY AGAIN + +STFIN, TAD CHFND /END OF STRING-DO COUNTS MATCH? + TAD CNTR + SNA CLA + JMP GOOD /YES-SEARCH SUCCESSFUL +ER1, TAD LSTN /IF BUFFER EMPTY, SET .=0 + SZA CLA + IAC + DCA THSN + SKP /CAUSE ERROR RETURN (?) +GOOD, ISZ SFIND1 /INCREMENT RETURN + JMP I SFIND1 /--RETURN-- + +/GET NEXT SEARCH CHARACTER +NUCHA, 0 + TAD .-1 /SET TO RETURN FROM NUCHAR + DCA NUCHAR + JMP NEXX + +/GET FIRST CHARACTER OF SEARCH STRING +NUCHAR, 0 + TAD SBUF + DCA AXIN +NEXX, TAD I AXIN + SNA /END OF STRING? + JMP STFIN /YES + CIA /NO - NEGATE SEARCH CHARACTER + DCA TMP1 /AND STORE IT + JMP I NUCHAR /--RETURN-- + +ENDA=SRCBUF-1 +ATSIGN, 244 +TMP1, 0 +TMP2, 0 +CNTR, 0 +FMATCH, 0 +BUFCNT, 0 +NEXTPT, 0 +CHFND, 1 /MUST BE NONZERO INITIALLY +SBUF, ENDA +MSCNT, -24 + +/HANDLER FOR RUBOUT IN SEARCH STRING + +FORGET, TAD CCR + JMS I OUT1 /OUTPUT CARRIAGE RETURN + JMP SFIND1+1 + + + *2600 +/----------------------------------------------------------------------- +/----------------------------------------------------------------------- + THISX=COUNTP + THISX2=DTEM + RELCNT=LPT + + +/GARBAGE COLLECTION ROUTINE +/ENTER WITH NUMBER OF LINE TO BE DELETED +/IN AC + +GARBAG, 0 + DCA LINPTR /SAVE OBJECT LINE ADDRESS + TAD LINPTR + DCA AXCOMB /SCAN LINE LOOKING FOR 7715 OR 1500 (CR) + IAC /CNT HOLDS + DCA CNT /TOTAL # LOCS IN THIS LINE + CDF 10 +COLECT, ISZ CNT + TAD I AXCOMB /GET A WORD + TAD K63 + SNA /IS IT 7715? + JMP FINONE /YES-END OF LINE + TAD K6215 + SZA CLA /NO-IS IT 1500? + JMP COLECT /NO-TRY NEXT WORD +FINONE, TAD CNT /YES MINUS CNT GIVES AMOUNT + CIA /TO REDUCE CERTAIN POINTERS + DCA RELCNT + CDF 0 + IAC /GO THROUGH LIST OF POINTERS + JMS I FIN1 /& OFFSET POINTERS WHICH WILL BE MOVED + CDF 10 /MOVED ALONG WITH TEXT +GBG2, DCA THISX /SAVE POINTER + TAD I THISX /GET ADDRESS OF THIS LINE + SNA /DONE WITH STRING? + JMP GBGEND /YES + JMS CGEPTR /DECREASE POINTER IF NECESSARY + DCA I THISX /STORE NEW POINTER + TAD THISX2 + JMP GBG2 /DO NEXT LINE + +GBGEND, CDF 0 /ALL POINTERS ARE REDUCED. NOW, + CLL CML + TAD BUFR /PHYSICALLY MOVE CORE TO + CIA /CORRESPOND WITH POINTERS + TAD AXCOMB /AXCOMB POINTS TO FIRST LOC. TO GO + SMA SNL /POINTERS O.K.? + ERROR /NO + DCA XCT /YES-SET UP OTHER POINTERS + CDF 10 + CMA + TAD LINPTR + DCA AXOUT + TAD I AXCOMB /MOVE TEXT + DCA I AXOUT + ISZ XCT /ALL TEXT MOVED? + JMP .-3 /NO-CONTINUE MOVING + CDF 0 /YES + TAD AXOUT + DCA BUFR /RESET TOP OF BUFFER + TAD BUFR /REDUCE AXIN FOR CHARACTER SEARCH + DCA AXIN + TAD THIS /NOW DECREASE THIS IF IT IS NECESSARY + JMS CGEPTR + DCA THIS + JMP I GARBAG /--RETURN-- + +LINPTR, 0 +K63, 63 + +CGEPTR, 0 /THIS ROUTINE DETERMINES IF THE + DCA THISX2 /OF THE AC MUST BE DECREASED BY RELCNT. + CLL /IF THISX2 IS GREATER THAN LINPTR + TAD THISX2 /DECREASE THISX2 BY RELCNT. + CIA + TAD LINPTR /THIS EFFECTIVELY DECREASE ALL POINTERS + SNL CLA /WHICH HAVE TO BE RELOCATED + TAD RELCNT + TAD THISX2 + JMP I CGEPTR + +/HANDLER FOR V COMMAND + +VIEW, TAD (LPT /SET UP LISTER TO EXIT TO LPT + DCA OUTDEV + ISZ TABIND + JMS I LIS /LIST BUFFER + TAD C214 /AND OUTPUT A FORM FEED + JMS I OUTDEV + JMP I TE1 /*RETURN TO COMMAND MODE* + + +/LINE PRINTER OUTPUT ROUTINE +/ENTER WITH CHARACTER IN AC +/EXIT WITH AC CLEAR + +LPT, 0 + 6666 /LLS + 6661 /LSF + JMP .-1 + CLA + JMP I LPT /--RETURN-- + /HANDLER FOR , + +FIRS, TAD ARG2 + JMP I ONUM + +K6215, 6215 + + +/THE FOLLOWING GIVES ERROR MESSAGES FOR I/O RELATED ERRORS +/EACH IS A FATAL ERROR AND WILL ALWAYS EXIT THROUGH +/7600, SAVING THE TEXT BUFFER. +/N IS THE ERROR IDENTIFICATION CODE +/N=0=> FAILED IN READING DEVICE +/N=1=> FATAL WRITE ERROR +/N=2=> FILE CLOSE ERROR +/N=3=> FILE OPEN ERROR +/N=4=> DEVICE HANDLER ERROR + +SERR4, IAC +SERR3, IAC +SERR2, IAC +SERR1, IAC +SERR0, DCA TEMPO + TLS + TSF + JMP .-1 + TAD C215 + JMS I OUTL1 /OUTPUT CARRIAGE RETURN + TAD CLF + JMS I OUTL1 /OUTPUT LINE FEED + TAD C277 + JMS I OUTL1 /OUTPUT? + TAD TEMPO + TAD P260 + JMS I OUTL1 /SEND ERROR CODE + TAD C303 + JMS I UPAROI /SEND ^C + JMP I MONITO /****EXIT TO MONITOR**** + +P260, 260 +C303, 303 + +DELE, JMS I DELT /DELETE THE LINES + TSF + JMP .-1 + JMP I TE1 + +CTRLN, TAD C316 + JMS I UPAROI /ECHO ^N + JMP I .+1 + OUTX+1 +C316, 316 +/ +PATCH1, 0 + CIF 10 + JMS I OCLSE /CLOSE FILE + SKP + JMP I PATCH1 /FILE CLOSED OK -RETURN + SPA CLA + JMP SERR2 /**FILE CLOSE FAILED**2* + JMP I NOROOM /RAN OUT OF SPACE WHILE CLOSING +/ +NOROOM, ERWT+2 +OCLSE, OCLOSE + /*********************************************************************** + +/THE CODE AT 3000 IS ONCE ONLY CODE. IT TAKES THE FIELD 1 +/PART OF THE CODE WHICH IS INITIALLY IN FIELD 0 AND MOVES +/IT UP TO THE PROPER LOCATIONS IN FIELD 1. + *3000 +/----------------------------------------------------------------------- +/----------------------------------------------------------------------- + +INIT, TAD (3177 /COLD LOAD STARTS AT 3200 + DCA AXIN + TAD (6577 /CODE SHOULD BE IN 6600 OF FIELD 1 + DCA AXOUT + TAD (7000 /MOVE 1000 LOCATIONS UP + DCA COUNTA +LOOP, CDF 0 + TAD I AXIN /MOVE CODE + CDF 10 + DCA I AXOUT + ISZ COUNTA /DONE YET? + JMP LOOP /NO + DCA AXIN /YES-RESET COUNTERS + DCA AXOUT + CDF 0 /PUT A NOP INTO LOC. 203 + TAD (NOP + DCA I (START + TAD RST3I /CHANGE START ADDRESS TO SAVE BUFFER + DCA 177 + CIF CDF 10 + JMP I K6600 /STARTING ADDRESS IS 16600 +K6600, 6600 /FIELD 1 STARTING ADDRESS + +COUNTA, 0 + +/ERR5, CDF 0 /SET NOT RESTARTABLE BIT IF CHAIN +/ TAD I (1000 +/ TAD I (7746 +/ DCA I (7746 +/ JMP I (SERR5 /AND GIVE ?5^C + /MISCELLANEOUS PATCHES (NOT ONCE-ONLY!) + +/ESCAPE PATCH 25-MAY-77 DS + +ESCPA, 0 + ISZ ESCPA /SKIP OVER PATCH ADDR + TAD ECHOSW /IS ECHO SUPPRESSED? + SNA CLA + JMP I ESCPA /YES, RETURN + TAD CHAR /NO, TEST FOR ESC + TAD (-233) + SNA CLA /V12 + JMP .+3 /V12 + ISZ ESCPA /PRINT UNLESS IT IS ESC + JMP I ESCPA + TAD I CHI1 /V12 - TAD CHIN + TAD (-CMCHK-1 + SZA CLA /COMMAND MODE? + ISZ ESCPA /NO, OUTPUT IT + JMP I ESCPA /YES, DON'T OUTPUT IT NOW + /V12 + +/SCOPE PATCH 25-MAY-77 DS + +RUBPA, 0 + ISZ RUBPA /SKIP OVER PATCH ADDR + CDF 10 /LOOK AT "SCOPE" BIT IN + TAD I (7726) /RESIDENT MONITOR + CDF 00 + AND (200) + SZA CLA + JMP RP1 + TAD SPLAT /NO SCOPE, PRINT BACKSLASH +RP2, JMS I OUT1 /PRINT + JMP I RUBPA /DONE, DELETE THE CHAR +RP1, TAD (210) /SCOPE, PRINT BACK SPACE + JMS I OUT1 + TAD (240) /THEN A SPACE + JMS I OUT1 + TAD (210) /THEN ANOTHER BACK SPACE + JMP RP2 +SPLAT, 334 /ACKNOWLEDGE RUBOUT + + /ROUTINE TO HANDLE ESCAPE OUTPUT +/V12 - 27-JUN-77 ES + +ESCOUT, TAD OUTDEV + TAD (-OUTL + SZA + TAD (OUTL-LPT + SZA CLA /OUTPUT TO TERMINAL OR LINEPRINTER? + TAD (233-"$ /NO, OUTPUT ESC + TAD ("$ /YES, OUTPUT "$" + JMP OUTX /DO IT + +/MORE STUFF MAY BE INSERTED HERE + +/LITERALS + PAGE + *3200 +/******************************************************************** +/CODE MOVED TO 16600-16762 + +NOPUNC +*6600 +ENPUNC + + +/OURECS=4 +/SETUP FOR USING GENERAL INPUT, OUTPUT ROUTINES + INBUF=4200 /INPUT BUFFER AT 04200 + INCTL=0600 /INPUT CONTROL - 6 PAGES + INRECS=3 /3 RECORDS INTO FIELD 0 + INDEVH=3200 /INPUT HANDLER AT 03200 + + OUBUF=5600 /OUTPUT BUFFER AT 05600 + OUCTL=5000 /OUTPUT CONTROL - 8 PAGES + OUDEVH=3600 /OUTPUT HANDLER AT 03600 + + MPARAM=7643 /OPTION SWITCHES + + + JMS I L7700 /CALL USER SERVICE ROUTINES + 10 /*LOCK USR IN CORE* + CDF 0 /V3 + ISZ I PTEMP /V3 WERE WE CHAINED TO? + JMP CHN /V3 YES + CDF 10 /V3 NO +START1, JMS I L200 /CALL USER SERVICE ROUTINES + 5 /*COMMAND DECODER* + 0 +CHN, CDF 10 + TAD K7620 /RESET OUTDMP + DCA I THOLE + TAD I P7600A /OUTPUT LIST + AND C17 +SZCL, SZA CLA /IS THERE AN OUTPUT DEVICE? + JMP NXTOP /YES + CDF 0 /NO-DISALLOW E COMMAND + ISZ I EKILSW + CDF 10 +NXTOP, TAD I PARAM + RAL /B BIT TO BIT 0 + DCA DVHAND /SAVE PARAM. SWITCH + TAD DVHAND + SMA CLA /WAS /B OPTION SPECIFIED? + JMP NEWOP /NO +P7600A, 7600 /YES- + TAD SZCL /SET UP TO CONVERT SPACES TO TABS + CDF 0 + DCA I SPCP1 + CDF 10 + NEWOP, TAD DVHAND + RTL + SMA CLA /WAS /D OPTION SPECIFIED? + JMP FILOP /NO + TAD I OHANDL /YES-HANDLER BROUGHT IN FOR D OPTION + DCA DVHAND + TAD I P7600A /DEVICE NUMBER + JMS I L200 /CALL USER SERVICE ROUTINES + 1 /*ASSIGN* +DVHAND, 0 + JMP ISERR4 /**DEVICE HANDLER ERROR**4** + TAD I P7600A /GET DEVICE NUMBER + JMS I L200 /CALL USER SERVICE ROUTINES + 4 /*CLOSE* + 7601 + 0 +JLSTN, LSTN /PAGE ZERO. 'AND' SOME ADDRESS +FILOP, TAD PANIC /PANIC CASE? + SNA + JMS I IOPENI /SET BUFFER POINTERS OR RESTORE HANDLER + SZA CLA /YES- + JMP GINDVH /RESTORE INPUT DEVICE HANDLER IN PANIC MODE +PANOPN, JMS I OOPENI /OPEN OUTPUT FILES + SMA CLA /ERROR RETURN + SKP /NORMAL RETURN + JMP ISERR3 /**FILE OPEN ERROR**3** + TAD PANIC /PANIC CASE? + SNA CLA + JMP NOPAN /NO + TAD I P7600A /YES IF NO OUTPUT,DON'T ALLOW HIM + SNA CLA /TO DESTROY HIS TEXT + JMP START1 + TAD K5000 /SET TO WRITE BUFFER + JMS I ODMP /DUMP IT + JMP ISERR1 /**FATAL WRITE ERROR**1** + CLA IAC + NOPAN, DCA DVHAND + DCA PANIC /CLEAR PANIC SWITCH + JMS I L200 /CALL USER SERVICE ROUTINES + 11 /*DISMISS USR FROM CORE* + JMS I OUSTPI /RE-INITIALIZE OUTPUT POINTERS + CLA IAC + JMS I SETJSI + CDF 0 /IF LSTN#0, CLEAR FRST + TAD I JLSTN /BUT IN FIELD 1 + SNA CLA + DCA FRST + CIF CDF 0 + TAD DVHAND + SNA CLA /PANIC MODE? + JMP I STRTUP /NO-START THE EDITOR + TLS + JMP I .+1 /YES - RESUME OUTPUT + BUFRET + +GINDVH, CDF CIF 0 + JMP I .+1 + PIASGN + +ISERR3, JMS I L200 /CALL USER SERVICE ROUTINES + 11 /*DISMISS USR FROM CORE* + CIF CDF 0 + JMP I ASERR3 /**FILE OPEN ERROR**3** + +ISERR4, JMS I L200 /CALL USER SERVICE ROUTINES + 11 /*DISMISS USR FROM CORE* + CIF CDF 0 + JMP I ASERR4 /**DEVICE HANDLER ERROR**4** + +ISERR1, JMS I L200 /CALL USER SERVICE ROUTINES + 11 /*DISMISS USR FROM CORE* + + CIF CDF 0 + JMP I ASERR1 /**FATAL WRITE ERROR**1** + SETJSI, SETJSB +L200, 200 +STRTUP, START +PANIC, 0 +SPCP1, SPACES+1 +IOPENI, IOPEN +OOPENI, OOPEN +EKILSW, EKILLL +ODMP, OUTDMP +OHANDL, O1 +C17, 17 +PARAM, MPARAM +L7700, 7700 +ASERR1, SERR1 +ASERR3, SERR3 +ASERR4, SERR4 +K5000, 5000 /OUTPUT BUFF CONTROL WORD +OUSTPI, OUSETP +THOLE, TSTHOL +K7620, 7620 +PTEMP, TEMP + +/*********************************************************************** + *3400 +/*********************************************************************** +/CODE MOVED TO 17000-17173 + +NOPUNC +*7000 +ENPUNC + + 232 /THIS PAGE IS ^Z BUFFER +/SET UP ROUTINE FOR OUTPUT +/INITIALIZES CHARACTERS POINTERS +OUSETP, 0 + TAD I PANICJ /IS IT PANIC DUMP TIME? + SZA CLA /IF YES, DONT RESET POINTERS + JMP I OUSETP /--RETURN-- + TAD C1 /GET SIZE OF BUFFER IN DOUBLEWORDS + CIA /NEGATE IT + DCA OUDWCT + TAD C2 + DCA OUPTR /INITIALIZE WORD POINTER + TAD OUJMPE + DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH + JMP I OUSETP /--RETURN-- + +/OUTPUT A CHARACTER +/ENTER WITH CHARACTER IN 8-BIT ASCII +/IN AC +OCHAR, 0 + AND C377 /MASK OUT EXTRA BITS + DCA OUTEMP + KRS + TAD M203 + SNA CLA + KSF + JMP .+3 + CIF CDF 0 + JMP I C7600 + RDF /NO- + TAD CDIF0 + DCA OUCRET + TAD OUTINH /IS OUTPUT INHIBITED? + SZA CLA + JMP PSTOP /NO + CDF OUFLD /YES-SET DATA FIELD TO BUFFER'S FIELD + ISZ OUJMP /BUMP THE CHARACTER SWITCH +OUJMP, HLT /3 WAY CHARACTER SWITCH + JMP OCHAR1 + JMP OCHAR2 +OCHAR3, TAD OUTEMP + CLL RTL + RTL + AND K7400 + TAD I OUPOLD + DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH + /ORDER 4 BITS OF 3RD CHAR + TAD OUTEMP + CLL RTR + RTR + RAR + AND K7400 + TAD I OUPTR + DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS + TAD OUJMPE + DCA OUJMP /RESET SWITCH + ISZ OUPTR + ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS + JMP OUCOMN + TAD OUCT /LOAD CONTROL WORD FOR A FULL WRITE + JMS I DMPO /DUMP THE BUFFER + JMP OUCRET /OUTPUT ERROR - GIVE ERROR RETURN + JMS OUSETP /RE-INITIALIZE THE POINTERS + JMP OUCOMN +OCHAR2, TAD OUPTR + DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO + ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD +OCHAR1, TAD OUTEMP + DCA I OUPTR +OUCOMN, ISZ OCHAR +OUCRET, HLT /RESTORE CALLING FIELDS + JMP I OCHAR /--RETURN-- + +OUTEMP, 0 +OUPOLD, 0 +OUPTR, 0 +OUJMPE, JMP OUJMP +OUDWCT, 0 +OUTINH, 0 + /FETCH OUTPUT DEVICE CONTROL WORD + +OTYPE, 0 + RDF + TAD CDIF0 + DCA OTRTN + CDF 10 + TAD I C7600 /FETCH OUTPUT DEVICE NUMBER + AND P17 + TAD DCBM1 /+DCB-1 + DCA OUTEMP /FETCH DEVICE CONTROL WORD + TAD I OUTEMP +OTRTN, HLT /RESTORE CALLING FIELDS + JMP I OTYPE /--RETURN-- +PSTOP, CIF 0 /PRINTS ? WHEN NO OUTPUT DEV + ERROR + +INSET, 0 + DCA OTYPE /SAVE AC + RDF + TAD CDIF0 + DCA INSTRT /SET RETURN FIELDS + CDF 0 + TAD I PLASTN + CDF 10 + SNA CLA /IS THERE ANYTHING IN BUFFER? + IAC /NO-NO NEED TO SAVE USR AREA + JMS SETJSB /YES- + TAD OTYPE /RESTORE AC +INSTRT, CIF CDF 0 /RESTORE CALLING FIELDS + JMP I INSET /--RETURN-- + /SET JOB STATUS BIT 11 TO SAVE OR NOT SAVE +/ENTER WITH AC=0 OR 1, DEPENDING ON BUFFER + +SETJSB, 0 + DCA JSBTM /SAVE AC + CDF 0 + CLA CLL CMA RAL + AND I PJSBTS /CLEAR BIT 11 OF JSW + TAD JSBTM /SET ACCORDING TO AC + DCA I PJSBTS + CDF 10 + JMP I SETJSB /--RETURN-- + +JSBTM, 0 +PJSBTS, 7746 +PLASTN, LSTN + +DCB=7760 +C1, OUCTL&3700 +C2, OUBUF +C377, 377 +M203, -203 +CDIF0, CDF CIF 0 +K7400, 7400 +OUCT, OUCTL +C7600, 7600 +P17, 17 +DCBM1, DCB-1 +DMPO, OUTDMP +PANICJ, PANIC +/*********************************************************************** + *3600 +/*********************************************************************** +/CODE MOVED TO 17200-17376 +NOPUNC +*7200 +ENPUNC +/OPEN OUTPUT FILE + +O17, 17 +OOPEN, 0 +OU7600, 7600 + TAD OU7601 + DCA OUBLK + TAD O1 + DCA OUHNDL /SET OUTPUT HANDLER ENTRY + CDF 10 + TAD I OU7600 /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY + SNA /IS THERE AN OUTPUT DEVICE? + JMP ONOFIL /NO - INHIBIT OUTPUT + JMS I O200 /CALL USER SERVICE ROUTINES + 1 /*ASSIGN,FETCH HANDLER* +OUHNDL, 2600 /OUTPUT DEVICE HANDLER ENTRY + JMP I SERR4A /**DEVICE HANDLER ERROR**4** +OUENTR, TAD I OU7600 + JMS I O200 /CALL USER SERVICE ROUTINES + 3 /*ENTER OUTPUT FILE* +OUBLK, 7601 /REPLACED WITH STARTING BLOCK +OUELEN, 0 /REPLACED WITH LENGTH OF HOLE + JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH + DCA OUCCNT + DCA I O2 /ZERO OUTPUT INHIBIT FLAG + TAD OUBLK + DCA OUREC /INITIALIZE OUTPUT RECORD NUMBER + JMS I O3 + ISZ OOPEN +OORETN, JMP I OOPEN +OEFAIL, TAD I OU7600 + AND O7760 /GET REQUESTED LENGTH + SNA CLA /WAS IT AN INDEFINITE REQUEST + JMP ONTERR /YES - CANNOT ENTER THE FILE + TAD I OU7600 +O200, AND O17 /MAKE THE REQUESTED LENGTH ZERO + DCA I OU7600 + JMP OUENTR /TRY, TRY AGAIN +ONTERR, CLA CLL CML RAR /AC=2 + JMP OORETN /TAKE THE ERROR RETURN WITH AC<0 +ONOFIL, ISZ I O2 + JMP OORETN /TAKE THE ERROR RETURN WITH AC=0 + OUTDMP, 0 + DCA OUCTLW /STORE THE CONTROL WORD + JMS OUNREC /COMPUTE NO. OF RECORDS + TAD OUCCNT + DCA OUCCNT + TAD OUCCNT + CLL CML + TAD OUELEN +TSTHOL, SNL CLA /IF ZERO OR POSITIVE,GIVE ERROR + JMP OUERR + CDF CIF 0 + CDF 10 + JMS I OUHNDL /CALL OUTPUT DEVICE HANDLER +OUCTLW, 0 /CONTROL WORD + OUBUF /BUFFER ADDRESS +OUREC, 0 /RECORD NUMBER + JMP OUERR /THERE ARE NO SOFT OUTPUT HANDLER ERRORS + JMS OUNREC + TAD OUREC + DCA OUREC /UPDATE OUTPUT RECORD NUMBER + ISZ OUTDMP /BUMP OUTDMP TO NORMAL RETURN +OUERR, JMP I OUTDMP /--RETURN-- + +/CLOSE OUTPUT FILE +OCLOSE, 0 + TAD K7660 /SET UP SNL SZA CLA FOR CLOSE + DCA TSTHOL + CDF 10 + TAD I PANICC + SZA CLA + JMP NODUMP + TAD I O2 + SZA CLA /IS OUTPUT INHIBITED? + JMP OCISZ /YES - CLOSE IS A NOP + TAD O232 /OUTPUT A ^Z + JMS I O4 + JMP OCRET /AND SOME 0'S + JMS I O4 + JMP OCRET +FILLLP, JMS I O4 + JMP OCRET + JMS I O5 /GET TYPE OF OUTPUT DEVICE + SPA CLA + TAD O100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD + TAD O77 /BOUNDARY-OTHERWISE HALF RECORD + AND I O6 + SZA CLA /UP TO THE BOUNDARY YET? + JMP FILLLP /NO - FILL WITH ZEROS + TAD I O6 /GET DOUBLEWORD COUNT LEFT + TAD O7 + SNA /A FULL WRITE LEFT? + JMP NODUMP /YES - DON'T DO IT - ^Z IS ALREADY OUT + TAD O8 /PUT IN FIELD BITS AND WRITE BIT + JMS OUTDMP + JMP OCRET /ERROR OCCURRED WHILE DUMPING THE BUFFER +NODUMP, JMS I O7700 /CALL USER SERVICE ROUTINES + 10 /*LOCK USR IN CORE* + TAD I OU7600 /DEVICE NUMBER + JMS I O200 /CALL USER SERVICE ROUTINES + 4 /*CLOSE OUTPUT FILE* +OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME +OUCCNT, 0 + SKP /ERROR WHILE CLOSING THE FILE +OCISZ, ISZ OCLOSE +OCRET, CIF CDF 0 /RESTORE CALLING FIELDS + JMP I OCLOSE /--RETURN-- +PANICC, PANIC + /CONVERT OUTPUT CONTROL WORD +/TO NUMBER OF RECORDS +OUNREC, 0 + TAD OUCTLW + CLL RTL + RTL + RTL + AND O17 + JMP I OUNREC /--RETURN-- + +K7660, SNL SZA CLA +O1, OUDEVH+1 +O7700, 7700 +O2, OUTINH +O3, OUSETP +O7760, 7760 +O232, 232 +O4, OCHAR +O5, OTYPE +O100, 100 +O77, 77 +O6, OUDWCT +O7, OUCTL&3700 +O8, 4000+OUFLD +SERR4A, ISERR4 + +/*********************************************************************** + INFLD=INCTL&70 /FIELD OF INPUT BUFFER + OUFLD=OUCTL&70 /FIELD OF OUTPUT BUFFER +/*********************************************************************** +/CODE MOVED TO 17400 -17574 + +*4000 +NOPUNC +*7400 +ENPUNC + +/PREPARE TO OPEN NEW INPUT FILE + +IN7400, 7400 +IOPEN, 0 + CLA CMA + DCA INCHCT /SET INCHCT TO FORCE A READ + ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE + TAD I7617 + DCA INFPTR /RESET FILE POINTER + JMP I IOPEN /--RETURN-- +INPTR, 0 +INDEV, 0 + +/INPUT A CHARACTER + +ICHAR, 0 +IN7600, 7600 +INCHAR, CDF INFLD + ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH + ISZ INCHCT +INJMPP, JMP INJMP + TAD INEOF + SNA CLA /DID LAST READ YIELD END-OF-FILE? + JMP INGBUF /NO-DO ANOTHER +INNEWF, CDF 10 + TAD I1 + DCA INHNDL /INITIALIZE HANDLER ADDRESS + TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY + DCA INDEV /SAVE IT FOR PANIC + TAD INDEV + SNA /ANY MORE? + JMP EOFERR /NO - OUT OF INPUT + JMS I PINSET /YES-SAVE BUFFER IF NECESSARY + JMS I I7700 /CALL USER SERVICE ROUTINE + 1 /*ASSIGN, FETCH HANDLER* +INHNDL, 0 + JMP I SERR4B /**DEVICE HANDLER ERROR**+** + TAD I INFPTR + AND I7760 /GET LENGTH PART OF WORD + SZA /LENGTH OF 0 MEANS LENGTH >=256 + TAD I17 /ADD HIGH ORDER BITS + CLL CML RTR + RTR + DCA INCTR /STORE LENGTH OF FILE + ISZ INFPTR + TAD I INFPTR + DCA INREC /STORE STARTING RECORD NUMBER OF FILE + ISZ INFPTR + DCA INEOF /ZERO END-OF-FILE FLAG +INGBUF, TAD INCTR + CLL + TAD I2 + SNL + DCA INCTR /RESTORE INCTR IF IT HASN'T OVERFLOWED + SZL /IS THIS THE LAST READ? + ISZ INEOF /YES - SET END-OF-FILE FLAG + CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THE READ + RTR /FROM THE AMOUNT OF THE OVERFLOW + RTR /(IF ANY) AND THE STANDARD CONTROL WORD + TAD I3 + DCA INCTLW + CDF CIF 0 + CDF 10 + JMS I INHNDL /CALL INPUT DEVICE HANDLER +INCTLW, 0 /CONTROL WORD +INBUFP, INBUF /INPUT BUFFER +INREC, 0 /NUMBER OF RECORDS + JMP INERRX /SOME KIND OF HANDLER ERROR +INBREC, TAD INREC + TAD I2 + DCA INREC /UPDATE THE RECORD NUMBER + TAD INCTLW + AND IN7600 + CLL RAL + TAD INCTLW + AND IN7600 + CMA + DCA INCHCT /COMPUTE THE NEW CHARACTER COUNT + TAD INJMPP + DCA INJMP /RESET THE CHARACTER SWITCH + TAD INBUFP + DCA INPTR /AND THE WORD POINTER + JMP INCHAR /GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED +INERRX, ISZ INEOF /EITHER AN END-OF-FILE OR A ERROR + SMA CLA /WHICH TYPE WAS IT? + JMP INBREC /END OF FILE - RESUME PROCESSING +INERR, CLA CLL CML RAR /BAD - GIVE ERROR RETURN WITH NEGATIVE AC +EOFERR, JMP INRTRN + INJMP, HLT /3 WAY CHARACTER SWITCH + JMP ICHAR1 + JMP ICHAR2 +ICHAR3, TAD INJMPP + DCA INJMP + TAD I INPTR + AND IN7400 + CLL RTR + RTR /COMBINE THE HIGH-ORDER FOUR BITS OF + TAD INCTLW + RTR /THE TWO WORD TO FORM THE THIRD CHARACTER + RTR + ISZ INPTR + JMP INCOMN +ICHAR2, TAD I INPTR + AND IN7400 + DCA INCTLW /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR + ISZ INPTR /BUMP THE WORD POINTER +ICHAR1, TAD I INPTR +INCOMN, AND I377 + TAD IM232 + SNA /IS THE CHARACTER A ^Z? + JMP INNEWF /YES - GET A NEW FILE + TAD I232 /RESTORE THE CHARACTER + ISZ ICHAR /BUMP RETURN TO NORMAL RETURN +INRTRN, CDF CIF 0 /RESTORE CALLING FIELDS + JMP I ICHAR /--RETURN-- + +INCHCT, -1 +INFPTR, 7617 +INEOF, 1 + + INCTR=IOPEN +PINSET, INSET +I7617, 7617 +I1, INDEVH+1 +I7760, 7760 +I17, 17 +I2, INRECS +I3, INCTL+1 +I377, 377 +IM232, -232 +I232, 232 +I7700, 7700 +SERR4B, ISERR4 + +$ +/*********************************************************************** +