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

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

/INDEX2.SB, PAGE 1 OF 25.	(6/23/72 - C.M.MOORE, RICE U., HOUSTON)
/
/CONTAINS ROUTINES IDATE,KEYBD,IHELP,FTRANS,BDATE,LFILE,RFILE,MFILE,
/WFILE,CFILE,LINK,CLEAR,MPY,NAMES.
/THESE ARE CALLED BY ROUTINE INDEX IN FILE INDEX.SB.
/
/INDEX2.RL MUST BE LOADED INTO FIELD 0 BECAUSE IT CONTAINS PS/8 DEVICE
/HANDLER BUFFERS.  SEE PAGE 2 OF INDEX.SB FOR LOADING INSTRUCTIONS.
/
OPDEF	ANDI	0400
OPDEF	TADI	1400
OPDEF	DCAI	3400
OPDEF	JMSI	4400
OPDEF	JMPI	5400
OPDEF	KRS	6034
OPDEF	CDF10	6211
OPDEF	CIF10	6212
OPDEF	RDF	6214
/
ABSYM JDATE 156
ABSYM KDATE 157
ABSYM LDATE 161
ABSYM SAVE1 162
ABSYM SAVE2 135
ABSYM SAVE3 136
ABSYM SAVE4 137
ABSYM SAVE5 140
ABSYM IFLAG 150
ABSYM CNT2  156
ABSYM CNT3  157
ABSYM PNT1  160
ABSYM PNT2  161
ABSYM PNT3  162
ABSYM PNT4  163
ABSYM INTRYP 164 /START OF PIP FILE LIST
ABSYM OUTDEV 165 /2 WORDS: OUTPUT DEVICE NAME
ABSYM NFILES 167 /# OF FILES TO TRANSFER
ABSYM LLMAX  170 /MAX AVAILABLE SPACE ON OUTDEV
ABSYM NBLCKS 171 /# OF BLOCKS TO TRANSFER
ABSYM NPAGES 172 /# OF PAGES IN THIS BUFFER LOAD
ABSYM INBLK1 173 /STARTING BLOCK # ON INPUT DEVICE
ABSYM OUBLK1 174 /STARTING BLOCK # ON OUTPUT DEVICE
ABSYM INDEVP 175 /POINTS TO INPUT DEVICE NAME IN FIELD 1
ABSYM PONT1  176
ABSYM CONT1  177
/
/NOTE: THE FOLLOWING ADDRESSES REFER TO FIELD 1 LOCS.
ABSYM DATE 106 /4 WORDS: MM/DD/YY
ABSYM DEV  113 /2 WORDS: INPUT DEVICE NAME
/
PFILE,	COMMN 2
INDEX,	COMMN 1776
INDEX2,	COMMN 2200
ENTRYS,	COMMN 400  /CONTAINS LIST OF FILES TO BE PIPPED.
/

