*20 PMODE EJECT / / DIAL PHERIPERAL INTERCHANGE PROGRAM FOR THE PDP-12 COMPUTER. / COPYRIGHT 1969; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.,01754 / WRITTEN BY JACK BURNESS / RELEASED NOVEMBER, 1969. / / PIP WILL RUN ON A PDP-12 B OR HIGHER. / / / / / / / / / / / / / / / / / / / / PPPPPPPPP IIIIIIIIIIII PPPPPPPPP / P PP II P PP / P PPP II P PPP / P PP II P PP / PPPPPPPPP II PPPPPPPPP / P II P / P II P / P II P / P II P / P IIIIIIIIIIII P / / / / / / / / / / / / / / / / EJECT / / / / LOAD THE SYMBOLS FROM PIP4. / / / LODSYM / / EJECT *0 /MAJOR PAGE 0 LOCATIONS. / / / / 0 /RESERVED FOR JMP S IN L MODE. LOC1, 0 /USED BY DISPLAY ROUTINE. TAPE=JMS I . TTAPE HPOP=JMS I . HHPOP HPUSH=JMS I . HHPUSH LEADER=JMS I . LLEDER FILEC=JMP I . FFILEC PUTL=JMS I . TTYPUT *10 AUTO1, 0 /AUTO REGISTER 1 AUTO2, 0 AUTO3, 0 AUTO4, 0 AUTO5, 0 AUTO6, 0 AUTO7, 0 AUTO8, 0 / / / / / CARD=1 /SET THE CARD=1 TO CARD READER AND LINE PRINTER. / ELSE SET CARD TO 0. / / TERMC=00 /SET TO LOOK OR A 00 AS THE EOF CHAR. / REMAKE=0 /DO NOT LOAD IN THE SOURCE FILE CONVERTER. / REMAKE WAS ORIGINALLY 1 BUT THE CONVERT ROUTINES NO LONGER ARE NEEDED. / ECHO=1 /SET THIS SWITCH TO 0 TUPPRESS ECHOING. / / / STAR20=1 /SET TO 1 IF YOU WANT TO HAVE A "*20" AT THE BEGINNING OF EVERY FILE. / ELSE SET STAR20 TO 0000/ / / / SYSWT=467 /LAST BLOCK OF DIAA WORK AREA. TINDEX=346 /TAPE INDEX BLOCK TILEN=2 /NUMBER OF BLOCKS IN INDEX TLOWER=0 /FIRST BLOCK TO USE TUPPER=777 /LAST BLOCK TO USE TSYSLOWER=270 /START OF SYSTEM TSYSUPPER=467 /LAST BLOCK OF SYSTEM. SYSBBLOCK=370 /START OF BINARY WORK AREA. SYSBIN=0001 /BINARY SCRATCH UNIT SYSSBLOCK=370 /START OF ASCII WORK AREA. SYSHDR=447 /BINARY HEADER BLOCK FOR "SB"2 COMMAND" / / / SOME BASIC DEFINITIONS ZERO=CLA PONE=ZERO+1 /(AWWWW) PTWO=PONE+4+100 /CLA CLL IAC RAL PTHREE=PTWO+20 /CML PFOUR=PTWO+2 /(AWWW) PSIX=PTHREE+2 /RTL MONE=CLA CMA MTWO=CLA CLL CMA RAL MTHREE=CLA CLL CMA RTL LEFT=000 /POINTER TO STARTING LEFT OF SCREEN TOP=340 /POINTER TO TOP OF SCREEN BOTTOM=-400 /SCREEN BOTTOM / / ASMIFZ CARD-1 /IF CARD READER IS IN BUFFER=6400 /SET THE BUFFER TO 6400 ASMIFN CARD-1 /IF NO CARD READER BUFFER=6000 /THEN SET TR TO 6000 / IN ANY EVENT BUFFER MUST BE A MULTIPLE OF 400 OCTAL WORDS. / / P20, 20 M10, -10 L7770=M10 M4, -4 M20, -20 L77, 77 L200, 200 M301, -301 M322, -322 L4000, 4000 L5000, 5000 L6000, 6000 L7000, 7000 L7757, 7757 L60, 60 L700, 700 M12, -12 L400, 400 L54, 54 M54, -54 M60, -60 M70, -70 M73, -73 M77, -77 L7777, 7777 M32, -32 L333, 333 M34, -34 L7700, 7700 L10, 10 L4, 4 L7740, 7740 M40=L7740 M5757, -5757 L7, 7 M314, -314 L30, 30 M43, -43 M6, -6 L7400, 7400 M400=L7400 / / TEMP, 0 TEMP1, 0 TEMP2, 0 TEMP3, 0 TEMP4, 0 / KEYCHAR, 0 BNUM, 0 DFIRST, 0 / INBLOCK, 0 INUNIT, 0 OUTBLOCK, 0 OUTUNIT, 0 OUTNUM, 0 / BFLAG1=INBLOCK BFLAG2=OUTBLOCK BOLDP=INUNIT BCHAR=OUTUNIT / / INDEX, TINDEX ILEN, TILEN ELOWER, TLOWER EUPPER, TUPPER CLOWER, TSYSLOWER CUPPER, TSYSUPPER / L5757, 5757 5757 5757 5757 FSIZE, 0 FUNIT, 0 FTYPE, 0 FBNUM, 0 FWHAT, 0 FNAME, 7777 7777 7777 7777 / / ORIGIN, 0 DATA, 0 BTEMP1, 0 BTEMP2, 0 BTEMP3, 0 BFIELD, 0 BOLDO, 0 BOFIELD, 0 BCOUNT, 0 / / COUNT, 0 L177, 177 M215, -215 M212, -212 M377, -377 M240, -240 M340, -340 DISPLAY=JMS I . PPDIS PIP=JMP I . PIPPIP DIAL=JMP I . EXIT COPY=JMS I . CCOPY SETA=JMS I . ASET GETA=TAD I AUTO8 CHECKIO=JMS I . IOCHECK ASMIFZ ECHO /ECHOING DESIRED? ASMSKP 2 /NOPE. DON T ASSEMBLE CRLF PROCESS IN. CRLF=JMS I . TTYCR GETL=JMS I . TTYGET LINE=JMS I . GLINE DECODE=JMS I . DDCODE SYSERR=HLT DIRECTORY=JMS I . DYRECT MOVE=JMS I . MMOVE POP=JMS I . PPOP PUSH=JMS I . PPUSH NO=JMS I . NODIS REPLACE=JMS I . REPDIS READ=JMS I . TREAD WRITE=JMS I . TWRITE SEARCH=JMS I . SSERCH AUXIN=JMS I . SEQIN AUXOUT=JMS I . SEQOUT PUTWORD=JMS I . BBOUT / / *177 0000 /USED AS A JMS PIPPIP FOR CERTAIN ERROR RESTARTDS. / / / / / EJECT / / / / / / / P I P C E N T R A L L O O P / / / / *200 / / / / / LMODE /JUST INCASE SOME JACKASS STARTS IT OFF IN THE WRONG MODE. PIPPIP, PDP /GET INTO 8 MODE. PMODE JMS RESTART /CLEAN UP SYSTEM. ASMIFN ECHO /DO A CRLF ONLY IF ECHOING. CRLF /GIVE INITIAL CARRIGE RETURN LINE FEED. PIPL, DECODE /DISPLAY OPTIONS MAINDIS /FROM MY LIST OF GOODIES. SEARCH /LOOK FOR LEAGAL OPTIONS PIPLST /LIST OF PIP OPTIONS PIPGO /WHERE TO GO IF FOUND JMP PIPL /NOT A LEGAL REQUEST. / / / PIPLST, 301 /A=ABSOLUTE MODE 302 /B=BINARY MODE 4323 /S=SOURCE MODE, 4000=END LIST / PIPGO, ABSOL /ABSOLUTE HANDLER. BINARY /POINTER TO BINARY HANDLER ASCII /SOURCE HANDLER / / / / / RESTART, 0 IOF /TURN OFF INTERUPTS(THO THEY SHOULDN T BE ON. KCC /MAKE SURE THERE IS NOT A PREVIOUS CONTROL CHARACTER IN THEE WINGS. MONE /SET UP COPIER FOR 1 COPY DCA OUTNUM /-NUMBER OF OUTPUT TAPES FOR COPY JMS I FCORE /GET NUMBER OF BUFFERS. DCA .-1 /ZAP OUT. CAN ONLY BE USED ONCE. TAD M10 DCA 0 DISPLAY /JUST WAIT A SECOND. MAINDIS ISZ 0 JMP .-3 /NOT DONE YET DCA KEYCHAR /NO NEW CHAR. LINC /ENTER LINC MODE LMODE ADD P20 /GET THE I/O PRESET BIT ESF /AND DO AA I/O PRESET CLR PDP PMODE 6026 TLS 6016 KCC ASMIFZ CARD-1 /SHOULD WE INITIALIZE PRINTER??? LCB /YEP. CLEAR THE PRINTER BUFFER AND SET THE FLAG SO IT LL BE READY IF WE NEED IT. MOVE /ZERO UPPER CORE BY A HIDEOUS MOVE. BUFFER-1 BUFFER -BUFFER JMP I RESTART / / / EXIT, JMS RESTART /RESTART DIAL MOVE /PLACE DIAL RESTART INSTRUCTIONS READIN EXITLOC, 4014 /IN PROPER PLACE FOR REBOOTSTRAP. 4 /BOOTSTRAP IS 4 WORDS LONG JMP I EXITLOC /RETURN TO DIAL / / FCORE, COREF READIN, 6141 /MAIN BOOTSTRAP. 643 /MAKE SURE DATA FIELD IS SET AT 3 701 /READ GROUP 7300 /FROM 300. / / / / MAINDIS, LEFT+200 TOP-200 TEXT "FPIP OPTIONS: HA --- AUXILIARY MODE HB --- BINARY MODE HS --- SOURCE MODE\" / / / / / / / SSERCH, 0 /COMPARES "FTYPE" AGAINST GIVEN LIST. CLA CLL /CLEAR AC TO BE SURE TAD I SSERCH /GET POINTER TO USER LIST DCA TEMP /AND STOORE AWAY ISZ SSERCH /BOP PAST FIRST ARG. TAD I SSERCH /GET JMP LIST DCA TEMP1 /STORE POINTER N TEMP1 ISZ SSERCH /BOP PAST SECOND ARG FOR RETRUN. / SSLOOP, TAD I TEMP /GET NEXT WORD TO COAMPARE SPA /IF POSIITIVE SKIP TAD L4000 /NEGATIVE. LAST CHAR. MAKE POSIITIVE FOR CHECK. CIA TAD FTYPE /DOES IT EQUAL CONTENTS O F FTYPE SZA CLA JMP SSNO /NO. TEST FOR END TAD I TEMP1 /YES. GET FOUND RETURN ADDRESS DCA TEMP JMP I TEMP /AND GO THERE / SSNO, ISZ TEMP1 /BOP UP JUMP TABLE POINTER TAD I TEMP /WAS THIS LAST CHARACTER? SPA CLA JMP I SSERCH /YEP. IT S NEGATVIE ISZ TEMP /NOP. BOP UP CHAR POINTER AND TRY AGAIN JMP SSLOOP /BACK UP TO TRY NEXT. / / / / / / / / / / ASMIFZ ECHO /DO WE WANT ECHOING??? ASMSKP 12 /NOPE. CR NEVER CALLED, SO DO NOT PUT IT IN. / TTYCR, 0 TAD M215 /GET A C.R. IN THE AC. CIA PUTL /AND AWAY IT GOES TAD M212 /N THE L.F. CIA PUTL /AND AWAY IT GOES JMP I TTYCR /AND RETURN TO CALLER. / / / / / / / / / / / EJECT *400 / / / DISPLAY ROUTINE / / GENERAL CALL: / / DISPLAY / PTEXT / WHERE PTEXT POINTS TO THE FOLLOWING: / /PTEXT, XCOOR. / YCOOR / TEXT "F THIS IS MY MESSAGE\" / / PPDIS, 0 /MAIN ENTRY PINST1, CLA CLL /CLEAR AC. CHECKIO /CHECKIO FOR IO NOW AND AFTER EVERY C.R. TAD I PPDIS /GET MAIN POINTER DCA PDIS /AND PLACE IN TEMP POINTER. ISZ PPDIS /PAST POINTER ON RETURN. TAD I PDIS /GET POINTER DCA PHOR /X POS ISZ PDIS /BOP UP TAD I PDIS /GET VERTICAL PDCAVR, DCA PVER /AND STASH AWAY. TAD PDIS /START OF TEXT DCA PSTART /BOP DOWN BY 1 MONE /SET SWITHC TO LEFT OF NEXT WORD. DCA PSWITCH TAD PINST1 /GET A CLA FOR FIRST TIME THROUGH. DCA PNOT1 /AND STORE SO NO VERTICAL BOP. / PPSTART, JMS PGETL /GET NEXT CHAR FROM TEXT. MONE /SET CHAR SIZE TO HALFWORD DCA PCSW /IN CASE OF NO F OR H. TAD PCHAR /GET IN AC. TAD M10 /IS IT AN "H" SNA CLA /IF IT IS,SKIP PAST AND IGNORE. JMP PPAST /ITS AN "H" TAD PCHAR TAD M6 /IS IT AN "F" SZA CLA JMP PDO /NOT AN "F" OR AN "H". USE IT AS A CHAR IN HALFWORD. DCA PCSW /SET SIZE TO FULL. PPAST, JMS PGETL /GET FIRST CHAR TO BE DISPLAYED. PDO, TAD PCSW /GET SIZE. SNA CLA /IS IT FULL SIZE. TAD M4 /YES. SET BACK LEFT BY 8. TAD M4 / IF HALF SET IT BACK BY 4. TAD PHOR DCA LOC1 /THIS IS A REAL LOC1(0001) TAD PCSW /GET SIZE SNA CLA /FULL? TAD M20 /YES. BOP DOWN BY 40, NOT 20 TAD M20 /M20 IF HALF SIZE TAD PVER PNOT1, DCA PVER /MADE A CLA FOR THE FIRST TIME THROUGH TAD PDCAVR /GET CORRECT INST. DCA PNOT1 /SET UP FOR FUTURE CALLS. TAD PCSW /CHAR SIZE. CMA /COMPLEMENT BIT. AND L200 /BIT4 OF ESF LINC LMODE /GET INTO LINC MODE ESF /SET CHARS TO CORRECT SIZE CLR PDP /BACK OVER INTO 8 MODE PMODE / PLOOP, TAD PCHAR /GET THE CHAR IN THE AC. CLL RAL /MULTIPLY BY 2. TAD PTABLE /POINTER TO DISPLAY TABLE. DCA AUTO7 /AUTO FOR PICKING UP THE DISPLAY CHARS. TAD PVER /GET THE VERTICAL IN THE AC. LINC /GO OVER TO LMODE AND START TO DISPLAY. LMODE DSC I AUTO7 /FIRST PART OF CHAR DSC I AUTO7 /SECOND PART OF CHAR. PDP PMODE /BACK INTO 8 MODE PTWO /GET A +2 IN THE AC TAD LOC1 /GET NEXT DISPLAY POINT. DCA LOC1 /AND BOP BY 1/2 CHAR. JMS PGETL /GET ANOTHER CHARACTER. JMP PLOOP / AND DISPLAY IT. / PGETL, 0 /CHAR GETTER ROUTINE ISZ PSWITCH /IS IT LEFT HALF? JMP PRIGHT /GET CHARACTER ISZ PSTART /GET NEXT WORD TAD I PSTART /IN THE AC RTR RTR RTR /MOVE TO RIGHT SIDE JMP PCOM /GO DO THE AND. PRIGHT, MONE /RESET SWITCH DCA PSWITCH /FOR NEW WORD NEXT TIME. TAD I PSTART /WORD IN AC PCOM, AND L77 /JUST THE LOW ORDER BITS. DCA PCHAR /SAVE FOR LATTER USE. TAD PCHAR /BACK IN AC. TAD M34 /IS IT "\" SNA CLA JMP I PPDIS /YES! E X I T. TAD PCHAR /GET IT AGAIN TAD M43 /IS IT A CR. SZA CLA JMP I PGETL /NO. RETURN. CHECKIO /CHECK I/O FLAGS AND SERVICE. JMP PPSTART /RESET TO START NEXT LINE. / / PDIS, 0 /TEMPORARY POINTER PHOR, 0 /HORIZONTAL COORDINATE PVER, 0 /VERTICAL COORDINATE PSTART, 0 /POINTS TO NEXT TEXT WORD. PSWITCH, 0 /0=GET RIGHT HALF,-1=GET LEFT HALF OF NEXT WORD. PCSW, 0 /0=FULL SIZE,-1=HALF SIZE. PCHAR, 0 /CONTAINS NEXT TEXT CHARACTER. PTABLE, TABLED-1 /POINTS TO DISPLAY TABLE -1 FOR INDEXING. / / / / DDCOM, 0 /DECODE CALLS THIS ROUTINE TO GET A CHAR FROM PGETL JMS PGETL /GET A CHAR. TAD PCHAR /PLACE IN AC. JMP I DDCOM /RETURN. / / IOCHECK, 0 /CHECKS IO DEVICES. CLA CLL KSF /IS IT KEYBOARD? JMP I IOCHECK /NOPE. RETURN. KRS /READ IN THE FLAG BUT DON T TURN OFF THE FLAG. TAD IOCD /IS IT A CONTROL D SNA /???? DIAL /YEP. RESTART DIAL TAD IOCP /HOW ABOUT A CONTROL P SNA CLA /???? PIP /YEP. RESTART PIP. TAD KEYCHAR /DO WE HAVE A CHARACTER IN BUFFER????? SMA KRB /READ IN NEW CHAR IF NONE THERE RAL CLL CML RAR /TURN ON SIGN BIT. DCA KEYCHAR /STASH AWAY. JMP I IOCHECK /ALL DONE. RETURN TO CALLER / / / IOCD, -204 /CONTROL D IOCP, -220+204 /CONTROL P MINUS CONTROL D / / / / / / / / / EJECT *600 / DISPLAY CHARACTER TABLE. / TABLED=. / 7777 /00=ILLEGAL 7777 4477 /01=A 7744 5177 /02=B 2651 4136 /03=C 2241 4177 /04=D 3641 4577 /05=E 4145 4477 /06=F 4044 4136 /07=G 2645 1077 /10=H 7710 7741 /11=I 0041 4142 /12=J 4076 1077 /13=K 4324 0177 /14=L 0301 3077 /15=M 7730 3077 /16=N 7706 4177 /17=O 7741 4477 /20=P 3044 4276 /21=Q 0376 4477 /22=R 3146 5121 /23=S 4651 4040 /24=T 4077 0177 /25=U 7701 0176 /26=V 7402 0677 /27=W 7701 1463 /30=X 6314 0770 /31=Y 7007 4543 /32=Z 6151 4177 /33=[ 0000 7777 /34=ILLEGAL 7777 0000 /35=] 7741 2000 /36=^ 2076 7777 /37=ILLEGAL 7777 0000 /40=SPACE 0000 7500 /41=! 0000 7000 /42=" 0070 7777 /43=ILLEGAL 7777 5721 /44=DOLLAR SIGN 4671 6661 /45=PER CENT SIGN 4333 5166 /46=? 0526 0000 /47=TAB 0000 3600 /50=( 0041 4100 /51=) 0036 2050 /52=* 0050 0404 /53=+ 0437 0500 /54=, 0006 0404 /55=- 0404 0001 /56=. 0000 0601 /57=/ 4030 4536 /60=0 3651 2101 /61=1 0177 4523 /62=2 2151 4122 /63=3 2651 2414 /64=4 0477 5172 /65=5 0651 1506 /66=6 4225 4443 /67=7 6050 5126 /70=8 2651 5122 /71=9 3651 2200 /72=: 0000 4601 /73=; 0000 7777 /74=ILLEGAL 7777 1212 /75== 1212 7777 /76=ILLEGAL 7777 4020 /77=? 2055 / / / EJECT *1000 / / / ROUTINE TO GET A LINE FROM TTY. / / GENERAL CALL: / / LINE / PDIS / / WHERE PDIS POINTS TO THE STUFF TO BE DISPLAYED WHILE WAITING FOR A LINE OF INPUT. / / / / GLINE, 0 /MAIN ENTRY FPR LINE GETTER ROUTINE. CLA CLL /CLEAR AC. TAD I GLINE /GET POINTER TO DISPLAY DCA G1 /AND SAVE IT. ISZ GLINE /SET UP RETURN. TAD G1 /GET POINTER DCA G2 /AND STASH IT IN THE SECOND LOOP. GCLEAR, DCA I GGNUM /CLEAR NUMBER OF CHARS TO ZERO. GMAIN, PONE /GET A +1 IN THE AC. TAD I GGNUM /GNUM+1, NEXT SPOT IN BUFFER. JMS GIN /STICKS NEXT CHARACTER INTO GNUM+1 0 /0=ILLEGAL=A SOLID BLOCK. PTWO /GET A PTWO INTO THE AC. TAD I GGNUM /NUMBER OF CHARS+2 JMS GIN /PUT A 34 AT END FOR DISPLAY ROUTINE. 34 / FORM. TAD GCOUNT /AN OSCILLATING NUMBER. DCA COUNT /GENERAL COUNT LOCATION. / GLOOP1, DISPLAY /DISPLAY CALLERS MESSAGE. G1, 0 /HIS POINTER HERE DISPLAY /NOW DO OUR LINE OF CRAP. GTEXT /POINTER TO OUR BUFFER. GETL /IS THERE A TTY CHAR? SKP /NO! JMS I GGINSERT /YES. PLACE IN BUFFER. ISZ COUNT /BOP UP FLICKER COUNT. JMP GLOOP1 /STILL GOOD. DISPLAY AGAIN. TAD GCOUNT /GET FLICKER COUNTER DCA COUNT /AND RESET TEMPORARY COUNTER. PONE /+1 TAD I GGNUM /SET A "\" AT END WITH NO BLOCK FLICKER. JMS GIN /PLACE IN BUFFER 34 GLOOP2, DISPLAY /NOW DISPLAY USERS MESSAGE. G2, 0 /HIS POINTER. DISPLAY /NOW OUR BUFFER GTEXT /BUFFER POINTER. GETL /TEST LOW READER. SKP /NO CHAR THERE JMS I GGINSERT /INSERT INTO BUFFER ISZ COUNT /DONE YET??? JMP GLOOP2 /NO. DISPLAY AGAIN. JMP GMAIN /RESET FLICKER POINTER. / / / GIN, 0 /PUTS A CHAR IN BUFFER TAD GMLEN /BASIC MESSAGE BEFORE USER DOES ANYTHING. DCA TEMP /SAVE CHARACTER NUMBER. TAD TEMP /GET CHARACTER NUMBER. CLL RAR /DIVIDE BY 2 TO GET WORD NUMBER. TAD GGTEXT /POINTER TO ACTUAL TEXT. DCA TEMP2 /AND STASH AWAY. TAD TEMP /REGET CHAR NUMBER. RAR /IS IT ODD OR EVEN. SNL CLA JMP GLEFT /EVEN. GET LEFT HALF. TAD I TEMP2 /GET RIGHT HALF AND L7700 /BLAH OUT RIGHT 6 BITS TAD I GIN /GET DESIRED SAVE CHAR. GINTO, ISZ GIN /BOP PAST CALLING CHAR. DCA I TEMP2 /AND STASH AWAY. JMP I GIN /RETURN. GLEFT, TAD I TEMP2 /LEFT CHAR. RTR RTR RTR /MOVE INTO RIGHT HALF AND L7700 /BLAH OUT RIGHT BITS TAD I GIN /STICK IN GOOD CHAR. RTL RTL RTL /AND SHIFT BACK JMP GINTO /NOW GO AND STASH AND RETURN. / GGNUM, GNUM GMLEN, LBNUM-1 /LEN OF MESS ALREADY IN BUFF -1 TO COMPENSATE FOR 0 CHAR. GGINSERT, GINSERT /POINTER TO INSERT ROUTINE. GCOUNT, -10 /FLICKER COUNTER GGTEXT, GTEXT+2 /ACTUAL TEXT POINTER. / / / / TTYGET, 0 /ROOM FOR NON-OVERLAPPED TTY ROUTINE HERE CHECKIO /CHECK IO DEVICES NOW. TAD KEYCHAR /GET SAVED CHAR. SNA /IS THERE REALLY ONE THERE??? JMP I TTYGET /NO. RETURN ISZ TTYGET /YES. BOP UP RETURN ADDRESS. TAD L4000 /CHOP OFF STUCK ON BIT. DCA 0 /0 CAN BE USED RIGHT ONW. DCA KEYCHAR /ZAP OUT OLD CHAR. TAD 0 /RETRIEVE CHAR. JMP I TTYGET /EXIT TO SECOND LOCATION WITH CHAR IN THE AC. / / LINEB, LEFT /START AT BOTTOM LEFT FOR DISPLAY. GTEXT=LINEB BOTTOM /BOTTOM OF SCREEN. TEXT "REPLY:\" /HALFWORD ASSUMED. LBNUM=6 /NUMBER OF PREVIOUS CHARS IN BUFFER. LBMAX=62-LBNUM /MAXIMUM NUMBER OF USER CHARACTERS. / FOUND BY GETTING MAX ON LINE(62) AND SUBTRACTING THOSE IN BUFFER(LBNUM). / / / EJECT / / / *1200 / SECOND PAGE OF LINE GETTER ROUTINE. / / / / GINSERT, 0 /CHECKS CHAR AND STICKS IN BUFFER. AND L177 /MAKE INTO EVEN PARITY. TAD L200 /WITH 200 BIT ON. DCA GPUT /SAVE CHAR. TAD GPUT /GET AGAIN. TAD M215 /IS IT A CR. SNA CLA JMP GALL /YEP. CLEAN UP AND EXIT. TAD GPUT TAD M212 /MAYBE IT S A LINEFEED? SZA CLA JMP GNEXT1 /NO. NOT A LEGAL CONTROL CHAR. ASMIFN ECHO /ASSEMBLE CRLF IF ECHOING HCARS ONLY. CRLF /GIVE A CARRIAGE RETURN, LINE FEED. JMP I GGCLEAR /AND RESTART INPUT BUFFER. GNEXT1, TAD GPUT /GET THE CHAR AGAIN. TAD M377 /IS IT A RUBOUT? SZA CLA JMP GNEXT2 /NO. CHECK FOR SOMETHING ELSE. MONE /-1 IN AC. TAD GNUM /BACKSPACE BUFFER ! SMA /ARE WE TOO FAR GONE. DCA GNUM /NO. BACKSPCE DONE. CLA /JUST IN CASE. JMP I GGMAIN /GO BACK AND DO NEXT. GNEXT2, TAD GPM1 /POINTER TO SPECIAL TABLE OF EXCEPTIONS. DCA AUTO5 /PLACE IN AUTO REG. GBACK, TAD I AUTO5 /GET NEXT EXCEPTION SNA /END OF TABLE? JMP GDONE /YEP. CHECK NEXT FEATURE. CIA /NEGATE. TAD GPUT /TEST AGAINST PRESENT CHAR. SZA CLA /IS IT A MATCH? JMP GBACK /NO. GET NEXT ITEM. JMP I GINSERT /YEP. IGNORE CHAR. GDONE, TAD GPUT /GET CHAR. TAD M240 /CHECK FR LIMIT SPA CLA JMP I GINSERT /RANDOM CRAP. IGNORE. TAD GPUT TAD M340 SMA CLA /IS IT TOO BIG? JMP I GINSERT /YES. IGNORE IT. TAD GNUM /GET NUMBER OF CHARS. IAC /TEST TO SEE IF IT LL FIT. CIA TAD GLIMIT /NUMBOER OF SPACES IN BUFFER. SNA CLA JMP I GGCLEAR /TOO MANY. RESTART. ASMIFN ECHO /LOAD THE CHAR IN AC TO ECHO IF ECHOING CHARS! TAD GPUT ASMIFN ECHO /ECHO CHAR ONLY IF SWITCH IS SET. PUTL /ECHO ON TTY. TAD GPUT /GET CHAR. AND L77 /MAKE INTO A SIXBITTER DCA GPUT ISZ GNUM /BOP UP COUNT TAD GNUM /PLACE IN AC. JMS I GGIN /PLACE CHAR IN BUFFER GPUT, 0 /HERE IS CHAR. JMP I GGMAIN /ALRIGHT, GO BACK AND DO NEXT GALL, ASMIFN ECHO /DO A CRLF ONLY IF SWITCH IS SET. CRLF /DO A CAR RET AND LIN FED. PONE /+1 IN AC TAD GNUM /NUMBER OF CH?SS IN BUFFER. JMS I GGIN /PLACE A "0" IN BUFFER. 0000 /0 TAD I GGLINE DCA GINSERT JMP I GINSERT / / / GGLINE, GLINE /COMMUNICATION. GNUM, 0 /NUMBER OF CHARS IN BUFFER GLIMIT, LBMAX /MAX NUM OF USER CHARS IN BUFFER. GGIN, GIN GGMAIN, GMAIN GGCLEAR, GCLEAR /CROSS PAGE REFEREENCES. GPM1, GEXPT-1 /POINTER TO EXCEPTIONS (-1) GEXPT, 300 334 337 243 ASMIFZ TERMC-44 /IS DOLLAR SIGN LEGAL???? 244 /NOT IN THIS VERSION. SORRY ABOUT THAT. 274 276 0 /END OF TABLE. / / MMOVE, 0 MONE TAD MMOVE DCA AUTO3 MONE TAD I AUTO3 DCA AUTO4 MONE TAD I AUTO3 DCA AUTO5 TAD I AUTO3 CMA DCA COUNT JMP MMEXIT-2 TAD I AUTO4 DCA I AUTO5 ISZ COUNT JMP .-3 MMEXIT, JMP I AUTO3 / / PPUSH, 0 MOVE FSIZE PPTEMP FNAME+3-FSIZE+1 JMP I PPUSH / PPOP, 0 MOVE PPTEMP FSIZE FNAME+3-FSIZE+1 JMP I PPOP / / PPTEMP,0 *PPTEMP+FNAME+3-FSIZE 0000 /JUST TO SEE WHERE IT IS. NEXT LOCATION IS COMPLETELY FREE. / / / EJECT / / / / / / SAVE THE SYMBOLS FOR P I P 2 ! ! ! ! ! / / / / / / / / SAVSYM 2 / / / / / / / / / / EJECT