/ DISPLAY OS/8 DIRECTORY / CLYDE G. ROBY, JR. / DEPARTMENT OF MEDICINE / WEST VIRGINIA UNIVERSITY / MORGANTOWN, WEST VIRGINIA / DECEMBER, 1971 / MODIFIED MAY, 1972 / MODIFIED MAY 1973 / MARTIN WOODALL / C.S. JUNIOR / WEST VIRGINIA UNIVERSITY / MORGANTOWN, WEST VIRGINIA / MODIFIED JUNE, 1973 BY CGRJ / NOW IN DEPT. OF PHYSIOLOGY / BETTER COMMAND CHARS / MODIFIED JUNE, 1973 BY CGRJ / ALLOWS ".R DX DEV" / COMMAND "P" GOES TO DIR:, LPT:, TTY: / COMMAND "T" GOES TO DIR:, TTY: / MODIFIED FOR LINC-8 14TH MARCH 1974 / BY ALAN CLEARY / DEPARTMENT OF PSYCHOLOGY / UNIVERSITY OF NEWCASTLE UPON TYNE / NE1 7RU / ENGLAND / MODIFIED APRIL, 1974 BY CGRJ / INCORPORATED CLEARY'S CHANGES INTO NEW / SOURCE (CONDITIONAL ASSEMBLY) / SEE NOTES BY CLEARY AND MYSELF AT "INIT" AND "DISPLAY" IF1 < IFDEF LINC8 IFNDEF MACHINE > PDP12=1 LINC8=2 FIXMRI INC=2000 /ISZ WHEN NOT EXPECTED TO SKIP PAGE 0 *10 XXR, 0 RUBXR, 0 PRTXR, 0 IDXR, 0 CMDXR, 0 DATEXR, 0 OUTXR, 0 *20 INDEV, 0 FIRSTLN, 0 LASTLN, 0 CURLN, 0 MAXLN, 0 MAXLNP, 0 DISCT, 0 CHAR, 0 TCHAR, 0 INCREM, 0 DATE, 0 SYSDAT, 0 OUTPUT, DISPLAY XCOORD, 0 YCOORD, 0 IFE MACHINE-PDP12 < PREVERT, 300 /Y FOR INDEX ID COL0, 320 /X FOR FILENAME DISPLAY COL1, 140 /X FOR FILENAME DISPLAY COL2, 250 /X FOR "." COL3, 400 /X FOR LENGTH COL4, 550 /X FOR DATE COLD, 140 /X FOR ID DISPLAY > IFE MACHINE-LINC8 < PREVERT, 300 /Y FOR INDEX ID COL0, 240 /X FOR TODAY'S DATE COL1, 0 /X FOR FILENAME DISPLAY COL2, 214 /X FOR "." COL3, 334 /X FOR LENGTH COL4, 500 /X FOR DATE COLD, 0 /X FOR ID DISPLAY > EMPTYM, TEXTZ "" DSKDEV, DEVICE DSK /DISK DEVICE DISCTR, 0 MAXENT, 0 NSEGS, 0 ADDWDS, 0 ADDCTR, 0 XTEMP, 0 EXTENS, 0 BLOKNO, 0 IDPTR, 0 IDCTR, 0 IDQ, 0 DECIMAL NTAB, -1000 -100 -10 OCTAL DNUMB, 0 DNCTR, 0 DIGIT, 0 LSPACE, 0 PRTWDS, 0 PRTCTR, 0 DATEP, 0 PXTENS, 0 PRNT2, 0 PRTBN, 0 EMPBN, 0 EMPBLK, 0 DATRUB, 0 DATCT, 0 TEMP, 0 LSCHAR, 0 DATE1, 0 XPTR, 0 NAME, 0 /USED IN LOOKING ON CMD LINE 0 GETPTR, 0 GETCTR, 0 HALF, 0 GCHAR, 0 / #, MAKE DIRECTORY CHANGES PERMANENT WRITEX, JMS I HNADDR /WRITE OUT DIRECTORY 4\1410 /WRITE 12 PAGES (6 BLOCKS), FLD 1 INDEX 1 /START AT BLOCK 1 HLT JMP I .+1 /GO DISPLAY INDEX SOME MORE DINDEX HNADDR, 0 /HANDLER ADDRESS / OUTPUT CR/LF COMBINATION CRLF, 0 TAD K0215 JMS I OUTPUT TAD K0212 JMS I OUTPUT JMP I CRLF K0215, 215 K0212, 212 PAGE / DISPLAY THE PS/8 DIRECTORY / OTHER COMMANDS AVAILABLE DXPROG, CLA JMS INIT /INITIALIZE PROGRAM DXDSK, TAD DSKDEV /ASSUME THE DSK DCA DEV TAD DSKDEV+1 DCA DEV+1 GETDEV, CIF 10 JMS I (200 12 /ASCERTAIN DEV, DEVICE DSK /FIND OUT WHAT THE DEVICE IS 0 JMP I (7600) /DEVICE NOT ON SYSTEM, RET TO SYS TAD DEV+1 /DEVICE NO. OF DEVICE JMP DXGO /START UP THE PROGRAM RSTART, CIF 10 /CTRL/R, CALL COMMAND DECODER JMS I (200) /CALL COMMAND DECODER 5 0 /NO EXTENSION CDF 10 TAD I (7617 /INPUT DEVICE CDF 00 AND (17) SNA JMP DXDSK /NOTHING, ASSUME DSK DXGO, DCA INDEV /SAVE INPUT DEVICE, CHECK DIR. DEV TAD INDEV TAD (DCB-1) /DEVICE CONTROL BLOCK TABLE DCA TEMP CDF 10 TAD I TEMP /GET THE DEVICE CONTROL WORD CDF 00 SMA CLA /DIRECTORY STRUCTURED DEVICE? JMP I (7600) /NO, RETURN TO SYS TAD (INHAND+1) /TWO PAGE HANLDERS ALLOWED DCA INADDR TAD INDEV CIF 10 JMS I (200 1 /FETCH DEVICE HANDLER INADDR, 0 /OVERLAYED WITH HANDLER ADDR HLT /SHOULD NEVER HAPPEN (INQUIRE CHKS) TAD INADDR DCA HNADDR /SAVE HANDLER ADDRESS READX, JMS I INADDR /NOW READ IN DIRECTORY 1410 /READ 12 PAGES (6 RECORDS) KINDEX, INDEX 1 /BLOCKS 1 TO 6 JMP I (7600) /READ ERROR CLA IAC DCA FIRSTLN /INITIALIZE LNS DCA MAXLN /CLEAR IT OUT TAD KINDEX DCA XPTR DCA IDCTR /NO. OF SEGMENTS IN INDEX (-1) GETMAX, CDF 10 TAD I XPTR /GET NO. OF ENTRIES TAD MAXLN DCA MAXLN INC XPTR INC XPTR TAD I XPTR /MORE SEGMENTS? SNA CLA JMP GOTMAX /NO, WE HAVE NAXLN INC IDCTR /INCREMENT NO. OF SEGMENTS TAD XPTR TAD (400-2 DCA XPTR /INCREMENT POINTER JMP GETMAX GOTMAX, TAD MAXLN CIA DCA MAXLNP TAD MAXLNP DCA LASTLN /INITIALIZE LAST LN TAD IDCTR TAD (-5) SMA CLA STA /NO ID IN INDEX DCA IDQ /ID O.K., DISPLAY AND PRINT IT CDF 00 / MAKE SURE LNS ARE IN RANGE 1 <= N <= MAXLN CHECK, TAD LASTLN JMS CHECKL /CHECK FOR LEGAL LN DCA LASTLN TAD LASTLN TAD (-7 JMS CHECKL /CHECK FIRSTLN FOR LEGALITY DCA FIRSTLN TAD LASTLN CMA TAD FIRSTLN DCA DISCT /NO. OF LINES TO DISPLAY TAD DISCT TAD (10) SPA CLA TAD (-10) DCA DISCT /MAKE SURE IN RANGE <= 10 JMP DINDEX /GO DISPLAY INDEX / CHECK FOR LEGAL LN FOR DISPLAY CHECKL, 0 TAD (-1) SPA CLA IAC TAD MAXLN SMA SZA CLA TAD MAXLNP JMP I CHECKL PAGE / NOW TO DISPLAY THE DIRECTORY / WAIT FOR KEYBOARD INTERACTION DINDEX, JMS DISPID /DISPLAY THE INDEX IDENTIFICATION JMS DISPX /DISPLAY THE INDEX KSF JMP DINDEX KRS TAD (-203) SNA CLA JMP I (7600) /CTRL/C, RETURN TO PS/8 SYSTEM KRB DCA CHAR TAD CHAR /GET THE CHAR TAD (-"R+100 SNA JMP RSTART /CTRL/R, RESTART WITH COMMAND DECODER TAD ("R-100-"1 SNA JMP FRAMEF /1, GO FORWARD 1 FRAME TAD ("1-"2 SNA JMP LINEF /2, GO FORWARD 1 LINE TAD ("2-"Q SNA JMP FRAMEB /Q, GO BACKWARD Q FRAME TAD ("Q-"W SNA JMP LINEB /W, GO BACKWARD 1 LINE TAD ("W-"P SNA JMP PRNTX /P, GO PRINT DIRECTORY TAD ("P-"T SNA JMP TYPEX /T, GO TYPE INDEX TAD ("T-"R SNA JMP READX /R, READ DIRECTORY IN AGAIN TAD ("R-"# SNA JMP WRITEX /#, MAKE CHANGES PERMANENT TAD ("#-"U+100 SNA JMP RUBOUT /CTRL/U, DELETE LAST ENTRY TAD ("U-100-"I SNA JMP CHNGID /I, GO CHANGE THE TAPE ID TAD ("I-377 SNA JMP QMARK /RUBOUT, DELETE LAST LETTER OF FILE NAME TAD (377-"D SNA JMP CHDATE /D, CHANGE CREATION DATE CLA JMP DINDEX /GO DISPLAY INDEX AGAIN / GO DISPLAY THE IDENTIFICATION FOR THIS INDEX DISPID, 0 TAD PREVERT DCA YCOORD /INITIALIZE Y COORDINATE TAD IDQ /ANY ID? SZA CLA JMP DISPI2 /NO TAD YCOORD /YES, SET UP FOR DISPLAY JMS DISID /AND THEN GO DISPLAY TAD YCOORD TAD (-100) DCA YCOORD /DECREMENT FOR REGULAR DISPLAY DISPI2, JMP I DISPID / D, DELETE ENTRY AT BOTTOM OF SCOPE RUBOUT, IAC TAD RUBXR DCA RUBPTR /POINTS TO OVERLAY CDF 10 TAD I RUBPTR /EMPTY ENTRY? CDF 00 SNA CLA JMP LINEB /YES, JUST GO BACK 1 LINE TAD ADDWDS CIA TAD (4+1) TAD RUBXR /BASE OF THIS ENTRY DCA RUBPTR /POINTS TO FILE LENGTH CDF 10 DCA I RUBXR /AMKE EMPTY ENTRY TAD I RUBPTR /LENGTH OF FILE DCA I RUBXR /MAKE LENGTH OF EMPTY ENTRY RUB2, TAD XXR AND (377 TAD (-377 SNA CLA JMP RUB4 /DONE SQUEEZING THIS SEGMENT TAD I XXR /MOVE A WORD DOWN DCA I RUBXR JMP RUB2 RUB4, CDF 00 JMP LINEB /DELETED, GO BACK 1 LINE RUBPTR, 0 PAGE / SUBROUTINE TO DISPLAY THE PS/8 DIRECTORY DISPX, 0 TAD (INDEX-1) DCA XXR /INITIALIZE AUTOXR TAD DISCT DCA DISCTR /INITIALIZE DISPLAY COUNTER DCA CURLN TAD COL0 DCA XCOORD TAD SYSDAT JMS DISPDT /DISPLAY TODAY'S DATE AT TOP TAD YCOORD TAD (-100 DCA YCOORD /DECREMENT BY 2 LINES DISPNX, JMS GETXXR DCA MAXENT /NO. OF ENTRIES IN THIS SEGMENT TAD MAXENT /CHECK FOR DIR LEGALITY TAD (200) /SHOULD NEVER HAVE MORE SPA CLA JMP I (7600) /IF SO, JUST RETURN TO SYS JMS GETXXR DCA BLOKNO /STARTING BLOCK NO. OF THIS SEGMENT JMS GETXXR DCA NSEGS /0 IF NO MORE INDEX SEGS INC XXR /SKIP TENTATIVE FILE ENTRYS JMS GETXXR DCA ADDWDS /NO. OF ADDITIONAL WORDS NXTENT, TAD ADDWDS DCA ADDCTR TAD COL1 DCA XCOORD /FOR FILE NAME TAD XXR DCA RUBXR /IN CASE THIS IS BOTTOM OF SCOPE JMS GETXXR SNA JMP EMPTY /0, IS EMPTY ENTRY DCA XTEMP /SAVE FIRST 2 CHARS OF FILE NAME JMS CHKLN /DO WE DISPLAY THIS ENTRY? JMP NOFILE /NO, SKIP IT TAD XTEMP JMS DISP2 JMS GETXXR JMS DISP2 JMS GETXXR JMS DISP2 JMS GETXXR /ANY EXTENSION? SNA JMP DISPD /NO, GO DISPLAY DATE DCA EXTENS /YES, SAVE IT TAD COL2 DCA XCOORD TAD (". JMS DISPLAY /GO DISPLAY A . TAD EXTENS JMS DISP2 DISPD, TAD ADDCTR /ANY ADDITIONAL WORDS? SNA CLA JMP DISPLN /NO, GO DISPLAY LENGTH TAD COL4 DCA XCOORD JMS GETXXR /IS THERE A DATE? SZA JMS DISPDT /YES, GO DISPLAY IT SKP INC XXR ISZ ADDCTR /SKIPPED ALL EXTR WORDS? JMP .-2 /NO, CONTINUE TO INCREMENT XR DISPLN, TAD COL3 DCA XCOORD JMS GETXXR /GET THE LENGTH SNA JMP .+3 /IS TENTATIVE FILE, DON'T DISPLAY CIA /MAKE IT POS. JMS DISPN /GO DISPLAY THE NUMBER ISZ DISCTR /IS SCOPE FULL? SKP JMP I DISPX /YES, RETURN TAD YCOORD TAD (-40 DCA YCOORD /DECREMENT DOWN SCOPE DONEQ, ISZ MAXENT /AT END OF INDEX SEGMENT? JMP NXTENT /NO, GO DO ANOTHER ENTRY TAD NSEGS /ANY MORE INDEX SEGMENTS? SNA CLA JMP I DISPX /NO, RETURN TAD XXR AND (7400 TAD (377 DCA XXR /INCREMENT TO NEXT SEGMENT JMP DISPNX /GO DISPLAY NEXT SEGMENT NOFILE, TAD ADDCTR CIA TAD (4) TAD XXR DCA XXR /SKIP OVER FILE NAME AND EXTR WORDS JMP DONEQ EMPTY, JMS CHKLN /DO WE DISPLAY THIS ENTRY? JMP NOEMPT /NO TAD EMPTYM /YES JMS DISP2 TAD EMPTYM+1 JMS DISP2 TAD EMPTYM+2 JMS DISP2 TAD EMPTYM+3 JMS DISP2 JMP DISPLN /GO DISPLAY EMPTY LENGTH NOEMPT, INC XXR /SKIP OVER EMPTY LENGTH JMP DONEQ GETXXR, 0 CDF 10 TAD I XXR CDF 00 JMP I GETXXR PAGE *2000 /LEAVE ROOM FOR COMMAND LINES / CHANGE THE TAPE INDEX IDENTIFICATION CHNGID, TAD IDQ SZA CLA JMP DINDEX /THERE IS NO ID TAD (-IDCOUNT) DCA IDCTR TAD (ID-1) DCA IDXR /LOC OF THE IDENTIFICATION CDF 10 DCA I IDXR /INITIALIZE WITH 0'S ISZ IDCTR JMP .-2 DCA I IDXR /ZERO TO END THE ID CDF 00 TAD (-IDCOUNT) /RESET FOR THE INPUT NOW DCA IDCTR TAD (ID) DCA IDPTR DDISP2, JMS DISID /GO DISPLAY CURRENT ID KSF JMP DDISP2 /WAIT FOR OPERATOR ACTION KRS TAD (-203) SNA CLA JMP I (7600) /CTRL/C, RETURN TO SYSTEM KRB /READ THE CHAR TAD (-377 SNA JMP RUBID /RUBOUT, DELETE 1 CHAR TAD (377-"U+100 SNA JMP CHNGID /CTRL/U, DELETE ENTIRE ID TAD ("U-100-215 SNA JMP ENDID /CARRIAGER RETURN, END OF ID TAD (215) /REGENERATE THE CHAR CDF 10 DCA I IDPTR /AND SAVE IT IN ID CDF 00 INC IDPTR ISZ IDCTR /IS ID FULL? JMP DDISP2 /NO / IDENTIFICATION FIELD IS FULL, WAIT ON WEIRD CHAR DDISP3, JMS DISID /DISPLAY CURRENT ID KSF JMP .-2 KRS TAD (-203) SNA CLA JMP I (7600) /CTRL/C, GO TO SYSTEM KRB /READ CHAR IN TAD (-377 SNA JMP RUBID /DELETE A CHAR TAD (377-"U+100 SNA JMP CHNGID /START OVER AGAIN TAD ("U-100-215 SNA CLA JMP ENDID /EOL, END OF ID INPUT JMP DDISP3 /IGNORE THE WEIRD CHAR / RUBOUT, DELETE A SINGLE CHAR RUBID, TAD IDPTR /AT BEGINNING OF ID FIELD? TAD (-ID) SNA CLA JMP DDISP2 /YES, IGNORE RUBOUT STA /NO, DECREMENT POINTER TAD IDPTR DCA IDPTR CDF 10 DCA I IDPTR /SAVE A 0000 IN ITS PLACE CDF 00 STA /DECREMENT CTR TAD IDCTR DCA IDCTR JMP DDISP2 / DISPLAY THE CURRENT IDENTIFICATION FIELD DISID, 0 DCA YCOORD /SAVE THE Y COORD TAD COLD /COLUMN FOR ID DISPLAY DCA XCOORD TAD IDTEXT /DISPLAY IDENTIFIER "ID:" JMS DISP2 TAD IDTEXT+1 JMS DISP2 TAD (" ) JMS DISPLAY TAD (-IDCOUNT) DCA IDCTR TAD (ID-1) DCA IDXR /PREPARE TO DISPLAY CURRENT ID DISID2, CDF 10 TAD I IDXR CDF 00 TAD (-232) /CTRL/Z ? (ENDS STRING) SNA JMP I DISID /RETURN IF ZERO TAD (232) /REGENERATE CHAR JMS DISPLAY /DISPLAY THE CHAR ISZ IDCTR /ENOUGH? JMP DISID2 /DISPLAY MORE JMP I DISID /RETURN IF ALL DONE IDTEXT, TEXTZ "ID:" PAGE / DISPLAY 2 CHARS DISP2, 0 DCA CHAR2 TAD CHAR2 CLL RTR RTR RTR JMS DISP1 TAD CHAR2 JMS DISP1 JMP I DISP2 DISP1, 0 AND (77 SNA JMP .+3 /ZERO, DISPLAY A SPACE TAD (240 AND (77 TAD (240 JMS DISPLAY JMP I DISP1 CHAR2, 0 PDATE, DISPDT, 0 DCA DDATE /SAVE DATE STL CLA RAR /NO LEADING SPACES DCA LSPACE TAD (240) JMS I OUTPUT /OUTPUT A SPACE TAD DDATE AND (7400 CLL RTL RTL RAL JMS DISPN TAD ("/ JMS I OUTPUT TAD DDATE AND (0370) CLL RTR RAR JMS DISPN TAD ("/ JMS I OUTPUT TAD ("7 JMS I OUTPUT TAD DDATE AND (7 TAD ("0 JMS I OUTPUT DCA LSPACE JMP I DISPDT DDATE, 0 PRINTN, DISPN, 0 DCA DNUMB TAD (TAD NTAB) DCA SUBINS CLL STA RTL /-3 TO ACC DCA DNCTR DISPN0, DCA DIGIT JMP .+3 DISPN1, DCA DNUMB INC DIGIT CLL TAD DNUMB SUBINS, TAD NTAB SZL JMP DISPN1 CLA INC SUBINS TAD DIGIT SNA JMP LZERO TAD ("0 JMS I OUTPUT STL CLA RAR /NO MORE LEADING SPACES DISPN2, ISZ DNCTR JMP DISPN0 TAD DNUMB TAD ("0 JMS I OUTPUT JMP I DISPN LZERO, TAD LSPACE SPA CLA JMP DISPN2 TAD (240 JMS I OUTPUT JMP DISPN2 / PRINT OUT THE USER TAPE IDENTIFICATION PRNTID, 0 TAD IDQ /IS THERE ONE TO PRINT? SZA CLA JMP PRNTI2 /NO, OUTPUT THE DATE JMS CRLF TAD (-IDCOUNT) DCA IDCTR TAD (ID-1) DCA IDXR /INITIALIZE FETCH POINTER PRNTI1, CDF 10 TAD I IDXR CDF 00 TAD (-232) /END OF ID ? (CTRL/Z ENDS IT) SNA JMP PRNTI3 TAD (232) /REGENERATE CHAR JMS I OUTPUT ISZ IDCTR JMP PRNTI1 PRNTI3, JMS CRLF PRNTI2, JMS CRLF TAD SYSDAT JMS PDATE /OUTPUT THE SYSTEM DATE JMS CRLF JMP I PRNTID PAGE / P, PRINT THE DIRECTORY XPRINT, TAD (INDEX-1) DCA PRTXR JMS PRNTID /GO PRINT OUT USER TAPE ID DCA EMPBLK /NO. OF EMPTY BLOCKS PRNTNX, CDF 10 TAD I PRTXR DCA MAXENT INC PRTXR TAD I PRTXR DCA NSEGS INC PRTXR TAD I PRTXR DCA PRTWDS CDF 00 PNXTEN, DCA DATEP CDF 10 TAD I PRTXR CDF 00 SNA JMP PEMPTY /0, IS EMPTY ENTRY JMS PRINT2 CDF 10 TAD I PRTXR CDF 00 JMS PRINT2 CDF 10 TAD I PRTXR CDF 00 JMS PRINT2 CDF 10 TAD I PRTXR /ANY EXTENSION? CDF 00 SNA JMP PRTX /NO, GO SPACE OVER DCA PXTENS TAD (". JMS I OUTPUT TAD PXTENS JMS PRINT2 PRTD, TAD PRTWDS SNA CLA JMP PRTLN CDF 10 TAD I PRTXR CDF 00 DCA DATEP TAD PRTWDS CMA TAD PRTXR DCA PRTXR PRTLN, CDF 10 TAD I PRTXR CDF 00 SNA JMP .+3 CIA PRTLNE, JMS PRINTN TAD DATEP SZA JMS PDATE JMS CRLF ISZ MAXENT JMP PNXTEN TAD NSEGS SNA CLA JMP ENDPX TAD PRTXR AND (7400 TAD (377 DCA PRTXR JMP PRNTNX ENDPX, TAD EMPBLK JMS PRINTN /PRINT NO. OF EMPTY BLOCKS TAD (FBLOCKS-1) DCA PRTXR TAD I PRTXR /NOW TO PRINT "FREE BLOCKS" SNA JMP ENDPX1 JMS PRINT2 JMP .-4 ENDPX1, JMS CRLF ENDPRT, JMS CRLF TAD (214) JMS I OUTPUT /GO TO TOP OF PAGE JMS OCLOSE /CLOSE OUTPUT FILE TAD (DISPLAY DCA OUTPUT JMP DINDEX PEMPTY, TAD EMPTYM JMS PRINT2 TAD EMPTYM+1 JMS PRINT2 TAD EMPTYM+2 JMS PRINT2 TAD EMPTYM+3 JMS PRINT2 TAD (240 JMS I OUTPUT CDF 10 TAD I PRTXR /GET THE EMPTY LENGTH CDF 00 CIA DCA EMPBN TAD EMPBN TAD EMPBLK DCA EMPBLK TAD EMPBN JMP PRTLNE /GO PRINT EMPTY LENGTH PRTX, TAD (240 JMS I OUTPUT JMS PRINT2 JMP PRTD PAGE / RUBOUT, DELETE SINGLE CHARS IN FILENAME QMARK, CLA IAC TAD RUBXR DCA DELPTR /PTS TO FIRST WD OF ENTRY CDF 10 TAD I DELPTR /IS THIS AN EMPTY FILE? CDF 00 SNA CLA JMP DINDEX /YES, IGNORE THE RUBOUT DCA QMHALF /NO, START WITH RIGHT HALF DCA RUBFLG /NO CHARS DELETED YET QMARK1, TAD RUBFLG TAD (10) SNA CLA JMP QMARKD /TOO MANY RUBOUTS, IGNORE STA TAD RUBFLG DCA RUBFLG /COUNT NO. OF CHARS DELETED TAD RUBFLG STL RAR TAD (5) TAD RUBXR DCA DELPTR /POINTS TO CURRENT WORD TAD QMHALF /WHICH HALF OF THIS WORD? SZA CLA JMP QLHALF /DELETE THE LEFT HALF CDF 10 TAD I DELPTR /DELETE THE RIGHT HALF AND (7700) /KEEP THE LEFT HALF TAD (77) /PUT IN A "?" DCA I DELPTR CDF 00 STA DCA QMHALF /PTS TO LEFT HALF IF NON-ZERO QMARKD, JMS DISPID /DISPLAY INDEX ID JMS DISPX /DISPLAY THE INDEX KSF JMP QMARKD KRS TAD (-203) SNA CLA JMP I (7600) /CTRL/C, RETURN TO SYSTEM KRB TAD (-377) SNA JMP QMARK1 /RUBOUT, DELETE ANOTHER CHAR TAD (377-240) SZA TAD (240) /REGENERATE CHAR IF NOT SPACE DCA QMCHAR /OTHERWISE, SPACE BECOMES 00 TAD RUBFLG STL RAR TAD (5) TAD RUBXR DCA DELPTR /POINTS TO WORD TO STORE CHAR TAD QMHALF /WHICH HALF TO STORE? SZA CLA JMP QRHALF /MUST PUT IN RIGHT HALF CDF 10 TAD I DELPTR /STORE IN LEFT HALF AND (77) /KEEP RIGHT HALF DCA I DELPTR TAD QMCHAR AND (77) /JUST WANT LOWER 6 BITS CLL RTL;RTL;RTL TAD I DELPTR DCA I DELPTR /SAVE CHAR CDF 00 STA DCA QMHALF /STORE IN RIGHT NEXT TIME ISZ RUBFLG /ALL "?" FILLED? JMP QMARKD /NOPE, DISPLAY INDEX JMP DINDEX /YES, ACCEPT COMMAND CHARS QLHALF, CDF 10 /DELETE CHAR IN LEFT HALF TAD I DELPTR AND (77) /KEEP CHAR IN RIGHT HALF TAD (7700) /PUT IN "?" DCA I DELPTR CDF 00 DCA QMHALF JMP QMARKD QRHALF, CDF 10 /STORE IN RIGHT HALF TAD I DELPTR AND (7700) /KEEP CHAR IN LEFT HALF DCA I DELPTR TAD QMCHAR AND (77) TAD I DELPTR DCA I DELPTR /PUT CHAR IN RIGHT HALF CDF 00 DCA QMHALF ISZ RUBFLG JMP QMARKD /NOT ALL "?" FILLED YET JMP DINDEX /YES, GO ACCEPT COMMAND CHAR RUBFLG, 0 DELPTR, 0 QMHALF, 0 QMCHAR, 0 PAGE / CHANGE THE DATE FOR THIS ENTRY CHDATE, CLA IAC TAD RUBXR DCA CHDPTR /PTS TO 1ST WD OF ENTRY CDF 10 TAD I CHDPTR /GET THAT WORD CDF 00 SNA CLA JMP DINDEX /EMPTY ENTRY, NO DATE TAD (NDATE-1) DCA DATEXR TAD (-10) DCA CHDCTR TAD ("?) DCA I DATEXR /ZAP OUT LINE WITH "?" ISZ CHDCTR JMP .-3 DCA I DATEXR /ZERO TO END IT TAD (NDATE) DCA CHDPTR /PTS TO CURRENT CHAR CHDISP, JMS DISPID /DISPLAY INDEX ID JMS DISPX /DISPLAY INDEX TAD COL4 /PREPARE TO DISPLAY NEW DATE DCA XCOORD /UNDER CURRENT FILE DATE TAD YCOORD TAD (-40) DCA YCOORD TAD (NDATE-1-1) DCA DATEXR TAD I DATEXR SNA JMP .+3 /ZERO ENDS THE CHAR STRING JMS DISPLAY /DISPLAY CURRENT CHAR JMP .-4 KSF /ANYTHING STRUCK YET? JMP CHDISP /NO, KEEP DISPLAYING KRS TAD (-203) SNA CLA JMP I (7600) /CTRL/C, RETURN TO SYSTEM KRB TAD (-377) SNA JMP CHRUB /RUBOUT, DELETE SINGLE CHAR TAD (377-215) SNA JMP CHDEND /END OF DATE, CONVERT AND SAVE TAD (215) /REGENERATE CHAR DCA CHDCHR /AND SAVE IT TAD I CHDPTR SNA CLA JMP CHDISP /ALL CHARS IN, IGNORE CHAR TAD CHDCHR DCA I CHDPTR /SAVE CURRENT CHAR INC CHDPTR /PT TO NEXT CHAR JMP CHDISP /DISPLAY SOME MORE CHRUB, TAD CHDPTR /DELETE SINGLE CHARACTER TAD (-NDATE) SNA CLA JMP CHDISP /NOTHING TO DELETE STA TAD CHDPTR DCA CHDPTR /DECREMENT PTR TAD ("?) DCA I CHDPTR /STORE "?" IN THIS CHAR POSITION JMP CHDISP CHDEND, TAD (NDATE-1) /CARRIAGE RETURN, CONVERT AND DCA DATEXR / SAVE DATE JMS CHDGET /GET THE MONTH AND (17) CLL RTR RTR RAR DCA CHNDAT /SAVE MO/0/70 JMS CHDGET /GET THE DAY AND (37) CLL RTL RAL TAD CHNDAT DCA CHNDAT /SAVE MO/DA/70 JMS CHDGET /GET THE YEAR TAD (-106) /-70 DECIMAL AND (7) TAD CHNDAT DCA CHNDAT /COMPLETE DATE NOW TAD RUBXR TAD (5) DCA CHDPTR /POINTS TO DATE WORD TAD CHNDAT CDF 10 DCA I CHDPTR /SAVE THE NEW DATE CDF 00 JMP DINDEX /GO TO REGULAR INDEX DISPLAY CHDPTR, 0 CHDCTR, 0 CHDCHR, 0 CHNDAT, 0 240 /THIS MUST BE HERE NDATE, ASCIIZ "??/??/??" PAGE CHDGET, 0 /SUBROUTINE TO GET A NUMBER CHDGT1, DCA CHDGTN /UPDATE CURRENT NO. TAD I DATEXR /GET A CHAR TAD (-"9) SMA SZA JMP CHDGTE /END OF NUMBER TAD ("9-"0) SPA JMP CHDGTE /END OF NUMBER DCA CHDGTD /SAVE CURRENT DIGIT TAD CHDGTN /MPY CURRENT NO. BY 10(10) CLL RTL TAD CHDGTN CLL RAL TAD CHDGTD /ADD IN CURRENT DIGIT JMP CHDGT1 /GO UPDATE NO. CHDGTE, CLA TAD CHDGTN JMP I CHDGET /RET WITH NO. IN ACC CHDGTN, 0 CHDGTD, 0 / Q, GO BACKWARD 1 FRAME FRAMEB, TAD (-10 JMP SAVEIN / W, GO BACKWARD 1 LINE LINEB, STA JMP SAVEIN / 1, GO FORWARD 1 FRAME FRAMEF, TAD (10 SKP / 2, GO FORWARD 1 LINE LINEF, CLA IAC SAVEIN, DCA INCREM TAD INCREM TAD LASTLN DCA LASTLN JMP CHECK /GO CHECK FOR LEGAL LNS / SOME PRINTING ROUTINES PRINT2, 0 DCA PRNT2 TAD PRNT2 CLL RTR RTR RTR JMS PRINT1 TAD PRNT2 JMS PRINT1 JMP I PRINT2 PRINT1, 0 AND (77 SNA TAD (240 TAD (240 AND (77 TAD (240 JMS I OUTPUT JMP I PRINT1 / TYPE INDEX OUT. TRY DEVICE DIR:, THEN TTY: TYPEX, TAD (TYPEXD-PRNTXD) / PRINT INDEX OUT. TRY DEVICE DIR:, THEN LPT:, THEN TTY: PRNTX, TAD (PRNTXD-1) DCA OUTXR /POINTS TO DEVICE NAME TABLE NEXTD, TAD I OUTXR SNA JMP DINDEX /NO DEVICE EXISTS, GO DISPLAY DCA OUTDEV TAD I OUTXR DCA OUTDEV+1 /SAVE DEVICE NAME TAD (OUHAND+1 /ALLOW 2-PAGE HANDLER DCA OHNADR CIF 10 JMS I (200 1 /LOAD DEVICE HANDLER OUTDEV, DEVICE DEV /CURRENT DEVICE OHNADR, 0 /HANDLER ENTRY ADDR JMP NEXTD /TRY NEXT NAME TAD OUTDEV+1 TAD (DCB-1) DCA OUTDEV /PTS TO DEVICE CONTROL TABLE CDF 10 TAD I OUTDEV /GET CONTROL WORD CDF 00 SPA CLA JMP NEXTD /DIRECTORY-ORIENTED OUTPUT, NO! TAD OHNADR DCA OUHNDL /SAVE HANDLER ADDR FOR OUTPUT RTN TAD (OCHAR) DCA OUTPUT /LOC OF OUTPUT ROUTINE JMS OUSETP /SET UP OUTPUT INITS TAD (214) /SKIP TO TOP OF PAGE JMS I OUTPUT JMP XPRINT /GO PRINT INDEX OUT TYPEXD, DEVICE DIR DEVICE TTY 0 PRNTXD, DEVICE DIR DEVICE LPT DEVICE TTY 0 PAGE / INITIALIZE THE DX PROGRAM / READ COMMAND LINE AND USE ARG IF PRESENT INIT, 0 IFE MACHINE-LINC8 < / IF THE LINC LMB#2 OR UMB#3 THE PROGRAM WILL HALT / TO FORCE A CONSOLE RESTART AT 7600. THIS SHOULD / SET THE LINC MEMORY BANKS CORRECTLY. / (NOTE BY CLEARY) CLA IMBS /READ LINC MEMORY BANKS TAD (-142) /CHECK LINC MBS SNA CLA /LMB=2 AND UMB=3? JMP INITL /YES, CONTINUE HLT /NO, FORCE CONSOLE START AT 7600 JMP .-1 /TO SET LMB TO 2 INITL, TAD (11) ICON /DESELECT LINC (LINC I/O PRESET) > IFE MACHINE-PDP12 < CLA LINC ESF /SET SMALL CHARS PDP > CLA CDF 10 TAD I (MDATE) CDF 00 DCA SYSDAT /SAVE CURRENT DATE FOR DISPLAY CIF 10 JMS I (7700) /LOCK USR INTO MEMORY 10 TAD I (1003) /MAGIC LOC IN DECSYSTEM-8 TAD (-5604) /MAKE SURE IT'S DS8 SNA CLA JMP PSBUFF /IT IS, USE PS/8 BUFFER ADDR TAD I (1000) /FIRST LOC OF OS/8 BUFFER TAD (-7001) SNA CLA /OS/8 OR PS/8? PSBUFF, TAD (1600-1000) /PS/8 BUFFER AT 1600 TAD (1000-1) /OS/8 BUFFER AT 1000 DCA CMDXR /INITIALIZE AUTOXR CMDLUP, JMS GETNAM /SKIP OVER ".R DX" TAD NAME /OR OVER ".RUN DEV DX" SNA JMP I INIT /END OF LINE REACHED, ASSUME DSK TAD (-DX) SZA CLA JMP CMDLUP /GET NEXT WORD TAD NAME+1 SZA CLA JMP CMDLUP /NOT YET JMS GETNAM /NOW GET DEVICE IF ANY TAD NAME /WAS THERE A DEVICE? SNA JMP I INIT /NO NAME, ASSUME DSK DCA DEV /YES, MOVE DEVICE NAME TAD NAME+1 DCA DEV+1 JMP GETDEV /LOAD ITS HANDLER / GET A NAME ALONG COMMAND LINE GETNAM, 0 TAD (NAME) DCA GETPTR /POINT TO NAME DCA NAME DCA NAME+1 /JUST WORRY ABOUT 4 CHARS CLL STA RAL /-2 TO ACC DCA GETCTR DCA HALF /LEFT HALF FIRST GETNM1, TAD I CMDXR /GET COMMAND LINE CHAR SNA JMP GETNM0 /END OF LINE DCA GCHAR TAD GCHAR /CHECK OUT THE CHAR TAD (-"Z) SMA SZA JMP ENDNAM /BAD CHAR, END OF NAME TAD ("Z-"A) SMA JMP GETCHR /A-Z, GOOD CHAR TAD ("A-"9) SMA SZA JMP ENDNAM /NOT GOOD CHAR, END NAME TAD ("9-"0) SPA CLA JMP ENDNAM /END OF NAME ON BAD CHAR GETCHR, CLA TAD GETCTR /4 CHARS ALREADY GOTTEN? SNA CLA JMP GETNM1 /YES, IGNORE THIS CHAR TAD HALF /NO, WHICH HALF TO SAVE? SZA CLA JMP RHALF /SAVE IN RIGHT HALF TAD GCHAR AND (77) CLL RTL;RTL;RTL /SAVE IN LEFT HALF DCA I GETPTR STA DCA HALF JMP GETNM1 RHALF, TAD GCHAR /GET CURRENT CHAR AND (77) TAD I GETPTR DCA I GETPTR /SAVE IN RIGHT HALF DCA HALF INC GETPTR ISZ GETCTR NOP JMP GETNM1 /GET MORE CHARS ENDNAM, CLA /END OF THE NAME TAD NAME SNA CLA /ANYTHING THERE? JMP GETNAM+1 /NO, TRY AGAIN JMP I GETNAM /YES, RETURN TO CALLER GETNM0, STA /END OF LINE TAD CMDXR DCA CMDXR /PTS TO EOL NEXT TIME, TOO JMP I GETNAM DX="D-300^100+"X-300 PAGE / OUTPUT ROUTINE FOR LISTING THE DIRECTORY OCHAR, 0 AND (377 DCA OUTPT2 /SAVE THE CHAR JMS OUTPUX /OUTPUT THE CHAR JMP I OCHAR /AND RETURN TO CALLER OUTPUX, 0 /OUTPUT CHAR IN OUTPUT BUFFER OUCHAR, ISZ OUJMP OUJMP, HLT JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OUTPT2 CLL RTL RTL AND (7400 TAD I OUPOLD DCA I OUPOLD /STORE IN FIELD 1 BUFFER TAD OUTPT2 CLL RTR RTR RAR AND (7400 TAD I OUPTR DCA I OUPTR TAD OUJMPE DCA OUJMP ISZ OUPTR ISZ OUDWCT JMP OUCHLV TAD (200 JMS OUTDMP JMS OUSETP JMP OUCHLV OCHAR2, TAD OUPTR DCA OUPOLD ISZ OUPTR OCHAR1, TAD OUTPT2 DCA I OUPTR OUCHLV, CLA CLL JMP I OUTPUX OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTPT2, 0 OUHNDL, 0 /OUTPUT HANDLER ADDR / SETUP SOME THINGS FOR OUTPUT FILE OUSETP, 0 TAD (7600 DCA OUDWCT TAD (OUBUF DCA OUPTR TAD OUJMPE DCA OUJMP JMP I OUSETP / DUMP CONTENTS OF CURRENT OUTPUT BUFFER ON OUTPUT DEVICE OUTDMP, 0 TAD (4000 /WRITE FROM FIELD 0 DCA OUCTLW INC OUREC /INCREMENT OUTPUT REC NO. JMS I OUHNDL OUCTLW, 0 OUBUF OUREC, 0 HLT JMP I OUTDMP OCLOSE, 0 /CLOSE OUTPUT FILE TAD (232) JMS I OUTPUT /OUTPUT END-OF-FILE JMS I OUTPUT JMS I OUTPUT TAD (177 AND OUDWCT SZA CLA JMP .-4 TAD OUDWCT TAD (200 SZA JMS OUTDMP JMP I OCLOSE PAGE / SUBROUTINE TO DISPLAY A CHAR IFN .-4000 LMODE; *1 HCOORD, 0 DISXR, 0 PMODE IFE MACHINE-PDP12 < DISPLAY, 0 AND (177 CLL RAL TAD (PWORDS&1777 /PWORDS MUST BE IN SAME SEGMENT DCA DISXR TAD XCOORD DCA HCOORD TAD YCOORD /GET Y TO ACC LINC;LMODE DSC DISXR /DISPLAY THE CHAR DSC I DISXR PDP;PMODE CLA TAD (4) TAD HCOORD DCA XCOORD JMP I DISPLAY > IFE MACHINE-LINC8 < DISPLAY, 0 AND (177 CLL RAL TAD (PWORDS&1777-1 /PWORDS MUST BE IN SAME SEGMENT DCA DISXR /USED BY DSC INSTR TAD XCOORD DCA HCOORD /INITIALIZE X COORD TAD YCOORD IACA /AND Y COORD CLA JMS LINCDO /DO THE FIRST "DSC I DISXR" JMS LINCDO /THEN THE SECOND TAD (4) TAD HCOORD /INCREMENT X COORD DCA XCOORD JMP I DISPLAY /RETURN / SOME LINC-8 IOT'S IACA=6167 ICON=6141 IMBS=6155 ISSP=6165 / THE ROUTINE LINCDO CLEARS DF32 FLAGS TO ALLOW / A LINC DATA BREAK. IF A DIFFERENT DATA BREAK / DEVICE IS IN USE THE APPROPRIATE MODIFICATIONS / SHOULD BE MADE. (NOTE BY CLEARY) LINCDO, 0 /EXECUTE A LINC PROGRAM DCMA /CLEAR ANY DATA BREAK FLAGS DCEA /THESE ARE FOR DF32 TAD (LINPRO) ISSP /SET UP LINC PC CLA TAD (10) ICON /SELECT LINC TAD (2) ICON /START LINC NOP TAD (-1) ICON /DESELECT LINC CLA JMP I LINCDO / THE SHORT LINC PROGRAM TO DISPLAY A HALFCHAR LMODE LINPRO, DSC I DISXR HLT PMODE > / END OF ID, SAVE CR/LF, CTRL/Z, AND 0 ENDID, TAD (215) JMS SAVEID TAD (212) JMS SAVEID TAD (232) JMS SAVEID JMS SAVEID JMP DINDEX /GO DISPLAY THE INDEX SAVEID, 0 CDF 10 DCA I IDPTR CDF 00 INC IDPTR JMP I SAVEID / CHECK OUT CURRENT LINE NUMBER FOR DISPLAY CHKLN, 0 INC CURLN TAD CURLN CIA TAD FIRSTLN SPA SNA CLA INC CHKLN JMP I CHKLN FBLOCKS, TEXTZ " FREE BLOCKS" PAGE / PATTERN WORDS FOR PS/8 PWORDS, 4020 /200, DISPLAY A QUESTION MARK 2055 7676 /201, LINE MARKER 1034 7777 /202 7777 7777 /203, CTRL/C 7777 7777 /204 7777 7777 /205 7777 7777 /206 7777 7777 /207, BELL 7777 7777 /210 7777 0103 /211, TAB 0301 2504 /212, LINE FEED 0416 7777 /213 7777 7777 /214, FORM FEED 7777 0307 /215, CARRIAGE RETURN 3045 7777 /216 7777 7777 /217 7777 7777 /220 7777 7777 /221 7777 7777 /222 7777 7777 /223 7777 7777 /224 7777 7777 /225 7777 7777 /226 7777 7777 /227 7777 7777 /230 7777 7777 /231 7777 7777 /232 7777 7777 /233 7777 7777 /234 7777 7777 /235 7777 7777 /236 7777 7777 /237 7777 0000 /240, SPACE 0000 0000 /241, ! 7500 7000 /242, " 7000 7714 /243, # 1477 5721 /244, DOLLAR SIGN 4671 6462 /245, % 2313 5127 /246, & 0532 7000 /247, ' 0000 3600 /250, ( 0041 4100 /251, ) 0036 1024 /252, * 0024 0404 /253, + 0437 0500 /254, , 0006 0404 /255, - 0404 0300 /256, . 0003 0402 /257, / 2010 4536 /260, 0 3651 2101 /261, 1 0177 4523 /262, 2 2151 4122 /263, 3 2651 2414 /264, 4 0477 5172 /265, 5 0651 1506 /266, 6 4225 4443 /267, 7 6050 5126 /270, 8 2651 5122 /271, 9 3651 6600 /272, : 0066 6500 /273, ; 0066 2410 /274, < 0042 1212 /275, = 1212 4200 /276, > 1024 4020 /277, ? 2055 /END OF FIRST PAGE OF PATTERNS /SECOND PAGE OF PATTERNS 4136 /300, @ 3555 4477 /301, A 7744 5177 /302, B 2651 4136 /303, C 2241 4177 /304, D 3641 4577 /305, E 4145 4477 /306, F 4044 4136 /307, G 2645 1077 /310, H 7710 7741 /311, I 0041 4142 /312, J 4076 1077 /313, K 4324 0177 /314, L 0301 3077 /315, M 7730 3077 /316, N 7706 4177 /317, O 7741 4477 /320, P 3044 4536 /321, Q 3743 4477 /322, R 3146 5121 /323, S 4651 4040 /324, T 4077 0177 /325, U 7701 0176 /326, V 7402 0677 /327, W 7701 1463 /330, X 6314 0770 /331, Y 7007 4543 /332, Z 6151 7700 /333, [ 0041 1020 /334, \ 0204 4100 /335, ] 0077 1000 /336, ^ 1037 1604 /337, LEFT ARROW 0404 1604 /340, DISPLAY CURSOR 0425 /END OF SECOND PAGE OF PATTERNS PAGE IFE MACHINE-LINC8 < IDCOUNT=31 /NO. OF CHARS ALLOWED IN IDENTIFICATION > IFE MACHINE-PDP12 < IDCOUNT=32 /NO. OF CHARS ALLOWED IN IDENTIFICATION > INHAND=7200 OUHAND=6600 OUBUF=6200 INDEX=-400^6+7600 /IN FIELD 1 IFN INDEX&377 /PROGRAM ASSUMES INDEX STARTS AT MULTIPLE OF 400(8) ID=400^5+INDEX+200 /IN FIELD 1 MDATE=7666 /SYSTEM DATE IN FIELD 1 DCB=7760 /DEVICE CONTROL BLOCK IN FIELD 1 IFGE .-6200 $ * $ * $ * $ TIFICATION > INHAND=7200 OUHAND=6600 OUBUF=6200 INDEX=-400^6+7600 /IN FIELD 1 IFN INDEX&377 /PROGRAM ASSUMES INDEX STARTS AT MULTIPLE OF 400(8) ID=400^5+INDEX+200 /IN FIELD 1 MDATE=7666 /SYSTEM DATE IN FIELD 1 DCB=7760 /DEVICE CONTROL BLOCK IN FIELD 1 IFGE .-6200