File INDEX.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file

/INDEX.SB, PAGE 1 OF 25.	(6/23/72 - C.M.MOORE, RICE U., HOUSTON)
/
/DISPLAYS INDICES OF PDP-12 PS/8 DEVICES.
/DELETES FILES FROM ANY DEVICE.
/PIPS GROUPS OF FILES FROM ONE DEVICE TO ANOTHER.
/
/THE FOLLOWING EXPLANATION IS DISPLAYED WHEN INDEX IS STARTED:
/
/
/TYPE H FOR HELP AT ANY TIME DURING INDEX DISPLAY.
/(THIS EXPLANATION DISPLAY WILL REAPPEAR.)
/TYPE M FOR MORE HELP DURING EXPLANATION.
/TYPE M NOW!
/
/INDEX DISPLAYS THE FILE INDEX OF ANY PS/8 DEVICE.
/THE DEVICE IS SPECIFIED BY TYPING D AND WAITING
/FOR THE COMMAND DECODER TO ECHO A STAR (*).
/WHEN * APPEARS, TYPE IN THE DEVICE NAME, FOLLOWED
/BY A COLON AND A CARRIAGE-RETURN.  (IF THE : IS
/NOT TYPED, DSK: WILL BE THE DEVICE SELECTED.)
/
/WHEN THE DEVICE INDEX APPEARS ON THE SCOPE, YOU MAY
/TYPE THE FOLLOWING CHARACTERS TO INCREMENT OR
/DECREMENT THE FILE NAMES BEING DISPLAYED:
/	1 INCREMENTS BY 1 FILE
/	2 INCREMENTS BY 1 FRAME
/	Q DECREMENTS BY 1 FILE
/	W DECREMENTS BY 1 FRAME
/ANALOG KNOB 7 DETERMINES THE FRAME SIZE.
/(I.E., THE NUMBER OF FILES DISPLAYED.)
/
/TYPE RUBOUT TO DELETE THE LAST FILE CURRENTLY
/BEING DISPLAYED ON THE SCOPE.
/TYPE : TO MAKE PERMANENT ALL FILE DELETIONS MADE
/SINCE THE LAST D, P, R, OR : WAS TYPED.
/TYPE R TO RESTORE ALL DELETIONS NOT YET PERMANENT.
/IF CTRL/C, D, OR P IS TYPED BEFORE MAKING THE DELETIONS
/PERMANENT, THEY ARE AUTOMATICALLY RESTORED.
/
/TYPE P (AND WAIT FOR * TO APPEAR) TO PIP ONTO AN
/OUTPUT DEVICE ALL FILES CURRENTLY BEING DISPLAYED.
/WHEN * APPEARS, SPECIFY THE OUTPUT DEVICE.
/FILES ARE TRANSFERRED IN IMAGE MODE (LIKE PIP /I).
/FILE DELETIONS ON THE DISPLAYED DEVICE WHICH HAVE NOT
/BEEN MADE PERMANENT WILL BE RESTORED WHEN P IS TYPED.
/THUS RUBOUTS CAN BE USED TO TEMPORARILY DELETE THOSE
/FILES WHICH ARE NOT TO BE TRANSFERRED.
/ANY OUTPUT DEVICE FILE WITH THE SAME NAME AS ONE OF
/THE DISPLAYED FILES WILL BE REPLACED BY THAT FILE.
/ALL OTHER OUTPUT DEVICE FILES WILL REMAIN UNCHANGED.
/THE DISPLAYED INDEX WILL REAPPEAR AFTER THE FILES
/HAVE BEEN PIPPED.
/
/TYPE CARRIAGE-RETURN TO RETURN TO THE
/CURRENT DEVICE INDEX DISPLAY.
/TYPE D (AND WAIT FOR * TO APPEAR) TO
/SPECIFY A NEW DEVICE INDEX DISPLAY.
/TYPE CTRL/C TO EXIT TO THE KEYBOARD MONITOR.
/TYPE M TO REPEAT EXPLANATION.
/