/INDEX2.SB, PAGE 2 / /SUBROUTINE IDATE(DATE) /CONVERTS DATE IN AC FROM 1 WORD TO 8 6-BIT CHARS AND /STORES IT IN DATE IN THE FORM MM/DD/YY. ENTRY IDATE IDATE, BLOCK 2 DCA JDATE TAD IDATE DCA CDFPRG CDFPRG, HLT /CHANGE TO DF OF CALLING PROG TADI IDATE# DCA DFARG INC IDATE# TADI IDATE# DCA SAVE1 INC IDATE# /CONVERT & STORE DATE TAD JDATE SNA JMP ZIPDAT /ZERO--NO DATE RTL RTL RAL AND (17 DCA KDATE TAD KDATE TAD (-12 SMA CLA TAD (2100 TAD (4060 DCA LDATE TAD KDATE TAD (-12 SPA TAD (12 TAD LDATE JMS STOR /STORE MM TAD JDATE RTR RAR AND (37 DCA KDATE TAD (5757 DCA LDATE /DIVIDE KDATE BY 12 OCTAL TAD KDATE DV12LP, INC LDATE TAD (-12 SMA JMP DV12LP TAD (12 DCA KDATE /REMAINDER TAD LDATE /QUOTIENT + 5760 JMS STOR /STORE /D /
/INDEX2.SB, PAGE 3 / TAD KDATE CLL IAC RTL RTL RTL TAD (5757 JMS STOR /STORE D/ TAD JDATE AND (7 TAD (6760 JMS STOR /STORE YY DATBAC, RETRN IDATE /ZERO DATE--STORE BLANKS ZIPDAT, TAD (-4 DCA JDATE ZIPLP, TAD (4040 JMS STOR ISZ JDATE JMP ZIPLP JMP DATBAC /ROUTINE TO STORE ARGS STOR, 0 DFARG, HLT /CHANGE TO DF OF ARG DCAI SAVE1 INC SAVE1 JMPI STOR / /SPECIAL VERSION OF KEYBD(0) WHICH ECHOS \ FOR RUBOUT. ENTRY KEYBD KEYBD, BLOCK 2 CLA CLL IAC RAL /AC=2 TAD KEYBD DCA CDFCIF /SET UP FOR QUICK RETURN INC KEYBD# INC KEYBD# /SKIP DUMMY ARG KSF /IS FLAG UP? JMP CDFCIF /NO. RETURN 0 IN AC KRS /YES. GET CHAR TAD (-377 SNA CLA /IS IT RUBOUT? JMP RUBTYP /YES CLA CLL CML RTR /NO. CALL GENIO TO READ & ECHO CHAR CALL 0,GENIO CDFCIF, HLT /CHANGE TO DF&IF OF CALLING PROG JMPI KEYBD# /QUICK RETURN RUBTYP, TAD (334 /ECHO \ FOR RUBOUT CALL 0,GENIO KRB /RETURN RUBOUT IN AC AABEND, JMP CDFCIF /
/INDEX2.SB, PAGE 4 / /PDP-12 PS/8 FORTRAN/SABR HELP DISPLAY ROUTINE / LAP CPAGE 200 /START ON NEW PAGE IF INSERTED WITH OTHER SABR CODE. / OPDEF TADI 1400 /MUST REFERENCE LOC ON CURRENT PAGE / CNT1, 0 / /FUNCTION IHELP(IFLAG) ENTRY IHELP IHELP, BLOCK 2 CLA TAD IHELP DCA CDFHLP CDFHLP, HLT /CHANGE TO DF OF CALLING PROG TADI IHELP# DCA DFARG2 INC IHELP# TADI IHELP# DCA PNT2 INC IHELP# DFARG2, HLT /CHANGE TO DF OF ARG TADI PNT2 DCA IFLAG /CARRIAGE-RETURN FLAG TAD CNT1 SPA CLA JMP SETUP /START NEW DISPLAY AT LAST FRAME OF PREVIOUS DISPLAY /
/INDEX2.SB, PAGE 5 / HELPER, TAD I HMAXP /CHANGE TO CURRENT DF. DCA CNT1 /# OF FRAMES TAD H1P DCA PNT1 SETUP, TAD PNT1 /SET UP FOR NEXT FRAME IAC DCA PNT2 TAD I PNT2 /CHANGE TO CURRENT DF. CIA TADI PNT1 DCA CNT2 /# OF LINES IN FRAME TADI PNT1 DCA PNT2 FRAME, TAD PNT2 /RESET FRAME POINTERS DCA PNT3 TAD CNT2 DCA CNT3 FLOOP, TADI PNT3 /LOOP TO DISPLAY LINES IN FRAME DCA ARG1# TAD ARG1# IAC DCA ARG2# TAD ARG2# IAC DCA ARG3# CALL 3,DISP9 /DISPLAY NEXT LINE ARG1, ARG HELP1 /X-COORD (<0 FOR FULL-SIZED CHARS) ARG2, ARG HELP1 /Y-COORD ARG3, ARG HELP1 /START OF TEXT INC PNT3 ISZ CNT3 JMP FLOOP CALL 1,KEYBD /CHECK IF ANYTHING TYPED ARG HELP1 SNA JMP FRAME /NOTHING TYPED YET DCA DFARG2 TAD CMAX DCA CNT3 /NUMBER OF TERMINATING CHARACTERS TAD C1P DCA PNT3 DCA PNT4 /CHARACTER INDEX NUMBER CHLUP, TADI PNT3 /GET CHAR TAD DFARG2 SNA CLA JMP CFOUND /CHAR FOUND INC PNT3 INC PNT4 ISZ CNT3 JMP CHLUP JMP FRAME /IGNORE ANY OTHER CHARACTERS /
/INDEX2.SB, PAGE 6 / /CHARACTER FOUND. CHECK FOR M OR CARRIAGE-RETURN CFOUND, CLA CMA /AC=-1 TAD PNT4 SNA JMP CR /CARRIAGE-RETURN TYPED SPA JMP MORE /M TYPED NDEX, IAC RETRN IHELP /RETURN WITH CHAR INDEX IN AC. / /M TYPED. ADVANCE HELP DISPLAY FRAME. MORE, CLA INC PNT1 ISZ CNT1 JMP SETUP JMP HELPER /CARRIAGE-RETURN TYPED. CHECK C-R FLAG. CR, TAD IFLAG SNA CLA JMP FRAME /IGNORE C-R. JMP NDEX /RETURN WITH 1 IN AC. / / /TABLE OF HELP DISPLAY TERMINATION CHARACTERS. /EACH ENTRY IS THE NEGATIVE OF THE OCTAL CHARACTER VALUE. /THE FIRST CHARACTER MUST BE M. /THE SECOND CHARACTER MUST BE CARRIAGE-RETURN. /ANY REMAINING CHARACTERS ARE USER-DEFINED. / CMAX, -6 /NEGATIVE OF NUMBER OF CHARACTERS C1P, C1 /POINTS TO TABLE /CHARACTER TABLE C1, -315 /M (INDEX=0 : CAUSES FRAME ADVANCE) -215 /C-R (INDEX=1 : IGNORED IF IFLAG=0) -304 /D -322 /R -272 /: -320 /P /END OF CHARACTER TABLE / / /HELP FRAME POINTER TABLE. /EACH ENTRY POINTS TO THE ADDRESS OF THE FIRST TEXT LINE IN THE FRAME. /TABLE MUST TERMINATE WITH "HMAXP, HMAX". H1P, H1 /POINTS TO TABLE /START OF TABLE H1, F1 F2 F3 F4 F5 F6 HMAXP, HMAX /END OF TABLE /
/INDEX2.SB, PAGE 7 / /TEXT POINTER TABLE. /FRAME 1 F1, HELP1 HELP2 HELP3 HELP3A HELP4 HELP5 HELP5A HELP6 HELP7 /FRAME 2 F2, HELP8 HELP9 HELP9A HELP10 HLP10A HLP10B HLP10C /FRAME 3 F3, HELP11 HLP11A HELP12 HELP13 HELP14 HELP15 HELP16 HLP16A HLP16B HLP10C /FRAME 4 F4, HELP17 HLP17A HELP18 HELP19 HELP20 HELP21 HELP22 HLP10C /FRAME 5 F5, HELP23 HELP24 HELP25 HELP26 HELP27 HELP28 HELP29 HELP30 HLP10C /FRAME 6 F6, HELP31 HELP32 HELP33 HELP34 HELP35 HELP36 HMAX, -6 /NEGATIVE OF NUMBER OF HELP FRAMES. MUST TERMINATE TABLE
/INDEX2.SB, PAGE 8 / /HELP TEXT DISPLAY STRINGS /SOME STRINGS ARE PLACED OUT OF SEQUENCE IN ORDER TO CONSERVE /CORE SPACE. (TEXT STRINGS WILL NOT CROSS CORE PAGE BOUNDARIES.) / CPAGE 10 HELP1, -235;320 /X-Y COORDS. TEXT /P D P - 1 2@/ CPAGE 6 HELP2, -301;220 TEXT 'P S / 8@' CPAGE 10 HELP3, -257;120 TEXT /I N D E X@/ CPAGE 13 HELP3A, 253;40 TEXT '(6/23/72 VERSION)@' CPAGE 14 HELP4, -125;-100 TEXT /PROGRAM EXPLANATION@/ CPAGE 33 HELP5, 30;-200 TEXT /TYPE H FOR HELP AT ANY TIME DURING INDEX DISPLAY@/ CPAGE 27 HELP5A, 30;-220 TEXT /(THIS EXPLANATION DISPLAY WILL REAPPEAR)@/ CPAGE 27 HELP6, 30;-260 TEXT /TYPE M FOR MORE HELP DURING EXPLANATION@/ CPAGE 33 HELP8, 0;300 TEXT 'INDEX DISPLAYS THE FILE INDEX OF ANY PS/8 DEVICE@' CPAGE 32 HELP9, 0;100 TEXT /THE DEVICE IS SPECIFIED BY TYPING D AND WAITING@/ CPAGE 30 HELP9A, 0;60 TEXT /FOR THE COMMAND DECODER TO ECHO A STAR (*)@/ CPAGE 33 HELP10, 0;-20 TEXT /WHEN * APPEARS, TYPE IN THE DEVICE NAME, FOLLOWED@/ CPAGE 10 HELP7, 310;-360 TEXT /TYPE M NOW!@/ CPAGE 32 HLP10A, 0;-40 TEXT /BY A COLON AND A CARRIAGE-RETURN. (IF THE : IS@/ CPAGE 31 HLP10B, 0;-60 TEXT /NOT TYPED, DSK: WILL BE THE DEVICE SELECTED.)@/ CPAGE 13 HLP10C, 0;-320 TEXT /(TYPE M FOR MORE)@/ /
/INDEX2.SB, PAGE 9 / CPAGE 34 HELP11, 0;320 TEXT /WHEN THE DEVICE INDEX APPEARS ON THE SCOPE, YOU MAY@/ CPAGE 31 HLP11A, 0;300 TEXT /TYPE THE FOLLOWING CHARACTERS TO INCREMENT OR@/ CPAGE 27 HELP12, 0;260 TEXT /DECREMENT THE FILE NAMES BEING DISPLAYED:@/ CPAGE 16 HELP13, 50;200 TEXT /1 INCREMENTS BY 1 FILE@/ CPAGE 16 HELP14, 50;140 TEXT /2 INCREMENTS BY 1 FRAME@/ CPAGE 16 HELP15, 50;100 TEXT /Q DECREMENTS BY 1 FILE@/ CPAGE 16 HELP16, 50;40 TEXT /W DECREMENTS BY 1 FRAME@/ CPAGE 26 HLP16A, 0;-100 TEXT /ANALOG KNOB 7 DETERMINES THE FRAME SIZE@/ CPAGE 25 HLP16B, 0;-120 TEXT /(I.E., THE NUMBER OF FILES DISPLAYED)@/ CPAGE 31 HELP17, 0;300 TEXT /TYPE RUBOUT TO DELETE THE LAST FILE CURRENTLY@/ CPAGE 21 HLP17A, 0;260 TEXT /BEING DISPLAYED ON THE SCOPE@/ CPAGE 33 HELP18, 0;200 TEXT /TYPE : TO MAKE PERMANENT ALL FILE DELETIONS MADE@/ CPAGE 26 HELP19, 0;160 TEXT /SINCE THE LAST D, P, R, OR : WAS TYPED@/ CPAGE 33 HELP20, 0;100 TEXT /TYPE R TO RESTORE ALL DELETIONS NOT YET PERMANENT@/ CPAGE 34 HELP21, 0;-40 TEXT 'IF CTRL/C, D, OR P IS TYPED BEFORE MAKING DELETIONS@' CPAGE 30 HELP22, 0;-60 TEXT /PERMANENT, THEY ARE AUTOMATICALLY RESTORED@/ /
/INDEX2.SB, PAGE 10 / CPAGE 33 HELP23, 0;300 TEXT /TYPE P (AND WAIT FOR * TO APPEAR) TO PIP ONTO AN@/ CPAGE 27 HELP25, 0;220 TEXT /WHEN * APPEARS, SPECIFY THE OUTPUT DEVICE@/ CPAGE 24 HELP26, 0;100 TEXT /FILES ARE TRANSFERRED IN IMAGE MODE@/ CPAGE 34 HELP24, 0;260 TEXT /OUTPUT DEVICE ALL FILES CURRENTLY BEING DISPLAYED.@/ CPAGE 21 HELP27, 0;60 TEXT '(LIKE THE PIP /I OPTION)@' CPAGE 34 HELP28, 0;-40 TEXT /ANY OUTPUT DEVICE FILE WITH THE SAME NAME AS ONE OF@/ CPAGE 33 HELP29, 0;-60 TEXT /THE DISPLAYED FILES WILL BE REPLACED BY THAT FILE@/ CPAGE 21 HELP32, 0;240 TEXT /CURRENT DEVICE INDEX DISPLAY@/ CPAGE 34 HELP30, 0;-200 TEXT /ALL OTHER OUTPUT DEVICE FILES WILL REMAIN UNCHANGED@/ CPAGE 25 HELP31, 0;300 TEXT /TYPE CARRIAGE-RETURN TO RETURN TO THE@/ CPAGE 25 HELP33, 0;100 TEXT /TYPE D (AND WAIT FOR * TO APPEAR) TO@/ CPAGE 24 HELP34, 0;40 TEXT /SPECIFY A NEW DEVICE INDEX DISPLAY@/ CPAGE 30 HELP35, 0;-100 TEXT 'TYPE CTRL/C TO EXIT TO THE KEYBOARD MONITOR@' TEXT11, TEXT /LAST FILE TRANSFERRED IS @/ CPAGE 21 HELP36, 0;-320 TEXT /TYPE M TO REPEAT EXPLANATION@/ / TEXT10, TEXT /OUTPUT DEVICE FULL. @/ TEXT12, TEXT /NO FILES TRANSFERRED@/ / NTRYP, ENTRYS NDEVP, DEV /
/INDEX2.SB, PAGE 11 / /SUBROUTINE FTRANS /TRANSFERS ALL DISPLAYED FILES FROM INPUT TO OUTPUT DEVICE /THIS ROUTINE MUST NOT BE LOADED INTO FIELD 1 BECAUSE IT LOCKS THE /USR INTO LOCS 0000 TO 1777 OF FIELD 1 WHILE IN THE MFILE-CFILE LOOP. EAP ENTRY FTRANS FTRANS, BLOCK 2 DCA NFILES /# OF FILES TO TRANSFER TAD NTRYP DCA INTRYP TAD NDEVP DCA INDEVP DCA OUTDEV# /FETCH INPUT DEVICE HANDLER IN CASE IT IS NOT IN CORE TAD TLUP4 DCA ARG70 CALL 1,LFILE ARG70, ARG DEV /REFERS TO FIELD 1 / /LOOP TO OPEN & CLOSE FILES ON OUTPUT DEVICE TAD NFILES CIA DCA CONT1 /-# OF FILES TO PIP TAD INTRYP DCA PONT1 /START OF FILE NAME LIST /SAVE FIELD 1 CORE LOCS 0-201 /ADJUST JOB STATUS WORD SO THAT FIELD 1 LOCS 0-1777 WILL NOT /BE SAVED WHEN THE USR IS CALLED, THUS AVOIDING UNNECESSARY /TAPE MOTIONS. JMS MOVER /
/INDEX2.SB, PAGE 12 / /LOCK USR INTO LOCS 0000 TO 1777 OF FIELD 1. /THIS MEANS WE CANNOT REFER TO DATA IN THIS AREA CPAGE 5 CIF10 JMSI UU7700 /JUMP TO USR 10 SKP UU7700, 7700 TLUP3, TAD PONT1 DCA ARG40# CLA CLL IAC RTL /AC=4 TAD PONT1 DCA PONT1 CDF10 TADI PONT1 DCAI (7666 /CHANGE CURRENT DATE TO DATE OF FILE INC PONT1 TADI PONT1 TAD (-200 SPA CLA TADI PONT1 DCA LLMAX /SPACE REQUIRED (0 IF ACTUAL LENGTH >177) CALL 3,MFILE ARG OUTDEV ARG40, ARG ENTRYS ARG LLMAX SPA JMP NOROOM DCA SAVE2 /STARTING BLOCK # CDF10 TADI PONT1 DCA LLMAX TAD LLMAX /SPACE NEEDED CIA TAD LLMAX# /SPACE AVAILABLE SMA CLA JMP OKLNTH /NO ROOM ON OUDEV NOROOM, CALL 1,ALPHA ARG TEXT10 TAD NFILES TAD CONT1 SZA JMP NOTZIP /NO FILES TRANSFERRED DCA NFILES CALL 1,ALPHA ARG TEXT12 CRCR, CALL 0,CRLF JMP TRANS /
/INDEX2.SB, PAGE 13 / /TRANSFER AS MANY FILES AS WILL FIT. /INDICATE LAST FILE TRANSFERRED NOTZIP, DCA NFILES /# OF FILES CALL 1,ALPHA ARG TEXT11 TAD PONT1 TAD (-15 DCA ARG50# CLA CLL IAC RTL /AC=4 TAD ARG50# DCA PONT1 CDF10 DCAI PONT1 /ADD TERMINATING ZERO CALL 1,ALPHA ARG50, ARG ENTRYS /FILE NAME JMP CRCR /LENGTH OK OKLNTH, TAD SAVE2 INC PONT1 INC PONT1 DCAI PONT1 /STARTING BLOCK # ON OUTPUT DEVICE INC PONT1 CALL 1,CFILE ARG LLMAX ISZ CONT1 JMP TLUP3 /UNLOCK USR FROM CORE (MAY NOT BE NECESSARY, SINCE CORE WASN'T SAVED) CPAGE 5 TRANS, CIF10 JMSI U200 /JUMP TO USR 11 SKP U200, 200 /RESTORE FIELD 1 CORE LOCS 0-201. RESET JOB STATUS WORD. CLA CLL CML RTR /AC=2000, L=0 JMS MOVER TAD NFILES SNA JMP DTBAC /NO FILES TRANSFERRED /NOW TRANSFER THE FILE BLOCKS /DATA IS TRANSFERRED IN GROUPS OF 20 OCTAL PAGES CIA DCA CONT1 /-# OF FILES TAD INTRYP TAD (5 DCA PONT1 /START OF FILE LENGTHS & BLOCK #S TLUP4, CDF10 TADI PONT1 DCA NBLCKS /LENGTH IN BLOCKS INC PONT1 TADI PONT1 DCA INBLK1 /STARTING INPUT BLOCK INC PONT1 TADI PONT1 DCA OUBLK1 /STARTING OUTPUT BLOCK /
/INDEX2.SB, PAGE 14 / TLUP5, TAD NBLCKS SPA SNA CLA JMP TLUP4A /END OF FILE TAD NBLCKS TAD (-10 SPA JMP TLUP5A DCA NBLCKS TAD (20 DCA NPAGES /# OF PAGES TO TRANSFER IN THIS BUFFER LOAD JMP TLUP5B TLUP5A, TAD (10 CLL RAL DCA NPAGES DCA NBLCKS TLUP5B, CALL 3,RFILE ARG NPAGES ARG INBLK1 ARG INDEX CALL 3,WFILE ARG NPAGES ARG OUBLK1 ARG INDEX TAD INBLK1 TAD (10 DCA INBLK1 TAD OUBLK1 TAD (10 DCA OUBLK1 JMP TLUP5 TLUP4A, CLA CLL CML IAC RTL /AC=6 TAD PONT1 DCA PONT1 ISZ CONT1 JMP TLUP4 /RESET DATE SKP DATEP, DATE /REFERS TO FIELD 1 LOCS DTBAC, TAD DATEP CALL 0,BDATE DCA CONT1 /TEMPORARILY SAVE 1-WORD DATE /RESET SYSTEM DEVICE TABLES IN ORDER TO DELETE ANY ACTIVE /TENTATIVE FILES ON OUTDEV. JMS MOVER CPAGE 5 CIF10 JMSI U7700 /JUMP TO USR 13 SKP U7700, 7700 CLA CLL CML RTR /AC=2000, L=0 JMS MOVER TAD CONT1 DF10, CDF10 DCAI (7666 /RESTORE CURRENT DATE IN FIELD 1 RETRN FTRANS /
/INDEX2.SB, PAGE 15 / /THE FOLLOWING 2 ROUTINES ARE INCLUDED TO AVOID LOADING THE /INTEGER MATH PACKAGE. THIS SAVES 2 CORE PAGES. / /SUBROUTINE CLEAR /CLEARS FLOATING POINT ACCUMULATOR /THIS ROUTINE IS CALLED BY SYSTEM ROUTINE OPEN. ENTRY CLEAR CLEAR, BLOCK 2 DCA SAVE1 DCA ACH DCA ACM DCA ACL TAD SAVE1 RETRN CLEAR / /DUMMY SUBROUTINE MPY /THIS ROUTINE IS CALLED BY ROUTINE INTIN IN LIB12, WHICH IS /LOADED BUT NOT USED. ENTRY MPY MPY, BLOCK 2 CALL 0,EXIT / /SUBROUTINE BDATE /ENTER WITH AC POINTING TO DATE IN COMMON IN THE FORM MM/DD/YY /RETURNS WITH AC HOLDING PS/8 1-WORD VERSION OF THAT DATE ENTRY BDATE BDATE, BLOCK 2 DCA PONT1 /POINTS TO INPUT DATE CDF10 TADI PONT1 RTR RTR RTR JMS MASK CLL RTL SZA IAC RAL DCA JDATE TADI PONT1 JMS MASK TAD JDATE CLL RAR RTR RTR DCA JDATE /STORE MONTH IN BITS 0-3 /
/INDEX2.SB, PAGE 16 / INC PONT1 TADI PONT1 JMS MASK CLL RAL DCA KDATE TAD KDATE RTL TAD KDATE DCA KDATE INC PONT1 TADI PONT1 RTR RTR RTR JMS MASK TAD KDATE CLL RAL RTL /DAY IS NOW IN BITS 4-8 TAD JDATE DCA JDATE INC PONT1 TADI PONT1 JMS MASK /YEAR IS IN BITS 9-11 TAD JDATE RETRN BDATE CPAGE 10 P37, 37 M20, -20 MASK, 0 AND P37 SNA JMPI MASK TAD M20 AAAEND, JMPI MASK /
/INDEX2.SB, PAGE 17 / /THE NEXT 7 PAGES CONTAIN A MODIFIED VERSION OF IOFILE.SB. /(IOFILE.SB IS PART OF THE DECUS 12-48 PACKAGE.) / /THE FOLLOWING MODIFICATIONS HAVE BEEN MADE TO IOFILE.SB: / 1)SEPERATE 1-PAGE BUFFERS ARE ALLOCATED FOR THE INPUT AND / OUTPUT DEVICE HANDLERS. / 2)MFILE AND CFILE NOW ASSUME THAT THE USR IS ALREADY LOCKED / INTO CORE WHEN THEY ARE CALLED. THEY LEAVE THE USR IN CORE / WHEN THEY EXIT. LFILE, HOWEVER, STILL BRINGS IT INTO CORE / WHEN CALLED, AND REMOVES IT WHEN EXITING. / 3)LFILE NOW FETCHES THE INPUT DEVICE HANDLER WITHOUT / LOOKING UP A FILE. WHEN IT CALLS THE USR, FIELD 1 / LOCS 0202-1777 ARE DESTROYED. LOCS 0-201 ARE SAVED / IN LOCS 2000-2201. / 4)ARG LMAX OF FUNCTION MFILE IS NOW A 2-WORD INTEGER VECTOR. / WHEN MFILE IS CALLED, WORD 1 SHOULD CONTAIN THE MINIMUM # OF / BLOCKS REQUIRED FOR THE FILE (USE 0 TO HAVE MFILE FIND THE / LARGEST EMPTY SPACE). WHEN MFILE RETURNS, WORD 2 WILL / CONTAIN THE AVAILABLE SPACE IN BLOCKS. / / ABSYM TEM 7 /PAGE 0 POINTER / LAP /DISABLE AUTOMATIC PAGING TO CONSERVE SPACE / / /CORE ALLOCATION FOR DEVICE HANDLERS. /NOTE THAT WE HAVE ALLOCATED SEPERATE PAGES FOR INPUT & OUTPUT HANDLERS / OSTART, BLOCK 177 /OUTPUT HANDLER ADDRESS: MUST BE 1ST LOC ON PAGE IF 1 /PAGE ALLOCATED, 2ND LOC ON PAGE IF 2 PAGES ALLOCATED. ISTART, BLOCK 177 /INPUT HANDLER ADDRESS: MUST BE 1ST LOC ON PAGE IF 1 /PAGE ALLOCATED, 2ND LOC ON PAGE IF 2 PAGES ALLOCATED. /
/INDEX2.SB, PAGE 18 / /START OF 1ST PAGE OF PROGRAM. CPAGE 200 P7700, 7700 /POINTS TO USR. ***MUST BE 1ST LOC ON PAGE*** INPNT, ISTART IFILEP, INFILE P77, 77 P40, 40 M4, -4 / /ADDRES LOADS ARG ADDRESS FROM LFILE TO TEM ADDRES, 0 CDF, HLT /CHANGE TO DF OF CALLING PROG TADI LFILE# DCA CDFARG INC LFILE# TADI LFILE# DCA TEM INC LFILE# JMP I ADDRES /CHANGE TO CURRENT DF / /FETCH LOADS NEXT ARG AS SPECIFIED BY TEM FETCH, 0 CDFARG, HLT /CHANGE TO DF OF ARG TADI TEM INC TEM JMP I FETCH /CHANGE TO CURRENT DF / /ENTRYP MOVES THE ENTRY POINT POINTERS TO LFILE, THEN FETCHES 1ST ARG. ENTRYP, 0 CLA CMA CLL RTL /SET AC=-3 TAD ENTRYP DCA FETCH TADI FETCH INC FETCH DCA CDF CLA CLL CML RTL /SET AC=2 TAD CDF DCA JBACK /SET UP FOR QUICK RETURN TADI FETCH DCA LFILE# JMS ADDRES RDF /GET CURRENT DF M40, SZA SMA CLA JMP BADDF /THIS PROG IS NOT LOADED INTO FIELD 0!!! JMS FETCH JMPI ENTRYP /
/INDEX2.SB, PAGE 19 / /AMPS CONVERTS BLANKS(40) TO AMPERSANDS(00) IN BOTH CHARACTERS /OF THE WORD IN THE AC. AMPS, 0 DCA INBNUM TAD INBNUM AND P77 TAD M40 SZA TAD P40 DCA LENTH TAD INBNUM P200, AND P7700 CLL RAL SZA RAR TAD LENTH JMPI AMPS / /SUBROUTINE LINK(IBLK1) ENTRY LINK /*** MODIFICATION *** (NEXT 3 LINES) INBNUM, LINK, 0 LENTH, 0 JMS ENTRYP SPA JMP BADDF /NEGATIVE STARTING BLOCK # FOR .SV FILE DCA LNKBLK CIF10 JMSI P7700 6 /REQUEST 6 LNKBLK, 0 /STARTING BLOCK # / /TYPE FATAL ERROR MESSAGE. (PROG IN WRONG FIELD, NEGATIVE IBLK1 FOR /LINK, HANDLER MISSING, I/O ERROR IN WFILE OR RFILE.) /MESSAGE WILL READ: 'FILE ERROR AT LOC NNNNN' BADDF, CALL 1,ERROR ARG FILEMS / /FUNCTION LFILE(NDEV) ***MODIFICATION*** /SPECIAL VERSION OF LFILE WHICH FETCHES THE INPUT DEVICE HANDLER /WITHOUT LOOKING UP A FILE. FIELD 1 LOCS 202-1777 ARE DESTROYED. /LOCS 0-201 ARE SAVED IN LOCS 2000-2201. ENTRY LFILE FILEMS, TEXT /FILE/ LFILE, BLOCK 2 JMS ENTRYP /GET 1ST WORD OF DEVICE NAME JMS AMPS /CONVERT BLANKS (40) TO AMPERSANDS (00) DCA INDEV JMS FETCH /GET 2ND WORD OF DEVICE NAME JMS AMPS DCA INDEV# /MOVE FIELD 1 LOCS 0-201 TO LOCS 2000-2201. /SET JOB STATUS WORD TO AVOID SAVING FIELD 1 LOCS 0-1777. JMS MOVER /
/INDEX2.SB, PAGE 20 / /FETCH DEVICE HANDLER TAD INPNT /PAGE ADDRESS FOR INPUT DEVICE HANDLER DCA INHAND CIF10 JMSI P7700 1 /REQUEST 1 INDEV, 0 /2-WORD INPUT DEVICE NAME INNUM, 0 /WILL BE OVERLAID WITH INPUT DEVICE # INHAND, 0 /WILL BE OVERLAID WITH INPUT HANDLER ENTRY POINT JMP BADDF /DEVICE NOT FOUND /RESET JOB STATUS WORD. RESTORE FIELD 1 LOCS 0-201 CLA CLL CML RTR /AC=2000, L=0 JMS MOVER JMP JBACK /RETURN / /ROUTINE TO SAVE & RESTORE CORE LOCS 0-201, AND TO ADJUST /JOB CONTROL WORD TO AVOID SAVING LOCS 0-1777. P7746, 7746 /POINTS TO JOB STATUS WORD IN FIELD 0 M202, -202 MOVER, 0 DCA LINK# TAD LINK# SNA CLA CLA CLL CML IAC DCA AMPS RTR /AC=0 OR 2000 DCA LINK CLA CLL CMA RAL /AC=7776 ANDI P7746 TAD AMPS DCAI P7746 TAD M202 DCA LNKBLK CDF10 MVRLUP, TADI LINK# DCAI LINK INC LINK# INC LINK ISZ LNKBLK JMP MVRLUP JMP I MOVER /CHANGE TO CURRENT DF / /ERROR. SET BLOCK # = -1 INERR, CLA CMA STORE, DCA INBNUM LOCKED, TAD CDFARG DCA CDFAR2 TAD LENTH CIA CDFAR2, HLT /CHANGE TO DF OF ARG DCAI TEM /STORE LENGTH OF FILE IN BLOCKS TAD INBNUM /LOAD AC WITH STARTING BLOCK # JBACK, HLT /CHANGE TO DF&IF OF CALLING PROG AAPAG1, JMPI LFILE# /QUICK RETURN / /END OF 1ST CORE PAGE OF PROGRAM. /
/INDEX2.SB, PAGE 21 / CPAGE 200 /START OF 2ND CORE PAGE OF PROGRAMS. PP70, 70 /***MUST BE 1ST LOC ON PAGE*** PP7700, 7700 PP7646, 7646 /1 BEFORE DEVICE HANDLER RESIDENCY TABLE PP40, 40 PP37, 37 MM4, -4 MM40, -40 INERRP, INERR INNUMP, INNUM BADDFP, BADDF LENTHP, LENTH STOREP, STORE AMPSP, AMPS ENTP, ENTRYP FETCHP, FETCH ADRESP, ADDRES JBACKP, JBACK OUPNT, OSTART OFILEP, OUFILE CDFARP, CDFARG / /SUBROUTINE CFILE(LENTH) ENTRY CFILE CFILE, BLOCK 2 JMSI ENTP DCA CBLKS TAD OFILEP /POINTS TO OUTPUT FILE NAME DCA CNAME /CLOSE OUTPUT FILE TAD OUNUM /GET DEVICE # OF OUTPUT FILE CIF10 JMSI PP200 /***MODIFICATION*** (ASSUMES USR IN CORE) 4 /REQUEST 4 CNAME, 0 /POINTER TO FILE NAME CBLKS, 0 /LENGTH IN BLOCKS NOP /FILE NOT FOUND JMPI JBACKP /
/INDEX2.SB, PAGE 22 / /FUNCTION MFILE(NDEV,NAME,LMAX) ENTRY MFILE OUFILE, BLOCK 2 /NEXT 4 LOCS HOLD OUTPUT FILE NAME MFILE, BLOCK 2 JMSI ENTP JMSI AMPSP DCA OUDEV JMSI FETCHP JMSI AMPSP DCA OUDEV# JMSI ADRESP TAD MM4 DCA OUHAND TAD OFILEP DCA LOC1 OUGF, JMSI FETCHP JMSI AMPSP DCAI LOC1 INC LOC1 ISZ OUHAND JMP OUGF JMSI ADRESP /***MODIFICATION*** USR LOCK CALL DELETED / /FETCH DEVICE HANDLER TAD OUPNT /GET OUTPUT HANDLER ADDRESS DCA OUHAND CIF10 JMSI PP200 1 /REQUEST 1 OUDEV, 0 /2-WORD OUTPUT DEVICE NAME OUNUM, 0 /WILL BE OVERLAID WITH OUTPUT DEVICE # OUHAND, 0 /WILL BE OVERLAID WITH OUTPUT HANDLER ENTRY POINT JMPI INERRP /DEVICE NOT FOUND /ENTER OUTPUT FILE TAD OFILEP /POINTS TO OUTPUT FILE NAME DCA OUBNUM /***MODIFICATION*** (OPTIMIZE FILE STORAGE) JMSI FETCHP /GET REQUIRED SPACE IN BLOCKS CLL RTL RTL TAD OUNUM /GET DEVICE # CIF10 JMSI PP200 3 /REQUEST 3 OUBNUM, 0 /WILL BE OVERLAID WITH STARTING BLOCK # LMAX, 0 /NEGATIVE OF MAX AVAILABLE # OF BLOCKS JMPI INERRP /NO ROOM OR ANOTHER FILE ALREADY OPENED TAD LMAX DCAI LENTHP TAD OUBNUM /***MODIFICATION*** (DELETE USR UNLOCK CALL) JMPI STOREP /
/INDEX2.SB, PAGE 23 / /SUBROUTINE RFILE(NUM,IBLK1,LOC1) ENTRY RFILE INFILE, BLOCK 2 /NEXT 4 LOCS HOLD INPUT FILE NAME RFILE, BLOCK 2 JMSI ENTP /GET # OF PAGES SPA /CHECK FOR NEGATIVE # OF PAGES TAD MM40 /SET UP TO WRITE INSTEAD OF READ SPA CIA DCA OUDEV TADI INNUMP /INPUT DEVICE # CHKDEV, TAD PP7646 DCA WFILE 6211 /CDF 10 TADI WFILE SNA JMPI BADDFP /HANDLER NOT RESIDENT DCA WFILE /HANDLER ENTRY POINT TAD OUDEV CLL RTL RTL RTL DCA OUDEV JMSI ADRESP /CHANGES TO CURRENT DF JMSI FETCHP /GET STARTING BLOCK # DCA IBLK1 JMSI ADRESP /GET ADDRESS OF LOC1 TADI CDFARP /GET FIELD OF LOC1 PP200, AND PP70 TAD OUDEV /SET UP TO READ/WRITE NUM PAGES DCA NBLKS TAD TEM /GET ADDRESS OF LOC1 DCA LOC1 DOIT, JMSI WFILE /JUMP TO HANDLER NBLKS, 0 /# OF PAGES LOC1, 0 /BUFFER ADDRESS IBLK1, 0 /STARTING BLOCK # JMPI BADDFP /FATAL I/O ERROR JMPI JBACKP / /SUBROUTINE WFILE(NUM,IBLK1,LOC1) ENTRY WFILE WFILE, BLOCK 2 JMSI ENTP AND PP37 TAD PP40 /SET UP TO WRITE DCA OUDEV TAD OUNUM /OUTPUT DEVICE # AAPAG2, JMP CHKDEV /
/INDEX2.SB, PAGE 24 / /SUBROUTINE NAMES /SPECIAL VERSION OF NAMES WHICH CALLS THE COMMAND DECODER TO READ /ONE DEVICE NAME, WHICH IS RETURNED IN THE AC. /FIELD 1 LOCS 0-201 ARE SAVED IN FIELD 1 LOCS 2000-2201 /FIELD 0 LOCS 0-1777 ARE SAVED IN FIELD 1 LOCS 2202-4001 /USR & COMMAND DECODER DO NOT PRESERVE CORE WHEN CALLED. /THIS SAVES TIME AND ALLOWS DEVICE SYS TO REMAIN WRITE-LOCKED. / LAP CPAGE 200 /START ON NEW PAGE MOVERP, MOVER /POINTS TO ROUTINE TO SAVE FIELD 1 LOCS 0-201 DVSAVP, DVSAVE MVPT1P, MVPT1 DVSAVE, 0 MVPT1, 0 MVPT2, 0 MVCNT, 0 PT7700, 7700 /POINTS TO USR IN FIELD 1 PT7746, 7746 /POINTS TO JOB STATUS WORD IN FIELD 0 PT7605, 7605 /POINTS TO INPUT DEVICE # IN FIELD 1 PT2202, 2202 PT215, 215 PT36, 36 /PERMANENT DEVICE NAME TABLE ADDRESS IN FIELD 1 PT17, 17 PT2, 2 / ENTRY NAMES NAMES, BLOCK 2 CLA JMSI MOVERP /SAVE FIELD 1 LOCS 0-201 /SAVE FIELD 0 LOCS 0-1777 CLA CLL CMA RTL /AC=7775 ANDI PT7746 TAD PT2 /TELL COMMAND DECODER NOT TO SAVE CORE DCAI PT7746 DCA MVPT1 TAD PT2202 DCA MVPT2 CLA CLL CML IAC RTR /AC=-2000 DCA MVCNT MVLP1, TADI MVPT1 CDF10 DCAI MVPT2 INC I MVPT1P /CHANGE TO CURRENT DF INC MVPT2 ISZ MVCNT JMP MVLP1 /
/INDEX2.SB, PAGE 25 / /CALL COMMAND DECODER CIF10 JMSI PT7700 5 /REQUEST 5 5200 /SPECIAL MODE 0 /PRESERVE TENTATIVE OUTPUT FILES /TYPE A C-R SO TTY FLAG WILL BE SET TAD PT215 TLS TTYCR, TSF JMP TTYCR /GET DEVICE NAME (USR IS STILL IN CORE BECAUSE IT DIDN'T SWAP CORE) CDF10 CLA CMA TADI PT36 DCA DVSAVE /1 BEFORE PERMANENT DEVICE NAME TABLE ADDRESS TADI PT7605 AND PT17 /DEVICE # SNA JMP STODEV TAD DVSAVE DCA DVSAVE TADI DVSAVE /1-WORD VERSION OF INPUT DEVICE NAME STODEV, DCA I DVSAVP /CHANGE TO CURRENT DF /RESTORE FIELD 0 LOCS 0-1777 CLA CLL CMA RTL /AC=7775 ANDI PT7746 DCAI PT7746 TAD PT2202 DCA MVPT1 DCA MVPT2 CLA CLL CML IAC RTR /AC=-2000 DCA MVCNT MVLP2, CDF10 TADI MVPT1 DCA I MVPT2 /CHANGE TO CURRENT DF INC MVPT1 INC MVPT2 ISZ MVCNT JMP MVLP2 CLA CLL CML RTR /AC=2000, L=0 JMSI MOVERP /RESTORE FIELD 1 LOCS 0-201 TAD DVSAVE /DEVICE NAME AAPAG3, RETRN NAMES 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