TITLE DDT .login=.demon NLEVS==7 ;LENGTH OF RING BUFFER OF . NINFP==8 ;MAX NUM INF PROCEDURES NBP==10 ;NUMBER OF BREAK POINTS LPDL==140 ;MAX LENGTH PUSH DOWN LIST BUFL==200 ;LENGTH OF I-O BUFFERS F=0 ;FLAGS P=1 ;PUSH DOWN A=2 ;POINTERS TO TABLES, CORE, ETC. B=3 C=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER D=5 ;TRANSFER DATA W1=6 W2=7 U=10 ;DDT'S USER NUMBER FOR CURRENT INF PROCEDURE W3=11 I1=12 I2=13 I3=14 I4=15 W4=16 ;LEFT HALF FLAGS TIF==100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA PTF==100 ; +, -, OR * HAS BEEN TYPED COMF==200000 ;COMMA FLAG CTF==400 SF==4 ;SYLLABLE FLAG QF==1 ;QUANTITY TYPED IN TO WORD ASSEMBLER CF==40 ;$ TYPED CCF==400000 ;$$ TYPED MF==2 ;MINUS SIGN TYPED IN LTF==20 ;LETTER TYPED IN TO CURRENT SYLLABLE ROF==10 ;REGISTER OPEN FLAG STF==4000 ;! MODE FAF==1000 ; < TYPED SAF==2000 ; > TYPED FPF==20000 ; . TYPED IN FEF==10000 ; E FLAG MLF==200 ;*FLAG DVF==40000 ;DIVIDE FLAG ;TS SYMBOLS TYIC==1 TYOC==2 USRI==3 USRO==4 UTIC==5 UTOC==6 LPTC==7 FDRC==10 COMC==11 ERRC==12 CLIC==13 CLAC==14 7TYPE=73000,, CTYPE=74000,, ;TYPE EFF ADR AS CHAR STRT=75000,, OPNER=76000,, TERR=77000,, MINUUO=73 DEFINE TSOPEN A,B .OPEN A,B OPNER A,B TERMIN SYSGE==2 SNFUSER==60 ;FOREIGN USER SYSTEM DEVICE CODE CLIBL==40. ;LENGTH OF SEND BUFFER VLRTSL==40 ;MAXIMUN LENGTH OF VALRET STRING (WORDS) BRKBIT==2000 ;BREAK BIT IN PIRQC ILUADB==1000 ;ILL USER ADDRESS BIOC==400 ;IO CHANNEL ERROR VALBIT==200 ;VALRET " SYSDDB==100 ;SYSTEM DEAD SYSDBB==2,, ;SYSTEM BEING DEBUGGED OIPBIT==400 ;ONE INSTRUCTION PROCEED PC BIT OIPINT==4000 ; " " " INTERRUPT BIT BCLI==400000 ;CLI BIT IN PIRQC ILOPRB==40 ;ILLEGAL OPERATION .ZZ==. LOC 41 JSR UUOH JSR TSINT LOC .ZZ DEFINE INFORM A,B IF1,[PRINTX \A = B \]TERMIN ;RIGHT HALF FLAGS 1RF==10 OUTPUT==4 ;OPDECODER FLAGS CF1==400 ;OUTPUT 1 REGISTER AS CONSTANT LF1==2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT Q2F==1 ;NUMBER TYPED AFTER  SBF==20 NAF==200 ;NEGATIVE ADDRESSES PERMISSABLE POWF==4000 ;ARGUMENT FOR EXPONENT COMING SLL==10000 ;STOP LOOKING FOR LOCALS OPERF1=20000 OPERF2=40000 BPLF==2 ;BPLOC REF AS ADDR PF==400000 ;PATCH FLAG PRINTF==2 ;PRINT FLAG SIXF==40 ;SIXBIT FLAG GLOBAL==040000 ;GLOBAL SYMBOL LOCAL==100000 PNAME==740000 ;PROGRAM NAME DELI==200000 ;DELETE INPUT DELO==400000 ;DELETE OUTPUT ;ERROR COMMENTS ;TMJ=TOO MANY JOBS ;INT=RIGHT HALF INTERUPT ;NML=NOT MY LOSER (LEFT HALF INT.) ;CKS=CHECK SUM ERROR ;EOF=END OF FILE ENCOUNTERED ;CFT=CAN'T FLUSH TTY ;COR=CANT GET MORE CORE ;JOB=NO CURRENT JOB ;UNF=UNFLAPPABLE (UDISMOUNT FAILED) ;DSN=DISOWN LOST ;TMS=TOO MANY UNDEFINED SYMS ;ILUUO=ILLEGAL UUO EXECUTED IN DDT ;LOGIN=YOU ARE NOT LOGGED IN ;PUR=TRIED TO WRITE IN READ ONLY CORE TOKTRM: 0 MONMOD: 0 ;-1 IMPLIES MONITOR MODE ;0 IMPLIES DDT MODE ;NOTE CONTENTS OF THIS PAGE MUST BE LOCATED IN ADRESSES < 10000 OCTAL SO DDT ;REFERENCE HACK WORKS MSK: -1 ;MASK FOR WORD+EFFECT SEARCHES USRS: UFUSR==.-USRS (SIXBIT /USR/) UUNAME==.-USRS 0 UJNAME==.-USRS 0 INTBIT==.-USRS ;USER INTERRUPT BIT 0 UINT==.-USRS ;PILEVEL INT STORAGE 0 UPIRQ==.-USRS ;PI RQS FOR THIS LOSER 0 PPC==.-USRS ;PROGRAM COUNTER 0 OPC==.-USRS ;OLD PC FOR BPT RESTORES 0 XECPC==.-USRS ;PC SAVE ON $X 0 UINTWD==.-USRS ;0=> RUNNING ;-1=>STOP ON RANDOM INT ;17,16 => XEC RETURN ;N<9 => BPT ;21 => LOADED, NOT YET STARTED 0 XINTWD==.-USRS ;SAVE UINTWD ON XEC 0 JTIME==.-USRS ;SEE FNJOB 0 FURN==.-USRS ;FOREIGN USER UNLESS ZERO 0 UIND==.-USRS ;SYSTEM INDEX 0 NBPTB==.-USRS ;-1 ON CONDITIONAL BPT BREAK 0 NORMAL 0 BPCPC==.-USRS ;PC SAVE ON CONDITIONAL BPT 0 CBPPS==.-USRS ;RH UINT (SAVE BPT #) LH EFFECTIVE ADDRESS OF INSTRUCTION FOR PROCEED 0 INCNT==.-USRS ;COUNT FOR LIMITED PROCEED 0 BPLOC==.-USRS 0 B1ADR==.-USRS ;ADDRESS OF BPT(RH) LOC TO PRINT OUT (LH) 0 BPCON==.-USRS ;CONDITIONAL BPT INSTRUCTION 0 B1CNT==.-USRS ;PROCEED COUNT 0 B1INS==.-USRS ;INSTRUCTION REPLACED BY .BREAK 0 BPL==B1INS-B1ADR+1 BLOCK *BPL BPEND==.-USRS STARTA==.-USRS ;STARTING ADDRESS 0 PERMIT==.-USRS ;-1 => EXECUTE VALRET STRINGS 0 PATCHL==.-USRS ;PATCH LOCN FOR PATCH FEATURE 0 VALCOM==.-USRS 0 JOBSYM==.-USRS ;LEAVE JOBSYM LAST 0 USRLNG==.-USRS REPEAT NINFP-1,[ (SIXBIT /USR/) BLOCK USRLNG-1] USREND: L=USRLNG ;LIKE ITS INFORM [STORAGE PER LOSER]\USRLNG IFILE: (SIXBIT /DSK/) .FILE: FILN1: SIXBIT /@/ FILN2: SIXBIT /BIN/ PCROCK: 0 ;FLAG TO DELETE PFILE ALSO CAUSES .FDELE TO WIN 0 ;SNAME STORED HERE ;THESE GO INTO 50-53 SFILN1: 0 ;FIRST NAME NEWFIL: 0 ;CURRENT VERSION SFILN2: 0 ;AOSE OF NAEM (TECO WRITES THIS FOR NEW VERSION) OLDFIL: 0 ;PREVIOUS NEWFIL (USED FOR DELETE) CLGAGN: 5 ;MASK FOR ALLOWING RECEIPT OF :SENDS ;1.1 OTHER USERS' HACTRNS ;1.2 " " INFERIORS ;1.3 YOUR HACTRN ;1.4 " INFERIORS BUGI: (SIXBIT /COM/) . SIXBIT /MAIL/ BUGO: 1,,(SIXBIT /COM/) . SIXBIT /MAIL/ WFILE: 1,,(SIXBIT /LPT/) ;INIT TO LPT SIXBIT /WALL/ SIXBIT /PAPER/ 0 0 ;SNAME GOES HERE UUOH: 0 PUSH P,A PUSH P,D LDB D,[331100,,40] CAIGE D,MINUUO MOVEI D,100 SKIPL UUOTAB-MINUUO(D) JRST @UUOTAB-MINUUO(D) UUOH2: MOVEI P,PS PUSHJ P,ERTTY ;SAVE TTYFLG IF NOT ALREADY SAVED JRST @UUOTAB-MINUUO(D) UERFLN: SIXBIT / ERR/ 2 UERFLC: . PNTR: INST CHP: 0 TXT: BLOCK 2 SAVPDL: 0 BTAB: FOO=44 REPEAT 4,[(FOO_12.+1100)TBL FOO=FOO-11 ] ININST: 0 LIMBO: 0 ;LAST CHAR READ UNRCHF: 0 ;-1 => RE READ LAST CHAR UNECHF: 0 ;-1 WHEN UNRCHF .EQ. -1 => ECHO CHARACTER ON RE-READ PS: BLOCK LPDL MSNAM: 0 ;SYSTEM NAME FOR NEW JOBS SILNT: 0 ;SUPPRESS TYPEOUT IF -1 PDUMPB: SETZ ;USED FOR PURE DUMP SIXBIT /PDUMP/ [USRI] [UTOC] 400000,,[-4,,NCVARB] NCVARB: BLOCK 4 CU: 0 ;CURRENT PROCEDURE INDEX NJ1: @ ;COUNT USED FOR DETERMINING MOST RECENT JOB (SEE FNJOB) NJ2: @ ;COUNT USED FOR DETERMINING LEAST RECENT JOB (") SIXP: .-.,,SFILN2 ;EXTRA WORD FOR CARRYS OFF TOP REPEAT 7,<.RPCNT*6>_14+600,,SFILN2 HSRAD: '9 ;DIGIT TO CARRY ON, (RADIX-1) SFILE: 6,,(SIXBIT /SYS/) SIXBIT /TS/ SYSN2: SIXBIT /@/ VILDBP: 0 UVCOM: BLOCK VLRTSL+1 ;VALRET STRING BUFFER CTEM1: 0 CTEM: 0 0 ;MUST BE HERE CTTABF: REPEAT 2,[(SIXBIT /*/) REPEAT 2,SIXBIT /*/ ] PFLUSH: 0 ;-1 => QUIT READING FILE MORPOS: 24. ;LINE ON SCREEN TO TYPE --MORE-- LFILN: SIXBIT /0 DSK/ BLOCK 5 LSNAM: 0 ;LAST SNAME IN CASE RESTORE DESIRED SRFLAG: 0 ;FLAG TO DO ABOVE AT UOPNER IF .OPEN LOSES GETTY: 0 IOCF: 0 0 0 . SIXBIT /FOOBAZ/ 0 I40: 0 IPC: 0 TSUSRF: (SIXBIT /USR/) TUNAME: 0 TJNAME: 0 THFLAG: 0 ;-1 IF NOT BEEN THROUGH ALL USERS UBUF: USRBF: BLOCK BUFL 0 ;HA HA TEMT: 0 LLUP1: 0 ;END TEST FOR MATCH SEARCHES ;INSERT IMPURE CODE HERE MARCON: 0 ;3.3 3.1 => STOP ON +,-,WRITE ONLY BADR: 0 CPTCHL: 0 CPTCHM: 0 MAXUSET: 0 ;MAX USET ALLOWED, SET AT INITIALIZATION ISYMP: IISYM-INISYE,,IISYM ;-N,,IISYM, CHANGED AT ISLUP ISYME: INISYE ;CHANGED AT ISLUP INTUSR: 0 ;USER WAITING FOR INTERRUPT WRD: 0 ;CURRENT VAL OF WORD ASSEM WRD2: 0 ;ARG FOLLOWING ALT-MODE WRDO2: 0 ;LIKE WRD2 BUT UPDATED IN OCTAL PRNC: 0 FRASE: 0 ;VALUE OF FIELD FOR PRECEDENCE OF * OR ' SYL: 0 ;CURRENT NUMERIC SYL DEN: 0 ZLWT: 0 TEM2: 0 LPTRST: 0 LPTFLG: 0 TTYFLG: -1 STYFLG: 0 ;SAVED TTYFLG DURING ERR PRINT, ETC STYSW: -1 ;.GE. 0 => TTYFLG SAVED ESTUT: 0 ;TEM USED TO CHECK FOR UNDEF IN CURRENT WRD FSV: 0 FRACT: 0 FPWR: 0 FTERM: 0 FH: 0 FL: 0 SYM: 0 ;ARGUMENT TO EVAL DEFV: 0 ;VALUE OF "FIRST" ARG (<) ULIMIT: 0 ;VAL OF "SECOND ARG (1<2>) LLOC: 0 LLOCO: 0 ;LAST LOCATION OPENED AS POINT PLCR: 0 LOCBF: BLOCK NLEVS 34SAV: 0 ;$X .BREAK 16, .BREAK 17, INST: 0 LWT: 0 TEM: 0 TEM1: 0 DSSAV: SYM SPTS: JRST TOUT SATPP: .+1 SATPT: 0 AUTOPI: 0 ;CURRENT MODE SCH: 0 ;HLTW,TFLOT,SATP,ITEXO,PIN,FTOC AR: 0 ODF: 0 SCHM: PIN ;PERMANENT MODE ARM: PADSO ODFM: 10 SCHMM: TFLOT ;MODE TO RETYP IN ARMM: PADSO ODFMM: 10 SARS: 0 ;0 => DDT SLEEPING -1 => DDT RUNNING DDTTY: -1 ;-1 =>TTY IN DDT DDINT: 0 ;-1 FLAG FOR INTERRUPT HAPPENED BETWEEN TTYRET AND RESTR2 TTYUSR: 0 ;USER INDEX GAVE TTY TO LAST TEM3: FRASE1: 0 ;SYL TO LEFT OF * OR ' SYSSW: 0 SYSDPS: 0 SUSMNG: 0 DDTSW: 0 XCRFSW: 0 ;-1 => DON'T TYPE CRLF WHEN PROCEDING HIGH: 0 UNAME: 0 JNAME: 0 TTABF: BLOCK 6 ;MUST FOLLOW UNAME&JNAME FOR TRANAD MAILF: SIXBIT / COM/ RUNAME: -1 ;REAL USER NAME SIXBIT /MAIL/ RUNM1: -1 SIXBIT /OMAIL/ OMAILF: SIXBIT / COM/ RUNM2: -1 SIXBIT /OMAIL/ 0 FFILE: 0 SIXBIT /.FILE./ SIXBIT /(DIR)/ AC0: BLOCK 20 PRGM: 0 BOYD: .-ESTU,,. LUDST==100 UDST: BLOCK LUDST UDSTE: ESTU: UDSTE SATPC: 0 DGO: 0 UCHNLO: 0 ;0 => NO USER OPEN ;+ => FOREIGN USER ;-1 => INFERIOR FETCH4: D $X=34 SYMTOP: INISYE ;PTR TO FIRST FREE REG. AFTER SYMTAB'S PFILE: SIXBIT / COM/ PFILE1: -1 SIXBIT /MAIL/ 0 ;WIN ON DELETE 0 ;LEAVE ROOM FOR SNAME PAT: PATCH: BLOCK 100 IOCX: .STATUS I4 ;AC FIELD WRITTEN AT IOCBRK STRB: 440700,,TEM NM1A: MOVEI W2,0 ;USED TO FORM FLOATING NUMBS. CLIFNB: 3,,(SIXBIT /CLI/) ;USED FOR :SEND CORE LINK CLIFN1: . SIXBIT /HACTRN/ CLUFNB: (SIXBIT /USR/) CLUFN1: . SIXBIT /HACTRN/ CLIBUF: BLOCK CLIBL ERROPN: (SIXBIT /ERR/) 3 0 ;STATUS WORD HOLPPX: POP P,.(D) ;USED BY HOLE TEXCT2: LSHC D,7 COMWDX: HRLI D,. ;USED IN COMMA EVAL CLABRP: 100,,CLGAGN ;CORE LINK THINGS CLABUF: BLOCK CLIBL+2 0 CLABL==.-CLABUF CLAFNB: 2,,(SIXBIT /CLA/) .ZZ0==. MINPUR==<.+1777>/2000 LOC 2000*MINPUR DDT: .CLOSE 3, ;CHANNEL USED BY RANDOM LOADER ; MOVEI U,0 ;INDICATE NO CURRENT JOB SETZM UCHNLO ;INDICATE NO USER CHANNEL OPEN MOVE A,[202,,727766] HRROI B,1_+1_ .SETM2 A, ;SET INTERRUPT MASKS MOVNI D,1 .UPISET D, ;ENABLE INTERRUPTS MOVEI P,PS ;SET UP PDL POINTER PUSHJ P,%RESET .SUSET [.RUNAME,,D] ;GET UNAME AND SALT AWAY MOVEM D,UNAME MOVEM D,RUNAME MOVEM D,MSNAM ;INITIALIZE MASTER SYSTEM NAME .SUSET [.RJNAME,,JNAME] ;GET JNAME PUSHJ P,FORMF ;CLEAR SCREEN IF GE CONSOLE ;NOW TO GET INITIAL SYMS FROM SYSTEM HRROI A,INISYE ;START LOADING SYMS AT INISYE MOVE B,[SIXBIT /CALLS/] ;FIRST THE REGULAR SYMS PUSHJ P,GTSYS ;INPUT THEM (UPDATES A) HRROS W1,A ;LOCATION OF BEGINNING OF USYMS MOVE B,[SIXBIT /USYMS/] ;.UPC,.VAL, .TTY, ETC. PUSHJ P,GTSYS ;GET THE SYMS (AGAIN UPDATES A) HRRZM A,SYMTOP ;MARK END OF INITIAL SYMBOL AREA HRRZM A,ISYME ;" " " MOVSI A,-INISYE(A) ;GET SWAPPED TOTAL NUMBER OF SYMS INPUT MOVNS A ;NEGATE A ADDM A,ISYMP ;UPDATE POINTER TO INITIAL SYMS LDB A,[14300,,D] ;GET NUMBER OF USYMS MOVEI B,-<3+1>(A) ;DE-COMPENSATE FOR .IOC, .IOS, .IOP; GET VALUE OF LAST REGULAR ONE MOVEM B,MAXUSET ;SAVE AS MAXIMUM USET MOVSI A,1(A) XOR A,W1 ;LH(W1)=-1 MOVEI W1,760000 ;MAGIC RELOCATION FOR .USET SYMS ADDM W1,1(A) ;RELOCATE A SYMBOL (ACTUALLY ITS VALUE) AOBJN A,[AOJA A,.-1] ;DO IT FOR THE USYMS STRT [SIXBIT /DDT./] STRT [.FNAM2+(SIXBIT /./)] ;TYPE OUT DDT VERSION NUMBER .DIETIM D, ;GET TIME TILL SYS DOWN JUMPL D,DD1C ;NEGATIVE=>FOREVER 7TYPE [ASCIZ /SYS DOWN IN /] IDIVI D,30. PUSHJ P,TMPT ;TYPE TIME TILL SYS DOWN DD1C: PUSHJ P,CRF .OPEN FDRC,[SIXBIT / SYSSYSTEMMAIL/] ;SEE IF THERE IS ANY SYSTEM MAIL JRST DD1B ;NO JRST CTLF1 ;YES, TYPE IT OUT ;ROUTINE CALLED TWICE DURING READING IN OF INITIAL SYMS FROM SYSTEM GTSYS: .GETSYS A, ;SHOULDN'T SKIP (LH(A)=-1) HLRE D,A ;GET - MOVNS C,D ;NUMBER OF WORDS (STILL IN D WHEN GTSYS RETURNS) ADDI C,(A) ;GET 1+ LSH C,-10. ;CONVERT TO NUMBER OF BLOCKS .CORE 1(C) ;GET CORE JRST .-1 ;WHAT ELSE TO DO? (THIS PART OF INITIALIZATION) .GETSYS A, ;THIS TIME FOR REAL TERR (SIXBIT /BRF/) POPJ P, ;DDT DISPATCH IS ORDERED BY REQUIREMENTS OF EVALUATION,CALL INS,ETC. ; EVAL? TYPE OF CALL ;?=>? NO EVAL JRST ;MULT=>SPACE-1 EVAL WITHIN FIELD " ;SPACE=>RPRN EVAL WORD " ;RPRN+1=>CARR " PUSHJ ;CARR+1=> " " ; DISPATCHES ABOVE "CARR" DO NOT ALLOW UNDEFINED ; SYMBOLS IN WORD DD1A: DD1: PUSHJ P,CRF DD1B: TLZ F,ROF MOVE D,[SCHM,,SCH] BLT D,ODF DD2: MOVEI P,PS SETZM PRNC ;PARENTHESES COUNT LIS: MOVE D,ESTU MOVEM D,ESTUT LISA: TDZ F,[(,-1-ROF-STF)LF1+CF1+SBF+2] ;LEAVE REGISTER OPENED,TYPEOUT SUPPRESSED LISB: TDZ F,[(,-1-ROF-STF-FAF-SAF)NAF] SETZM,WRD LIS1: SETZM,FRASE LIS2: MOVEI D,1 MOVEM D,FRASE1 TLZ F,MLF+DVF L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG SETZM,SYL L1RPR: SETZM,SYM MOVSI D,(50*50*50*50*50*50) MOVEM D,TEM ;INIT SYMBOL COUNTER SETZM,DEN L2QAN: SETZM,WRD2 SETZM WRDO2 ;ALSO CLEAR WORD UPDATED IN OCTAL TRZ F,Q2F ;CLEAR "NUMBER TYPED AFTER ALTMODE" FLAG L2: SKIPGE MONMOD JRST NCOM PUSHJ P,IN ;PICK UP CHARACTER TLNE F,CF ;CONTROL FLAG JRST,L21 CAIG D,"Z ;Z CAIGE D,"A ;A L21: SKIPA A,D JRST,LET ROT A,-1 HLRZ C,DISP(A) SKIPGE A HRRZ C,DISP(A) MOVEI A,0 ;FOR HACKS THAT DO "ADDI FOO-BAR" AND FALL THRU CAIGE C,MULT JRST (C) CAIN C,MULT ;LET * WORK LIKE : IN SOME CASES TLNE F,SF+QF JRST L211 NCOM: SKIPGE MONMOD CTYPE ": PUSHJ P,RTOKEN ;CLEARS A, REACHED FROM TAG JUMPE B,DD1 ;NULL COMMAND NCLOOP: CAMN B,NCTAB(A) JRST NCL2 CAIGE A,NLCOM-1 AOJA A,NCLOOP MOVEM B,SYSN2 TDO F,[LTF,,SIXF] JRST ACTRLH ;TRY ^H'ING IT NCL2: HRRZ A,NCTB2(A) JRST (A) ;READ TOKEN (6BIT) RTOKEN: CLEARB A,B MOVE C,[440600,,B] RTOK2: PUSHJ P,IN RTOK4: CAIN D,": ;DON'T SCREW LOSER TYPING ":" IN MON MODE JRST RTOK2 CAIN D,33 JRST RTCOM ;COMMENT CAIN D,^Q JRST RTOK1 CAILE D,"_ JRST ERR SUBI D,40 JUMPG D,RTOK3 SETZM TOKTRM JUMPE D,CPOPJ SETOM TOKTRM POPJ P, RTOK1: PUSHJ P,IIN SUBI D,40 RTOK3: TLNE C,770000 IDPB D,C JRST RTOK2 RTCOM: PUSHJ P,IIN CAIE D,33 JRST RTCOM JRST RTOK4 RONUM: TLZ F,QF MOVEI B,0 RONUM2: PUSHJ P,IIN SUBI D,60 JUMPL D,RONUM4 CAILE D,11 JRST RONUM4 ASH B,B ADD B,D TLO F,QF JRST RONUM2 RONUM4: TLNE F,QF AOS (P) POPJ P, NCTAB: SIXBIT /?/ SIXBIT /DISOWN/ SIXBIT /LOGOUT/ SIXBIT /SL/ SIXBIT /SYMLOD/ SIXBIT /V/ ;SAME AS  BUT COMMAND NOT INTERPRETED AT IO LEVEL SIXBIT /VP/ ;TURN ON TYPEOUT AND PROCEEDS JOB SIXBIT /XFILE/ SIXBIT /CR/ SIXBIT /ED/ SIXBIT /ST/ ;SPECIFY CURRENT FN1 FN2 TO DDT SIXBIT /LOAD/ SIXBIT /DUMP/ SIXBIT /PDUMP/ SIXBIT /KILL/ SIXBIT /LOGIN/ SIXBIT /SEND/ SIXBIT /GAG/ SIXBIT /BUG/ SIXBIT /MAIL/ SIXBIT /JOB/ SIXBIT /LISTJ/ SIXBIT /FLAP/ SIXBIT /LISTF/ SIXBIT /DELETE/ SIXBIT /PRINT/ SIXBIT /LINK/ SIXBIT /ERR/ SIXBIT /DDT/ SIXBIT /MON/ SIXBIT /START/ SIXBIT /CONTIN/ SIXBIT /PROCED/ SIXBIT /VK/ ;TURNS ON TYPEOUT AND GOES KERCHINK SIXBIT /WALLP/ SIXBIT /SLIST/ NLCOM==.-NCTAB NCTB2: [ASCIZ /LIST MOST COMMANDS/],,QSN [ASCIZ /DISOWN CURRENT JOB/],,DISOWN [ASCIZ /AUTO-EXPUNGE/],,LOGOUT CSMI [ASCIZ /LOAD SYMBOLS ONLY/],,CSMI VHACK VPHACK ;DOES ^V$P WITHOUT PRINTING [ASCIZ /EXECUTE FILE AS DDT COMMANDS/],,XFILE [ASCIZ /ENTER TECO AND CREATE FILE/],,CRFIL [ASCIZ /ENTER TECO AND EDIT/],,EDFIL STFIL [ASCIZ /LOAD FROM FOLLOWING FILE INTO CURRENT JOB/],,LOAD [ASCIZ /DUMP INTO " " FROM " "/],,DUMP [ASCIZ /PURE DUMP/],,PDUMP [ASCIZ /KILL CURRENT JOB/],,JKILL [ASCIZ /LOGIN AS FOLLOWING NAME/],,NLOGIN [ASCIZ /SEND MESSAGE/],,CLSEND [ASCIZ /CONTROL RECEIPT OF MESSAGES/],,CLGAG [ASCIZ /DOCUMENT BUG/],,BUG [ASCIZ /ADD TO USER'S MAIL FILE/],,MAIL [ASCIZ /CREATE OR SELECT JOB/],,JJOB [ASCIZ /LIST JOBS/],,ULIST [ASCIZ /FLAP DECTAPE, FOLLOW BY DRIVE #/],,FFLAP [ASCIZ /LIST FILES/],,LLISTF [ASCIZ /DELETE FILE/],,CTLO [ASCIZ /PRINT FILE/],,PRINT [ASCIZ /CREATE LINK/],,LINK [ASCIZ /IOC ERROR STATUS/],,ERRSTS [ASCIZ /ENTER DDT MODE/],,EDDTM [ASCIZ /ENTER MONITOR MODE/],,EMONM [ASCIZ /START INFERIOR/],,AAGO [ASCIZ /CONTINUE GIVING INF. TTY/],,PROCED [ASCIZ /PROCEDE INF., LEAVE TTY WITH DDT/],,CTLP VKHACK [ASCIZ / TO SPECIFIED FILE/],,WALLP [ASCIZ /LIST SYMBOLS OF USER JOB/],,SLIST IFN .-NCTB2-NLCOM,[PRINTC /NCTB2 LOSES /] EDDTM: SETZM MONMOD JRST ALTL2 EMONM: SETOM MONMOD JRST DD1 VHACK: SETOM TTYFLG JRST DD1B VPHACK: SETOM TTYFLG SKIPE ININST ;IF GETTING INPUT FROM FILE OR VALRET, SETOM XCRFSW ;THEN TELL PROCEDER NOT TO TYPE CRLF JRST PROCED VKHACK: SETOM TTYFLG ; :VK JRST ALTL2 QSN: PUSHJ P,FORMF PUSHJ P,MORFIN MOVEI A,0 QSN0: HLRZ B,NCTB2(A) JUMPE B,QSNLP PUSHJ P,MORFLS JRST ALTL2 MOVE C,[440600,,NCTAB(A)] QSN1: ILDB D,C JUMPE D,QSN2 ADDI D,40 PUSHJ P,TOUT TLNE C,770000 JRST QSN1 QSN2: 7TYPE [ASCIZ / = /] 7TYPE (B) PUSHJ P,CRF QSNLP: CAIGE A,NLCOM-1 AOJA A,QSN0 JRST ALTL2 NLOGIN: PUSHJ P,RTOKEN MOVEM B,UNAME JRST NLOGI2 JJOB: SKIPE TOKTRM JRST ALTJ9 PUSHJ P,RTOKEN MOVE D,B MOVEM D,JNAME JRST ALTJJ FFLAP: PUSHJ P,RONUM JRST ERR MOVE D,B JRST FFLAP2 LLISTF: SKIPE TOKTRM JRST LLIST2 PUSHJ P,RTOKEN MOVS D,B JRST CTLF0 LLIST2: MOVE D,IFILE JRST CTLF0 JKILL: JUMPE U,JERR JRST JKILL2 CLSEND: PUSHJ P,RTOKEN MOVEM B,CLIFN1 MOVEM B,CLUFN1 .OPEN CLIC,CLUFNB JRST CLSND6 ;NOT LOGGED IN,TRY MAIL MOVE C,[440700,,CLIBUF] PUSHJ P,BUGTIM ;RECORD TIME OF MESSAGE CLSND0: PUSHJ P,BUGRD ;GOBBLE TEXT SKIPA D,[CLSND0] MOVEI D,ALTL2 TSOPEN CLIC,CLIFNB MOVE A,[-CLIBL,,CLIBUF] .IOT CLIC,A .CLOSE CLIC, MOVE C,[10700,,CLIBUF-1] ;RESET PTR FOR NEXT BUFFERLOAD JRST (D) BUGRD: CLSND1: PUSHJ P,IN CAIN D,177 JRST CLSRUB CAIE D,14 CAIN D,^C JRST CLSND2 CLSND5: IDPB D,C CAMN C,[10700,,CLIBUF+CLIBL-1] ;LEAVE SPACE FOR ^C JRST CLSND CAIE D,15 JRST CLSND1 PUSHJ P,CRF MOVEI D,12 JRST CLSND5 CLSND2: AOS (P) CLSND: PUSHJ P,CRF MOVEI D,^C .CLSN1: IDPB D,C TLNE C,760000 JRST .CLSN1 POPJ P, CLSRUB: CAMN C,[10700,,CLIBUF-1] ;BEGINNING OF BUFFER JRST ERR LDB D,C PUSHJ P,TOUT ;ECHO CHARACTER FLUSHED ADD C,[70000,,] TLNE C,400000 ;DECREMENT BYTE PNTR SUB C,[430000,,1] JRST CLSND1 CLGAG: PUSHJ P,RONUM JRST ERR MOVEM B,CLGAGN JRST ALTL2 CLSND6: 7TYPE [ASCIZ /(MAIL)/] ;TRY OTHER JRST MAIL1 BUG: SKIPA B,[SIXBIT /SYS/] MAIL: PUSHJ P,RTOKEN MAIL1: MOVEM B,BUGI+1 MOVEM B,BUGO+1 MOVE C,[10700,,CLIBUF-1] ;MUST BE 10700,, FOR RUBOUT END CHECK MOVEI A,15 IDPB A,C MOVEI A,12 IDPB A,C MOVE A,RUNAME JSP W1,6TO7 IDPB B,C PUSHJ P,BUGSPC PUSHJ P,BUGDAT PUSHJ P,BUGTIM MOVNI B,1 BUG3: PUSHJ P,BUGRD TDZA A,A MOVEI A,1 ;SUCCESSFUL END JUMPE B,BUG4A ;ALREADY OPENED FILE MOVEI B,0 TSOPEN UTOC,BUGO BUG4A: MOVE C,[10700,,CLIBUF-1] BUG4: ILDB D,C CAIN D,^C JRST BUG5 .IOT UTOC,D JRST BUG4 BUG5: MOVE C,[10700,,CLIBUF-1] ;NEW BUFFER JUMPE A,BUG3 ;READ MORE CRUFT .OPEN UTIC,BUGI ;APPEND ORIGINAL FILE JRST BUG7 BUG6: .IOT UTIC,D .IOT UTOC,D JUMPGE D,BUG6 BUG8: PUSHJ P,CLSU ;CLOSE OUT FILES JRST ALTL2 BUG7: .IOT UTOC,[^C] JRST BUG8 BUGDAT: .RDATE B, ROT B,12. ;SHIFT TO MONTH,DAY,YEAR MOVEI W1,"/ JRST BUGTL2 BUGTIM: .RTIME B, MOVEI W1,": BUGTL2: MOVEI D,0 BUGTL1: MOVEI A,0 ROTC A,6 ADDI A,40 IDPB A,C JUMPE B,BUGSPC MOVE A,W1 TRNE D,1 IDPB A,C AOJA D,BUGTL1 BUGSPC: MOVEI A,40 IDPB A,C POPJ P, 6TO7: MOVEI B,0 ROTC A,6 ADDI B,40 XCT (W1) JUMPN A,6TO7 JRST 1(W1) ERRSTS: MOVE D,WRD TLNN F,QF MOVE D,LWT MOVEM D,ERROPN+2 .OPEN FDRC,ERROPN JRST ERR ERRST1: .IOT FDRC,D CAIE D,14 CAIN D,^C JRST RET PUSHJ P,TOUT JRST ERRST1 ; :WALLP ;TURNS ON "LINE PRINTER" OUTPUT TO SPECIFIED FILE WALLP: MOVE A,RUNAME ;GET REAL USER NAME, AOJE A,LOGQ ;IF NOT LOGGED IN THEN COMPLAIN MOVEI C,WFILE ;GET PNTR TO FILE NAMES PUSHJ P,RRFL1 ;GET FILE DESCRIPTION MOVEI A,1 ;MODE FOR .OPEN HRLM A,WFILE SETZM LPTFLG ;.OPEN MAY LOSE SETOM SRFLAG ;SET TO RESTORE SNAME IF .OPEN LOSES TSOPEN LPTC,IFILE SETOM LPTFLG ;NOT OUTPUTTING SETZM SRFLAG ;.OPEN WON CLEAR FLAG .SUSET [.SSNAM,,LSNAM] ;RESTORE SNAME JRST ALTL4 ;MAYBE TYPE * SLIST: PUSHJ P,CRF ;TYPE OUT USERS SYMBOL TABLE MOVE W2,JOBSYM(U) JUMPGE W2,DD1 ;DONE? HRRZ W1,W2 PUSHJ P,SPT ;SQUOZE SYMBOL PRINT PUSHJ P,LCT TRNN W2,16 PUSHJ P,CRF ADD W2,[2,,2] JRST SLIST+2 L211: MOVE D,SYL TLZN F,LTF JRST POWER L4A: PUSHJ P,EVAL JRST,UND1 L4: TLZE F,MF MOVN D,D TLNN F,SF CAIE C,LPRN JRST,.+2 JRST,LPRN EXCH D,FRASE1 TLNN F,DVF IMULB D,FRASE1 TLZE F,DVF IDIVB D,FRASE1 CAIGE C,ASSEM JRST (C) ;MULTIPLY OR DIVIDE ADDB D,FRASE CAIGE C,SPACE JRST (C) ; + - @ , ADD D,WRD TLNE F,TIF ;TRUNCATE INDICATOR FLAG HLL D,WRD ;TRUNCATE MOVEM D,WRD TLNN F,QF MOVE D,LWT SETZM,A JUMPE U,L5 MOVE W1,ESTUT ;CHECK TO SEE IF WRD CONTAINS UNDEF SYM CAMN W1,ESTU JRST L5 CAILE C,CARR JRST ERR L5: CAIG C,RPRN JRST (C) PUSH P,KILRET SKIPN PRNC JRST (C) JRST ERR UNDEF: TERR (SIXBIT /U/) ERR: TERR UUOTAB: U7TYP UCTYPE USTRT SETZ UOPNER SETZ UTERR SETZ UUOH3 ;ILUUO SETZ .UUOH2 UUOH3: PUSHJ P,COMPLN MOVE D,40 HRRZ D,UUOH JRST CPOPJ1 SKIPA A,[SIXBIT /ILUUO/] UTERR: MOVSI A,@40 JRST ERR1 .UUOH2: MOVSS D MOVE A,(D) ERR1: MOVE W1,[440600,,A] ERR2: ILDB D,W1 JUMPE D,ERR3 ADDI D,40 PUSHJ P,TOUT JRST ERR2 ERR3: MOVEI D,"? MOVEI A,(SIXBIT /U/) CAIE A,@40 PUSHJ P,TOUT ERR5: SETZM ININST ;QUIT VALRET OR XFILE ERR4: MOVE B,STYFLG MOVEM B,TTYFLG SETOB B,STYSW ;INDICATE THAT TTYFLG HAS BEEN UNSAVED .UPISET B, RET: MOVEI P,PS PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST,LIS JRST DD2 LOGQ: MOVE D,[[SIXBIT /LOGIN/],,101] JRST UUOH2 UOPNER: LDB D,[270400,,40] CAIN D,TYOC JRST GASP MOVEM D,UERFLC .OPEN ERRC,UERFLN JRST .-1 UOPNR2: .IOT ERRC,D CAIE D,14 CAIN D,3 JRST UOPNR4 PUSHJ P,TOUT JRST UOPNR2 UOPNR4: .CLOSE ERRC, HRRZ D,40 HRRZ D,(D) AOSN SRFLAG ;IF ROUTINE WANTED SNAME RESTORED .SUSET [.SSNAM,,LSNAM] ;DO IT TO IT TERR (D) GASP: .LOGOUT ;FLAME OUT .VALUE 0 JRST .-2 U7TYP: PUSH P,B LDB B,[270400,,40] MOVE A,40 HRLI A,440700 U7TY1: ILDB D,A JUMPE D,7TYXIT CAIN D,^C JRST 7TYXIT PUSHJ P,TOUT(B) JRST U7TY1 7TYXIT: POP P,B JRST UUOXIT USTRT: MOVE A,40 HRLI A,440600 UUOH11: ILDB D,A ADDI D,40 PUSHJ P,TOUT CAIE D,". JRST UUOH11 UUOXIT: POP P,D POP P,A JRST 2,@UUOH UCTYPE: HRRZ D,40 PUSHJ P,TOUT JRST UUOXIT QIJERR: SKIPL UCHNLO ;ERR UNLESS INFERIOR OPEN JRST JERR QJERR: SKIPE UCHNLO ;ERR IF NO JOB OR SYS OPEN POPJ P, JERR: MOVE D,RUNAME AOJE D,LOGQ ;COMPLAIN ABOUT NOT BEING LOGGED IN BEFORE ABOUT JOB TERR (SIXBIT /JOB/) UND1: JUMPE U,OPLOOK MOVE A,ESTUT ;UNDEFINED SYM ASSEMBLER PUSHJ P,EVAL2 CAIN C,ASSEM TLNN F,ROF JRST OPLOOK LDB D,[(100)PRNC JUMPN D,UNDEF CAIE C,ASSEM CTYPE "# MOVN A,[(2)2] ADDB A,ESTUT CAMG A,BOYD TERR (SIXBIT /TMS/) MOVE D,SYM TLO D,GLOBAL MOVEM D,(A) HRRZ D,LLOCO TLNE F,MF TLO D,400000 MOVEM D,1(A) SETZI D, JRST L4 CTLA: TLZ F,QF+LTF PUSHJ P,OPLK2 JRST QUAN3 ;RET NO VALUE TLZN F,CF ;HERE IF FOUND IN LOCAL SYM JRST QUAN1 ;FOUND IN OPTABLE JRST L2 QUESTN: JUMPE U,JERR PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS MOVE A,ESTU QUEST1: JUMPGE A,DD1 MOVE D, (A) SKIPA W1,ESTU QUEST2: ADD W1,[(2)2] CAME D,(W1) JRST QUEST2 QUEST3: CAME A,W1 JRST QUEST4 PUSHJ P,SPT PUSHJ P,CRF QUEST4: ADD A,[(2)2] JRST QUEST1 OPLK3: JRST UNDEF JRST L4 ;LOCAL SYM JRST L4 ;OP SYM OPLOOK: PUSH P,[OPLK3] OPLK2: MOVE D,OPLK1 MOVEI W1,SYM MOVE A,[(440700)TXT] PUSHJ P,.SPT OPLK1: IDPB D,A ;OPDECODER OPEVAL: MOVEM P,SAVPDL TRZA F,OUTPUT OPTYPE: TRO F,OUTPUT LSH D,-27. MOVEM D,INST MOVE D,[(440700)TXT MOVEM D,CHP DEC: TRZ F,1RF SETZB A,W1 MOVE W2,BTAB DC1: ILDB D,W2 CAILE D,40 CAIL D,73 SOJGE A,DC1 JUMPG A,DC1 SUBI D,40 JUMPE D,DECX JUMPG D,DC2 DPB D,[(340500)PNTR] TRZ D,-4 AOS D DPB D,[(300600)PNTR] TRNN F,OUTPUT JRST DC6 LDB A,PNTR JRST DC1 DC2: HRREI D,-33(D) JUMPL D,DECT MOVE W1,D IDIVI W1,4 MOVE W2,BTAB(W2) ADDI W2,(W1) JRST DC1 DECT: TRNE F,OUTPUT JRST O1CZ ILDB W1,CHP CAIE W1,133(D) JRST LOSE JRST DC1 DECX: TRNE F,OUTPUT POPJ P, ILDB W1,CHP JUMPE W1,DC7 LOSE: POP P,A POP P,W2 POP P,PNTR POP P,CHP LOSE1: AOS A DPB A,PNTR LDB A,PNTR JUMPN A,DC6AA CAME P,SAVPDL JRST LOSE JUMPE U,CPOPJ MOVSI D,DELO ;LOOK AT ALL LOCALS BEFORE GIVING UP IORM D,SYM PUSHJ P,EVAL POPJ P, ;NOT FOUND PUSH P,A PUSHJ P,EVAL1 XCT "',CRF CAME A,ISYME XCT "",CRF POP P,A LOSE2: MOVEM A,PRGM SUB A,[2,,2] MOVE W1,(A) CAML A,JOBSYM(U) TLNN W1,PNAME JRST .+2 JRST LOSE2 PUSHJ P,EVAL TERR (SIXBIT /IAE/) JRST CPOPJ1 DC6: MOVEI A,0 DPB A,PNTR DC6AA: CAMN P,SAVPDL JRST DC6BB LDB D,-2(P) CAME D,(P) JRST LOSE1 DC6BB: PUSH P,CHP PUSH P,PNTR PUSH P,W2 PUSH P,A JRST DC1 DC7: MOVE P,SAVPDL MOVE D,INST LSH D,27. POPJ2: AOS (P) JRST CPOPJ1 O1CZ: TRO F,1RF MOVEI D,133(D) PUSHJ P,TOUT JRST DC1 TBL: .BYTE 9 DEFINE BARF A A CLOC=CLOC+1 TERMIN DEFINE HACK A IRPS B,D,[A] Z="D IFE Z-":,Y!B==CLOC IFE Z-"/,IF1 [BARF 1] IF2 BARF Y!B+73 IFE Z-"^,BARF _-1+B&7-1 IFE *,[ IRPC Q,,B Z="Q IFE Z-".,Z=100 BARF Z-40 TERMIN ] TERMIN TERMIN CLOC=0 ;INITIAL DISPATCH HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ] ;BYTE AND FLOATING INST HACK [FLO: 33^ ... BYTE/ FAD A/ FSB A/ FMP A/ FDV A: 21^ LMB/ R LMB: 02^ . L:L. M:M. B:B. BYTE: 03^ .. FS C/ IB P: P. I LD/ LD: LD B/ I DP/ DP: DP B/] ;FWT, FIXED POINT ARITH, MISC. HACK [HAK: 33^ MV/ MV: MOV MO/ ML/ DV/ SH/ H1/ JP/ 21^ ADD IMB/ SU BIMB: B IMB: 02^ . I:I. M/ B/ MO: 22^ EIMS: E IMS/ S IMS/ N IMS/ M IMS: 02^ . I/ M/ S: S. ML: 21^ I ML1/ ML1: MUL IMB/ DV: 21^ I DV1/ DV1: DI DV2: V IMB/ H1: 03^ EXC S3/ BL T: T. AO/ AO: AOBJ AOB/ JRS T/ JFC L/ XC T/ . AOB: 01^ P/ N/ JP: 03^ PU/ PU: PUSH PUS/ PO/ PO: POP POP/ JSR. JS P/ JS PA: A. JR PA/ PUS: 01^ J: J.. POP: 01^ . J/ SH: 02^ A S2/ ROT S1/ L S2: S S3: H S1/ . S1: 21^ . C: C. ] ;ARITH COMP, SKIP, JUMP HACK [ACCP: 42^ CA CA1/ SJ/ A JS/ S JS: O 31^ J COMP/ S COMP/ CA1: 31^ I COMP/ M COMP/ SJ: 31^ JUM PSJ/ SKI PSJ: P COMP: 03^ . L/ E: E. L E/ PA/ G E/ N: N. G. ] ;BOOLEAN HACK [BOOLE: 24^ ST/ AN: AND B2/ AN/ ST/ AN/ ST/ X OR: OR B2/ I OR/ AN/ EQ DV2/ ST/ OR/ ST/ OR/ OR/ ST: SET B2: 24^ Z IMB/ IMB/ CA: C TA/ TM: M IMB/ CM: C TM/ TA: A IMB/ IMB/ IMB/ CB: C BIMB/ IMB/ CA/ CA/ CM/ CM/ CB/ O IMB/ ] ;HALF WORDS HACK [HWT: 51^ HW1/ 21^ R HW2/ L HW2: R HW3/ HW1: 21^ L HW4/ R HW4: L HW3: 32^ IMS/ Z IMS/ O IMS/ EIMS/ ] ;TEST INST HACK [ACBM: 31^ AC1/ 01^ D AC2/ S AC2/ AC1: 01^ R AC2/ L AC2: 42^ N EAN/ Z EAN/ C EAN/ O EAN: 12^ . E/ PA/ N/ ] .BYTE NUM: ANDI D,17 ;D HOLDS CHARACTER TLNE F,CF+FPF JRST NM1 MOVE C,SYL LSH C,3 ADD C,D MOVEM C,SYL MOVE C,DEN IMULI C,12 ;CONVERT TO DECIMAL ADD C,D MOVEM C,DEN LE1: AOJA D,LE1A DOLLAR: PERC: MOVEI D,47+101-13-45(D) ;PERCENT SIGN LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(D=105)*SF*FPF=1 TLZN F,LTF+FEF+SF+FPF CAIE D,"E TLOA F,LTF TLOA F,FEF JRST LET1 TLZN F,MF SKIPA W1,SYL MOVN W1,SYL MOVEM W1,FSV SETZM DEN LET1: SUBI D,101-13 ;FORM RADIX 50 SYMBOL LE1A: TLO F,SF+QF LE2: MOVEI C,50 EXCH C,TEM IDIVM C,TEM IMUL D,TEM ADDM D,SYM JRST L2 NUM1: MOVEI C,10. ;FORM NUMBER AFTER ALTMODE IMULM C,WRD2 ;UPDATE WRD2 IN DECIMAL ADDM D,WRD2 MOVEI C,8 ;ALSO UPDATE WRDO2 IN OCTAL IMULM C,WRDO2 ADDM D,WRDO2 TRO F,Q2F JRST,L2 NM1: TLNE F,CF JRST NUM1 MOVEI W1,6 ;FORM FLOATING POINT NUMBER AOS NM1A XCT NM1A ;MOVED TO UNPURE PAGE MOVSI A,201400 NM1A1: TRZE W2,1 FMPR A,FT(W1) JUMPE W2,NM1B LSH W2,-1 SOJG W1,NM1A1 NM1B: MOVSI W1,211000(D) FMPL A,W1 SKIPN FH JRST NM1C LDB W2,[(331000)A] LDB W1,[(331000)FH] TLZ A,377000 SUB W2,W1 ASHC A,(W2) ADD B,FL TLZE B,400000 AOS A MOVE W2,FH TLZ W2,377000 ADD A,W2 TLNN A,1000 SOSA W1 ASHC A,-1 FSC A,1(W1) NM1C: MOVEM A,FH MOVEM B,FL JUMPE A,NM1D TLNE B,200000 AOS A ; ROUND TLO A,400 ; NORMALIZE NM1D: MOVEM A,SYL AOJA D,LE1A POWER: TLNN F,FEF JRST L4 ;NO EXPONENT CAIE C,PLUS CAIN C,MINUS TROE F,POWF TRZA F,POWF JRST (C) ; E+- MOVE W2,DEN MOVEI W1,FT-1 TLZE F,MF MOVEI W1,FT01 SKIPA D,FSV POW2: LSH W2,-1 TRZE W2,1 FMPR D,(W1) JUMPE W2,L4 SOJA W1,POW2 PERIOD: TLOE F,FPF ;IF . ALREADY TYPED, TLOA F,LTF ;THEN MUST BE LOGICAL LETTER, SET LTF AND GO TO PERD2 SKIPA D,LLOC ;FIRST . TYPED JRST PERD2 TLNE F,SF ;SYLLABLE STARTED MOVE D,DEN MOVEM D,SYL TLON F,SF+QF MOVEI D,0 IDIVI D,400 SKIPE D TLC D,243000 TLC W1,233000 FADL D,W1 MOVEM D,FH MOVEM W1,FL HLLZS NM1A PERD2: MOVEI D,45 ;RADIX 50 PERIOD JRST LE2 QUAN: MOVE D,LWT ;LAST QUANTITY TYPED QUAN1: MOVEM D,SYL TLZ F,LTF TLO F,SF+QF ;WRD,SYL STARTED QUAN3: TLZ F,CF+CCF JRST L2QAN CONTROL: TLOE F,CF TLO F,CCF JRST,L2 EVAL: MOVE A,PRGM ;LOOK UP SYMBOL EVAL0: HRLOI W1,37777+DELI JUMPE U,CPOPJ JUMPL A,EVAL3 ;ANY SYMS AT ALL? EVAL1: ADD A,[(2)2] EVAL2: JUMPL A,EVAL4 CAMN A,ISYME ;DONE LOKING AT INITIAL SYMS => REALLY DONE POPJ P, ;YOU LOSE MOVE A,JOBSYM(U) ;TRY REST OF SYM TABLE EVAL4: CAMN A,PRGM ;LOOPED BACK TO START MOVE A,ISYMP EVAL3: MOVE D,(A) XOR D,SYM TLNN D,PNAME TLOA W1,LOCAL ;FOUND PRGM NAME, SET NO LOCAL TDNE D,W1 JRST EVAL1 TLNN D,340000 ;FLUSH PRGM NAMES, DELO SET IN SYM TO LOOK AT ALL LOCALS JRST EVAL1 MOVE D,1(A) CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP CPOPJ: POPJ P, ;BIT 40 - DELETE OUTPUT ; 20 - DELETE INPUT ; 10 - LOCAL ; 04 -GLOBAL ; NO BITS - PROGRAM NAME OVRD: MOVSI B,-5 ;$>, $< OVRD1: MOVE A,MSKTB(B) AND A,LWT TDNN D,MSKTB(B) IOR D,A AOBJN B,OVRD1 OVRD2: SETZM FRASE TLZ F,TIF SETZM WRD JRST MASK2 MSKTB: 777000,, 0 17,0 @ (17) ,-1 ISTRING: PUSHJ P,SETISB PUSHJ P,IIN MOVEM D,TEM2 ISTR1: PUSHJ P,IIN CAMN D,TEM2 JRST ISTR2 PUSHJ P,SASEM JRST ISTR1 ISTR2: MOVE D,TEM JRST MASK2 SETISB: TRZN F,Q2F JRST STISB2 MOVEI W2,40 MOVE W1,WRD2 CAIN W1,6 HRRM W2,SASEM CAIN W1,7 HLLZS SASEM DPB W1,[300600,,STRB] STISB2: MOVE W1,STRB SETZM TEM POPJ P, SASEM: SUBI D,FOO SASME: IDPB D,W1 HRRI W1,TEM POPJ P, IIN: PUSHJ P,IN CAIE D,177 POPJ P, JRST ERR IN4: MOVE D,LIMBO AOSN UNECHF ;IF ECHO DESIRED, JRST TOUT ;THEN MAYBE ECHO IT POPJ P, ;OTHERWISE JUST RETURN TEXO2: TRZN F,Q2F JRST TEXSET SKIPN W1,WRD2 JRST ERR HRRM W1,TEXCT2 MOVEI W2,40 CAIN W1,6 MOVEM W2,TEXOF CAIN W1,7 SETZM TEXOF JRST TEXSET ;1) INPUT CHARACTER ;2) CHECK FOR , ,  ;3) MAYBE PRINT AND LPT IT ;4) CHECK FOR ,  .ZZ1==. LOC .ZZ0 TEXOF: 0 LCT: PUSHJ P,TSPC PUSHJ P,TSPC TSPC: MOVEI D,40 JRST TOUT TYOI: 0 ;NELSON HAC TO OUTPUT MOVE D,TYOI ;ONE CHARACTER BY LDB D,[270600,,-1(D)] PUSH P,TYOI JRST TOUT .ZZ2==. LOC .ZZ1 LISTN: PUSHJ P,TYI POPJ P, PUSHJ P,TYI4 CAIE D,^B CAIN D,^E POPJ P, CAIE D,^V CAIN D,^W POPJ P, JRST CPOPJ1 IN: AOSN UNRCHF JRST IN4 SKIPE ININST JRST IN2 PUSHJ P,TYI3 JFCL PUSHJ P,ECHOT ;IF CHARACTER SHOULD BE ECHOED, PUSHJ P,LPTR ;THEN MAYBE LPT IT JRST TYI4 LPTR: SKIPE LPTFLG .IOT LPTC,D POPJ P, TTYON: SETOM TTYFLG JRST L2 LPTF: 1,,(SIXBIT /LPT/) SIXBIT /.DDT./ SIXBIT /LPTOUT/ TOUT: PUSHJ P,LPTR SKIPN SILNT SKIPN TTYFLG POPJ P, TYO2: .IOT TYOC,D POPJ P, TYI: .LISTEN D, JUMPE D,CPOPJ TYI3: .IOT TYIC,D TYI3B: MOVEM D,LIMBO CAIN D,^S SETZM SILNT CAIE D,^E JRST TYI2 SETZM LPTFLG .CLOSE LPTC, TYI2: CAIN D,^W SETZM TTYFLG JRST CPOPJ1 ;CHECK FOR  AND  TYI4: CAIE D,^B JRST TYI1 TSOPEN LPTC,LPTF SETOM LPTFLG TYI1: CAIN D,^V SETOM TTYFLG POPJ P, ;SKIP UNLESS CHARACTER SHOULD BE ECHOED ECHOT: CAIE D,15 CAIN D,12 JRST CPOPJ1 CAIE D,^Q CAIN D,^R AOS (P) POPJ P, IN2: XCT ININST ;INPUT CHAR FROM FILE OR INFERIOR ANDI D,177 ;MASK TO 7 BITS SKIPE D CAIN D,3 JRST UVLOOK ;END IF ZERO OR ^C CAIN D,177 JRST IN ;IGNORE IF DEL PUSHJ P,TYI3B ;SET OR CLEAR VARIOUS FLAGS JFCL PUSHJ P,ECHOT PUSHJ P,TOUT JRST TYI4 ;FLOATING POINT OUTPUT TFLOT: MOVE A,D JUMPG A,TFL1 JUMPE A,FP1A MOVNS A XCT "-,CRF TLZE A,400000 JRST FP1A TFL1: MOVEI B,0 TLNN A,400 XCT "#,CRF ;NOT NORMALIZED FP1: CAMGE A,FT01 JRST,FP4 CAML A,FT8 AOJA B,FP4 FP1A: FP3: SETZB C,TEM1 ;CLEAR DIGIT CNTR, C TO RECEIVE FRACTION MULI A,400 ASHC B,-243(A) MOVE A,B PUSHJ P,FP7 XCT ".,CRF MOVNI A,10 ADD A,TEM1 MOVE W1,C FP3A: MOVE D,W1 MULI D,12 PUSHJ P,FP7B SKIPE,W1 AOJL A,FP3A POPJ P, ;GET A CHARACTER FROM THE INPUT FILE OR VALRET STRING AND SKIP, ;OR DON'T SKIP IF GETTING CHARS. FROM TTY RTYIC: SKIPN ININST ;IF GETTING CHARACTERS FROM TTY, POPJ P, ;THEN JUST RETURN SKIPGE UNRCHF ;IF CHARACTER SAVED, JRST RTYIC2 ;THEN USE IT (LEAVE UNRCHF ALONE) XCT ININST ;GET CHARACTER ANDI D,177 ;MASK TO 7 BITS CAIE D,3 ;IF NOT CONTROL C, JUMPN D,RTYIC3 ;AND NOT ZERO, THEN USE IT, SET UNRCHF, AND SKIP-RETURN MOVSI D,(MOVEI D,) ;END OF THIS FILE OR VALRET STRING, ;BUT DON'T LOOK FOR OTHERS MOVEM D,ININST ;NEXT REGULAR CHARACTER FETCH WILL GET A ZERO POPJ P, RTYIC2: MOVE D,LIMBO ;RECOVER CHARACTER JRST CPOPJ1 ;SKIP-RETURN RTYIC3: MOVEM D,LIMBO ;SAVE AS NEXT CHARACTER SETOM UNRCHF ;TELL INPUT ROUTINE TO USE IT SETOM UNECHF ;TELL INPUT ROUTINE TO ECHO IT JRST CPOPJ1 FP4: MOVNI C,6 MOVEI W2,0 FP4A: ADDI W2,1(W2) XCT,FCP(B) SOSA W2 FMPR A,@FCP+1(B) FP4B: AOJN C,FP4A PUSH P,EXPSGN(B) PUSHJ P,FP3 MOVEI D,"E PUSHJ P,TOUT POP P,D PUSHJ P,TOUT MOVE A,W2 FP7: SKIPE A ;AVOID AOSING TEM1, NOT SIGNIFICANT DIGIT AOS TEM1 IDIVI A,12 FP7A: HRLM B,(P) JUMPE A,FP7A1 PUSHJ P,FP7 FP7A1: HLRZ D,(P) FP7B: ADDI D,"0 JRST,TOUT 1.0^32. 1.0^16. FT8: 1.0^8 1.0^4 1.0^2 1.0^1 FT: 1.0^0 1.0^-32. 1.0^-16. 1.0^-8 1.0^-4 1.0^-2 FT01: 1.0^-1 FT0=FT01+1 FCP: CAMLE A, FT0(C) CAMGE A, FT(C) 0, FT0(C) EXPSGN: "- "+ ALTU: JUMPL F,ALTU3 ;DISPATCH FOR $U TLNN F,LTF ;IF $$U TYPED, GO TO ALTU3 JRST ALTU2 ;RELOAD DDT FEATURE MOVEI W2,UNAME ;REGULAR LOGIN PUSHJ P,BITE ;GET ARG INTO UNAME IN 6BIT NLOGI2: MOVE D,UNAME .LOGIN D, JRST PSDERR ;? IF LOGIN LOSES MOVEM D,RUNAME MOVEM D,RUNM1 MOVEM D,RUNM2 MOVEM D,PFILE1 MOVEM D,MSNAM ;SET SYS NAME FOR NEW JOBS .OPEN COMC,INITF ;EXECUTE .DDT. (INIT) FILE IF ANY JRST NLOGI3 MOVE D,[.IOT COMC,D] MOVEM D,ININST STRT [SIXBIT /INIT./] NLOGI3: .OPEN FDRC,MAILF ;PRINT OUT MAIL IF ANY JRST ALTL2 .FDELE OMAILF JFCL .FDELE MAILF JFCL JRST CTLF4 PSDERR: CTYPE "? JRST RET ALTU2: TLNN F,QF ;RELOAD DDT SETZM SYL PUSHJ P,IIN CAIE D,". ;MUST BE FOLLOWED BY . JRST ERR .VALUE SYL JRST ALTL2 ALTU3: TLNE F,LTF+QF ;IF ARG GIVEN, ERR JRST ERR LOGOUT: SETZM DDTTY PUSHJ P,MASAC1 ;MAKE ROOM FOR COM: DIRECTORY .FDELE OMAILF ;DELETE MAIL, IF ANY JFCL .LOGOUT ;GOOD BYE PUSHJ P,TTYRET ;HELLO? PUSHJ P,FORMF 7TYPE [ASCIZ /NOT TOP LEVEL, CAN'T LOGOUT/] JRST ERR ALTJ: MOVE A,JNAME ;$J COMMAND TLNN F,LTF JRST ALTJ2 ;IF NO ARG, GO FIND OLD JOB MOVEI W2,JNAME PUSHJ P,BITE ;GET ARG IN JNAME IN 6BIT ALTJ3: MOVE D,JNAME JUMPL F,ALTJ4 ;IF $$J CHANGE NAME OF CURRENT JOB ALTJJ: PUSHJ P,OUSR ;OTHERWISE, CHANGE CURRENT JOB JRST ALTL2 ALTJ4: PUSHJ P,QIJERR ;IS IT A REAL JOB? MOVE D,JNAME CAME D,[SIXBIT /PDP10/] CAMN D,[SIXBIT /SYS/] JRST ERR ;NOT SYSTEM .USET USRI,[.SJNAME,,D] ;SET JOB NAME (MAY LOSE) MOVEM D,UJNAME(U) ;DOCUMENT NEW NAME JRST ALTL2 ALTJ2: JUMPL F,ALTJ5 TLNN F,QF JRST ALTJ9 ;IF NO ARG, GET OLD JOB MOVE D,SYL ;IF NUMERICAL ARG, USE IT FOR JOB NAME TLNN D,770000 JRST ERR ;LOSING NAME MOVEM D,JNAME JRST ALTJ3 ;$$J (NO ARG) TYPE OUT CURRENT JOB STATUS IN $$V FORMAT ALTJ5: JUMPLE U,ALTL2 ;NOTHING IF NO JOB PUSHJ P,LCT TRO F,BPLF JRST ULIST4 BITE: MOVEI W1,SYM ;CONVERT SQUOZE SYM TO SIXBIT MOVE D,[JRST BITE5] SETZM (W2) MOVE A,[440600,,(W2)] JRST .SPT BITE5: TRC D,40 IDPB D,A POPJ P, CTLS: SETZM SILNT ;RESET SILENCE FLAG TLNN F,QF ;IF NO ARG, THAT'S IT JRST DD1 ;OTHERWISE, SET SYSTEM NAME MOVEI W2,TEM PUSHJ P,BITE TLNE F,CF ;IF $ TYPED, JRST CTLS1 ;THEN SET DDT'S SYSTEM NAME PUSHJ P,QIJERR .USET USRI,[.SSNAM,,TEM] ;SET INFERIOR PROCEDURE'S SYSTEM NAME JRST ALTL2 CTLS1: .SUSET [.SSNAM,,TEM] JUMPGE F,ALTL2 ;IF ONLY ONE $ TYPED THEN THAT'S ALL MOVE W1,TEM MOVEM W1,MSNAM ;SET SYSTEM NAME FOR NEW JOBS JRST ALTL2 LOAD: TLO F,CF ALTL: SKIPE FURN(U) JRST JERR PUSHJ P,RRFILE MOVEI A,6 HRLM A,IFILE HRRZ A,IFILE CAIN A,(SIXBIT /TTY/) TERR (SIXBIT /DEV/) TSOPEN UTIC,IFILE PUSHJ P,ALOAD ALTL4: SKIPL GETTY ALTL2: PUSHJ P,CRF ;HERE FROM UBRK1 ALTL5: SKIPL GETTY JRST DD1B ALTL3: SKIPL MONMOD CTYPE "* JRST DD1B PDUMP: PUSHJ P,RRFILE MOVEI A,3 HRLM A,IFILE TSOPEN UTOC,IFILE SETZM NCVARB .CALL PDUMPB OPNER PUSHJ P,ADMPS .CLOSE UTOC, JRST ALTL4 DUMP: ALTY: PUSHJ P,RRFILE ;SIGN OF F USED AT ADUMP PUSHJ P,ADUMP JRST ALTL4 OUSR: MOVE D,RUNAME ;CHECK USER NAME AOJE D,LOGQ ;IF RUNAME IS -1, GUY IS NOT LOGGED IN MOVEI U,USRS ;SET U TO BEGINNING OF USER STORAGE MOVE C,UNAME ;PICK UP UNAME MOVE D,JNAME ;AND JNAME OUSR2: CAME C,UUNAME(U) ;DO UNAMES AGREE? JRST OUSR5 ;NO, TRY NEXT CAMN D,UJNAME(U) ;HOW ABOUT JNAME? JRST OPUSR ;FOUND USER, MAKE HIM CURRENT JOB OUSR5: ADDI U,USRLNG ;NOT THIS ONE, BUMP TO NEXT CAIGE U,USREND ;ALL CHECKED YET? JRST OUSR2 ;NO, KEEP TRYING MOVEI U,USRS ;YES, GO BACK TO BEGINNING TO LOOK FOR FREE SLOT FOR NEW JOB OUSR3: SKIPN UJNAME(U) ;IS THIS SLOT FREE? JRST OUSR4 ;YES, CREATE NEW JOB ADDI U,USRLNG ;NO, TRY NEXT CAIGE U,USREND ;ALL CHECKED? JRST OUSR3 ;NO, TRY AGAIN MOVEI U,0 ;YES, INDICATE NO CURRENT JOB TERR (SIXBIT /TMJ/) ;AND TELL USER OUSR4: MOVE D,UNAME ;GET HERE FOR NEW JOB MOVEM D,UUNAME(U) ;SET UP UNAME AND JNAME FOR NEW JOB MOVE D,JNAME MOVEM D,UJNAME(U) CTYPE "! ;INDICATE THAT THIS IS NEW JOB SETOM PERMIT(U) ;ALLOW VALRET STRINGS MOVE D,SYMTOP MOVEM D,JOBSYM(U) ;INITIALIZE SYMTAB POINTER FOR THIS JOB MOVS D,JNAME CAIN D,(SIXBIT /SYS/) ;CHECK FOR SYS JOB JRST OUSR6 ;SYSJ OR SYS SETZM UINT(U) ;CLEAR INT WORD PUSHJ P,OPUSR ;OPEN JOB .USET USRI,[.RUIND,,D] ;PICK UP INDEX # MOVEM D,UIND(U) ;AND SAVE MOVEI D,21 MOVEM D,UINTWD(U) ;INDICATE JOB NOT YET STARTED .USET USRI,[.RUSTP,,D] ;PICK UP STOP WORD TLNE D,100000 ;SKIP IF JOB RUNNING JRST OUSR4B ;JOB STOPPED SETZM UINTWD(U) ;INDICATE JOB RUNNING JRST OUSR4A OUSR4B: .USET USRI,[.RUPC,,D] ;GET JOB'S PC CAMN D,[10000,,0] ;TEST TO SEE IF NEW JOB JRST OUSR4A ;YES MOVEM D,PPC(U) ;DISOWNED JOB. SIMULATE INTERRUPT IF NOT RUNNING SETOM UINTWD(U) OUSR4A: SKIPN FURN(U) ;IF NOT FOREIGN USER, .USET USRO,[.SSNAM,,MSNAM] ;THEN SET SYSTEM NAME APPROPRIATELY SKIPN DDTSW POPJ P, ;EXIT IF NOT OPENING SELF PUSHJ P,ELECTRON ;OTHERWISE FLUSH EXISTING SYMS TSOPEN UTIC,TSDDT ;OPEN SYS DDT FILE JRST CSMI1 ;AND LOAD SYMS THEREFROM OUSR6: MOVE D,RUNAME ;IF REAL UNAME CAME D,UNAME ;DOESN'T EQUAL INTERNAL UNAME JRST OPUSRT ;FORCE UNAME TO RUNAME SETZM UCHNLO ;INDICATE NO INFERIOR OPEN .CLOSE USRI, ;AND MAKE SURE IT'S TRUE .CLOSE USRO, SETOB A,SYSSW ;SYSTEM FLAG + BLOCK LENGTH OF 1 FOR GETSYS SETZM HIGH SETZM UINTWD(U) ;INDICATE JOB RUNNING MOVEM U,CU ;MAKE THIS CURRENT JOB MOVE B,[SIXBIT /DSYMS/] ;PREPARE TO GET SYMS FROM SYS .GETSYS A, ;SHOULD LOSE, AND PUT -LENGTH IN LH OF A PUSHJ P,HOLE ;MAKE ROOM FOR SYMS HRRZ A,JOBSYM(U) ;GET POINTER TO AREA CREATED BY HOLE .GETSYS A, ;GOBBLE GOBBLE TERR (SIXBIT /???/) ;LOSEY LOSEY AOS D,NJ1 MOVEM D,JTIME(U) POPJ P, TSDDT: SIXBIT / &SYS@ HACTRN/ OPUSR1: SKIPE VALCOM(U) ;IS THERE A VALRET STRING FROM THIS JOB? JRST OPUSRC ;YES, GO EXECUTE IT PUSHJ P,CRF ;TYPE CRLF OPUSRK: SETZM SILNT ;INSURE TYPEOUT NOT FLUSHED CAMN U,CU ;IS THIS THE CURRENT JOB? JRST OPUSR ;YES PUSHJ P,NJTYP ;NO, TYPE MUMBLEJ PUSHJ P,CRF ;AND CRLF OPUSR: JUMPE U,JERR ;COMPLAIN IF ILLEGAL JOB OPUSRN: AOS D,NJ1 ;GET NEXT JTIME VALUE MOVEM D,JTIME(U) ;INDICATE THIS JOB MOST RECENT MOVEM U,CU ;AND CURRENT SETZM UCHNLO ;AVOID IOC ERROR FROM USR IO IF .OPEN LOSES MOVE D,UJNAME(U) MOVEM D,JNAME ;SET CURRENT JNAME SETZM SYSSW ;FLUSH SYS FLAG CAMN D,[SIXBIT /SYS/] ;IS JNAME SYS? JRST OPUSRS ;YES, TAKE SPECIAL ACTION SETOM DDTSW ;SET INTROSPECTION FLAG MOVE B,RUNAME CAME B,UNAME ;CHECK FOR UNAME BEING SAME AS DDT'S SETZM DDTSW ;FLUSH FLAG IF NOT .SUSET [.RJNAM,,B] ;GET DDT'S JNAME CAME B,D ;CHECK AGAINST CURRENT JNAME SETZM DDTSW ;FLUSH FLAG IF DIFFERENT MOVEI D,2 HRLM D,UFUSR(U) ;SET OPEN MODE TO BLOCK INPUT OPUSRR: .OPEN USRI,UFUSR(U) ;OPEN JOB JRST OPUSR5 ;LOSE MOVEI D,3 HRLM D,UFUSR(U) ;SET MODE TO BLOCK OUTPUT OPUSRW: .OPEN USRO,UFUSR(U) ;OPEN JOB AGAIN JRST OPUSR6 ;WIN ON INPUT & LOSS ON OUTPUT => FOREIGN USER .USET USRI,[.RINTB,,D] ;PICK UP INTERRUPT BIT MOVEM D,INTBIT(U) ;AND SAVE SETZM FURN(U) ;INDICATE NOT FOREIGN USER SETOM UCHNLO ;INDICATE INFERIOR OPEN OPUSRB: .USET USRI,[.RMEMT,,HIGH] ;GET MEM BOUND OPUSRA: MOVE D,JOBSYM(U) MOVEM D,PRGM ;SET CURRENT SYMTAB POINTER TO POINTER FOR THIS JOB SKIPE SYSSW POPJ P, ;EXIT IF SYS SKIPE D,UINT(U) ;IS JOB RUNNING? JRST UBRK1 ;NO, TELL USER WHY POPJ P, ;YES, EXIT OPUSRS: SETOM SYSSW ;SET SYS JOB FLAG SETZM HIGH JRST OPUSRA ;BACK TO OPUSR FOR VARIOUS ODDS & ENDS ;.VALUE EXECUTED WITH EFFECTIVE ADDRESS .NE. 0 OPUSRC: MOVEI A,4 ;USED BY UBRK9 TO INDICATE LOSING VALRET SKIPE ININST ;CHECK FOR OTHER HACKS ON SOURCE OF INPUT JRST UBRK9 ;ININST NOT AVAILABLE SETZM UINT(U) ;FLUSH INTERRUPT WORD PUSHJ P,OPUSRK ;OPEN JOB MOVSI D,-1 EXCH D,VALCOM(U) ;GET & FLUSH STRING POINTER MOVEI B,(D) ;GET FIRST LOCATION OF STRING .ACCESS USRI,B ;PREPARE TO GET STRING MOVE D,[-VLRTSL,,UVCOM] ;AOBJN POINTER TO VALRET BUFFER, ASSUMING NO MEMTOP PROBLEMS SUB B,HIGH ;CALCULATE -# WORDS BETWEEN STRING AND MEMTOP CAMLE B,[-VLRTSL] ;IF NOT ENOUGH TO FILL UP THE BUFFER, HRL D,B ;THEN USE AMOUNT THAT THERE IS .IOT USRI,D ;GET THE STRING SETZM (D) ;ENSURE AN "END OF FILE" MOVE D,[ILDB D,VILDBP] MOVEM D,ININST ;REDEFINE SOURCE OF INPUT MOVE D,[440700,,UVCOM] MOVEM D,VILDBP ;INITIALIZE BYTE POINTER SETOM UINT(U) ;SET INTERRUPT WORD FOR NON-BPT INT MOVE B,UPIRQ(U) ;GET PI REQUESTS ILDB D,D ;GET CHARACTER FROM VALRET STRING TRNN B,461464 ;IF NO INTERRUPTS TO COMPLAIN ABOUT, CAIE D,^W ;AND CHARACTER IS CONTROL W, JRST UBRK0 ;... SETZM TTYFLG ;THEN SILENCE TYPEOUT NOW IBP VILDBP ;KEEP CHARACTER FROM BEING INPUT AGAIN JRST UBRK1 ALTV: JUMPGE F,ERR ;RESERVE $V FOR DISPLAY MODE ULIST: PUSHJ P,CRF MOVEM U,CU MOVEI U,USRS ULIST2: SKIPE UUNAME(U) SKIPN D,UJNAME(U) JRST ULIST1 MOVEI D," CAMN U,CU MOVEI D,"* PUSHJ P,TOUT PUSHJ P,TSPC ULIST4: SKIPN FURN(U) JRST ULIST3 MOVE D,UUNAME(U) PUSHJ P,SIXTYP PUSHJ P,TSPC ULIST3: MOVE D,UJNAME(U) PUSHJ P,SIXTYP PUSHJ P,TSPC MOVE D,UINTWD(U) CAIN D,21 XCT "-,CRF JUMPL D,ULISTP JUMPE D,ULISTR CAIL D,8 JRST ULSTRT PUSHJ P,TOC MOVEI D,"B PUSHJ P,TOUT ULSTRT: PUSHJ P,TSPC MOVE D,UIND(U) PUSHJ P,TOC TRZE F,BPLF JRST ALTL2 PUSHJ P,CRF ULIST1: ADDI U,USRLNG CAIGE U,USREND JRST ULIST2 MOVE U,CU JRST ALTL2 ULISTR: MOVEI D,"W SKIPN UINT(U) MOVEI D,"R JRST .+2 ULISTP: MOVEI D,"P PUSHJ P,TOUT JRST ULSTRT NJTYP: MOVE D,UJNAME(U) ;TYPE JNAME OF CUR JOB AND "$J" PUSHJ P,SIXTYP MOVSI D,(SIXBIT /$J/) SIXTYP: MOVEM D,TEM ;PRINT D AS SIXBIT STOPPING WHEN ZERO SETZM TEM1 MOVE C,[440600,,TEM] SIXTP2: ILDB D,C JUMPE D,CPOPJ CTYPE 40(D) JRST SIXTP2 ;N PUSHJ P,TSINTT TRNE I1,1_ PUSHJ P,TSINTC TLNN I1,177777 .DISMIS TSINT+1 SETZM DGO MOVEI I2,USRS PUSH P,A PUSH P,B PUSH P,D PUSH P,W1 PUSH P,W2 PUSH P,W3 .IOPUSH USRI, .IOPUSH USRO, TSIN2: TDZE I1,INTBIT(I2) JRST TSIN3 TSIN22: ADDI I2,USRLNG CAIGE I2,USREND JRST TSIN2 .IOPOP USRO, .IOPOP USRI, POP P,W3 POP P,W2 POP P,W1 POP P,D POP P,B POP P,A TLNN I1,-1 TERR (SIXBIT /NML/) SKIPN DGO .DISMIS TSINT+1 SKIPN DDTTY ;DDT DOESNT HAVE TTY, MAY JUST BE LEAVING SETOM DDINT;SET FLAG FOR RESTORE TO START DDT SKIPE SARS .DISMIS TSINT+1 ;DDT RUNNING MOVE A,INTUSR ;WHICH USR INTERRUPTING (DONT CLOBBER D FOR SLP) SKIPN DDTTY ;MAY REALLY STILL BE IN DDT CAMN A,TTYUSR ;NOT THE SAME AS GAVE TTY TO .DISMIS [UBREAK] ;ONLY NON-RETURN NON-ERROR EXIT FROM INTERRUPT ROUTINE PUSHJ P,TSWARN ;MESSAGE TO LOSER .DISMIS TSINT+1 ;RESTORE WORLD .ZZ4==. LOC .ZZ3 TSWARN: JSR %SAVE SKIPE GETTY .IOT TYOC,["^] .IOT TYOC,[^G] JRST %UNSAVE OTHERI: TRZE I1,BIOC PUSHJ P,IOCBRK TRZE I1,SYSDDB PUSHJ P,SYSDED TLZE I1,(SYSDBB) PUSHJ P,SYSDBG TRZE I1,BCLI PUSHJ P,CLIBRK TLNE I1,200 TERR (SIXBIT /PUR/) TRNE I1,ILUADB TERR (SIXBIT /COR/) TRNE I1,ILOPRB ;IF ILLOP, PUSHJ P,ILOPBK ;CHECK FOR CERTAIN .USET'S TRNN I1,-1 .DISMIS TSINT+1 PUSHJ P,COMPLN MOVE D,I1 HRRZ D,TSINT+1 TERR (SIXBIT /INT/) IOCBRK: SOS I2,TSINT+1 LDB I3,[270400,,(I2)] DPB I3,[270400,,IOCX] XCT IOCX ;THIS IS A .STATUS LDB I4,[330500,,I4] CAIN I4,9 JRST IOCFUL CAIN I4,8 JRST IOCOPN CAIN I4,7 JRST NOUSER ;USER NOT OPEN ON CHANNEL IOCER2: PUSHJ P,COMPLN MOVE D,I4 MOVE D,I3 HRRZ D,TSINT+1 TERR (SIXBIT /IOC/) NOUSER: CAIE I3,USRI ;IF GUILTY IO CHANNEL... CAIN I3,USRO ;IS EITHER USER IO CHANNEL, JRST .+2 ;THEN CHECK FURTHER JRST IOCER2 ;NOT USER CHANNEL, COMPLAIN MOVE I2,-1(I2) ;GET GUILTY INSTRUCTION TLZ I2,(0 17,) ;WIPE OUT AC FIELD CAME I2,[.UCLOSE] ;IF NOT .UCLOSE, JRST IOCER2 ;THEN COMPLAIN POPJ P, ;.UCLOSE, LET IT CONTINUE ILOPBK: MOVE I2,TSINT+1 ;ILLOP BREAK MOVS I3,-1(I2) ;GET GUILTY INSTRUCTION LDB I4,[050400,,I3] ;GET AC FIELD CAIE I4,USRI ;IF USER INPUT, CAIN I4,USRO ;OR USER OUTPUT, TRNE I1,20000 ;THEN CHECK FURTHER UNLESS MPV. POPJ P, ;DON'T CHECK FURTHER ANDI I3,777000 ;MASK TO INSTRUCTION PART CAIE I3,(.USET) ;IF NOT .USET, POPJ P, ;THEN GO COMPLAIN HLRZ I4,@-1(I2) ;GET LH OF CONTENTS OF EFFECTIVE ADDRESS CAIE I4,.SJNAM ;IF NOT TRYING TO SET JNAME, POPJ P, ;THEN GO COMPLAIN PUSHJ P,ERTTY ;TRYING TO SET JNAME, COMPLAIN IN ENGLISH STRT [SIXBIT /JOB ALREADY EXISTS./] JRST ERR4 IOCFUL: CAIE I3,UTOC JRST IOCER2 MOVEM I3,IOCF+2 .GENSYM I4, MOVEM I4,IOCF+3 .FDELE IOCF JRST ERR .CLOSE UTOC, MOVE I4,IFILE MOVEM I4,IOCF+2 .FDELE IOCF+2 JFCL PUSHJ P,TTYRET PUSHJ P,CRF STRT [SIXBIT /DEVICE FULL, DUMP ABORTED./] MOVE I4,IFILE TERR (I4) TSINTT: SKIPA I3,[TYIC] TSINTC: MOVEI I3,COMC .ITYIC I3, POPJ P, CAIN I3,^S JRST SILNCE CAIN I3,^E JRST LPTSTP CAIE I3,^G POPJ P, PUSHJ P,%RESET .RESET TYOC, .RESET TYIC, MOVEI I3,TQUIT MOVEM I3,TSINT+1 POPJ P, %RESET: .IOPDL ;RESET I/O PDL .CLOSE COMC, .CLOSE FDRC, .CLOSE ERRC, .CLOSE CLIC, .CLOSE CLAC, CLEARM LPTFLG .RESET LPTC, .CLOSE LPTC, SETZM DDTTY PUSHJ P,TTYRET ;GET BACK TTY IF GIVEN AWAY SETOM DDTTY SETOM TTYFLG PUSHJ P,CLSU ;CLOSE DECTAPE CHANNELS SETZM ININST SETZM SILNT ;FLUSH TIMING ERROR POPJ P, TQUIT: SKIPN UUNAME(U) SETZB U,HIGH MOVE D,[[SIXBIT /QUIT/],,101] JRST UUOH2 SILNCE: .RESET TYOC, SETOM SILNT SKIPN LPTFLG SETOM PFLUSH POPJ P, LPTSTP: SETZM LPTFLG SKIPE SILNT SETOM PFLUSH SKIPN TTYFLG SETOM PFLUSH POPJ P, TSIN3: MOVE I3,UUNAME(I2) MOVEM I3,TUNAME MOVE I3,UJNAME(I2) MOVEM I3,TJNAME MOVEI I3,2 HRLM I3,TSUSRF .OPEN USRI,TSUSRF JRST TSIN22 MOVEI I3,3 HRLM I3,TSUSRF .OPEN USRO,TSUSRF JRST TSIN22 .USET USRI,[.RPIRQC,,I3] MOVEM I3,UPIRQ(I2) ;USER PIR => UPIRQ .USET USRI,[.RMASK,,W3] ANDCM I3,W3 ANDI I3,267666 ;AND WITH BAD BITS .USET USRI,[.SAPIRQ,,I3] .USET USRI,[.RUPC,,I3] TLZ I3,OIPBIT MOVEM I3,IPC MOVEM I3,PPC(I2) ;USER PC => PPC MOVE I3,UPIRQ(I2) TRNE I3,2 ;^Z BIT JRST TSIN44 TRNN I3,BRKBIT JRST TSIN44 ;NOT A .BREAK .USET USRI,[.RSV40,,I40] TSIN3A: LDB I3,[270400,,I40] SETZM NBPTB(I2) JRST @TSDISP(I3) ;DISPATCH ON AC FIELD OF .BREAK SYSDED: JSR %SAVE 7TYPE [ASCIZ / ITS GOING DOWN IN /] .DIETIM D, IDIVI D,30. PUSHJ P,TMPT PUSHJ P,CRF %UNSAVE: POP P,UUOH POP P,40 POP P,W1 POP P,TEM POP P,D POP P,C POP P,DDTTY SKIPN DDTTY .ATTY USRI, JFCL POPJ P, SYSDBG: JSR %SAVE 7TYPE [ASCIZ / ITS BEING DEBUGGED! /] JRST %UNSAVE .ZZ5==. LOC .ZZ4 %SAVE: 0 PUSH P,DDTTY PUSHJ P,TTYRET PUSH P,C PUSH P,D PUSH P,TEM PUSH P,W1 PUSH P,VLRTSL PUSH P,UUOH JRST @%SAVE .ZZ6==. LOC .ZZ5 IOCOPN: CAIE I3,TYIC CAIN I3,TYOC JRST .+2 JRST IOCER2 TSOPEN TYOC,TYOF TSOPEN TYIC,TYIF SETZM GETTY .STATUS TYOC,I4 ANDI I4,77 CAIN I4,SYSGE SETOM GETTY POPJ P, CLIBRK: JSR %SAVE CLIBR2: .OPEN CLAC,CLAFNB JRST %UNSAVE MOVE I3,[-CLABL,,CLABUF] .IOT CLAC,I3 .CLOSE CLAC, MOVEI I4,0 MOVE I3,CLABUF CAMN I3,RUNAME ADDI I4,2 MOVE I3,CLABUF+1 CAME I3,[SIXBIT /HACTRN/] ADDI I4,1 DPB I4,[360600,,CLABRP] LDB I4,CLABRP JUMPE I4,CLIBR2 7TYPE [ASCIZ / MESSAGE FROM /] MOVE D,CLABUF PUSHJ P,SIXTYP CTYPE 40 MOVE D,CLABUF+1 PUSHJ P,SIXTYP CTYPE 40 PUSHJ P,CRF 7TYPE CLABUF+2 PUSHJ P,CRF JRST CLIBR2 TMPT: MOVEI C,0 JUMPE D,CPOPJ CAMGE D,TMT1(C) AOJA C,.-1 TMP3: IDIV D,TMT1(C) CTYPE "0(D) MOVE D,W1 TRNN C,1 AOJA C,TMP3 CAIL C,5 POPJ P, CTYPE ": AOJA C,TMP3 TMT1: 36000. 3600. 600. 60. 10. 1 COMPLN: PUSHJ P,ERTTY MOVEI D,8 MOVEM D,ODF ;SET CURRENT RADIX TO OCTAL CMPLN2: PUSHJ P,TSPC XCT @(P) PUSHJ P,TOC AOS (P) MOVEI D,", PUSHJ P,TOUT ;DON'T CHANGE TO A UUO, WILL CLOBBER 40, UUOH, ETC. JRST CMPLN2 ERTTY: PUSHJ P,TTYRET MOVNI A,1 AOSG STYSW ;IF TTYFLG NOT ALREADY SAVED, EXCH A,TTYFLG ;THEN SAVE IT MOVEM A,STYFLG POPJ P, TSIN44: TRNN I3,VALBIT JRST TSIN4A SKIPL PERMIT(I2) JRST TSIN4 .USET USRI,[.RSV40,,I3] TRNE I3,-1 MOVEM I3,VALCOM(I2) PROCX: TSIN4: SETOM I3 TSIN5: MOVEM I3,UINT(I2) TSIN6: MOVEM I2,INTUSR SKIPN DDTTY JRST TSIN7 SKIPE GETTY ;HAS TTY, TYPE BELL .IOT TYOC,["^] .IOT TYOC,[^G] ;DING TSIN7: SETOM DGO JRST TSIN22 ;LOOP BACK FOR MORE LOSERS TSIN4A: TRNN I3,OIPINT JRST TSIN4 HRRZ D,IPC CAIE D,32 CAIN D,33 AOS INCNT(I2) MOVSI D,OIPBIT SOSG INCNT(I2) JRST TSIN4 IORM D,IPC ;MAKE SURE ONEPROC BIT ON IN PC FOR PROCEDE JRST GO TSDISP: TSIN4 ;RANDOM INST., INTERRUPT DDT REPEAT NBP,TSIN9 ;REGULAR BPT REPEAT 12-NBP,TSIN4 ;RANDOM TSBPC1 TSBPC2 TSIN8 ;PROCEED INS POINTER REPEAT 2,TSIN5 ;$X RETURN 1,2 TSIN9: MOVEM I3,UINT(I2) IMULI I3,BPL ADDI I3,-BPL(I2) SOSG B1CNT(I3) JRST TSIN6 ;COUNT RAN OUT,BREAK TO DDT SKIPE D,BPCON(I3) JRST TSBPC MOVE W3,B1INS(I3) HRR W3,I40 TLZ W3,37 JRST PROC ;PROCEED AND INTERPRET BPT INS TSIN8: HRRZ I3,IPC CAIE I3,$X+1 JRST TSIN4 ;AT A RANDOM PLACE MOVE I3,OPC(I2) MOVEM I3,IPC MOVEM I3,PPC(I2) ;FAKE OUT PC DEPENDANT PROCEED MOVE W3,BPLOC(I2) LDB I3,[2200,,I40] DPB I3,[2700,,W3] JRST PROC ;INTERPRET INS @ LOC PROCEEDED FROM(POINTED TO BY .BREAK 15, IN $X) TSBPC: HRRZ I3,UINT(I2) MOVEM I3,CBPPS(I2) MOVE A,I40 HRLM A,CBPPS(I2) MOVEI A,CBPB PUSHJ P,DEP MOVSI D,(.BREAK 13,) MOVEI A,CBPB+1 PUSHJ P,DEP MOVSI D,(.BREAK 14,) MOVEI A,CBPB+2 PUSHJ P,DEP MOVEI D,CBPB MOVEM D,PPC(I2) EXCH D,IPC MOVEM D,BPCPC(I2) .USET USRI,[.SUPC,,IPC] .USET USRI,[.SUSTP,,[0]] SETZM UINT(I2) JRST TSIN22 TSBPC1: MOVE D,BPCPC(I2) MOVEM D,IPC MOVEM D,PPC(I2) HRRZ D,CBPPS(I2) IMULI D,BPL ADDI D,-BPL(I2) MOVE W3,B1INS(D) HLR W3,CBPPS(I2) TLZ W3,37 JRST PROC TSBPC2: MOVE D,BPCPC(I2) MOVEM D,IPC MOVEM D,PPC(I2) HRRZ I3,CBPPS(I2) SETOM NBPTB(I2) JRST TSIN5 UVLOOK: .CLOSE COMC, SETZB A,ININST TROA A,2 UBREAK: MOVEI A,0 PUSHJ P,TTYRET SKIPA ALTJ9: MOVEI A,1 MOVEI P,PS SETZM DDINT MOVEM U,CU SKIPN U MOVEI U,USRS SETOM THFLAG UBRK2: SKIPE D,UINT(U) JRST OPUSR1 ;JOB$J THEN JRST UBRK1 ;OPUSR1 CLOBBERS A TO 4 IF VALRET WITH ININST .NE. 0 AND DOES JRST UBRK9 UBRK9: ADDI U,USRLNG CAIGE U,USREND JRST UBRK2 MOVEI U,USRS AOSN THFLAG JRST UBRK2 MOVE U,CU TRZE A,6 JRST DD1B SKIPN A JRST ALTL2 SOS D,NJ2 MOVEM D,JTIME(U) JRST FNJOB UBRK0: PUSHJ P,CRF UBRK1: JSR SAVE PUSHJ P,REMOVB MOVEI D,0 EXCH D,UINT(U) MOVEM D,UINTWD(U) AOJE D,UBRK3 ;RANDOM INS LOSSAGE (MPV ETC) CAIG D,16 JRST UBRK4 ;BPT MOVE A,XECPC(U) MOVEM A,PPC(U) MOVE A,XINTWD(U) MOVEM A,UINTWD(U) CAIN D,20 ;$X RETURN PUSHJ P,CRF JRST ALTL5 UBRK3: MOVE D,UPIRQ(U) TDNE D,[200,,63644] SOS PPC(U) TRNE D,2 ;SKIP IF NOT CONTROL Z INTERRUPT PUSHJ P,CRF PUSHJ P,PCPNT HRRZ A,TEM3 PUSHJ P,FETCH JRST ERR PUSHJ P,CONSYM HRRZ D,UPIRQ(U) TRNE D,VALBIT+40000 AOS PPC(U) ;CAUSE PROCEDE FROM VALDD1 TO PROCEDE TRNE D,40000 .USET USRI,[.SMARA,,MARCON] JRST RET PCPNT: MOVE D,UPIRQ(U) TLNE D,200 STRT [SIXBIT /PURPG./] TRNE D,40000 STRT [SIXBIT /MAR./] TRNE D,20000 STRT [SIXBIT /MPV./] TRNE D,1000 STRT [SIXBIT /ILUAD./] TRNE D,400 STRT [SIXBIT /IOC./] TRNE D,40 STRT [SIXBIT /ILOPR./] TRNE D,20 STRT [SIXBIT /DPY./] TRNE D,4 STRT [SIXBIT /BADPI./] SKIPGE VALCOM(U) JRST PCPNT4 ;VALUE RETURN HRRZ D,PPC(U) CAIE D,31 JRST PCPNT1 MOVEI A,32 PUSHJ P,FETCH JFCL MOVEI D,-1(D) PCPNT1: MOVEM D,TEM3 PUSHJ P,PADSO MOVEI D,2 TDNE D,UPIRQ(U) JRST PCPNT2 MOVEI D,"> SKIPL NBPTB(U) PUSHJ P,TOUT JRST TOUT PCPNT2: MOVEI D,") PUSHJ P,TOUT JRST LCT PCPNT4: SETZM VALCOM(U) AOS PPC(U) ;CAUSE VALRET NOT TO UNSKIP JRST ALTL2 UBRK4: IMULI D,BPL ;BREAK POINT (D IS UINT+1) ADDI D,B1ADR-2*BPL+770000(U) PUSHJ P,PCPNT1 SOS D,PPC(U) MOVEM D,OPC(U) AOS OPC(U) PUSHJ P,PAD MOVE A,TEM3 ;@ PCPNT1 HRRZ D,-770000(A) MOVEM D,BPLOC(U) HLRZ D,-770000(A) JUMPE D,UBRK5 PUSHJ P,LCT HLRZ D,-770000(A) PUSHJ P,PLOC PUSHJ P,LI1 UBRK5: MOVE A,UINTWD(U) MOVEI B,1 LSH B,-1(A) TDNN B,AUTOPI JRST RET PUSHJ P,LISTN JRST PROCD1 JRST RET RUBLK1: .ACCESS USRI,[0] SETZM TEM1 POPJ P, RUBLK: MOVE A,HIGH MOVEI D,BUFL CAMG A,TEM1 POPJ P, ADDM D,TEM1 MOVE D,[-BUFL,,USRBF] .IOT USRI,D JRST CPOPJ1 BPBLK=31 CBPB==26 PROC: MOVEI B,100 PROC1: SOJLE B,PROCX LDB W2,[270400,,W3] LDB D,[331100,,W3] CAIN D,260 JRST IPUSHJ CAIN D,264 JRST IJSR CAIN D,265 JRST IJSP CAIN D,266 JRST IJSA CAIN D,256 JRST IXCT TRNN D,700 JRST IUUO PROCR: MOVE D,W3 ;PUT INS IN 31,JRST INS+1 IN 32,JRST INS+2 IN 33 MOVEI A,BPBLK PUSHJ P,DEP MOVE D,IPC HRRM A,IPC HRLI D,(JRST) MOVEI A,BPBLK+1 PUSHJ P,DEP MOVEI A,BPBLK+2 AOS D PUSHJ P,DEP MOVSI D,OIPBIT SKIPLE INCNT(I2) IORM D,IPC GO: .USET USRI,[.SUPC,,IPC] ;START LOSER BACK UP .USET USRI,[.SUSTP,,[0]] SETZM UINT(I2) JRST TSIN22 ;BACK FOR MORE LOSERS IJSP: TLCA W3,(MOVE#JSP) IPUSHJ: TLC W3,(PUSH#PUSHJ) MOVE D,IPC ;? HRRM W3,IPC HRRI W3,BPBLK-1 MOVEI A,BPBLK-1 PUSHJ P,DEP JRST PROCR IJSR: MOVE D,IPC HRRZ A,W3 IJSR1: PUSHJ P,DEP HRLI W3,(JRST) AOJA W3,PROCR IJSA: HRRZ A,W2 PUSHJ P,FETCH JRST PROCX HRRZ A,W3 CAILE A,HIGH JRST PROCX PUSHJ P,DEP HRRZ A,W2 HRR D,IPC HRL D,W3 JRST IJSR1 IXCT: HRRZ A,W3 IXCT1: PUSHJ P,FETCH JRST PROCX MOVE W3,D MOVEI A,100 MOVEM A,TEM2 IXCT3: LDB A,[220400,,D] JUMPE A,IXCT2 PUSHJ P,FETCH JRST PROCX ADDI W3,(D) IXCT2: TLNE W3,20 JRST IXCTIN TLZ W3,37 JRST PROC1 IXCTIN: SOSGE TEM2 JRST PROCX HRRZ A,W3 PUSHJ P,FETCH JRST PROCX DPB D,[2700,,W3] MOVE D,W3 JRST IXCT3 IUUO: CAIN D,45 JRST IBPT CAIGE D,47 CAIGE D,40 JRST .+2 ;USER UUO JRST PROCR MOVE D,W3 MOVEI A,40 PUSHJ P,DEPî MOVEI A,41 JRST IXCT1 IBPT: MOVEM W3,I40 JRST TSIN3A ADUMP: TLNN F,FAF ;IF "<" NOT TYPED, PUSHJ P,DCKSYS ;AND C(34) .NE. 0 AND TRYING TO DUMP ONTO SYS THEN BARF SKIPL F .FDELE IFILE JFCL MOVEI A,3 HRLM A,IFILE TSOPEN UTOC,IFILE PUSHJ P,ADMP .CLOSE UTOC, POPJ P, DCKSYS: HRRZ A,IFILE ;GET DEVICE NAME CAIE A,(SIXBIT /SYS/) ;IF NOT TRYING TO DUMP OUT ON SYS DEVICE (DON'T WORRY ABOUT SYS NAME), POPJ P, ;THEN OK MOVEI A,$X ;WANTS TO DUMP OUT IN SYS PUSHJ P,FETCH ;GET JOB'S LOCATION 34 JFCL ;(SHOULD SKIP) JUMPE D,CPOPJ ;IF CONTENTS WERE ZERO THEN ALL RIGHT ;JOB'S LOC. 34 NON-ZERO WHILE TRYING TO DUMP OUT ON SYS DEVICE PUSHJ P,ERTTY ;CAUSE TYPEOUT TO EXIST STRT [SIXBIT /JOB HAS BEEN RUN./] ;OVERRIDABLE WITH 1<$Y JRST ERR5 ADMP: MOVE C,[JRST 1] PUSHJ P,COUT PUSHJ P,RUBLK1 ADMP1: PUSHJ P,RUBLK JRST ADMPS ;IF NO SKIP, TIME TO WRITE OUT JMP BLK AND SYMS MOVSI A,-BUFL ;INDEX INTO USRBF ADMP7: SKIPN USRBF(A) AOBJN A,.-1 JUMPGE A,ADMP1 ;READ NEXT BLOCK OF CORE MOVEM A,W1 ;FOUND SOME NON-ZERO CORE, DUMP IT SKIPE USRBF(A) ;LOOK FOR END OF NON-ZERO BLOCK ADMP3: AOBJN A,.-1 JUMPGE A,ADMP2 ;CALL IT A BLOCK SKIPE USRBF+1(A) ;HA HA JRST ADMP3 ADMP2: MOVEM A,W2 ;SAVE FOR END TEST SUBM W1,A MOVEI C,-BUFL(W1) ;LEFT OF W1 IS BUFL TOO SMALL ADD C,TEM1 ;TEM1 IS BUFL TOO LARGE HRL C,A MOVE A,C PUSHJ P,COUT ADDI W1,UBUF HRR A,W1 .IOT UTOC,A HLL W1,C ADMP6: ROT C,1 ADD C,(W1) AOBJN W1,ADMP6 PUSHJ P,COUT MOVE A,W2 JRST ADMP7 ADMPS: PUSHJ P,DJBLK SKIPL C,JOBSYM(U) JRST DJBLK HLLZS C PUSHJ P,COUT MOVE B,JOBSYM(U) PUSHJ P,ALDRD1 ;CKSUM IN C .IOT UTOC,B PUSHJ P,COUT DJBLK: MOVE C,STARTA(U) HRLI C,(JUMPA) COUT: HRROI D,C .IOT UTOC,D POPJ P, ALD: MOVEI W1,0 ;ONLY LOADS SYMBOLS IF ALD0: PUSHJ P,GTWD ;MIDAS FILE (PAPERTPAPE LOADER BEFORE FIRST JRST) JFCL CAME B,[JRST 1] ;DDT FILE (JUMPA OR JUMP BLOCK AOJA W1,ALD0 ;NOT MACDMP FILES (NO LOADER, JRST) ALD1: PUSHJ P,GTWD JUMPGE B,ALDJ MOVE C,B ALD2: MOVE D,B CAMGE B,[-BUFL,,] HRLI B,-BUFL HRRI B,UBUF PUSHJ P,ALDRD MOVEI A,(D) .ACCESS USRO,A MOVE A,B .IOT USRO,A HLRS B HRLI B,-1(B) SUBM D,B JUMPL B,ALD2 PUSHJ P,GTWD CAME C,B JRST CKSER JRST ALD1 ALDJ: HRRZM B,PPC(U) MOVEM B,STARTA(U) TLNN F,CF POPJ P, CSMIF: JUMPN W1,ALDS TLC B,(JUMPA) TLNN B,777000 JRST ALDSS POPJ P, NLOAD: SETZM NCVARB .CALL NLOADB OPNER JRST ALD1 NLOADB: SETZ SIXBIT /LOAD/ [USRI] [UTIC] 400000,,[-4,,NCVARB] GTWD: HRROI A,B GTWD1: .IOT UTIC,A JUMPL A,EOF POPJ P, ALDSS: ;LOAD SYMBOLS ALDS: PUSHJ P,GTWD JUMPGE B,CPOPJ MOVE A,B PUSH P,B PUSHJ P,HOLE HRR B,C POP P,C PUSHJ P,ALDRD PUSHJ P,GTWD CAME C,B JRST CKSER JRST ALDS ALDRD: MOVE A,B PUSHJ P,GTWD1 ALDRD1: MOVE A,B ROT C,1 ADD C,(A) AOBJN A,.-2 POPJ P, ALOAD: JUMPL F,ALOAD2 .RESET USRI, .USET USRO,[.SSNAM,,MSNAM] ;SET SYSTEM NAME TO MASTER SYSTEM NAME MOVEI D,21 MOVEM D,UINTWD(U) PUSHJ P,ELECTRON ALOAD2: PUSHJ P,ALD .USET USRI,[.RMEMT,,HIGH] CLSU: .CLOSE UTOC, .CLOSE UTIC, POPJ P, CKSER: PUSHJ P,CLSU TERR (SIXBIT /CKS/) EOF: PUSHJ P,CLSU TERR (SIXBIT /EOF/) KILL: JUMPE U,ERR TLNN F,LTF ;DELETE SYMBOLS JRST,KILLA PUSHJ P,EVAL JRST KILL1 MOVEI D,DELO_-16. ;DELETE OUTPUT TLNE F,CCF MOVEI D,DELI_-16. ;NO INPUT OR OUTPUT DPB D,[(420200+A)] KILRET: JRST,RET KILLA: TLNN F,QF TLNN F,CCF JRST ERR PUSHJ P,ELECTRON JRST ALTL2 KILL1: MOVE A,ESTU ;REMOVE UNDEFINED SYMS JUMPGE A,UNDEF KILL2: PUSHJ P,EVAL0 JRST RET PUSHJ P,REMUN JRST KILL2 REMUN: MOVE B,[(2)2] ;REMOVE ONE UNDEFINED SYM ADDB B,ESTU MOVE C,-2(B) MOVEM C,(A) MOVE C,-1(B) MOVEM C,1(A) POPJ P, DS: MOVE A,DSSAV ;$$^C MOVEI D,DELO_-16. DPB D,[420200,,(A)] MOVE D,1(A) PUSHJ P,LOOK JRST RET JRST RET ELECTRON: PUSH P,W2 HLRE D,JOBSYM(U) HRRZ W2,JOBSYM(U) HRLS W2 SUB W2,D MOVSS W2 ;JOBSYM+NSYMS,,JOBSYM ADD D,SYMTOP BLT W2,-1(D) ;MOVE EVERTHING DOWN HLRE W1,JOBSYM(U) HRRZS A,JOBSYM(U) ;REDUCE LENGTH TO ZERO RELOC: MOVE D,[-NINFP,,USRS] ;A HAS POINT WHERE MOVE OCCURED, W1 # REGS REL1: HRRZ W2,JOBSYM(D) CAIE U,(D) CAMGE W2,A JRST .+2 ADD W2,W1 HRRM W2,JOBSYM(D) ADDI D,USRLNG-1 AOBJN D,REL1 ADD W1,SYMTOP HRRZM W1,SYMTOP HRRZS W1 LSH W1,-10. .CORE 1(W1) JFCL MOVE D,JOBSYM(U) MOVEM D,PRGM POP P,W2 POPJ P, HOLE: PUSH P,W2 ;CALLED WITH -#REGS,,0 IN A HLRE C,JOBSYM(U) ;GOBBLE SYMS MOVNS C ;NO. OF SYMS CURRENTLY THERE ADD C,JOBSYM(U) PUSH P,A ;TOP OF CURRENT SYM TABLE HLRES A MOVNS A HRRZ D,SYMTOP ;NUMBER ADDITIONAL WANTED ADD D,A HRRZS D LSH D,-10. .CORE 1(D) ;MAKE ROOM (ALSO HACKED AT RELOC) JRST HOLE2 POP P,W1 HLLZS W1 ADDM W1,JOBSYM(U) HOLE1: HRRZ D,SYMTOP SOS D HRRM A,HOLPPX ;+#REGS NEW MOVEI W1,(SETZ D) ;400000+SYMTOP-1 (AVOID PDL OV) SUB W1,C HRL D,W1 ;400000+#REGS TO MOVE-1,,SYMTOP-1 SKIPGE D HOLPOP: XCT HOLPPX ;MOVE TOP OF SYM TAB UP BY LH(A) JUMPL D,.-1 MOVE W1,A HRRZ A,JOBSYM(U) JRST RELOC HOLE2: PUSHJ P,CLSU ;CLOSE INPUT CHANNELS 7TYPE [ASCIZ /NO CORE FOR SYMBOLS/] JRST ERR TAG: TLNN F,LTF JRST NCOM ;:SYM COMMAND FORMMAT TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER JRST SETNAM ;SYM $: SET PRGM NAME MOVE C,LLOCO TLNN F,FAF ;DEFINE SYM AS VALUE< HRRZM C,DEFV ADEFIN: JUMPE U,JERR PUSHJ P,EVAL JRST DEF1 JRST DEF2 ;REDEFINE DEF1: MOVSI A,-2 PUSHJ P,HOLE MOVE A,C DEF2: MOVE D,DEFV MOVEM D,1(A) MOVSI D,GLOBAL IORB D,SYM MOVEM D,(A) MOVE A,ESTU DEF3: JUMPGE A,RET ;PATCH IN UNDEFINED SYM MOVE D,SYM CAME D,(A) JRST DEF4 MOVE B,DEFV SKIPGE 1(A) MOVNS B PUSH P,A HRRZ A,1(A) PUSHJ P,FETCH JRST ERR ADD B,D HRRM B,D PUSHJ P,DEP POP P,A PUSHJ P,REMUN DEF4: ADD A,[(2)2] JRST DEF3 CSMI: JUMPE U,JERR ;LOAD SYMS FROM FILE PUSHJ P,RRFLB MOVEI A,6 HRLM A,IFILE TLNN F,CCF PUSHJ P,ELECTRON TSOPEN UTIC,IFILE CSMI1: MOVEI W1,0 ;CLEAR COUNT PUSHJ P,GTWD CAME B,[JRST 1] AOJA W1,.-2 CSMI3: PUSHJ P,GTWD JUMPGE B,CSMIF1 CSMI2: MOVE D,B CAMGE B,[-BUFL,,] HRLI B,-BUFL HRRI B,UBUF MOVE A,B .IOT UTIC,A JUMPL A,EOF HLRS B HRLI B,-1(B) SUBM D,B JUMPL B,CSMI2 PUSHJ P,GTWD JRST CSMI3 CSMIF1: PUSHJ P,CSMIF JRST ALTL2 HWRDS: MOVEI A,HLFW-TFLOT ;H SFLOT: ADDI A,TFLOT-SATP ;F RATP: ADDI A,SATP-ITEXO ;T TEXSET: ADDI A,ITEXO-PIN ;" SYMBOL: ADDI A,PIN-FTOC ;S CON: ADDI A,FTOC ;C SET0: MOVEI C,0 JRST SET ;ALTMODE S ALTS: TRNN F,Q2F ;IF NUMBER NOT TYPED AFTER ALTMODE, JRST SYMBOL ;THEN SET TYPEOUT TO SYMBOLIC MOVEI A,SQOZO TLNN F,QF ;IF NO ARG TYPED, JRST SET0 ;THEN SET TYPEOUT MODE TO SQUOZE ;NAME$NS <=> SQUOZE N,NAME LDB D,[20400,,WRDO2] ;GET FLAGS (INTERPRETED IN OCTAL) ROT D,-4 ;ROTATE INTO FLAGS FIELD ADD D,SYM ;ADD IN THE ACTUAL SQUOZE JRST MASK2 RELA: TLNE F,QF ;R JRST,BASECH MOVEI A,PADSO-TOC ABSA: ADDI A,TOC ;A JRST SET1 SDEC: ADDI A,2 ;D SOCT: ADDI A,10 ;O SKIPA C,[2] SET1: MOVEI C,1 SET: HRRZM A,SCH(C) HRRZM A,SCHMM(C) MOVEI D,1 MOVEM D,FRASE1 JUMPGE F,QUAN3 ;FLUSH CF,CCF,AND WRD2 HRRZM A,SCHM(C) JRST RET SETNAM: JUMPE U,JERR MOVE A,JOBSYM(U) SET2: JUMPGE A,UNDEF MOVE D,(A) ADD A,[(2)2] CAME D,SYM JRST SET2 MOVEM A,PRGM JRST RET MULT: TLOA F,PTF+MLF ;* DIVD: TLO F,DVF+PTF ;SINGLE QUOTE JRST L1 ASSEM: JRST PLUS ;# MINUS: TLO F,MF PLUS: TLO F,PTF JRST LIS2 LPRN: CAML P,[(LPDL-32)] JRST,ERR PUSH P,F ;RECURSE FOR OPEN PAREN PUSH P,WRD PUSH P,FRASE PUSH P,FRASE1 AOS,PRNC JRST,LISA INDIRECT: MOVSI C,(@) IORB C,WRD TLO F,QF JRST,LIS2 ACCF: TLNN F,COMF HRRM D,COMWDX ;COMMA MOVE A,D HLLZS D LDB W1,[(410300)WRD] IDIVI W1,7 LSH A,27(W1) ADD D,A ADD D,WRD TLOE F,COMF COMWD: XCT COMWDX ;FOR THE SAKE OF PURITY MOVEM D,WRD JRST SPACE+1 SPACE: TLNE F,QF TLO F,TIF SPAC1: TLZ F,MF+PTF JRST,LIS1 OCON: TLZE F,CF ;] JRST ISTRIN TROA F,LF1+CF1 ;OPEN AS CONSTANT OSYM2: TRZ F,CF1 ;OPEN SYMBOLICALLY TROA F,LF1 SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT SLASH: TLZ F,STF ;TYPE OUT REGISTER SKIPE PRNC JRST ERR PUSH P,KILRET TLNE F,QF PUSHJ P,PLOC ;QUANTITY TYPED HLRZM D,LLOCO TLZN F,CF SLAS1: HRRZM D,LLOCO JRST LI2 OSYM: TLZN F,CF JRST OSYM2 PUSHJ P,SETISB JSTR1: PUSHJ P,IIN CAIL D,40 CAILE D,140 JRST ISTR2 PUSHJ P,SASEM JRST JSTR1 RPRN: MOVS D,WRD ;) SOSGE,PRNC JRST,ERR POP P,FRASE1 POP P,FRASE POP P,WRD POP P,F TLO F,QF TLNE F,PTF TLOE F,SF JRST,RPRN1 MOVEM D,SYL JRST,L1RPR RPRN1: ADDB D,WRD JRST,L1RPR-1 ICON: TLZE F,CF JRST IKON PUSHJ P,DEPRA ;\ JRST SLAS1 PLOC: CAMN D,LLOC POPJ P, AOS A,PLCR ;ADVANCE RING POINTER CAIL A,NLEVS SETZB A,PLCR EXCH D,LLOC MOVEM D,LOCBF(A) MOVE D,LLOC HRRZS LLOC POPJ P, TAB: JUMPL F,OEFADR ;OPEN EFFECTIVE ADDRESS TLZE F,CF MOVSS D PUSHJ P,PLOC JRST LI1B VARRW: SOS LLOC ;^ LI1B: SOS LLOC LINEF: PUSHJ P,DEPRA ;NEXT REGISTER TLZN F,CF JRST LI0 LI1A: MOVE A,PLCR ;MOVE BACK IN RING BUFFER MOVE D,LOCBF(A) SOSGE A MOVEI A,NLEVS-1 MOVEM A,PLCR HRRZM D,LLOC JRST (C) LI0: PUSHJ P,CRF LI1C: AOS D,LLOC LI1: HRRZM D,LLOC HRRZM D,LLOCO PUSHJ P,PAD MOVEI D,"/ ;SLASH TLNE F,STF MOVEI D,"! ;EXCLAMATION MARK PUSHJ P,TOUT LI2: TLZ F,ROF PUSHJ P,LCT MOVE A,LLOCO PUSHJ P,FETCH JRST ERR TLO F,ROF TLNE F,STF JRST DD2 JRST CONSYM CARR: PUSHJ P,DEPRA MOVEI C,LI1B TLZE F,CF JRST LI1A JRST DD1 DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED JRST DEPRS ;SYMBOL REFERENCES TO IT MOVE A,ESTU MOVEM W1,ESTU DEPRA2: JUMPGE A,DEPRS HRRZ C,1(A) CAMN C,LLOCO PUSHJ P,REMUN ADD A,[(2)2] JRST DEPRA2 RETYP: JUMPL F,RETY1 TLNE F,CF JRST RETY2 IRPS A,,SCH AR ODF PUSH P,A TERMIN RETY2: MOVE A,[SCHMM,,SCH] BLT A,ODF PUSHJ P,CONSYM TLNE F,CF+CCF POPJ P, IRPS A,,ODF AR SCH POP P,A TERMIN POPJ P, RETY1: MOVE A,[SCHMM,,SCHM] BLT A,ODFM JRST RETY2 EQUAL: TROA F,LF1+CF1 ;= PSYM: TRZ F,CF1 ;@ TRO F,LF1 JRST CONSYM SQOZO: R50PNT: MOVEM D,LWT ;AMPERSANT LSH D,-36 TRZ D,3 PUSHJ P,TOC PUSHJ P,TSPC MOVEI W1,LWT JRST SPT BASECH: MOVEI C,BASC1 JRST L211 ;EVAL ARG BASC1: SOJLE D,ERR MOVEI A,1(D) HRRZM A,ODF HRRZM A,ODFMM JUMPGE F,LISA HRRZM A,ODFM JRST RET AAGO: TLO F,QF\CCF SKIPE TOKTRM JRST AGO2 ;NO ARG PUSHJ P,RONUM JRST AGO2 MOVE D,B AGO: HRLI D,(JRST) TLC F,QF+CCF TLCN F,QF+CCF MOVEM D,STARTA(U) TLOE F,QF JRST HGO AGO2: SKIPE D,STARTA(U) XEC: TLNN F,QF ;X JRST ,ERR HGO: MOVEM D,34SAV PUSHJ P,QJERR MOVEI A,0 EXCH A,UINTWD(U) JUMPE A,ERR ;PROG RUNNING MOVEM A,XINTWD(U) TLZ F,LTF MOVE D,PPC(U) MOVEM D,XECPC(U) AOS XCRFSW XEC1B: MOVEI D,34 HRRM D,PPC(U) XEC1A: AOS D,XCRFSW CAIE D,1 ;IF SWITCH WASN'T SET, PUSHJ P,CRF ;THEN TYPE CRLF PUSHJ P,INSRTB TLNE F,LTF JRST PROCE2 ;^P PUSHJ P,TTYLEV JRST RESTORE ;$X,$P OR ANY RANDOM INT PROCEED CTLP: TLOA F,LTF PROCED: TLZ F,LTF MOVE A,UINTWD(U) SOS A PUSHJ P,AUTOP1 TLNN F,QF PROCD1: MOVEI D,1 AOS XCRFSW ;INCREMENT CRF SWITCH IN CASE OF ERROR PUSHJ P,QJERR MOVEI A,0 EXCH A,UINTWD(U) TLNE F,LTF JUMPE A,PROCD2 ;^P ON RUNNING PROGRAM JUMPE A,PRUN ;RUNNING, GIVE IT TTY MOVSI B,OIPBIT SKIPLE INCNT(U) IORM B,PPC(U) JUMPL A,XEC1A ;STOPPED BY RANDOM INT, START IT BACK UP CAIN A,21 JRST PROCD2 ;NOT PROCEEDABLE IMULI A,BPL ADDI A,-BPL(U) MOVEM D,B1CNT(A) MOVE A,BPLOC(U) PUSHJ P,FETCH JRST ERR MOVEM D,BPLOC(U) MOVSI A,(.BREAK 15,) TLZ D,777740 IOR D,A MOVEM D,34SAV JRST XEC1B ONEPRO: JUMPL F,ERR TLZN F,QF MOVEI D,1 SKIPL D MOVEM D,INCNT(U) MOVSI D,400 ;MAR INT BIT IORM D,PPC(U) ;PUT IT IN TLNN F,CF JRST PROCED JRST CTLP ;NO TTY PROCE2: .ACCESS USRO,[34] MOVE D,[-3,,34SAV] .IOT USRO,D MOVE D,PPC(U) .USET USRI,[.SUPC,,D] .USET USRI,[.SUSTP,,[0]] JRST DD1 PROCD2: EXCH A,UINTWD(U) JRST ERR PRUN: SKIPE FURN(U) JRST PROCD2 PUSHJ P,CRF PUSHJ P,TTYLEV SETZM SARS JRST SLP TEXO: TLNE F,CF JRST TEXO2 MOVEM D,LWT ;DOUBLE QUOTE ITEXO: SETZM TEMT MOVE W1,D TDNE W1,[-1,,777400] JRST TEXO1 SKIPN TEXOF LSH W1,1 TEXO1: MOVEI D,0 TEXO10: JUMPE W1,CPOPJ TEXO11: XCT TEXCT2 TEXO12: SKIPN TEMT JUMPE D,TEXO1 SETOM TEMT ADD D,TEXOF PUSHJ P,TOUT JRST TEXO1 ASLASH: TLZE F,CF JRST INFO TLNN F,QF JRST QUESTN CTYPE "/ JRST SLASH INFO: MOVE A,[SIXBIT /INFO/] MOVEM A,SYSN2 JRST CCTLH IKON: MOVEM D,LWT PUSHJ P,EASETU ;SET UP AC'S FOR EFF ADR SEARCH PUSHJ P,EFFEC0 JRST ERR MOVE A,D PUSHJ P,FETCH JRST ERR JRST OVRD2 OEFADR: PUSHJ P,EASETU ;$$\ PUSHJ P,EFFEC0 JRST ERR PUSHJ P,PLOC JRST LI1B ;INSERT BREAKPOINTS INSRTB: MOVEI B,B1ADR(U) MOVE W1,[.BREAK 1,] INSRT1: SKIPE A,(B) PUSHJ P,FETCH JRST INSRT2 MOVEM D,B1INS-B1ADR(B) TLZ D,777740 IOR D,W1 PUSHJ P,DEPCLA INSRT2: ADD W1,[0 1,] ADDI B,BPL CAIE B,BPEND(U) JRST INSRT1 POPJ P, ;REMOVE BREAKPOINTS REMOVB: MOVEI B,B1ADR(U) REMOV1: SKIPE A,(B) PUSHJ P,FETCH JRST REMOV2 LDB W1,[271500,,B1INS-B1ADR(B)] DPB W1,[271500,,D] PUSHJ P,DEPCLA REMOV2: ADDI B,BPL CAIE B,BPEND(U) JRST REMOV1 POPJ P, BPS: PUSHJ P,QJERR TLZE F,QF JRST,BPS1 TRZE F,Q2F JRST,BPS2 JUMPGE F,BPS6 MOVEI D,B1ADR+1(U) HRLI D,-1(D) SETZM B1ADR(U) BLT D,BPEND-1(U) JRST DD1 BPS6: MOVE D,UINTWD(U) CAIL D,1 CAILE D,10 JRST ERR MOVEI A,0 TRO F,BPLF JRST BPS7 BPS1: TRZN F,Q2F JRST,BPS3 MOVE A,D TRO F,BPLF BPS2: MOVE D,WRD2 CAIL D,1 CAILE D,11 ;ALLOW $9B FOR HACKS IN USER AREA JRST,ERR BPS7: IMULI D,BPL ADDI D,B1ADR-BPL+770000(U) TRZN F,BPLF JRST,MASK2 SUBI D,770000 EXCH A,D JRST BPS5 BPS3: MOVEI A,B1ADR(U) BPS4: HRRZ C,(A) CAIE C,(D) SKIPN C JRST,BPS5 ADDI A,BPL CAIGE A,BPEND(U) JRST,BPS4 JRST,ERR BPS5: SKIPN FURN(U) SKIPN UINTWD(U) JRST ERR ;DON'T INSERT BPTS WHEN RUNNING MOVEM D,(A) SETZM,1(A) SETZM,2(A) AUTOP: SUBI A,B1ADR(U) IDIVI A,BPL AUTOP1: MOVEI B,1 LSH B,(A) ANDCAM B,AUTOPI TLNE F,CCF IORM B,AUTOPI POPJ P, DEPRS: MOVEM D,LWT DEPR: MOVE A,LLOCO ;QUAN TYPED IN REGIS EXAM TLZE F,ROF TLNN F,QF POPJ P,0 DEPCLA: TLZ A,-1 ;LH (A) MUST BE CLEAR, THIS IS ENTRY TO DO IT DEP: SKIPE SYSSW JRST DEP0 TRC A,760000 TRCN A,760000 JRST DEP1 SKIPE DDTSW JRST DEP4 PUSHJ P,QIJERR .ACCESS USRO,A HRROI W4,D .IOT USRO,W4 POPJ P, DEP0: SKIPL SYSDPS JRST ERR MOVSI W4,D HRR W4,A .SETLOC W4, POPJ P, DEP4: CAML A,HIGH JRST ERR MOVEM D,(A) POPJ P, DEP1: TRC A,10000 TRCE A,10000 JRST DEP2 MOVEM D,-770000(A) POPJ P, DEP2: PUSHJ P,QIJERR ANDI A,177 CAMLE A,MAXUSET JRST ERR DPB A,[220700,,DEP3] .USET USRI,DEP3 POPJ P, DEP3: SETZ F,D FETCH: HRRZ D,A SKIPE SYSSW JRST FETCHA CAIL D,760000 JRST FETCH1 SKIPE DDTSW JRST FETCHB CAML D,HIGH JRST FETCH2 FTCH2A: .ACCESS USRI,D HRROI W4,D .IOT USRI,W4 JRST CPOPJ1 FETCH2: SKIPE UCHNLO .USET USRI,[.RMEMT,,HIGH] CAML D,HIGH POPJ P, JRST FTCH2A FETCH1: TRC A,10000 TRCE A,10000 JRST FETCH3 MOVE D,-770000(A) JRST CPOPJ1 FETCH3: ANDI A,177 CAIL A,100 CAILE A,157 CAMG A,MAXUSET FETCH6: SKIPN UCHNLO POPJ P, DPB A,[220700,,FETCH4] .USET USRI,FETCH4 JRST CPOPJ1 FETCHA: MOVS D,A HRRI D,D .GETLOC D, JRST CPOPJ1 FETCHB: CAML A,HIGH JRST ERR MOVE D,(A) JRST CPOPJ1 FIRARG: MOVEM D,DEFV TLO F,FAF JRST,ULIM1 ULIM: TLO F,SAF HRRZM D,ULIMIT ULIM1: TLNE F,CF JRST OVRD TLNN F,QF JRST,ERR JRST,LISB LOOK: SETZB W1,B JUMPE U,LOOK1 MOVSI W1,DELI+DELO MOVE A,PRGM MOVSI W2,PNAME SKIPGE D MOVSI B,400000 MOVE C,[444400,,ENDT] MOVEM C,TEM LEND1A: ILDB C,TEM MOVEM C,LLUP1 JRST LLUP+1 ENDT: SKIPL A ;LOOK AT REST OF SYM TABLE MOVE A,JOBSYM(U) ;THEN LOOK THRU BOTTOM CAMN A,PRGM ;UP TO CURRENT PRGM MOVE A,ISYMP ;THEN THRU INITAL SYMS CAMN A,ISYME ;STOP AT END OF INITIAL SYMS TLZA W1,-1 ;EXIT, SIGNAL NOT FOUND ANYTHING LLUP: ADD A,[2,,2] XCT LLUP1 ;END TEST JRST LEND1 CAML D,1(A) CAML B,1(A) JRST LLUP HLLZ C,W1 TDNN W2,(A) ;PRGM NAME TLOA W1,LOCAL ;STOP LOOKING FOR LOCALS TDNE C,(A) ;SKIP ON BAD BITS SET (DELO,DELI, MAYBE LOCAL) JRST LLUP ;WRONG FLAVOR SYM HRR W1,A CAMN D,1(A) JRST SPT ;EXACT MATCH MOVE B,1(A) ;NEW BEST SO FAR JRST LLUP LEND1: AOS C,TEM XCT (C) JRST LEND1A LOOK1: MOVEM D,TEM TRNE W1,-1 SUB D,B ;SUBTRACT TO FIND REMAINDER OF SYMBOLIC QUAN JRST CPOPJ1 MARSET: PUSHJ P,QJERR TLNN F,FAF JRST .+3 MOVSS D HRR D,DEFV TLNN D,7 HRLI D,6 TLNN F,QF+FAF JRST MARS1 HRRZ A,D CAML A,HIGH JRST ERR MOVEM D,MARCON .USET USRI,[.SMARA,,MARCON] JRST ALTL2 MARS1: SETZM MARCON .USET USRI,[.SMARA,,MARCON] JRST ALTL2 CONSYM: MOVEM D,LWT CONSM: TRNN F,LF1 CONS1: JRST @SCH TRNE F,CF1 JRST, FTOC ;VALUE TO BE TYPED IN D PIN: TRZ F,NAF+OPERF1+OPERF2 TLC D,700000 TLCN D,700000 JRST INOUT PUSHJ P,OPTYPE MOVSI D,777000 AND D,LWT CAMN D,[.CALL] JRST PCALL CAMN D,[.OPER] JRST POPER JUMPE D,PI3+1 TRNN F,1RF PI3.05: PUSHJ P,LOOK PI3.1: TROA F,NAF JRST HLFW PI3: PUSHJ P,TSPC LDB D,[(270400)LWT] ;AC JUMPE D,PI4 PUSHJ P,PAD PI3A: XCT ",,CRF PI4: TRNE F,OPERF2 POPJ P, PI4A: MOVE W1,LWT MOVEI D,"@ ;AT SIGN TLNE W1,20 ;CHECK FOR INDIRECT BIT PUSHJ P,TOUT PI5: HRRZ D,LWT LDB W1,[(331100)LWT] CAIL W1,240 CAILE W1,247 PUSHJ P,SPAD PUSHJ P,PADS3A PI7: TRZ F,NAF LDB A,[(220400)LWT] ;INDEX REGISTER CHECK JUMPE A,PADS1 PI7.1: XCT "(,CRF move d,a PUSHJ P,PAD MOVEI D,") JRST TOUT ;EXIT POPER: HRLOI D,777037 TROA F,OPERF1 PCALL: MOVSI D,777740 AND D,LWT PUSHJ P,LOOK JRST PI4.1 MOVSI D,777000 AND D,LWT JRST PI3.05 PI4.1: TROE F,OPERF1+OPERF2 JRST PI3 PUSHJ P,TSPC JRST PI4A HLFW: TRO F,NAF HLRZ D,LWT PUSHJ P,PAD XCT ",,CRF XCT ",,CRF SKIPA D,LWT SPAD: AOS (P) PAD: ANDI D,777777 ;PRINT ADDRESS JRST @AR ;PADSO OR PAD1 PADSO: JUMPE D,TOC2+1 PUSHJ P,LOOK PADS1: POPJ P,0 MOVE W2,1(W1) CAIGE D,100 CAIGE W2,60 JRST,PADS3 MOVEM D,TEM JUMPE W1,PAD1 PUSHJ P,SPT PADS3D: XCT "+,CRF PADS2: HRRZ D,TEM PAD1: JRST TOC ;EXIT PADS3: MOVE D,TEM PADS3A: TRNE F,NAF CAIGE D,776000 JRST PADS3C PADS3B: MOVNM D,TEM PADS4: XCT "-,CRF JRST PADS2 INOUT: TDC D,[(,-1)400000] TDCN D,[(,-1)400000] JRST PADS3B HLRZ A,D CAILE A,(CONO 774,@) JRST HLFW AND D,[(700340)] PUSHJ P,LOOK JRST,.+2 JRST,HLFW PUSHJ P,TSPC MOVE D,LWT AND D,[(77400)] INOUT1: JUMPE D,PI4 ;USED BY "WORD" PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER JRST,PI3A MOVE D,TEM LSH D,-30 PUSHJ P,TOC JRST,PI3A PADS3C: CAIL D,B1ADR+770000(U) CAIL D,BPEND+770000(U) JRST TOC SUBI D,B1ADR+770000(U) IDIVI D,BPL PUSH P,D XCT "$,CRF POP P,D ADDI D,"1 PUSHJ P,TOUT MOVEM W1,TEM MOVEI D,"B PUSHJ P,TOUT JUMPE W1,CPOPJ JRST PADS3D MASK: TLNE F,QF JRST MASK1 MOVEI D,MSK+770000 MASK2: MOVEI C,1 MOVEM C,FRASE1 JRST QUAN1 MASK1: MOVEM D,MSK JRST RET EASETU: .ACCESS USRI,[0] MOVE A,[-20,,AC0] .IOT USRI,A POPJ P, EFFEC: JUMPE U,JERR TLO F,LTF SKIPN SYSSW SKIPE DDTSW JRST AWORD PUSHJ P,EASETU HRRZ D,D AWORD: SKIPA C,INOUT1 ;JUMPE D, NWORD: MOVSI C,(JUMPN D,) HLLM C,SEAR2 SEARC: JUMPE U,JERR TLZN F,QF JRST ERR SETOM BADR SETCAM D,WRD MOVE D,ULIMIT TLNE F,SAF TLO F,QF PUSHJ P,SETUP1 PUSHJ P,CRF PUSHJ P,MORFIN SEAR1: HRRZ D,BADR XORI D,(A) TRNN D,777600 JRST SEAR1A SKIPN SYSSW JRST SEAR1C MOVS D,A HRRI D,D .GETLOC D, JRST SEAR1D SEAR1C: SKIPE DDTSW JRST SEAR1E PUSH P,A ANDI A,<-1>#177 HRRZM A,BADR .ACCESS USRI,A MOVE D,[-BUFL,,UBUF] .IOT USRI,D POP P,A JRST SEAR1 SEAR1A: SKIPA D,UBUF(D) SEAR1E: MOVE D,(A) SEAR1D: TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH JRST SEAR2B SEAR1B: EQV D,WRD AND D,MSK SEAR2: JUMPE D,SEAR3 TRNN A,77 SEAR2A: PUSHJ P,LISTN AOBJN A,SEAR1 JRST ALTL4 SEAR2B: PUSHJ P,EFFEC0 JRST SEAR4 EQV D,WRD ANDI D,777777 JRST SEAR2 SEAR3: PUSHJ P,FETCH JRST ERR MOVEM D,LWT ;SET $Q FROM CONTENTS OF LOCATION MOVEM A,TEM2 MOVEM A,D HRRZM A,LLOCO ;UPDATE CURRENT LOCATION PUSHJ P,PLOC ;ADVANCE RING POINTER PUSHJ P,PAD ;PRINT ADDRESS XCT "/,CRF PUSHJ P,LCT MOVE D,LWT ;GET $Q AS STORED ABOVE PUSHJ P,CONSYM PUSHJ P,CRF PUSHJ P,MORFLS JRST ALTL2 SEAR4: MOVE A,TEM2 JRST, SEAR2A EFFEC0: MOVEM A,TEM2 ;CALLED BY SEARCH AND $\ SKIPN SYSSW SKIPE DDTSW JRST EFFEC3 MOVEI C,100 MOVEM C,TEM EFFEC1: MOVE C,D LDB A,[(220400)D] JUMPE A,EFFEC2 HRRZ D,AC0(A) ADD D,C EFFEC2: HRR A,D TLNN C,20 ;INDIRECT BIT CHECK JRST EFFEC3 SOSE TEM PUSHJ P,FETCH JRST EFFEC4 JRST EFFEC1 EFFEC3: AOS (P) EFFEC4: MOVE A,TEM2 POPJ P, SETUP: TLO F,LTF ;ZERO SETUP1: MOVEI D,1(D) TLNN F,QF SETUP2: JRST SETUP3 SETUP4: HRRM D,ULIMIT HRRZ A,DEFV TLNN F,FAF MOVEI A,0 SKIPE HIGH CAMG D,HIGH CAML A,ULIMIT JRST ERR MOVEM A,DEFV MOVE C,A SUB C,ULIMIT HRLM C,A POPJ P,0 SETUP3: SKIPE UCHNLO .USET USRI,[.RMEMT,,HIGH] HRRZ D,HIGH SKIPE SYSSW MOVEI D,60000 JRST SETUP4 ZERO: PUSHJ P,QJERR SKIPE FURN(U) JRST JERR JUMPGE F,ERR SETZM UBUF MOVE C,[UBUF,,UBUF+1 BLT C,UBUF+BUFL-1 PUSHJ P,SETUP TLZ A,-1 .ACCESS USRO,A ZERO1: HRRI D,UBUF HRL D,C CAMGE C,[-BUFL HRLI D,-BUFL .IOT USRO,D ADDI C,BUFL JUMPL C,ZERO1 JRST DD1 FTOC: TOC: HRRZ W1,ODF CAIN W1,12 JRST, TOC4 TOCA: LSHC D,-43 LSH W1,-1 ;W1=D+1 TOC1: DIVI D,@ODF HRLM W1,0(P) TOC3: JUMPE D,TOC2 PUSHJ P,TOCA TOC2: HLRZ D,0(P) ADDI D,"0 CJTOUT: JRST TOUT ;DOES POPJ TO TOC2 OR EXIT TOC4: MOVM W1,D JUMPGE D,TOC5 XCT "-,CRF TOC5: MOVEI D,0 PUSHJ P,TOC1 TPER: MOVEI D,". JRST TOUT SPT: MOVE D,CJTOUT .SPT: MOVEM D,SPTS MOVE D,0(W1) ;SYMBOL PRINT MOVEM W1,DSSAV TLZ D,740000 SPT1: IDIV D,[50*50*50*50*50] PUSHJ P,SPT2 MOVE D,W1 IMULI D,50 JUMPN D,SPT1 POPJ P, SPT2: ADDI D,260-1 CAILE D,271 ADDI D,301-272 CAILE D,332 SUBI D,334-244 CAIN D,243 MOVEI D,256 XCT SPTS POPJ P, TTYRET: SKIPN DDTTY .DTTY USRI, POPJ P, .RESET TYIC, SETOM DDTTY POPJ P, TTYLEV: MOVEM U,TTYUSR SETZM DDTTY .ATTY USRI, TERR (SIXBIT /CFT/) POPJ P, CPATCH: TLNN F,ROF JRST ERR MOVE D,WRD MOVE A,LLOCO TLNE F,QF PUSHJ P,DEPRA MOVE D,[SQUOZE 0,PATCH PUSHJ P,SYME1 JRST CPTCH2 CPTCH3: MOVEM D,PATCHL(U) CPTCH1: PUSHJ P,CRF TRO F,PF MOVE A,LLOCO MOVEM A,CPTCHL MOVEM A,CPTCHM PUSHJ P,FETCH JRST PERR PUSH P,D MOVE D,PATCHL(U) PUSHJ P,LI1 PUSHJ P,LCT POP P,D TLO F,QF+ROF MOVEM D,WRD PUSHJ P,CONSYM JRST LIS1 CPTCH2: MOVE D,[SQUOZE 0,PAT PUSHJ P,SYME1 MOVEI D,50 JRST CPTCH3 SYME1: MOVEM D,SYM JRST EVAL PERR: TRZA F,PF CEOP: TRZN F,PF JRST ERR PUSHJ P,CRF TLNE F,ROF JRST CEOP2 CEOP3: MOVE A,CPTCHL PUSHJ P,ERF TLNE F,CF PUSHJ P,FDEP TLO F,LTF CEOP1: AOS D,CPTCHL HRLI D,(JUMPA 1,) PUSHJ P,FDEP TLZE F,LTF JRST CEOP1 SOS D,CPTCHM EXCH D,LLOC AOS D EXCH D,PATCHL(U) HRLI D,(JUMPA 3,) TLNE F,CF HRLI D,(JUMPA 2,) PUSHJ P,FDEP MOVE D,[SQUOZE 0,PATCH MOVEM D,SYM PUSHJ P,EVAL JRST CPND JRST CPD CPND: MOVSI A,-2 PUSHJ P,HOLE MOVE A,C CPD: MOVE D,PATCHL(U) MOVEM D,1(A) MOVSI D,GLOBAL IOR D,SYM MOVEM D,(A) JRST DD1 CEOP2: MOVE D,WRD MOVE A,LLOCO TLNE F,QF PUSHJ P,DEPRA ;WILL CLEAR ROF TLNE F,ROF SOS LLOC JRST CEOP3 FDEP: PUSH P,D PUSHJ P,LI1C PUSHJ P,LCT MOVE D,(P) PUSHJ P,CONSYM PUSHJ P,CRF POP P,D MOVE A,LLOC TLO F,QF+ROF MOVE W1,ESTU JRST DEPRA UNPATCH: TLNN F,ROF JRST ERR MOVE A,LLOCO PUSHJ P,ERF MOVE A,D TLC D,(JUMPA 2,) TLNN D,-1 JRST UNPA1 UNPA2: PUSHJ P,ERF PUSH P,D PUSHJ P,CONSYM POP P,D TLO F,QF JRST CARR UNPA1: MOVEI W1,100. UNPA3: PUSHJ P,ERF TLC D,(JUMPA 1,) TLNN D,-1 SOJA A,UNPA2 SOJL W1,ERR AOJA A,UNPA3 ERF: PUSHJ P,FETCH JRST ERR POPJ P, PURIFY: MOVEI A,MINPUR+MINPUR_9+400000 .CBLK A, .VALUE [ASCIZ /:PURIFY LOST/] ADDI A,1001 CAIE A,400000+NPUR_9+NPUR JRST PURIFY+1 .VALUE [ASCIZ /:PURIFIED/] JRST DDT INITF: SIXBIT / DSK/ SIXBIT /.DDT./ SIXBIT /(INIT)/ TYIF: 30,,(SIXBIT /TTY/) SIXBIT /.DDT. TYI/ TYOF: 1,,(SIXBIT /TTY/) SIXBIT /.DDT. TYO/ .ZZ7==. LOC .ZZ6 SAVE: 0 SETOM SARS MOVEI P,PS MOVE F,[SCHM,,SCH] BLT F,ODF SETZB F,F JRST @SAVE .ZZ8==. LOC .ZZ7 RESTORE: RESTR1: .ACCESS USRO,[34] MOVE D,[-3,,34SAV] .IOT USRO,D MOVE D,PPC(U) .USET USRI,[.SUPC,,D] RESTR2: SETZM SARS .USET USRI,[.SUSTP,,[0]] SLP: PUSHJ P,RTYIC ;GET CHAR FROM VALRET OR FILE JRST SLP2 ;NONE AVAILABLE CAIE D,^V ;IF NEXT CHARACTER CONTROL V, JRST SLP2 ;... PUSHJ P,IN ;THEN GOBBLE DOWN CHARACTER, SETOM TTYFLG ;AND TURN ON TYPEON NOW SLP2: SKIPE DDINT JRST UBREAK MOVSI D,200000 .SLEEP D, ;YAWN CRF: JSR I4,TYOI LF: MOVEI D,12 ;LINE FEED JRST TOUT TATP: CAIG D,44 SKIPG D JRST ERR MOVEI C,36. DPB D,[300600,,SATPP] IDIV C,D MOVEM C,SATPC JRST RATP SATP: MOVEI C,44 DPB C,[360600,,SATPP] MOVE C,SATPC MOVEM D,SATPT SATPL: ILDB D,SATPP PUSHJ P,TOC PUSHJ P,TSPC SOJG C,SATPL POPJ P, CTLX: TLNE F,CF JRST MURDER PUSHJ P,QJERR ;DOES NOT ALLOW SYS SKIPE UINTWD(U) JRST ERR .USET USRI,[.SUSTP,,[-1]] .USET USRI,[.SIPIRQ,,[2]] JRST RESTR2 MURDER: SKIPL F JUMPE U,JERR ;ALLOW SYS PUSHJ P,IIN CAIE D,". JRST ERR JUMPL F,MASACR JKILL2: PUSHJ P,MRDR FNJOB: MOVEI U,USRS SETOM TEM FNJOB4: SKIPN UUNAME(U) JRST FNJOB5 MOVE A,JTIME(U) CAMG A,TEM JRST FNJOB5 MOVEM A,TEM MOVEM U,TEM1 FNJOB5: ADDI U,USRLNG CAIGE U,USREND JRST FNJOB4 SKIPGE TEM JRST MASAC4 MOVE U,TEM1 PUSHJ P,TSPC PUSHJ P,NJTYP PUSHJ P,OPUSRN JRST ALTL2 MRDR: MOVE D,UJNAME(U) CAMN D,[SIXBIT /SYS/] JRST MRDR3 SETZM UCHNLO .UCLOSE USRI, MRDR2: SETZM UUNAME(U);(FOR TRANDL) ;CALLED BY OPUSRT .TRANDL UUNAME(U) ;FLUSH ALL TRAN ENTRIES FOR THIS JOB JFCL MRDR3: SETZM UUNAME(U) SETZM SYSSW SETZM DDTSW HRRI D,UUNAME(U) HRLS D AOS D BLT D,USRLNG-2(U) ;DON'D WIPE OUT JOBSYM JRST ELECTRON MASACR: PUSHJ P,MASAC1 MASAC4: SETZB U,HIGH JRST ALTL2 MASAC1: MOVEI U,USRS MASAC2: SKIPN D,UJNAME(U) JRST MASAC3 MOVEI A,2 HRLM A,UFUSR(U) ;MAKE SURE INPUT MODE, WIN FOR FOREIGN USERS CAME D,[SIXBIT /SYS/] .OPEN USRI,UFUSR(U) JFCL PUSHJ P,MRDR MASAC3: ADDI U,USRLNG CAIGE U,USREND JRST MASAC2 POPJ P, DISOWN: PUSHJ P,QIJERR ;REALLY $$^H OR :DISOWN SETZM UCHNLO .DISOWN USRI, TERR (SIXBIT /DSN/) PUSHJ P,MRDR2 JRST FNJOB CTLD1: SKIPN GETTY CTYPE "^ SKIPE GETTY CTYPE "_ JUMPGE F,CTLD4 SKIPN SUSMNG SKIPN SYSSW JRST CTLD3 CTYPE "D SETOM SYSDPS CTYPE "? JRST RET CTLD2: SETOM SUSMNG SETZM SYSDPS JRST ERR CTLD3: CTYPE "D JRST ERR CTLD4: CTYPE "R JRST ERR CTLY: PUSHJ P,QJERR TLNE F,CCF ;"$$" TYPED? JRST ALTCY ;GO MOVE SYMBOLS INTO USER'S CORE PUSH P,D TLNE F,CF PUSHJ P,ELECTRON HLLZ A,(P) JUMPE A,ALTL2 HLRE B,A MOVNS B ADD B,(P) HRRZS B CAML B,HIGH JRST ERR PUSHJ P,HOLE HRRZ A,(P) ;GET ADDRESS OF BEGINNING OF AREA .ACCESS USRI,A POP P,A ;RESTORE WHOLE AOBJN POINTER HRR A,C .IOT USRI,A JRST ALTL2 ALTCY: .ACCESS USRI,D ;ACCESS AOBJN POINTER PUSH P,D ;STACK ACCESS POINTER HRROI A,D ;SET UP IOT .IOT USRI,A ;GET AOBJN POINTER JUMPGE D,YERR1 ;OBVIOUSLY NOT AOBJN POINTER PUSH P,D ;STACK AOBJN POINTER HRRZ A,D ;GET LOW ADDRESS HLRE D,D ;GET COUNT MOVM D,D ;GET COUNT MAGNITUDE ADD A,D ;GET THEORETIC HIGH ADDRESS .USET USRI,[.RMEMT,,D] ;GET TOP OF WORLD CAML A,D ;ADDRESS TOO HIGH? JRST YERR2 ;YES HLRE A,JOBSYM(U) ;ENOUGH ROOM FOR ADDITIONAL SYMBOLS? HRRZ D,(P) ADD D,A JUMPL D,YERR2 ;NO .ACCESS USRO,D ;AND TRANSFER THE SYMBOLS MOVE D,JOBSYM(U) .IOT USRO,D HLRE A,JOBSYM(U) ;GET NEW SYMBOL COUNT HLRE D,(P) ADD D,A HRLZ D,D ;TRUNCATE COUNT HRR D,(P) ;GET NEW LOW ADDRESS ADDI A,(D) HRR D,A .ACCESS USRO,-1(P) HRROI A,D .IOT USRO,A ;AND SAVE IT SUBI P,2 ;UNWIND THE STACK JRST ALTL2 YERR2: SOS P YERR1: SOS P TERR DISP: ERR,,CTLA L2,,DS CTLD2,,L2 CTLF,,L2 ACTRLH,,TAB LINEF,,ACTRLH L2,,CARR ONEPRO,,CTLO CTLP,,VARRW ;CTL Q IS BLACK UP ARROW BUTTON CTLD1,,CTLS CTLT,,CTLU TTYON,,L2 CTLX,,CTLY ERR,,CONTROL CPATCH,,CEOP ERR,,UNPATCH SPACE,,SUPTYO TEXO,,ASSEM DOLLAR,,PERC R50PNT,,DIVD LPRN,,RPRN ;ALL DISPATCHES AFTER RPRN HAVE ARG EVALUATED MULT,,PLUS ACCF,,MINUS PERIOD,,SLASH NUM,,NUM NUM,,NUM NUM,,NUM NUM,,NUM NUM,,NUM TAG,,RETYP FIRARG,,EQUAL ULIM,,ASLASH INDIRECT,,ABSA BPS,,CON SDEC,,EFFEC SFLOT,,AGO HWRDS,,MARSET ALTJ,,KILL ALTL,,MASK NWORD,,SOCT PROCEDE,,QUAN RELA,,ALTS TATP,,ALTU ALTV,,AWORD XEC,,ALTY ZERO,,OCON ICON,,OSYM VARRW,,PSYM ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR ERR,,ERR CONTROL,,CONTROL ERR,,ERR NPUR==<.+1>/2000 ;PURE PAGE HACK INFORM [TOP OF PURE]\.-1 DDTEND: IISYM: IRP A,,[CLEARM,CLEARB,CONSZ,CONSO,DATAI,DATAO,BLKI,BLKO,CONI,CONO,$X] SQUOZE 4,A A TERMIN SQUOZE 4,.FILE .FILE+770000 INISYE: INFORM [HIGHEST USED]\.-1 .ZZ9==. LOC .ZZ8 CONSTANTS VARIABLES .ZZ10==. LOC .ZZ9 END DDT