/INDEX.SB, PAGE 2 / /THIS PROGRAM USES THE FOLLOWING SUBROUTINES: /NAMES,LFILE,RFILE,MFILE,WFILE,CFILE,ALPHA,CRLF,NALOG,DISP7,DISP9, /DSP11,KEYBD,IHELP,IDATE,BDATE,FTRANS,OPEN,CLEAR,GENIO,EXIT,ERROR. / /OPEN,GENIO,EXIT&ERROR ARE CONTAINED IN FILE UTILTY.SB. THIS IS /A LIB8 LIBRARY FILE WITH ROUTINE EXIT MODIFIED SO THAT IT EXITS /WITHOUT SAVING CORE, THUS ALLOWING INDEX TO EXIT WITH DEVICE SYS /WRITE-LOCKED. /ALPHA,CRLF,NALOG,DISP7,DISP9&DSP11 ARE CONTAINED IN /LIBRARY FILE LIB12.RL (10/7/71 VERSION). /THE OTHERS ARE CONTAINED IN FILE INDEX2.SB. / /ALL LINC-MODE CODING USED BY THIS PROGRAM IS CONTAINED IN /SUBROUTINES NALOG,DISP7,DISP9&DSP11. / /BINARY FILE INDEX.RL MUST BE LOADED INTO FIELD 1. /BINARY FILE INDEX2.RL MUST BE LOADED INTO FIELD 0. /THE FOLLOWING LOADING SEQUENCE MUST BE USED TO ENSURE /THAT ALL SUBROUTINES WILL FIT INTO 8K OF CORE: / .R LOADER / *INDEX,INDEX2,UTILTY/1/U$ / 0000 / 0000 / .SAVE SYS:INDEX / OPDEF TADI 1400 OPDEF DCAI 3400 OPDEF JMSI 4400 OPDEF JMPI 5400 OPDEF CIF10 6212 OPDEF CDF10 6211 OPDEF RDF 6214 ABSYM DLETEP 100 /END OF DELETIONS ABSYM IBUFFP 101 /START OF SEG ENTRIES ABSYM INDEXP 102 /START OF INDEX ABSYM DFILEP 103 /START OF DELETIONS ABSYM FIRSTP 104 /1ST ENTRY DISPLAYED ABSYM LASTP 105 /LAST FILE DISPLAYED (0 IF NONE) ABSYM DATE 106 /4 WORDS: MM/DD/YY ABSYM DATE5 112 /ZERO ABSYM DEV 113 /2 WORDS: DEVICE NAME ABSYM DFLAG 115 /DISPLAY FLAG ABSYM DFILES 116 /# OF DELETIONS ABSYM EMPTY 117 /TOTAL FREE BLOCKS ABSYM NUMX 120 /# OF ENTRIES ABSYM NUMDSP 121 /# OF ENTRIES DISPLAYED ABSYM FIRSTE 122 /INDEX # OF 1ST ENTRY DISPLAYED (ALWAYS > 0) ABSYM LASTEP 123 /=0 IF LAST ENTRY DISPLAYED IS <EMPTY> ABSYM SAVE1 124 ABSYM SAVE2 125 ABSYM INFOW3 127 /3 + # OF ADDITIONAL INFO WORDS ABSYM IBLK1 130 /INDEX SEG BLOCK # ABSYM ENDXP 131 /1ST UNUSED INDEX LOC ABSYM PFLAG 132 /=4 IF P OPTION IN PROGRESS ABSYM BLOCK1 133 /STARTING BLOCK # OF 1ST INDEX SEG ABSYM ENTRYP 134 /START OF PIP FILE LIST ABSYM FIRST 146 /1ST INDEX # SELECTED BY TTY&KNOB7 (MAY BE <=0) ABSYM NUMDS 147 /FRAME SIZE SELECTED BY KNOB7 (>=NUMDSP)
/INDEX.SB, PAGE 3 / ABSYM PONT1 141 ABSYM PONT2 142 ABSYM PONT3 143 ABSYM PONT4 144 ABSYM PONT5 145 ABSYM CONT1 151 ABSYM CONT2 152 ABSYM CONT3 153 ABSYM CONT4 154 ABSYM CONT5 155 ABSYM OUTDEV 165 /2 WORDS: OUTPUT DEVICE NAME (IN FIELD 0) / /INDEX BUFFER. 23 OCTAL PAGES ALLOCATED (INCLUDING SEG BUFFER) PFILE, COMMN 2 /SIMULATES PREVIOUS FILE ENTRY DURING RUBOUT COMMAND INDEX, COMMN 1776 /ALLOCATE 10 (OCTAL) PAGES INDEX2, COMMN 2200 /ALLOCATE 11 (OCTAL) PAGES /INDEX SEGMENT BUFFER. 1ST 5 LOCS ARE SEGMENT HEADER. ENTRYS, COMMN 1 /-# OF ENTRIES IN SEG FIRSTF, COMMN 1 /STARTING BLOCK # OF 1ST ENTRY IN THIS SEG LINK, COMMN 1 /BLOCK # OF NEXT SEG TENTIV, COMMN 1 /POINTER TO TENTATIVE OUTPUT FILE ENTRY INFOW, COMMN 1 /-# OF ADDITIONAL INFORMATION WORDS IBUFF, COMMN 372 /SEG ENTRIES DELETE, COMMN 1 /END OF SEG BUFFER / LAP TEXT1, TEXT /INDEX OVERFLOW@/ TEXT2, TEXT /FILE DATE OCTAL LENGTH@/ TEXT3, TEXT /OCTAL FREE BLOCKS@/ TEXT4, TEXT /<EMPTY>@/ TEXT5, TEXT /DELETION ERROR@/ TEXT6, TEXT /NOT FIELD 1@/ TEXT8, TEXT /DEVICE NOT SPECIFIED@/ TEXT9, TEXT /CANNOT PIP ONTO INPUT DEVICE@/ IBUFP, IBUFF NDEXP, INDEX DLETP, DELETE INDX2P, INDEX2 NTRYP, ENTRYS / / EAP ENTRY MAIN MAIN, NOP CALL 0,OPEN DCA DFLAG /ZERO DISPLAY FLAG DCA PFLAG /ZERO P OPTION FLAG DCA DEV /ZERO DEVICE NAME /CHECK THAT INDEX.RL IS LOADED INTO FIELD 1 RDF /GET CURRENT DF TAD (-10 SNA CLA JMP OKFLD1 CALL 1,ALPHA ARG TEXT6 CALL 0,EXIT /
/INDEX.SB, PAGE 4 / OKFLD1, IAC DCA PFILE TAD DLETP IAC DCA DLETEP TAD IBUFP DCA IBUFFP TAD NDEXP DCA INDEXP TAD NTRYP DCA ENTRYP TADI (7666 /GET DATE CALL 1,IDATE ARG DATE DCA DATE5 /INSERT TERMINATING ZERO-VALUED CHAR. /ADJUST JOB STATUS WORD TO PREVENT RESTARTING INDEX CPAGE 10 6201 /CDF 0 TADI (7746 AND (6777 TAD (1000 DCAI (7746 /CALL HELP DISPLAY ROUTINE HELP, CALL 1,IHELP ARG DFLAG TAD JUMP1 DCA JUMP2 CPAGE 7 JUMP2, HLT /JUMP TO LOC SPECIFIED BY TERMINATION CHARACTER DSPLAY /C-R TYPED DEVICE /D TYPED RESET /R TYPED PERMNT /: TYPED PIP /P TYPED JUMP1, JMPI JUMP2 / /D TYPED. READ DEVICE NAME & LOAD DEVICE HANDLER /CALL A SPECIAL VERSION OF NAMES TO READ IN 1 DEVICE NAME /AND RETURN IT IN THE AC. DEVICE, CALL 0,NAMES DCA DEV DCA DEV# /CHECK THAT DEVICE WAS SPECIFIED TAD DEV SZA CLA JMP FETCHD NODEV, CALL 1,ALPHA ARG TEXT8 CRCRCR, CALL 0,CRLF DCA DFLAG DCA PFLAG JMP HELP /
/INDEX.SB, PAGE 5 / /CALL SPECIAL VERSION OF LFILE TO FETCH DEVICE HANDLER. FETCHD, CLA IAC DCA FIRST /START INITIAL INDEX DISPLAY WITH 1ST ENTRY FECHD, CALL 1,LFILE ARG DEV /RESET POINTERS & READ IN INDEX READX, DCA DFLAG /ZERO DEVICE FLAG DCA DFILES TAD DLETEP DCA DFILEP DCA EMPTY TAD INDEXP DCA PONT1 /1ST UNUSED INDEX LOC DCA CONT1 /# OF ENTRIES TAD (-6 DCA CONT2 /# OF SEGS IAC DCA IBLK1 /1ST SEG BLOCK # /LOOP TO READ IN INDEX SEGS & TRANSFER ENTRIES /CHECK IF BUFFER IS STILL AVAILABLE NDXLUP, TAD PONT1 CIA TAD INDX2P SMA CLA JMP R2PGS TAD PONT1 CIA TAD IBUFFP TAD (-5 SPA CLA JMP NOROOM /READ IN 2 128-WORD PAGES R2PGS, CALL 3,RFILE ARG (2 ARG IBLK1 ARG ENTRYS TAD ENTRYS DCA CONT3 /# OF ENTRIES IN SEG TAD INFOW DCA CONT4 /# OF ADDITIONAL INFO WORDS TAD IBUFFP DCA PONT3 /START OF SEG ENTRIES CLA CMA TAD IBLK1 SZA CLA JMP GETLNK TAD FIRSTF DCA BLOCK1 /STARTING BLOCK # OF 1ST INDEX ENTRY GETLNK, TAD LINK DCA IBLK1 /NEXT SEG BLOCK # /
/INDEX.SB, PAGE 6 / /TRANSFER ENTRIES /CHECK SPACE LEFT IN INDEX BUFFER ENTLUP, TAD PONT1 DCA ENDXP /1ST UNUSED LOC TAD PONT1 CIA TAD INDX2P SMA CLA JMP ROOMOK TAD ENTRYP TAD (-14 CIA TAD PONT1 /1ST UNUSED LOC SPA SNA CLA JMP ROOMOK /INDEX IS TOO LARGE NOROOM, CALL 1,ALPHA ARG TEXT1 CALL 0,CRLF JMP CHLAST /CHECK FOR FINAL <EMPTY> ENTRY /ADD A DUMMY <EMPTY> ENTRY OF LENGTH ZERO ADDEMP, DCAI PONT1 INC PONT1 DCAI PONT1 INC PONT1 INC CONT1 TAD PONT1 DCA ENDXP /1ST UNUSED LOC JMP DSPLAY /DISPLAY AS MUCH OF THE INDEX AS WILL FIT /STILL ENOUGH ROOM. TRANSFER NEXT ENTRY /CHECK FOR <EMPTY> OR FILE ENTRY /ENTRY FORMATS ARE AS FOLLOWS: /FILE ENTRY: FFFFFF.EE MM/DD/YYL (12 OCTAL WORDS) /<EMPTY>ENTRY: 0L ( 2 WORDS) /FFFFFF.EE = FILE NAME & EXTENSION (5 WORDS @ 2 CHARS/WORD) /MM/DD/YY = DATE (4 WORDS @ 2 CHARS/WORD) /L = LENGTH (1 WORD) /0 = ZERO (1 WORD) ROOMOK, TADI PONT3 SZA CLA JMP NOTEMP /EMPTY ENTRY DCAI PONT1 /ZERO INC PONT3 INC PONT1 TADI PONT3 CIA TAD EMPTY DCA EMPTY /
/INDEX.SB, PAGE 7 / /CHECK IF PREVIOUS ENTRY IS <EMPTY> CLA CMA CLL RTL /AC=-3 TAD PONT1 DCA PONT5 TADI PONT5 SZA CLA JMP LENGTH /IT IS <EMPTY>, SO COMBINE CLA CMA CLL RAL /AC=-2 TAD PONT1 DCA PONT1 CLA CMA TAD CONT1 DCA CONT1 TADI PONT1 CIA JMP LENGTH /FILE ENTRY. TRANSFER FILE NAME NOTEMP, CLA CMA CLL RTL /AC=-3 DCA CONT5 FILUP, TADI PONT3 JMS BLANK /CONVERT @ TO BLANK DCAI PONT1 INC PONT3 INC PONT1 ISZ CONT5 JMP FILUP /TRANSFER EXTENSION, INSERTING PERIOD TADI PONT3 SNA JMP BEXT /NO EXTENSION JMS BLANK RTR RTR RTR AND (77 TAD (5600 DCAI PONT1 INC PONT1 TADI PONT3 AND (77 CLL RTL RTL RTL JMS BLANK JMP DCAPT1 BEXT, TAD (4040 DCAI PONT1 INC PONT1 TAD (4040 DCAPT1, DCAI PONT1 INC PONT1 INC PONT3 /
/INDEX.SB, PAGE 8 / TAD PONT1 DCA ARG10# CLA CLL IAC RTL /AC=4 TAD PONT1 DCA PONT1 /TRANSLATE & STORE DATE IN NEXT 4 LOCS TAD CONT4 SZA CLA TADI PONT3 CALL 1,IDATE ARG10, ARG INDEX /SKIP OVER ADDITIONAL INFO WORDS TAD CONT4 CIA TAD PONT3 DCA PONT3 /CHECK FOR ZERO FILE LENGTH TADI PONT3 SZA JMP STOLTH /IGNORE TENTATIVE FILE ENTRY INC PONT3 TAD PONT1 TAD (-11 DCA PONT1 JMP ISZ3 /STORE ENTRY LENGTH LENGTH, TADI PONT3 STOLTH, CIA DCAI PONT1 INC PONT3 INC PONT1 /CHECK FOR MORE ENTRIES IN SEG INC CONT1 /INC ENTRY COUNT ISZ3, ISZ CONT3 JMP ENTLUP /CHECK FOR MORE SEGS TAD PONT1 DCA ENDXP /1ST UNUSED LOC TAD IBLK1 SNA CLA JMP CHLAST /NO MORE SEGS ISZ CONT2 JMP NDXLUP /GET NEXT SEG JMP NOROOM /INDEX OVERFLOW /CHECK FOR FINAL <EMPTY> ENTRY CHLAST, CLA CMA CLL RAL /AC=-2 TAD ENDXP DCA PONT2 TADI PONT2 SNA CLA JMP DSPLAY JMP ADDEMP /ADD FINAL <EMPTY> OF ZERO LENGTH /
/INDEX.SB, PAGE 9 / /SET UP FOR INDEX DISPLAY DSPLAY, TAD DFLAG SZA CLA JMP DSLOOP /ALREADY SET UP IAC DCA DFLAG TAD CONT1 DCA NUMX /# OF ENTRIES / /LOOP TO DISPLAY INDEX DSLOOP, JMS SETUPR /SET UP DISPLAY POINTERS TAD NUMDSP DCA CONT1 TAD FIRSTP DCA PONT1 TAD (261 DCA PONT2 /Y-COORD DSLUP1, TADI PONT1 SNA JMP DSEMPT DCA LASTEP /NONZERO TAD PONT1 DCA LASTP /LOC OF LAST FILE DISPLAYED TAD PONT1 DCA ARG20# CALL 4,DSP11 /DISPLAY FILE NAME & DATE ARG (0 ARG PONT2 ARG (11 ARG20, ARG INDEX TAD (11 JMP DSNUMB DSEMPT, DCA LASTEP /=0 CALL 3,DISP9 /DISPLAY <EMPTY> ARG (0 ARG PONT2 ARG TEXT4 IAC DSNUMB, TAD PONT1 DCA PONT1 TAD PONT1 DCA ARG30# CALL 3,DISP7 /DISPLAY OCTAL ENTRY LENGTH ARG (310 ARG PONT2 ARG30, ARG INDEX INC PONT1 /ANY MORE ENTRIES TO DISPLAY? TAD PONT2 TAD (-20 DCA PONT2 ISZ CONT1 JMP DSLUP1 /
/INDEX.SB, PAGE 10 / /DISPLAY HEADINGS CALL 3,DISP9 /DISPLAY DATE "MM/DD/YY" ARG (0 ARG (361 ARG DATE CALL 3,DISP7 /DISPLAY "NNNN OCTAL FREE BLOCKS" ARG (200 ARG (361 ARG EMPTY CALL 3,DISP9 ARG (262 ARG (361 ARG TEXT3 CALL 3,DISP9 /DISPLAY "FILE DATE OCTAL LENGTH" ARG (0 ARG (321 ARG TEXT2 /CHECK FOR TELETYPE COMMANDS CALL 1,KEYBD ARG IBUFF SNA JMP DSLOOP /NOTHING TYPED YET TAD (-377 SNA JMP RUBOUT /RUBOUT TYPED TAD (50 SNA JMP DEC8 /W TYPED TAD (5 SNA JMP RESET /R TYPED IAC SNA JMP DEC1 /Q TYPED IAC SNA JMP PIP /P TYPED TAD (10 SNA JMP HELP /H TYPED TAD (4 SNA JMP DEVICE /D TYPED TAD (12 SNA JMP PERMNT /: TYPED TAD (10 SNA JMP INC8 /2 TYPED IAC SNA CLA JMP INC1 /1 TYPED JMP DSLOOP /IGNORE ANY OTHER CHARS. /
/INDEX.SB, PAGE 11 / /INCREMENT & DECREMENT INDEX DISPLAY DEC8, TAD NUMDS /W TYPED JMP INC1 DEC1, CLA CMA CLL RAL /Q TYPED INC1, IAC /1 TYPED JMP INCDEC INC8, TAD NUMDS /2 TYPED CMA INCDEC, TAD FIRST DCA FIRST JMP DSLOOP / /R TYPED. RESTORE DELETIONS RESET, TAD DFLAG SNA CLA JMP HELP /NO DEVICE SELECTED TAD DFILES SNA CLA JMP DSLOOP /NO DELETIONS JMP READX /REREAD INDEX / /RUBOUT TYPED. DELETE LAST DISPLAYED FILE RUBOUT, TAD LASTP SNA JMP DSLOOP /NO FILE DISPLAYED DCA PONT1 TAD (-4 TAD DFILEP DCA DFILEP TAD DFILEP DCA PONT2 CLA CMA CLL RTL /AC=-3 DCA CONT1 /TRANSFER FILE NAME DDLUP, TADI PONT1 JMS UNBLNK /CONVERT BLANK TO @ DCAI PONT2 INC PONT1 INC PONT2 ISZ CONT1 JMP DDLUP /TRANSFER EXTENSION TADI PONT1 AND (77 CLL RTL RTL RTL DCA PONT3 INC PONT1 TADI PONT1 RTR;RTR;RTR AND (77 TAD PONT3 JMS UNBLNK DCAI PONT2 INC DFILES /
/INDEX.SB, PAGE 12 / /CONVERT FILE ENTRY INTO NEW <EMPTY> ENTRY TAD LASTP TAD (11 DCA PONT2 /POINTS TO FILE LENGTH TAD LASTP IAC DCA PONT1 /POINTS TO LENGTH OF NEW <EMPTY> ENTRY TADI PONT2 DCAI PONT1 DCAI LASTP /CONVERT TO <EMPTY> INC PONT2 /FOLLOWING ENTRY CLA CMA CLL RAL /AC=-2 TAD LASTP DCA PONT3 /PREVIOUS ENTRY /ADD FILE LENGTH TO FREE BLOCKS TOTAL TADI PONT1 TAD EMPTY DCA EMPTY /CHECK IF PREVIOUS ENTRY IS <EMPTY> TADI PONT3 SZA CLA JMP CHK2 /IT IS <EMPTY>, SO COMBINE WITH NEW <EMPTY> TAD PONT3 DCA LASTP /NEW <EMPTY> ENTRY INC PONT3 TADI PONT1 TADI PONT3 DCAI PONT3 TAD PONT3 DCA PONT1 JMS DEC1ST /DECREMENT INDEX # OF 1ST ENTRY DISPLAYED JMS DECONT /DECREMENT ENTRY COUNT /CHECK IF FOLLOWING ENTRY IS <EMPTY> CHK2, TADI PONT2 SZA CLA JMP CHK3 /IT IS <EMPTY>, SO COMBINE INC PONT2 TADI PONT2 TADI PONT1 DCAI PONT1 INC PONT2 /FOLLOWING ENTRY JMS DECONT /DECREMENT ENTRY COUNT /CHECK IF LAST ENTRY DISPLAYED IS <EMPTY> TAD LASTEP SNA CLA JMS DEC1ST /DECREMENT INDEX # OF 1ST ENTRY DISPLAYED /NOW MOVE UP THE REMAINING ENTRIES CHK3, CLA CLL IAC RAL /AC=2 TAD LASTP DCA LASTP TAD ENDXP CIA TAD PONT2 DCA CONT1 /
/INDEX.SB, PAGE 13 / TAD CONT1 CIA TAD LASTP DCA ENDXP TAD CONT1 SNA CLA JMP DSLOOP MMLUP, TADI PONT2 DCAI LASTP INC PONT2 INC LASTP ISZ CONT1 JMP MMLUP JMP DSLOOP DEC1ST, 0 CLA CMA TAD FIRST DCA FIRST JMP I DEC1ST DECONT, 0 CLA CMA TAD NUMX DCA NUMX CLA CMA TAD FIRST SMA SZA CLA JMP DECXIT TAD NUMX TAD NUMDS SPA CLA ISZ FIRST NOP DECXIT, JMP I DECONT / /COLON TYPED. MAKE DELETIONS PERMANENT PERMNT, TAD DFLAG SNA CLA JMP HELP /NO DEVICE SELECTED TAD DFILES SNA JMP DSLOOP /NO DELETIONS CIA DCA DFILES /-# OF DELETIONS /MOVE DELETION LIST TO TOP OF INDEX BUFFER TAD INDEXP JMS MVSUB JMP SETSEG MVSUB, 0 DCA PONT1 TAD DFILES DCA CONT1 MDLUP, CLA CLL IAC RTL /AC=4 TAD PFLAG /=0 OR 4 CIA DCA CONT2 MDLUP2, TADI DFILEP DCAI PONT1
/INDEX.SB, PAGE 14 / INC DFILEP INC PONT1 ISZ CONT2 JMP MDLUP2 ISZ CONT1 JMP MDLUP JMP I MVSUB /SET UP TO READ INDEX SEGS SETSEG, TAD (-6 DCA CONT1 /MAX # OF SEGS IAC DCA IBLK1 /1ST SEG BLOCK # IN OLD INDEX IAC DCA BLOCK1 /1ST SEG BLOCK # IN NEW INDEX /LOOP TO READ IN INDEX SEGS & MAKE DELETIONS PERMANENT PERLUP, TAD IBLK1 JMS LOOKUP TAD LINK DCA IBLK1 /NEXT SEG BLOCK # IN OLD INDEX TAD LINK SNA CLA JMP PERLP2 TAD BLOCK1 IAC DCA LINK /NEXT SEG BLOCK # IN NEW INDEX JMP PERLP2 /SUBROUTINE TO LOOK UP & READ INDEX SEG. /ENTER WITH BLOCK # IN AC. LOOKUP, 0 DCA PONT1 CALL 3,RFILE /READ 2 PAGES ARG (2 ARG PONT1 ARG ENTRYS TAD ENTRYS DCA CONT2 /-# OF ENTRIES IN SEG DCA TENTIV /ZERO TENTATIVE FILE POINTER CLA CMA CLL RTL /AC=-3 TAD INFOW CIA DCA INFOW3 /3 + # OF ADDITIONAL INFO WORDS TAD IBUFFP DCA PONT1 /START OF SEG ENTRIES DCA PONT5 /WILL POINT TO PREVIOUS SEG ENTRY /FIND 1ST UNUSED LOC IN SEG TAD IBUFFP DCA ENDXP /WILL POINT TO 1ST UNUSED LOC LASTLP, TADI ENDXP SZA CLA TAD INFOW3 TAD (2 TAD ENDXP DCA ENDXP ISZ CONT2 JMP LASTLP JMP I LOOKUP /RETURN /
/INDEX.SB, PAGE 15 / /LOOP OVER EACH FILE NAME IN SEG, COMPARING IT AGAINST DELETION LIST PERLP2, TADI PONT1 SNA CLA JMP NEXTEN /<EMPTY> ENTRY TAD DFILES DCA CONT2 /-# OF DELETIONS TAD INDEXP DCA PONT2 /START OF DELETIONS /LOOP OVER DELETION LIST DELLUP, TAD PONT1 DCA PONT3 TAD PONT2 DCA PONT4 TAD (-4 DCA CONT3 /LOOP OVER CHARACTERS IN FILE NAME CHRLUP, TADI PONT3 CIA TADI PONT4 SZA CLA JMP ALREDY INC PONT3 INC PONT4 ISZ CONT3 JMP CHRLUP JMP PERMIT /MATCH FOUND. MAKE DELETION PERMANENT /INC POINTERS TO NEXT FILE IN DELETION LIST ALREDY, CLA CLL IAC RTL /AC=4 TAD PFLAG /=0 OR 4 TAD PONT2 DCA PONT2 ISZ CONT2 JMP DELLUP / /ADVANCE TO NEXT ENTRY IN SEG NEXTEN, TAD PONT1 DCA PONT5 /PREVIOUS ENTRY TADI PONT1 SZA CLA TAD INFOW3 TAD (2 TAD PONT1 DCA PONT1 /CHECK FOR END OF SEG TAD PONT1 CIA TAD ENDXP SMA SZA CLA JMP PERLP2 /
/INDEX.SB, PAGE 16 / /CHECK FOR CONSECUTIVE <EMPTY> ENTRIES /FROM ONE SEG TO ANOTHER. CLA CMA TAD BLOCK1 SNA CLA /IS THIS THE 1ST SEG? JMP RRSEG /YES TAD NUMDS SZA CLA /IS LAST ENTRY OF PREVIOUS SEG <EMPTY>? JMP RRSEG /NO TADI IBUFFP SZA CLA /IS 1ST ENTRY OF THIS SEG <EMPTY>? JMP RRSEG /NO /COMBINE CONSECUTIVE <EMPTY> ENTRIES TAD IBUFFP IAC DCA PONT4 TADI PONT4 DCA PONT4 /-LENGTH OF 2ND <EMPTY> ENTRY ISZ ENTRYS /DECREMENT ENTRY COUNT JMP NOTZIP /THIS ENTIRE SEG IS <EMPTY>, SO ELIMINATE IT. CLA CMA TAD BLOCK1 JMS LOOKUP /READ IN PREVIOUS SEG TAD IBLK1 SZA CLA TAD BLOCK1 DCA LINK CLA CMA TAD ENDXP DCA PONT5 TADI PONT5 TAD PONT4 DCAI PONT5 /COMBINE <EMPTY> ENTRIES JMP RRSEG2 /DELETE <EMPTY> ENTRY FROM THIS SEG & ADD IT TO /<EMPTY> ENTRY AT END OF PREVIOUS SEG. /START BY MOVING UP REMAINING ENTRIES IN THIS SEG. NOTZIP, TAD IBUFFP DCA PONT2 CLA CLL IAC RAL /AC=2 TAD PONT2 DCA PONT3 CLA CLL CMA RAL /AC=-2 TAD ENDXP CIA TAD IBUFFP DCA CONT2 TADI PONT5 DCA NUMDS /=0 IF LAST ENTRY IN THIS SEG IS <EMPTY> MMLOOP, TADI PONT3 DCAI PONT2 INC PONT3 INC PONT2 ISZ CONT2 JMP MMLOOP /
/INDEX.SB, PAGE 17 / /ADJUST STARTING BLOCK # OF 1ST ENTRY IN THIS SEG TAD PONT4 CIA TAD FIRSTF DCA FIRSTF /REWRITE THIS SEG TAD BLOCK1 INC BLOCK1 JMS RERITE /NOW READ IN & ADJUST PREVIOUS SEG CLA CLL CMA RAL /AC=-2 TAD BLOCK1 JMS LOOKUP CLA CMA TAD ENDXP DCA PONT5 TADI PONT5 TAD PONT4 DCAI PONT5 /COMBINE <EMPTY> ENTRIES CLA CLL CMA RAL /AC=-2 TAD BLOCK1 JMS RERITE JMP MORSEG / /END OF SEG. REWRITE SEG ONTO DEVICE RRSEG, TADI PONT5 DCA NUMDS /=0 IF LAST ENTRY IS <EMPTY> INC BLOCK1 RRSEG2, CLA CMA TAD BLOCK1 JMS RERITE /CHECK FOR MORE SEGS MORSEG, TAD IBLK1 SNA CLA JMP CHKPIP /NO MORE SEGS ISZ CONT1 JMP PERLUP /READ NEXT SEG JMP DELERR /TOO MANY SEGS CHKPIP, TAD PFLAG /CHECK PIP FLAG SNA CLA JMP READX JMP PIPBAC / /SUBROUTINE TO REWRITE INDEX SEG. /ENTER WITH BLOCK # IN AC. RERITE, 0 DCA PONT1 CALL 3,RFILE ARG (-2 /NEGATIVE TO WRITE 2 PAGES ARG PONT1 ARG ENTRYS JMP I RERITE /
/INDEX.SB, PAGE 18 / /PERMANENTLY DELETE FILE. /CONVERT FILE ENTRY INTO NEW <EMPTY> ENTRY PERMIT, TAD PONT1 TAD INFOW3 IAC DCA PONT2 /FILE LENGTH TAD PONT1 IAC DCA PONT3 /LENGTH OF NEW <EMPTY> ENTRY TADI PONT2 DCAI PONT3 DCAI PONT1 /CONVERT TO <EMPTY> INC PONT2 /FOLLOWING ENTRY /CHECK IF PREVIOUS ENTRY IS <EMPTY> TAD PONT5 SNA CLA JMP CHECK2 TADI PONT5 SZA CLA JMP CHECK2 /IT IS <EMPTY>, SO COMBINE WITH NEW <EMPTY> TAD PONT5 DCA PONT1 /NEW <EMPTY> ENTRY INC PONT5 TADI PONT3 TADI PONT5 DCAI PONT5 TAD PONT5 DCA PONT3 /DECREMENT SEG ENTRY COUNT ISZ ENTRYS JMP CHECK2 /FILE DELETION ERROR DELERR, CALL 0,CRLF CALL 1,ALPHA ARG TEXT5 JMP CRCRCR /CHECK IF FOLLOWING ENTRY IS <EMPTY> CHECK2, TAD ENDXP CIA TAD PONT2 SMA CLA JMP CHECK3 TADI PONT2 SZA CLA JMP CHECK3 /
/INDEX.SB, PAGE 19 / /IT IS <EMPTY>, SO COMBINE INC PONT2 TADI PONT2 TADI PONT3 DCAI PONT3 INC PONT2 /FOLLOWING ENTRY /DECREMENT ENTRY COUNT ISZ ENTRYS JMP CHECK3 JMP DELERR /MOVE UP THE REMAINING ENTRIES CHECK3, CLA CLL IAC RAL /AC=2 TAD PONT1 DCA PONT3 TAD ENDXP CIA TAD PONT2 DCA CONT2 TAD CONT2 CIA TAD PONT3 DCA ENDXP TAD CONT2 SMA CLA JMP NEXTEN MMMLUP, TADI PONT2 DCAI PONT3 INC PONT2 INC PONT3 ISZ CONT2 JMP MMMLUP JMP NEXTEN /
/INDEX.SB, PAGE 20 / /SUBROUTINE SETUPR SETS UP DISPLAY PARAMETERS SETUPR, 0 CALL 1,NALOG /GET KNOB 7 ARG (7 TAD (-100 SPA CLA RTR RTR AND (37 IAC DCA NUMDS TAD NUMDS CIA TAD NUMX SMA CLA TAD NUMDS CIA DCA NUMDS /-FRAME SIZE SELECTED BY KNOB7 (>=NUMDSP) TAD NUMDS CMA TAD FIRST SPA SNA CLA IAC IAC TAD NUMDS DCA FIRST TAD NUMX CIA TAD FIRST SMA SZA CLA TAD NUMX DCA FIRST /1ST INDEX # SELECTED BY TTY&KNOB7 (MAY BE <=0) CLA CMA TAD FIRST SPA CLA IAC DCA FIRSTE /INDEX # OF 1ST ENTRY DISPLAYED (ALWAYS >0) TAD FIRST CIA TAD FIRSTE TAD NUMDS DCA NUMDSP TAD NUMX CMA TAD FIRSTE DCA CONT1 TAD CONT1 CIA TAD NUMDSP SPA CLA TAD CONT1 DCA NUMDSP /-# OF ENTRIES TO DISPLAY (FRAME SIZE)
/INDEX.SB, PAGE 21 / TAD FIRSTE CIA DCA CONT1 TAD INDEXP DCA FIRSTP JMP INCIT1 GTLUP1, TADI FIRSTP SZA CLA TAD (10 TAD (2 TAD FIRSTP DCA FIRSTP /LOC OF 1ST ENTRY DISPLAYED INCIT1, ISZ CONT1 JMP GTLUP1 DCA LASTP /ZERO THE POINTER TO LAST FILE DISPLAYED JMP I SETUPR / /SUBROUTINE UNBLNK CONVERTS BLANKS TO AMPERSANDS UNBLNK, 0 DCA SAVE1 TAD SAVE1 AND (77 TAD (-40 SZA TAD (40 DCA SAVE2 TAD SAVE1 AND (7700 CLL RAL SZA RAR TAD SAVE2 JMP I UNBLNK / /SUBROUTINE BLANK CONVERTS AMPERSANDS TO BLANKS BLANK, 0 DCA SAVE1 TAD SAVE1 AND (77 SNA TAD (40 DCA SAVE2 TAD SAVE1 AND (7700 SNA CLL CML RAR TAD SAVE2 JMP I BLANK /
/INDEX.SB, PAGE 22 / /P TYPED. PIP ALL DISPLAYED FILES ONTO OUTPUT DEVICE. /DELETE ANY OLD FILES ON OUTPUT DEVICE WITH SAME NAMES. PIP, TAD DFLAG SNA CLA JMP HELP /NO INPUT DEVICE SELECTED TAD LASTP SNA JMP RESET /NO FILES DISPLAYED TAD (12 CIA DCA LASTP /NEGATIVE OF 1ST ADDRESS AFTER LAST DISPLAYED FILE /FIND STARTING BLOCK # OF 1ST ENTRY DISPLAYED TAD INDEXP DCA PONT1 TLUP0, TAD PONT1 CIA TAD FIRSTP SNA CLA JMP TR1 TADI PONT1 SZA CLA TAD (10 IAC TAD PONT1 DCA PONT1 TADI PONT1 TAD BLOCK1 DCA BLOCK1 INC PONT1 JMP TLUP0 /MAKE A LIST OF THE NAMES OF FILES TO BE PIPPED. /CONVERT FORMATS BACK TO PS/8 STYLE. /SEE PAGE 6 FOR DISPLAY LIST FORMAT /SEE PAGE 22 FOR PIP LIST FORMAT TR1, DCA DFILES /ZERO # OF FILES TO PIP TAD ENTRYP DCA PONT2 /POINTS TO PIP LIST TLUP1, TADI PONT1 /POINTS TO DISPLAY LIST SZA CLA JMP TRFILE /
/INDEX.SB, PAGE 23 / /SKIP OVER <EMPTY> ENTRY INC PONT1 TADI PONT1 TAD BLOCK1 DCA BLOCK1 INC PONT1 JMP TLUP1 /TRANSFER FILE NAME & EXTENSION, DELETING PERIOD TRFILE, CLA CMA CLL RTL /AC=-3 DCA CONT2 TLUP2, TADI PONT1 JMS UNBLNK /CONVERT BLANKS TO @S DCAI PONT2 INC PONT1 INC PONT2 ISZ CONT2 JMP TLUP2 TADI PONT1 RTL RTL RTL AND (7700 DCA CONT2 INC PONT1 TADI PONT1 RTR RTR RTR AND (77 TAD CONT2 JMS UNBLNK DCAI PONT2 INC PONT1 INC PONT2 /CONVERT DATE BACK TO 1-WORD PS/8 STYLE AND TRANSFER TAD PONT1 CALL 0,BDATE DCAI PONT2 INC PONT2 /
/INDEX.SB, PAGE 24 / /TRANSFER LENGTH CLA CLL IAC RTL /AC=4 TAD PONT1 DCA PONT1 TADI PONT1 DCAI PONT2 /NOTE THAT LENGTH IS > 0 INC PONT2 /STORE STARTING BLOCK # OF FILE ON INPUT DEVICE TAD BLOCK1 DCAI PONT2 TADI PONT1 TAD BLOCK1 DCA BLOCK1 INC PONT1 INC PONT2 INC PONT2 /SKIP OVER STARTING BLOCK # ON OUTPUT DEVICE INC DFILES /INC # OF FILES BEING PIPPED /CHECK FOR LAST FILE DISPLAYED TAD PONT1 TAD LASTP SZA CLA JMP TLUP1 / /AT THIS POINT, WE HAVE A LIST OF DFILES FILE NAMES /EACH FILE NAME HAS THE FOLLOWING 8-WORD FORMAT: FFFEDLIO /FFF = FILE NAME (3 WORDS @ 2 CHARS/WORD) /E = EXTENSION (1 WORD @ 2 CHARS/WORD) /D = DATE (1 WORD -- USES PS/8 FORMAT) /L = LENGTH /I = STARTING BLOCK # ON INPUT DEVICE /O = STARTING BLOCK # ON OUTPUT DEVICE (TO BE INSERTED LATER) / /CALL COMMAND DECODER TO READ OUTPUT DEVICE NAME CALL 0,NAMES DCA OUTDEV DCA OUTDEV# TAD OUTDEV CDF0, 6201 /CHANGE TO DF 0 CPAGE 4 DCAI OUTDVP SKP OUTDVP, OUTDEV /REFERS TO FIELD 0 /
/INDEX.SB, PAGE 25 / /CHECK THAT OUTPUT DEVICE WAS SPECIFIED & THAT IT IS /DIFFERENT FROM INPUT DEVICE. TAD OUTDEV SNA JMP NODEV CIA TAD DEV SZA CLA JMP OKOUT /OUTPUT DEVICE = INPUT DEVICE CALL 1,ALPHA ARG TEXT9 JMP CRCRCR /FETCH OUTPUT DEVICE OKOUT, CALL 1,LFILE ARG OUTDEV /SET UP TO DELETE PIPPEP FILE NAMES FROM OUTPUT DEVICE INDEX CLA CLL IAC RTL /AC=4 DCA PFLAG /SET PIP FLAG TAD ENTRYP DCA DFILEP JMP PERMNT /DELETE NAMES /MOVE PIP LIST TO REAR OF COMMON PIPBAC, TAD INDEXP DCA DFILEP TAD ENTRYP JMS MVSUB DCA PFLAG /CLEAR PIP FLAG /NOW TRANSFER FILES TO OUTPUT DEVICE. TAD DFILES CIA /MAKE # OF FILES >0 CALL 0,FTRANS AAEND, JMP FECHD END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search