SATXWD: XWD -NUMSAT,13001 ;LH=NUMBER OF SAT BLOCKS.\r
;RH=FIRST SAT BLOCK NUMBER.\r
>>\r
-\f\r
-CHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM\r
+\fCHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM\r
W8BIT=400000 ;WAIT INDICATION FOR DDB\r
\r
; BITS IN LH OF IOS\r
RENBIT=20000 ;"RENAMING" INDICATION FOR SETLE ROUTINE\r
WPRO=40000 ;LOOKUP DONE, FILE IS IN WRITE PROTTECT\r
CKSUPR=10000 ;FLAG SET IF READING DUMP FILES IN NON-DUMP MODE\r
-\f\r
-;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES\r
+\r
+\r
+\r
+\f;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES\r
\r
ATPP=0 ;PROJECT,PROGRAMMER NUMBERS\r
ATNAME=1 ;OWNER NAME\r
>>\r
XP WLBIT,400000 ;IF BIT IS ON IN FIRST SATENT ENTRY\r
;WORD, THE DISK IS WRITE-LOCKED.\r
-\f\r
-EXTERNAL DSKOFF\r
+\fEXTERNAL DSKOFF\r
\r
DEFINE NOSCHEDULE <\r
CONO PI,DSKOFF\r
>\r
\r
+\r
EXTERNAL DSKON\r
DEFINE SCHEDULE <\r
CONO PI,DSKON\r
>\r
-\f\r
-INTERNAL FTCHECK,FTMONP\r
+\fINTERNAL FTCHECK,FTMONP\r
IFN FTCHECK+FTMONP,<\r
EXTERNAL DDBPTR,DSKCOR,PTRN,MOPTR,MIPTR,RUNUSR,SAVPRG,USRCNT\r
EXTERNAL SATPTR,SAT,SATBK2,DIRSIZ\r
INTERNAL SATPTR,SAT,SATBK2,REFLAG,DFBUSY,CKSMCT\r
MOPTR: BLOCK 1 ;POINTER TO NEXT TASK TO DO\r
MIPTR: BLOCK 1 ;POINTER TO NEXT FREE QUEUE ENTRY\r
-\r
RUNUSR: BLOCK 1 ;LH=DEVDAT OF USER JOB RUNNING\r
;RH= UNUSED\r
USRCNT: BLOCK 1 ;COUNT OF WAITING USER JOBS\r
; DISK FILE SINCE FIRST DISK IS ALLOCATED\r
; TO SWAPPING.\r
>\r
-\f\r
-SATENT: REPEAT NUMSAT,<\r
+\fSATENT: REPEAT NUMSAT,<\r
XWD DSKXDB,0 ;RH CONTAINS WLBIT AND COUNT OF BLOCK USED\r
BLOCK 1 ;BIT MASK, SINGLE ROTATING BIT\r
BLOCK 1 ;XWD LENGTH OF SAT TABLE POINTER WORD\r
DSKXDB=DSKXDB+NUMBLK>\r
\r
XP SATTOP,SATENT+SENTSZ*NUMSAT-SENTSZ\r
+\r
>;END OF FTRA100 CONDITIONAL\r
\r
+\r
SAT: BLOCK 200 ;CURRENT SAT BLOCK\r
\r
XP SATM2,SAT-2 ;LOWEST ABS, ADR-1 ALLOWED IN CHANNEL COMMAND\r
; LIST - USED TO KEEP FROM WIPING OUT MONITOR.\r
SATBK2: XWD -200,SAT\r
-\f\r
- XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE\r
+\f XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE\r
;NOT POINTERS.\r
\r
;THE DUMMY DEVICE DATA BLOCK\r
DSKCOR=10\r
DSKSIZ=4*DSKCOR ;NUMBER OF WORDS ALLOCATED FOR DDB\r
;MUST BE A MULTIPLE OF FOR (SEE GETCOR)\r
-\r
INTERN DSKDDB\r
DSKDDB: SIXBIT /DSK/\r
XWD ^D5*HUNGST,201\r
Z ;C(LH)=ADDRESS OF ACCESS TABLE ENTRY\r
;C(RH)=ADDRESS OF CURRENT POINTER IN DDB\r
XP DEVCNT,.-DSKDDB ;C(LH)USED DURING LOOKUP,ENTER\r
- Z ;C(LH)==RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES)\r
+ Z ;C(LH)=RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES)\r
;C(RH)=COUNT OF BLOCKS IN FILE\r
XP DEVBLK,.-DSKDDB ;C(LH)=BLOCK NUMBER OF CURRENT POINTER\r
Z ;C(LH)=LOGICAL BLOCK# OF RIB\r
XP FPNTR,PTR1+DIRSIZ ;LOC. OF FIRST POINTER TO RET. INFO.\r
XP FPNTR1,FPNTR-1\r
XP PTRN,DSKSIZ-1\r
-\f\r
-;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB\r
-\r
+\f;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB \r
INTERNAL LOCORE,CRINIT\r
EXTERNAL DDBTAB\r
\r
CRINIT: XWD 0,DDBTAB ;INITIAL AOBJN POINTER FOR CORIWD\r
; LH SET BY LINKDB\r
MONBUF: BLOCK 200 ;MONITOR BUFFER, USED TO READ RETRIEVAL POINTERS, ETC.\r
-\f\r
-;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER\r
+>\r
+\f;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER\r
\r
NOTINU=0 ;NO SUCH FILE\r
NOTINM=1 ;NO SUCH USER\r
NOFILE=5 ;TRIED TO RENAME WITH NO FILE SELECTED\r
ERRBIT=1 ;BITS GO IN WORD 1 OF THE ENTRY\r
\r
+\r
;DISK DISPATCH TABLE\r
\r
INTERNAL DSKDSP\r
MOVEM TAC,CORBIT ;INITIALIZE FLOATING 1 BIT\r
MOVE TAC,CRINIT\r
MOVEM TAC,CORIWD ;RESET AOBJN WORD\r
-\r
POPJ PDP,\r
\r
-;DSKINI - CALLED AT START, RESTART, 143 RESTART\r
-; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE\r
+\r
+;DSKINI - CALLED AT 140 START, RESTART, 143 RESTART\r
+; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE.\r
INTERNAL DSKINI, SETSAT\r
EXTERNAL DISKUP,DFWUNS\r
\r
JRST SAT01 ;WRITE SAT BLOCK IN CORE\r
JRST DFWUNS ;SCAN ALL SAT BLOCKS\r
STARTS: -1 ;COUNT STARTS, RESTARTS\r
-\f\r
-;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147,\r
+\f;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147,\r
;AT SAT01 UPON RE-ENTRY OF INITIALIZATION.\r
\r
INTERN DSKSTP,SAT05,JSAT06\r
NOSCHEDULE\r
PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING\r
JRST DFENT3 ;NOT THERE\r
-\f\r
-DFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON?\r
+\fDFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON?\r
TRNE DAT,WTBIT\r
JRST DFERR6 ;YES,ERROR\r
PUSHJ PDP,SCNAT2\r
HRLZM TAC,DEVBKO(DEVDAT)\r
HRRM TAC,DEVEXT(DEVDAT) ;STORE FIRST RIB#\r
NOSCHEDULE\r
-\r
MOVE DAT,TAC1 ;ACCESS ENTRY BITS\r
PUSHJ PDP,SETAT ;CREATE ACCESS ENTRY. RETURN POINTER IN TAC1\r
HRLM TAC1,DEVACC(DEVDAT) ;STORE POINTER TO ACCESS ENTRY\r
MOVSI TAC,VRGPTR ;SET "VIRGIN POINTER" FLAG (O DFO4A SUBROUTINE\r
IORM TAC,DEVOAD(DEVDAT) ;WILL CREATE A NEW RIB WHEN JUST CALLED\r
JRST ALLOK\r
-\f\r
-;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY\r
+\f;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY\r
\r
DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION\r
TLNE TAC,WPRO\r
PUSHJ PDP,DFERR6 ;YES, THIS WILL NOT RETURN HERE\r
MOVEM TAC1,TBITS(TAC) ;NO, SET IT\r
SCHEDULE\r
- CONO PI,DSKON\r
\r
- MOVE TAC,@UUO ;SAVE FILE?\r
+ MOVE TAC,@UUO ;SAME FILE?\r
CAME TAC,DEVFIL(DEVDAT)\r
JRST DFERR8 ;NO, NAME WRONG\r
ADDI UUO,1\r
DFENT7: PUSHJ PDP,SCNAT2 ;FIND ANOTHER\r
JRST DFENT1 ;NO WRITERS, PERMIT THIS ENTER\r
JRST DFERR6 ;MUST BE BEING WRITTEN OR RENAMED\r
-\f\r
-;LOOKUP UUO\r
+\f;LOOKUP UUO\r
+\r
\r
EXTERNAL UDLKC,TPOPJ\r
\r
TLOA TAC1,WPRO ;WRITE PROTECTED. SET FLAG\r
TLZ TAC1,WPRO ;WRITE OK--RESET FLAG\r
IORM TAC1,DEVOAD(DEVDAT)\r
-\f\r
-DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK\r
+\r
+\fDFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK\r
NOSCHEDULE\r
HRRI TAC,@UUO ;DESTINATION IS UUO PARAMETER BLOCK\r
MOVE TAC1,TAC\r
TLZ DEVDAT,ICLOSB\r
MOVSI TAC,VRGPTR ;POINTERS DO EXIST ON THE DISK SO\r
ANDCAM TAC,DEVOAD(DEVDAT) ;CLEAR THE VIRGIN POINTERS FLAG.\r
-\f\r
-ALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB\r
+\fALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB\r
HRRM DAT,DEVACC(DEVDAT) ;SET VERTICAL POINTER POINTER\r
MOVEI TAC,1\r
HRRM TAC,SETCNT(DEVDAT) ;"POISITONED" AT RELATIVE BLOCK 1 OF FILE\r
IORM TAC,DEVOAD(DEVDAT) ;NO. SUPPRESS CHECKSUM\r
>\r
ALLXIT: POP PDP,TAC ;REMEMBER 0(PDP) WASS XWD PROJ,PROG\r
-\r
AOS (PDP) ;RETURN TO CALL+2\r
JRST CLRBUF ;RELEASE MONITOR BUFFER\r
\r
POPJ PDP, ;YES, RETURN\r
\r
JRST DFERR5\r
-\f\r
-;RENAME UUO\r
+\f;RENAME UUO\r
\r
EXTERNAL CPOPJ1\r
EXTERNAL THSDAT\r
DFREN1: AOS TBITS(TAC) ;INCREMENT RCOUNT\r
HRLM TAC,DEVACC(DEVDAT) ;SAVE POINTER TO ACCESS ENTRY\r
SCHEDULE\r
+\r
HRRZ TAC,DEVEXT(DEVDAT) ;CAN THIS FILE BE RENAMED?\r
PUSHJ PDP,SETPTR ;READ IN FIRST SET OF RETRIEVAL POINTERS\r
MOVEI AC1,@UUO ;IS THE PROTECTION TO BE CHANGED ?\r
JRST DFERR3 ;BAD RETREIVAL INFO\r
JRST DFRN8A ;WRITE PROTECTED\r
TLZ IOS,PRCHG ;ARBITRARY CHANGE OK.\r
-\f\r
-DFREN2: NOSCHEDULE\r
+\r
+\fDFREN2: NOSCHEDULE\r
PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING\r
JRST DFRN1B ;NO\r
\r
MOVEI AC1,RTBIT ;RENAME BIT\r
ORM AC1,TBITS(TAC)\r
SCHEDULE\r
-\f\r
- MOVE TAC,@UUO ;GET NEW FILENAME\r
+\f MOVE TAC,@UUO ;GET NEW FILENAME\r
CAME TAC,DEVFIL(DEVDAT) ;SAVE AS DDB?\r
JRST DFREN3 ;NO\r
ADDI UUO,1 ;YES, SAME EXTENSION?\r
TLNE TAC,-1 ;SAME?\r
SOJA UUO,DFREN3 ;NO\r
\r
+\r
;FILENAME AND EXTENSION ARE IDENTICAL. CHANGE ONLY PROTECTION\r
\r
TLZ IOS,PRCHG ;CLEAR PRTOECTION CHANGE FLAG\r
SCHEDULE\r
PUSHJ PDP,DFCL21\r
JRST DFER10\r
-\f\r
-;ALTER RETRIEVAL INFORMATION\r
+\f;ALTER RETRIEVAL INFORMATION\r
\r
DFREN5: POP PDP,DAT ;BACK UP PDP\r
\r
DPB TAC,[POINT 9,@TAC1,8] ;STORE IN RIB\r
\r
PUSHJ PDP,WRI ;RE-WRITE RIB\r
-\f\r
-;ALTER UFD BLOCK\r
+\f;ALTER UFD BLOCK\r
\r
PUSHJ PDP,FINDE ;BRING IN CORRECT BLOCK\r
\r
\r
DFRN8A: TLNE IOS,PRCHG ;PROTECTION CHANGE?\r
JRST DFREN2 ;YES\r
-\r
DFREN8: PUSHJ PDP,DFCL21 ;TAKE OUT ACCESS ENTRY\r
JRST DFERR5 ;AND LEAVE\r
\r
DFREN9: SCHEDULE\r
PUSHJ PDP,DFCL21 ;TEAKE OUT ACCESS ENTRY\r
JRST DFERR6\r
-\f\r
-;DELETE A FILE FROM A UFD\r
+\f;DELETE A FILE FROM A UFD\r
\r
DFREN7: PUSHJ PDP,FINDE ;FIND THE CORRECT BLOCK\r
\r
MOVEI TAC1,DTBIT\r
IORM TAC1,TBITS(TAC) ;SET TO DELETE WHEN THROUGH READIN\r
JRST DFCL21 ;CLOSE ACCESS ENTRY AND LEAVE\r
-\f\r
-;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME\r
+\f;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME\r
;SEARCH THRU MFD AND UFD FOR THE FILE-NAME,\r
;EXIT TO CALL+1 IF A UFD CANNOT BE FOUND.\r
;EXIT TO CALL+2 IF THE FILE IS NOT FOUND.\r
TLO UUO,PROG\r
MOVE AC1,@UUO ;PICK UP FILE NAME\r
MOVEM AC1,DEVFIL(DEVDAT) ;STORE FILE NAME AND EXT IN DDB\r
-\r
ADDI UUO,1\r
HLLZ AC1,@UUO\r
MOVEM AC1,DEVEXT(DEVDAT)\r
SUBI UUO,3 ;UUO POINTS TO FILE NAME\r
EXCH DAT,(PDP) ;PUT PP-NUMBER IN PD LIST\r
PUSH PDP,DAT ;PDP POINTS TO CALL+1\r
-\f\r
-;SEARCH MFD FOR THE OWNER OF THE FILE\r
+\f;SEARCH MFD FOR THE OWNER OF THE FILE\r
\r
MOVE DAT,-1(PDP) ;XWD PROJ,PROG\r
MOVSI AC1,(SIXBIT /UFD/) ;EXTENSION "UFD"\r
POP PDP,TAC ;YES\r
POP PDP,TAC\r
JRST DFERR6\r
-\f\r
-;CHECK RETRIEVAL INFO FOR ELIGIBILITY\r
+\f;CHECK RETRIEVAL INFO FOR ELIGIBILITY\r
;ENTER WITH C(DAT) = PROTECTION TO CHECK IN BITS 0-2\r
;EXIT TO CALL+1 IF NAME OR EXTENSION WRONG\r
;EXIT TO CALL+2 IF PROTECTION WRONG\r
\r
AOS (PDP)\r
PROTKX: MOVE AC1,-1(PDP)\r
-\r
PROTKY: MOVE ITEM,JOB\r
XOR AC1,PRJPRG(ITEM)\r
TRNN AC1,-1 ;SAVEM PROGRAMMER?\r
;PROGRAMMER NUMBER?\r
AOS(PDP) ;YES, ALL FILES AVAILABLE\r
POPJ PDP,\r
-\f\r
- CLOSE UUO\r
+\f;CLOSE UUO\r
;CLOSE AN OUTPUT FILE\r
\r
EXTERNAL PIOMOD,WAIT1,OUT\r
\r
DFCLSO: TLNN DEVDAT,ENTRB ;ENTER DONE YET?\r
- POPJ PDP, ;NO, FORGET IT\r
+ POPJ PDP, ;NO, FORGET IT\r
HLRZ TAC,DEVACC(DEVDAT) ;SHOULD WE CLOSE? (POINT TO ACCESS ENTRY)\r
IFN FTRCHK,<\r
- SKIPN TAC ;ACCESS TABLE POINTER EXISTS?\r
- HALT . ;IF NOT, HALT, NO RE-START POSSIBLE.\r
+ SKIPN TAC ;ACCESS TABLE POINTER EXISTS?\r
+ HALT . ;IF NOT, HALT, NO RE-START POSSIBLE.\r
>\r
MOVE TAC,TBITS(TAC)\r
IFN FTRCHK, <\r
TRNN TAC,ATCLO+RWTBIT ;CREATION OR UPDATE OF FILE IN PROGRESS?\r
- HALT . ;NO, ERROR. CAN'T CONTINUE\r
+ HALT . ;NO, ERROR. CAN'T CONTINUE\r
>\r
LDB TAC,PIOMOD\r
- CAIGE TAC,DR ;DUMP MODE?\r
+ CAIGE TAC,DR ;DUMP MODE?\r
TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS?\r
- JRST DFCL2 ;YES TO EITHER QUESTION\r
+ JRST DFCL2 ;YES TO EITHER QUESTION\r
HLRZ TAC,DEVBUF(DEVDAT) ;NO. GET ADDRESS OF OUTPUT\r
- ; BUFFER HEADER BLOCK.\r
- TLO TAC,PROG ;RELOCATE\r
- SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ?\r
- JRST DFCL2 ;YES, DON'T OUTPUT\r
- AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER\r
+ ; BUFFER HEADER BLOCK.\r
+ TLO TAC,PROG ;RELOCATE\r
+ SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ?\r
+ JRST DFCL2 ;YES, DON'T OUTPUT\r
+ AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER\r
ADD TAC1,[XWD PROG,1] ;TAC1 POINTS TO WORD COUNT PRECEDING\r
- ; USER DATA BUFFER\r
- HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER\r
- SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER\r
- ; NOT SET UP\r
- SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED\r
- TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ?\r
- HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR\r
- ; COMPUTED WORD COUNT\r
- SKIPN AC1 ;WORD COUNT EQUAL TO 0?\r
- JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK.\r
- PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER\r
- PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH\r
+ ; USER DATA BUFFER\r
+ HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER\r
+ SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER\r
+ ; NOT SET UP\r
+ SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED\r
+ TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ?\r
+ HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR\r
+ ; COMPUTED WORD COUNT\r
+ SKIPN AC1 ;WORD COUNT EQUAL TO 0?\r
+ JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK.\r
+ PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER\r
+ PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH\r
\r
DFCL2: PUSHJ PDP,SETBUF ;CHOOSE A BUFFER AREA FOR RETRIEVAL POINTERS\r
TLO IOS,NMP!NCTRLC ;SET NMP, MUST NOT INTERRUPT POINTER WRITING\r
MOVEM IOS,DEVIOS(DEVDAT) ;DO DFO4A WON'T READ NEW POINTERS IN\r
- PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS\r
+ PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS\r
HLRZ AC1,DEVBLK(DEVDAT)\r
XOR AC1,DEVEXT(DEVDAT)\r
TRNE AC1,-1 ;ONLY ONE BLOCK OF POINTERS?\r
- PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER\r
+ PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER\r
PUSHJ PDP,SET000\r
- ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER\r
+ ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER\r
MOVN AC1,DEVCNT(DEVDAT) ;PICK UP AND NEGATE SIZE OF FILE\r
- HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB\r
- PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION\r
-\f\r
-;CLOSE UUO CONTINUED.\r
+ HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB\r
+ PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION\r
+\f;CLOSE UUO CONTINUED.\r
;THE FILE AND ALL ITS POINTERS HAVE BEEN PUT ON DISK.\r
;NOW PUT ENTRY IN DIRECTORY.\r
+\r
TLZ DEVDAT,ENTRB\r
HLRZ TAC,DEVACC(DEVDAT) ;PICK UP ACCESS TABLE POINTER\r
MOVE DAT,TBITS(TAC) ;GET STATUS BITS AND READ COUNT\r
- TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE?\r
- JRST DFCLU1 ;YES\r
+ TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE?\r
+ JRST DFCLU1 ;YES\r
TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS?\r
- JRST DFC16A ;YES\r
- TRNN DAT,ATIND ;IUS NAME ALREADY IN DIRECTORY?\r
- JRST DFCL20 ;NO. INSERT IT\r
+ JRST DFC16A ;YES\r
+ TRNN DAT,ATIND ;IS NAME ALREADY IN DIRECTORY?\r
+ JRST DFCL20 ;NO. INSERT IT\r
MOVEM IOS,DEVIOS(DEVDAT)\r
- PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY.\r
+ PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY.\r
MOVE TAC,DEVEXT(DEVDAT) ;CHANGE BLOCK POINTER\r
- EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK\r
+ EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK\r
MOVEM TAC,DEVEXT(DEVDAT);SAVE POINTER TO RIB OF OLD VERSION FOR RECLAM \r
- PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT\r
+ PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT\r
HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER\r
NOSCHEDULE\r
PUSH PDP,ATPP(TAC) ;SAVE XWD PROJ,PROG\r
- PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
- POP PDP,AC2 ;XWD PROJ,PROG\r
+ PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
+ POP PDP,AC2 ;XWD PROJ,PROG\r
PUSHJ PDP,SCNAT0 ;SCAN FOR ANY OTHERS READING OLD VERSION\r
JRST DFCL17 ;NONE\r
\r
DFCL16: MOVEI AC1,DTBIT ;DELETE WHEN THRU READING SINCE IT WAS JUST UPDATED\r
IORM AC1,TBITS(TAC)\r
PUSHJ PDP,SCNAT2 ;LOOK FOR MORE\r
- JRST CLRBUF ;NO MORE\r
+ JRST CLRBUF ;NO MORE\r
JRST DFCL16\r
-DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE.\r
- ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE.\r
+DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE.\r
+ ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE.\r
\r
DFCL17: SCHEDULE\r
HRRZ TAC,DEVEXT(DEVDAT) ;RIB# OF FILE\r
DFCL20: PUSHJ PDP,INSDIR ;INSERT THE NAME\r
HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER\r
NOSCHEDULE\r
- PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
- JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE\r
+ PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
+ JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE\r
DFCLU1: MOVEM DAT,TBITS(TAC) ;STORE STATUS BITS (WITH UPDATE MARKER CLEARED)\r
TLN DEVDAT,LOOKB ;WAS IUNPUT SIDE OF FILE ALSO CLOSED?\r
- POPJ PDP, ;NO, LET THE USER KEEP READING IT\r
+ POPJ PDP, ;NO, LET THE USER KEEP READING IT\r
TRNE DAT, RCOUNT ;YES, ANYBODY ELSE STILL READING IT?\r
- JRST DFCLU2 ;YES\r
- TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION?\r
- JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE\r
- PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY\r
+ JRST DFCLU2 ;YES\r
+ TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION?\r
+ JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE\r
+ PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY\r
DFCLU2: HRRZS DEVACC(DEVDAT) ;CLEAR POINTER TO ACCESS TABLE\r
- JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT.,\r
-\r
-\r
- ;CLOSE UUO CONTINUED.\r
+ JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT.,\r
+\f ;CLOSE UUO CONTINUED.\r
;CLOSE AN INPUT FILE.\r
\r
DFCLSI: TLZN DEVDAT,LOOKB\r
POPJ PDP,\r
DFCL21: HLRZ TAC,DEVACC(DEVDAT) ;POINT TO ACCESS ENTRY\r
- JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED\r
- ; (PROBABLY ^C DURING EARLIER ATTEMPT)\r
+ JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED\r
+ ; (PROBABLY ^C DURING EARLIER ATTEMPT)\r
MOVE TAC1,TBITS(TAC) ;GET STATUS BITS\r
IFN FTRCHK,<\r
- TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)?\r
+ TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)?\r
HALT CPOPJ ;IF SO, SOMEBODY IS VERY CONFUSED.\r
>\r
NOSCHEDULE\r
SOS TAC1,TBITS(TAC) ;DECREMENT RCOUNT\r
TRNE TAC1,RCOUNT+RWTBIT ;ANY MORE READS? OR OUTPUT CLOSE TO DO?\r
- JRST DFCL23 ;YES, LEAVE\r
+ JRST DFCL23 ;YES, LEAVE\r
\r
- TRNE TAC1,DTBIT ;TO BE DELETED?\r
- JRST DFC16A ;YES\r
- PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT\r
+ TRNE TAC1,DTBIT ;TO BE DELETED?\r
+ JRST DFC16A ;YES\r
+ PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT\r
DFCL23: SCHEDULE\r
TLZN DEVDAT,INPB ;ANY INPUT UUO'\r
- JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF\r
+ JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF\r
PUSHJ PDP,SETBUF ;YES, UPDATE ACCESS DATE AS FOLLOWS:\r
- PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION.\r
+ PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION.\r
SUBI TAC1,BLKSIZ-2 ;SET TAC1 TO 2ND WORD OF BLOCK\r
LDB AC1,[POINT 17,@TAC1,35] ;GET PREVIOUS ACCESS DATA.\r
- CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY?\r
- JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT.\r
- MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE.\r
+ CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY?\r
+ JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT.\r
+ MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE.\r
DPB AC1,[POINT 17,@TAC1,35] ;\r
- PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION.\r
- JRST CLRBUF ;CLEAR BUFFER AND EXIT.\r
-\r
-SUBTTL DIRECTORY SEARCHING\r
+ PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION.\r
+ JRST CLRBUF ;CLEAR BUFFER AND EXIT.\r
+\fSUBTTL DIRECTORY SEARCHING\r
;SEARCH DIRECTORY FOR A PARTICULAR ENTRY.\r
;ENTRY BY: MOVE DAT,NAME\r
; HLLZ AC1,EXTENSION\r
; EXIT2 NAME FOUND, TAC POINTS TO ENTRY\r
\r
DIRSRC: PUSH PDP,AC1\r
- PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION\r
+ PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION\r
PUSHJ PDP,SETPTR ;READ UFD RETRIEVAL POINTERS\r
DRSRC0: HRRZ TAC,DEVACC(DEVDAT)\r
CAILE TAC,PTRN(DEVDAT) ;MORE POINTERS IN CORE?\r
- JRST DRSRC7 ;NO, GET MORE.\r
+ JRST DRSRC7 ;NO, GET MORE.\r
HRRZ TAC,(TAC)\r
JUMPE TAC,DRSRC6 ;0 SIGNALS END OF POINTERS\r
AOS DEVACC(DEVDAT) ;NEXT POINTER\r
\r
AOS DEVCNT(DEVDAT) ;COUNT UFD BLOCKS SEARCHED\r
- PUSHJ PDP,MQIN ;READ IN DATA BLOCK\r
- JRST RERA ;ERROR, YOU LOSE.\r
+ PUSHJ PDP,MQIN ;READ IN DATA BLOCK\r
+ JRST RERA ;ERROR, YOU LOSE.\r
\r
MOVE TAC1,DSKBUF(DEVDAT) ;XWD-L,POINTER\r
HRRZ TAC,TAC1\r
- TLNN IOS,UBFS ;DUMP MODE?\r
- HRLI TAC,PROG ;NO. RELOCATE.\r
+ TLNN IOS,UBFS ;DUMP MODE?\r
+ HRLI TAC,PROG ;NO. RELOCATE.\r
HLLZ AC1,-1(PDP) ;SIXBIT/EXT/\r
-DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED?\r
- JRST DRSRC0 ;YES\r
+DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED?\r
+ JRST DRSRC0 ;YES\r
ADDI TAC,1\r
- CAMN AC3,(PDP) ;NAMES MATCH?\r
- JRST DRSRC8 ;YES\r
+ CAMN AC3,(PDP) ;NAMES MATCH?\r
+ JRST DRSRC8 ;YES\r
\r
DRSRC4: ADDI TAC,1\r
HRRZ AC3,TAC\r
CAIE AC3,BLKSIZ(TAC1) ;IS BLOCK ENTIRELY SEARCHED?\r
- JRST DRSR3A ;NO\r
+ JRST DRSR3A ;NO\r
JRST DRSRC0\r
\r
-DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK?\r
+DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK?\r
JRST DRSRC6 ;NO\r
- PUSHJ PDP,GETPTR ;YES, GET SOME\r
+ PUSHJ PDP,GETPTR ;YES, GET SOME\r
JRST DRSRC0\r
\r
-DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH\r
+DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH\r
CAME AC3,AC1\r
- JRST DRSRC4 ;NO\r
- SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY\r
+ JRST DRSRC4 ;NO\r
+ SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY\r
\r
- AOS -2(PDP) ;YES, ENTRY IS FOUND\r
+ AOS -2(PDP) ;YES, ENTRY IS FOUND\r
MOVSS DEVCNT(DEVDAT) ;SAVE COUNT OF UFD BLOCKS FOR USE AT CLOSE\r
-;EXIT\r
+\r
+\f;EXIT\r
\r
DRSRC6: POP PDP,DAT\r
POP PDP,AC1\r
- POPJ PDP, ;"FILE" NOT FOUND\r
+ POPJ PDP, ;"FILE" NOT FOUND\r
;CHECK PROTECTION ON UFD\r
\r
-DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION\r
+DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION\r
PUSHJ PDP,SETPTR\r
MOVSI DAT,200000 ;SET UP TO TEST READ BIT\r
- TLNE IOS,10 ;IS IT LOOKUP>\r
+ TLNE IOS,10 ;IS IT LOOKUP?\r
ROT DAT,-1 ;NO,TEST WRITE PROTECTION\r
MOVEI TAC,PTR1(DEVDAT)\r
- HRRZ AC1,-3(PDP) ;XWD PROJ,PROG\r
+ HRRZ AC1,-3(PDP) ;XWD PROJ,PROG\r
TLZ IOS,PRCHG\r
PUSHJ PDP,PROTKY\r
- TLO IOS,PRCHG ;FLAG PROTECTION CHANGE\r
+ TLO IOS,PRCHG ;FLAG PROTECTION CHANGE\r
PUSH PDP,DEVFIL(DEVDAT) ;PUSH FILENAME TO MAKE PDL LOOK LIKE DIRSRC\r
JRST DRSRC0\r
-\r
- \r
-;FIND A UFD ENTRY, IT MUST BE THERE.\r
+\f;FIND A UFD ENTRY, IT MUST BE THERE.\r
\r
EXTERNAL AUREQ,AUWAIT\r
\r
-FINDE: AOSE AUREQ\r
+FINDE: AOSE AUREQ\r
PUSHJ PDP,AUWAIT\r
TLO IOS,AUFLG\r
HLRZ TAC,SETCNT(DEVDAT) ;SET TAC TO UFD POINTERS\r
PUSHJ PDP,RRIA\r
CAILE DAT,BLKSIZ-2 ;POINTER IN THIS BLOCK?\r
JRST FINDE2 ;NO, GET NEXT ONE\r
- SUBI DAT,1 ;YES, BRING THEM IN\r
+ SUBI DAT,1 ;YES, BRING THEM IN\r
HRRM DAT,DEVBLK(DEVDAT) ;SET INDEX INTO RIB\r
PUSHJ PDP,DFIN4 ;COPY POINTERS INTO DDB\r
HRRZ TAC,PTR1(DEVDAT) ;GET RETRIEVAL POINTER FOR UFD BLOCK\r
-\r
PUSHJ PDP,MQIN ;READ THE UFD BLOCK\r
- JRST RERA ;ERROR\r
- PUSHJ PDP,SET000 ;FIND THE ENTRY\r
+ JRST RERA ;ERROR\r
+ PUSHJ PDP,SET000 ;FIND THE ENTRY\r
HLLZ AC1,DEVEXT(DEVDAT) ;GET EXTENSION FROM DDB\r
\r
-SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD\r
+SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD\r
ADDI TAC1,1\r
CAME TAC,DEVFIL(DEVDAT) ;SAME?\r
AOJA TAC1,SRCU1 ;NAMES DO NOT MATCH\r
HLLZ TAC,@TAC1 ;GET EXTENSION FROM UFD\r
CAME TAC,AC1 ;SAME?\r
AOJA TAC1,SRCU1 ;EXTENSIONS DO NOT MATCH\r
- POPJ PDP, ;FOUND IT\r
+ POPJ PDP, ;FOUND IT\r
+\r
\r
-FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK\r
+FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK\r
HLRZ TAC,@TAC1\r
SUBI DAT,BLKSIZ-2 ;BACK UP DAT\r
JRST FINDE1\r
-\r
-;INSERT AN ENTRY IN A DIRECTORY.\r
+\f;INSERT AN ENTRY IN A DIRECTORY.\r
\r
EXTERNAL AUREQ,AUWAIT,AUAVAL\r
\r
TLO IOS,AUFLG\r
SETZM DEVCNT(DEVDAT) ;CLEAR BEFORE COUNTING BLOCK OF UFD\r
HLRZ TAC,SETCNT(DEVDAT) ;BLOCK# OF UFD RIB\r
- PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,.\r
+ PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,.\r
SOS DEVACC(DEVDAT) ;SYNC\r
\r
INSD1: AOS TAC,DEVACC(DEVDAT) ;GET NEXT POINTER,\r
CAILE TAC,PTRN(DEVDAT) ;ANY MORE IN CORE?\r
JRST INSD10 ;NO, GET SOME MORE\r
\r
-INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER\r
+INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER\r
JUMPE TAC,INSD5 ;0 SIGNALS END OF POINTERS\r
- PUSHJ PDP,MQIN ;READ UFD BLOCK\r
+ PUSHJ PDP,MQIN ;READ UFD BLOCK\r
JRST RERA ;ERROR.\r
\r
- PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127\r
+ PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127\r
SKIPE @TAC1 ;IS IT ZERO?\r
JRST INSD1 ;NO, BLOCK FULL.\r
\r
PUSHJ PDP,INSD3 ;INSERT ENTRY.\r
\r
JRST WUFD ;WRITE BLOCK AND LEAVE\r
-\r
-;INSERT THE ENTRY.\r
+\f;INSERT THE ENTRY.\r
\r
INSD3: HRRZ AC1,DSKBUF(DEVDAT)\r
INSD3B: CAIN AC1,(TAC1) ;BEGINNING OF BLOCK?\r
- JRST INSD3A ;YES\r
+ JRST INSD3A ;YES\r
SUBI TAC1,2\r
SKIPN @TAC1 ;SEARCH UFD BLOCK BACKWARDS\r
; FOR LAST NON-ZERO FILENAME.\r
\r
JRST INSD3B\r
\r
- ADDI TAC1,2 ;MOVE IN NAME.\r
+ ADDI TAC1,2 ;MOVE IN NAME.\r
INSD3A: MOVE TAC,DEVFIL(DEVDAT)\r
MOVEM TAC,@TAC1\r
- ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER.\r
+ ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER.\r
MOVE TAC,DEVEXT(DEVDAT)\r
IFN FTRCHK,<\r
TRNN TAC,-1 ;POINTER TO BLOCK 0\r
\r
- HALT .+1 ;FOR RETRIEVAL INFO\r
- ; CONTINUE-GET BAD INFO MESSAGE\r
+ HALT .+1 ;FOR RETRIEVAL INFO\r
+ ; CONTINUE-GET BAD INFO MESSAGE\r
>\r
MOVEM TAC,@TAC1\r
POPJ PDP,\r
-\r
-;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY\r
+\f;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY\r
;POINTER BLOCK, ADD POINTER IF POSSIBLE. IF NOT POSSIBLE.\r
;CREATE NEW POINTER BLOCK AND PUT THE POINTER IN IT.\r
\r
TLZ IOS,AUFLG\r
MOVEM IOS,DEVIOS(DEVDAT)\r
POPJ PDP,\r
-\r
-;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER.\r
+\f;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER.\r
;INSERT NEW ONE, AND WRITE BLOCK OUT.\r
\r
INSD8: SKIPN @TAC1\r
\r
INSD11: TRNN IOS,IOIMPM\r
JRST WERA ;IT WAS NOT, YOU LOSE.\r
-\r
PUSHJ PDP,WLERA ;GET ANOTHER BLOCK\r
HRRM TAC,SETCNT(DEVDAT)\r
JRST INSD5A\r
-\r
-\r
-;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT.\r
+\f;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT.\r
;IF WRITE-LOCK ERROR, TRY ANOTHER BLOCK. FINALLY, IF POINTERS WERE\r
;ALTERED, WRITE THEM OUT.\r
\r
MOVE TAC1,DEVACC(DEVDAT)\r
HRRM TAC,(TAC1)\r
JRST WUFD1\r
-\r
-SUBTTL ACCESS TABLE PROCESSING\r
+\fSUBTTL ACCESS TABLE PROCESSING\r
;SCAN ACCESS TABLE.\r
;EXIT TO CALL+1 WITH TAC SET TO THE LAST ENTRY IF NOT THERE.\r
;EXIT TO CALL+2 WITH TAC SET TO CORRECT ENTRY IF THERE.\r
\r
;CONTINUE SCAN FROM CURRENT ENTRY\r
\r
+\r
SCNAT2: HRRZ DAT,ATLINK(TAC) ;ANY MORE ENTRIES?\r
JUMPE DAT,CPOPJ ;NO\r
MOVE TAC,DAT ;YES, GO TO THE NEXT ONE\r
JRST SCNAT1\r
\r
-;CLEAR AN ACCESS ENTRY.\r
+\f;CLEAR AN ACCESS ENTRY.\r
;IT IS ASSUMED THAT NO SCHEDULING WILL TAKE PLACE.\r
;ENTER WITH TAC POINTING TO THE ENTRY TO WIPE OUT.\r
\r
+\r
CLRAT: IFN FTRCHK,<\r
SKIPN TAC ;ATTEMPT TO CLEAR NON EXISTENT ACCESS TABLE IS AN ERROR\r
-\r
HALT SCNHLT ;CONTINUE WILL POPJ AND EXIT.\r
>\r
HRRZS DEVACC(DEVDAT) ;CLEAR ACCESS TABLE POINTER IN DEVICE DATA BLOCK\r
HRRM AC2,ATLINK(AC1) ;LINK AROUND IT\r
JRST CLRCOR ;CLEAR THE CORE\r
\r
-;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK.\r
+\r
+\f;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK.\r
;BUILD UP THE ENTRY\r
;UPON ENTRY, DAT SHOULD CONTAIN TEST BITS TO SET\r
\r
HRRZM TAC1,FAT ;POINT FAT TO THIS NEW ENTRY\r
SETHLT: POPJ PDP, ;HALT PC HERE IF END OF TABLE WITHOUT FINDING\r
; ENTRY TO BE CLEARED\r
-\r
-SUBTTL DUMP INPUT/OUTPUT\r
+\fSUBTTL DUMP INPUT/OUTPUT\r
;DUMP MODE OUTPUT\r
\r
EXTERNAL COMCHK,ADRERR,SAVDDL\r
MOVMS ITEM\r
ADDI ITEM,BLKSIZ-1 ;MAKE E.G. 129 WORDS USE 2 DISK BLOCK\r
ASH ITEM,-BLKP2 ;NUMBER OF BLOCK REQUIRED FOR THIS WRITE\r
-DFD02A: HRRZ AC1,SATPTR\r
+\fDFD02A: HRRZ AC1,SATPTR\r
MOVE AC2,SATBK2\r
DFDO1B: PUSHJ PDP,GETBIT ;ASK FOR C(ITEM BITS)\r
JRST DFDO6 ;NOT AVAILABLE\r
MOVN TAC,ITEM\r
LSH TAC,BLKP2\r
HLRES TAC1\r
-\r
CAML TAC,TAC1\r
HRLM TAC,DSKBUF(DEVDAT) ;ONLY A PARTIAL WRITE\r
HLRE TAC1,DSKBUF(DEVDAT)\r
MOVMS TAC1\r
PUSHJ PDP,UPDEVC ;UPDATE SIZE OF FILE\r
ADDM ITEM,SETCNT(DEVDAT) ;NON UPDATE RELATIVE BLOCK# WITHIN THE FILE\r
-\r
- MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT\r
+\f MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT\r
TLZN TAC1,BLKSIZ-1 ;AN EVEN NUMBER OF DISK BLOCKS TO BE WRITTEN?\r
JRST DFDO2G ;YES, DON'T WORRY ABOUT PARTIAL BLOCK\r
;HANDLING PROBLEMS\r
JUMPL AC1,DFDO2C ;OF THIS DUMP MODE OUTPUT REQUEST.\r
SUB AC1,[XWD BLKSIZ,BLKSIZ]\r
HLL AC2,AC1 ;SAVE LH\r
+ ADDI AC1,(PROG) ;RELOCATE USER'S ADDRESS\r
+ HLL AC1,AC2 ;IN CASE OF OVERFLOW INTO LH(2 SEG SAVE)\r
DFDO2D: MOVE AC2,(AC1) ;MOVE DATA FROM END OF USER'S\r
MOVEM AC2,(TAC1) ;OUTPUT AREA DT MONITOR BUFFER\r
AOBJP TAC1,.\r
;TOSS OUT A SERIES OF CONSECUTIVE POINTERS\r
\r
HRRZ AC2,DEVACC(DEVDAT) ;GET RETRIEVAL POINTER POINTER\r
+\r
DFDO3A: MOVE AC1,@AC2 ;IS POINTER ALREADY THERE?\r
ADDI AC2,1\r
TRNE AC1,-1 \r
MOVE TAC,-1(PDP)\r
PUSHJ PDP,SAVDDL ;ADJUST ADR IN CASE OF HIGH SEG SAVE\r
PUSHJ PDP,CHKSUM\r
-\r
HRLM TAC1,-1(AC2)\r
>\r
\r
JRST DFDO1 ;NOT FINISHED, GET NEXT SET\r
POP PDP,TAC ;BACK UP PDP\r
AOJA UUO,DFDO0 ;GO BAK FOR MORE\r
-\r
-;WRITE POINTERS ONTO DISK\r
+\f;WRITE POINTERS ONTO DISK\r
\r
DFDO4: HRLM ITEM,(PDP) ;SAVE COUNT OF BLOCKS TO WRITE\r
PUSHJ PDP,SETBUF ;FIND SOME 200 WORD AREA\r
POP PDP,AC2 ;RESTORE POINTER INTO RETRIEVAL INFO\r
HLRZ ITEM,(PDP) ;RESTORE COUNT OF BLOCKS TO WRITE THIS ITERATION\r
JRST DFDO3B\r
-\r
-;DUMP MODE INPUT.\r
+\f;DUMP MODE INPUT.\r
\r
EXTERNAL COMCHK,ADRERR\r
\r
ADDM TAC,-2(PDP)\r
AOS DEVACC(DEVDAT) ;NEXT POINTER\r
AOS SETCNT(DEVDAT) ;NEXT RELATIVE BLOCK\r
-\r
-\r
-DFDI1: SKIPGE -2(PDP) ;MORE TO GO?\r
+\fDFDI1: SKIPGE -2(PDP) ;MORE TO GO?\r
JRST DFDI2 ;YES\r
\r
DFDI1A: MOVE TAC1,-1(PDP) ;NO, PROCESS THE FIRST BLOCK\r
DFDI1C: MOVE IOS,[XWD IOEND,IODEND] ;NO MORE INPUT\r
ORB IOS,DEVIOS(DEVDAT)\r
POPJ PDP,\r
-\r
-;DUMP INPUT CONTINUED,\r
+\f;DUMP INPUT CONTINUED,\r
;FIND A SERIES OF CONSECUTIVE BLOCKS TO READ AT ONCE\r
\r
DFDI2: HRRZ AC2,DEVACC(DEVDAT) ;GET NEXT POINTER\r
CAIG AC2,PTRN(DEVDAT)\r
SKIPN AC3,@AC2 ;END-FILE\r
JRST DFDI4 ;YES\r
-\r
CAIN TAC1,-1(AC3) ;STILL CONSECUTIVE?\r
AOJA TAC1,DFDI3 ;YES, LOOP\r
\r
MOVS TAC1,@TAC\r
HRLM TAC,(PDP)\r
HRR TAC1,-3(PDP)\r
- MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT\r
+ MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT \r
MOVE TAC,(TAC) ;GET FIRST LOGICAL BLOCK#\r
MOVEM TAC1,DSKBUF(DEVDAT) ;STORE CONTROLLING IOWD\r
PUSHJ PDP,MQIN ;REQUEST THE INPUT\r
JFCL ;ERRORS IGNORED\r
-\r
-;DUMP INPUT CONTINUED.\r
+\f;DUMP INPUT CONTINUED.\r
;IF THERE IS CHECKSUMMING. CHECK IT, ELSE INCREMENT IOWD\r
;AND LOOP.\r
\r
HRRM AC2,DEVACC(DEVDAT)\r
SETZM @AC2\r
POPJ PDP,\r
-\r
-SUBTTL USETO/USETI\r
+\fSUBTTL USETO/USETI\r
;SETD AND SETI UUOS\r
\r
EXTERNAL WAIT1\r
MOVNS TAC\r
ADDM TAC,SETCNT(DEVDAT)\r
JRST DFSETC\r
-\r
-;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON\r
+\f;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON\r
;DISC, THEN CORE IS FULL, AND THE POINTER IS IN CORE, OTHERWISE\r
;A CHECK IS MADE TO INSURE THAT THE END FILE IS AFTER THE DESIRED\r
;POINTER.\r
PUSHJ PDP,DFO4A ;NO, WRITE THEM OUT\r
HRRZ TAC,DEVEXT(DEVDAT) ;GET BLOCK# OF FIRST RIB\r
PUSHJ PDP,SETPTR ;READ FIRST RIB\r
-DFSETB: MOVEI TAC,1 ;RESET SETCNT\r
+\fDFSETB: MOVEI TAC,1 ;RESET SETCNT\r
HRRM TAC,SETCNT(DEVDAT) ;"POSITIONED" AT RELATIVE BLOCK 1\r
\r
DFSETC: HRRZ TAC,DSKBUF(DEVDAT) ;LSET TAC TO FIRST POINTER\r
HRRZ AC2,TAC1\r
ADD AC2,AC1\r
CAIL AC2,(UUO)\r
-\r
JRST DFSET7 ;YES\r
ADDI AC2,1 ;NO. GET NEXT BLOCK\r
HRRM AC2,SETCNT(DEVDAT)\r
MOVEM IOS,DEVIOS(DEVDAT)\r
PUSHJ PDP,DFO6A ;CLEAR POINTERS\r
JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE\r
-\r
-SUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING\r
+\fSUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING\r
;INPUT UUO\r
;* INDICATES INTERRUPT LEVEL\r
\r
EXTERNAL ADVBFF\r
\r
+\r
DFIN: TLNN DEVDAT,LOOKB ;FILE OPEN?\r
JRST DFERR2 ;NO, UNDEFINED FILE\r
TLZ IOS,IO ;SET INPUT INDICATOR\r
MOVEM IOS,DEVIOS(DEVDAT) ;*\r
POPJ PDP, ;*\r
\r
+\r
DFIN1B: TLNE IOS,NMP ;*ANY MORE POINTERS ON DISK?\r
TLO IOS,LIR ;*NO, THIS IS THE LAST READ\r
JRST DFIN1A ;*\r
PUSHJ PDP,GETPTR ;READ RIB COPY POINTERS INTO DDB\r
HRRZ TAC1,DEVACC(DEVDAT)\r
JRST DFIN1D\r
-\r
-;NEED NEW POINTER FROM DISK\r
+\f;NEED NEW POINTER FROM DISK\r
\r
GETPTR: MOVE AC2,DEVOAD(DEVDAT) ;POINTERS DIFFER?\r
TLNE AC2,PNTDIF\r
MOVE TAC,DEVBLK(DEVDAT) ;RESET DEVBKO\r
MOVEM TAC,DEVBKO(DEVDAT) ;BLOCK # WORD INDEX OF A CURRENT RETRIEVAL PACKET\r
GTPTR1: PUSHJ PDP,SET000 ;SET TAC1 TO FIRST WORD OF RIB\r
-\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f MOVE IOS,DEVIOS(DEVDAT) \r
+ MOVE IOS,DEVIOS(DEVDAT) \r
HRRZ AC3,DEVBLK(DEVDAT) ;WORD INDEX OF RETRIEVAL POINTER PACKET\r
ADD AC3,TAC1 ;AC3 POINTS TO NEXT POINTER WITHIN RIB\r
ADDI TAC1,BLKSIZ-2 ;TAC1 POINTS TO WORD 127\r
\r
MOVEI AC1,PTRN(DEVDAT) ;DDB END CHECK\r
DFIN5: CAML AC3,TAC1 ;POINTER BLOCK EMPTY?\r
-\r
JRST DFIN7 ;YES, GET SOME MORE\r
\r
MOVE TAC,@AC3 ;GET RETRIEVAL POINTER\r
MOVSI AC1,PNTDIF ;CLEAR "POINTER DIFFER"\r
ANDCAM AC1,DEVOAD(DEVDAT) ;SINCE DDB IS COPY OF RETRIEVAL DATA.\r
POPJ PDP,\r
-\r
-DFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH\r
+\fDFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH\r
JUMPE TAC,DFIN8 ;DONE IF LINK=0\r
MOVSM TAC,DEVBLK(DEVDAT) ;SET BLOCK#, WORD INDE FOR NEXT PACKET\r
PUSH PDP,AC2\r
POPJ PDP, ;*\r
\r
JRST DFIN1 ;*NO,FILL NEXT ONE\r
-\r
-;OUTPUT UUO\r
+\f;OUTPUT UUO\r
\r
EXTERNAL WSYNC,ADVBFE\r
\r
MOVSI TAC1,PNTDIF ;*\r
ORM TAC1,DEVOAD(DEVDAT) ;*\r
>\r
-\r
HRRZ TAC,@DAT ;*ALREADY HAVE A POINTER?\r
JUMPN TAC,DFOT3A ;*YES IF JUMP\r
CAIE DAT,PTRN(DEVDAT) ;*NO, CLEAR NEXT ONE?\r
\r
DFOT3A: CAIE DAT,PTRN(DEVDAT) ;*LIST FULL?\r
JRST QOUT ;*NO, WRITE AND LEAVE\r
-\r
-;OUTPUT UUO CONTINUED.\r
+\f;OUTPUT UUO CONTINUED.\r
;WRITE OUT POINTER LIST.\r
\r
PUSHJ PDP,SETBFO ;CHOOSE AN OUTPUT BUFFER TO READ RIB INTO\r
MOVE TAC,DEVBLK(DEVDAT)\r
MOVEM TAC,DEVBKO(DEVDAT) ;SAE BLOCK#,WORD INDEX OF CURRENT POINTER PACKET\r
POPJ PDP,\r
-\r
-DFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT\r
+\fDFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT\r
PUSHJ PDP,SET177 ;SET TAC1 TO WORD 128\r
SETZM @TAC1 ;CLEAR BLOCK# WORD\r
AOS (PDP) ;ALWAYS SKIP RETURN\r
MOVSM TAC,DEVBLK(DEVDAT) ;STORE BLOCK#, INDEX FOR NEW BLOCK\r
PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 AGAIN\r
HRLM TAC,@TAC1 ;LH LINKS TO NEW BLOCK\r
- \r
MOVE TAC,AC3 ;BLOCK# OF CURRENT BLOCK\r
PUSHJ PDP,WRIA ;WRITE THE BLOCK OUT\r
\r
PUSHJ PDP,WRIA ;WRITE THIS BLOCK OF POINTERS OUT\r
PUSHJ PDP,RRI ;READ NEXT BLOCK OF POINTERS IN\r
JRST DFO8A\r
-\r
-;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER\r
+\f;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER\r
\r
EXTERN MJOBN\r
\r
POP PDP,AC2 ;*\r
POP PDP,AC1 ;*\r
POPJ PDP, ;*\r
-\r
-SUBTTL READ/WRITE RETRIEVAL POINTERS\r
+\fSUBTTL READ/WRITE RETRIEVAL POINTERS\r
;INPUT RETRIEVAL BLOCK.\r
\r
RRIB: SKIPA TAC,DEVEXT(DEVDAT) ;READ FIRST RETRIEVAL BLOCK\r
\r
SET000: HRRZ TAC1,DSKBUF(DEVDAT)\r
JRST S177A\r
-\r
-\r
+\f\r
;PUT POINTER INFO IN DDB\r
;ENTER WITH TAC CONTAINING THE BLOCK NUMBER OF THE POINTERS.\r
\r
;ENTER WITH TAC POINTING TO FIRST RETRIEVAL BLOCK OF THE FILE\r
; TO BE DELETED.\r
\r
+\r
RECLAM: PUSHJ PDP,SETBUF ;FIND SPACE IN USER AREA\r
\r
PUSHJ PDP,RECLM5 ;GET FIRST POINTER BLOCK\r
POP PDP,TAC1\r
AOJA DAT,RECLM2 ;GO BACK FOR MORE\r
\r
+\r
RECLM4: HLRZ TAC,@TAC1 ;PICK UP POINTER TO NEXT BLOCK\r
JUMPE TAC,RECLM6 ;NO MORE, GO HOME.\r
RECLM5: PUSHJ PDP,RRIA ;READ IN A R.I. BLOCK.\r
\r
RECLM6: POP PDP,TAC\r
JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE\r
-\r
-;RELEASE UUO.\r
+\f;RELEASE UUO.\r
\r
EXTERNAL DAREQ,DAAVAL\r
\r
PUSHJ PDP,DOWNDA ;RESET DAREQ INTERLOCK\r
DFREL1: TLZ DEVDAT,DSKRLB ;CLEAR RELEASE MARKER.\r
JRST WAIT1\r
-\r
-SUBTTL DISK SPACE ALLOCATION\r
+\fSUBTTL DISK SPACE ALLOCATION\r
;DFGETF: GET A FREE DISK BLOCK\r
;CALL: PUSHJ PDP,DFGETF\r
; ... RETURNS WITH TAC:=LOGICAL BLOCK#\r
HRRM TAC,@SATPTR ;MARK SAT ENTRY FULL\r
JRST DFGTF1\r
\r
+\r
;UPDA - TURN ON THE DISK ALLOCATION INTERLOCK (DAREQ)\r
; - A CALL TO UPDA MUST PRECEDE SAT BLOCK MANIPULATIONS\r
+\r
UPDA: AOSE DAREQ ;INCREMENT COUNT OF USERS REQUESTING DISK ALLOCATION\r
PUSHJ PDP,DAWAIT ;WAIT UNTIL JOB REACHES TOP OF QUEUE\r
TLO IOS,DAFLG\r
MOVEM IOS,DEVIOS(DEVDAT) ;MAKE THIS JOB AS USING SAT BLOCK\r
POPJ PDP,\r
-\r
-;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT.\r
+\f;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT.\r
; CONSIDER DISK FULL WHEN FEW BLOCKS REMAIN FREE UNLESS THE USER\r
; IS LOGGING IN OR USING A NON-SHARABLE RESOURCE.\r
\r
PUSHJ PDP,SATCNT ;NO. COUNT # FREE\r
ADDI TAC1,SENTSZ ;NEXT SAT ENTRY\r
CAIL AC1,JOBN ;ENOUGH SPACE ACCUMULATED?\r
-\r
JRST SATGT2 ;YES - READ A SAT BLOCK\r
CAIGE TAC1,SATTOP ;END OF ENTRIES?\r
JRST SATGT1 ;NO. CONTINUE\r
JUMPE AC1,DSKFUL ;IF NONE FOUND DISK IS REALLY FULL\r
\r
+\r
;THERE ARE JOBN OR FEWER DISK BLOCKS AVAILABLE.\r
;GIVE THEM OUT ONLY IN HARDSHIP CASES\r
LDB TAC,PJOBN\r
TLNE IOS,UBFS+AUFLG ;DOES USER HAVE MONITOR BUFFER OR IS HE ALTERING UFD?\r
JRST SATGT2 ;YES TO EITHER. GIVE HIM A BLOCK ANYWAY.\r
DSKFUL: TLNE IOS,UBFS+AUFLG\r
- JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD\r
-\r
+ JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD \r
PUSHJ PDP,DOWNDA ;RESET ALLOCATION INTERLOCK\r
PUSHJ PDP,HNGSTP ;PRINT "DSK OK?"\r
PUSHJ PDP,UPDA ;IF USER TYPE "CONT" WE TRY AGAIN\r
ADDI AC1,NUMBIT ;MAXIMUM NUMBER\r
SUB AC1,TAC ;LESS NUMBER USED\r
POPJ PDP,\r
-\r
-;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE\r
+\f;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE\r
;CALL TAC:=LOGICAL BLOCK L\r
; PUSHJ PDP,SETFRE\r
; ... RETURN\r
SOS @SATPTR ;DECREMENT BLOCKS USED\r
SETOM SATCHG ;SAT BLOCK IN CORE NOT = DISK COPY\r
JRST DOWNDA ;REMOVE ALLOCATION INTERLOCK AND EXIT.\r
-\r
-;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID\r
+\f;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID\r
; A PDL OVRFLW PROBLEM. IT CAN DO SO BECAUSE IT IS NOT RE-ENTRANT, I.E., ONLY\r
; ONE USER AT A TIME MAY PASS THROUGH HERE BECAUSE OF THE DAREQ INTERLOCK.\r
\r
ANDCAB IOS,DEVIOS(DEVDAT)\r
POPJ PDP,\r
\r
+\r
;SET UP TAC AND TAC1 FOR READ OR WRITE OF SAT BLOCK\r
\r
SATBLK: MOVE TAC,SATPTR\r
MOVE TAC1,SATBK2\r
MOVEM TAC1,DSKBUF(DEVDAT)\r
POPJ PDP,\r
-\r
-SUBTTL "FREE" CORE ALLOCATION\r
+\fSUBTTL "FREE" CORE ALLOCATION\r
;CLEAR OUT DDB AT RELEASE TIME\r
\r
INTERNAL CLRDDB\r
SETDD1: POP PDP,TAC1\r
POP PDP,ITEM\r
POPJ PDP,\r
-\r
-;SET TAC1 TO SOME AREA FOR BUFFER.\r
+\f;SET TAC1 TO SOME AREA FOR BUFFER.\r
;GET BUFFER SPACE FROM USER INPUT OR OUTPUT RING IF AVAILABLE\r
;ASSIGN FROM MONITOR CORE AS A LAST RESORT.\r
;SET DSKBUF(DEVDAT) TO POINT TO BUFFER.\r
TLO IOS,UBFU ;BUFFER IN MONITOR CORE\r
MOVEI TAC1, MONBUF ;TAC1 POINTS TO MONITOR BUFFER\r
JRST SETBF5\r
-\r
-;CLEAR THE BUFFER IN FREE STORAGE IF THERE.\r
+\f;CLEAR THE BUFFER IN FREE STORAGE IF THERE.\r
\r
EXTERNAL BUFCLR,JOBFF,IADRCK\r
CLRBUF: SCHEDULE\r
SUBI TAC,2 ;SET TAC TO 2ND BUFFER WORD\r
SOS (PDP) ;BUFCLR WILL SKIP RETURN\r
JRST BUFCLR ;CLEAR THE BUFFER\r
-\r
-;FIND THE FIRST ZERO IN A SET OF WORDS\r
+\f;FIND THE FIRST ZERO IN A SET OF WORDS\r
;ENTER WITH LH OF TAC SET TO NEGATIVE OF NUMBER OF WORDS.\r
; RH OF TAC CONTAINING ADDRESS OF FIRST WORD.\r
;CALL: PUSHJ PDP,GETZER\r
FAD TAC1,[0]\r
LSH TAC1,-33\r
POPJ PDP,\r
-\r
-\r
-;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1\r
+\f;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1\r
;IT IS ASSUMED THAT THE CLOCK IS OFF.\r
\r
INTERN GETFCR\r
SUBI TAC1,4 ;SYNCHRNIZE\r
ADD TAC1,LOCORE ;FORM CORE ADDRESS\r
POPJ PDP,\r
-\r
-INTERNAL GETBIT\r
+\fINTERNAL GETBIT\r
\r
\r
;SEARCH THROUGH A TABLE TO FIND A SERIES OF ZERO-BITS.\r
MOVEM TAC1,1(AC1) ;SAVE THE SPOT\r
MOVEM TAC,2(AC1)\r
PUSH PDP,TAC\r
- \r
PUSH PDP,TAC1\r
\r
GTBIT1: AOS DAT ;INCREMENT SIZE OF HOLD BY 1 (GETZER LEFT DAT=-1)\r
GTBIT4: POP PDP,TAC1\r
POP PDP,TAC\r
AOS -2(PDP)\r
+\r
HRRZS TAC\r
SUBI TAC,-1(AC2)\r
PUSHJ PDP,RESIDU\r
POP PDP,TAC1\r
AOS -1(PDP) ;SIZE OF LARGEST HOLD MUST BE ADJUSTED\r
JRST GTBIT5\r
-\r
-;FREE A FOUR WORD SECTION OF CORE.\r
+\f;FREE A FOUR WORD SECTION OF CORE.\r
;ENTER WITH ADDRESS IN TAC\r
\r
INTERNAL CLCOR1\r
CLRB2: MOVEM TAC1,1(AC1)\r
CLRB3: MOVEM TAC,2(AC1)\r
POPJ PDP,\r
-\r
-SUBTTL QUEUEING AND INTERRUPT PROCESSING\r
+\fSUBTTL QUEUEING AND INTERRUPT PROCESSING\r
;PUT A REQUEST IN THE USER QUEUE.\r
;ENTER AT QIN FOR INPUT. QOUT FOR OUTPUT.\r
;CALLED AT BOTH INTERRUPT AND UUO LEVELS\r
\r
QIOEND: SCHEDULE ;*\r
POPJ PDP, ;*\r
-\r
-\r
-;PUT A REQUEST IN THE MONITOR QUEUE.\r
+\f;PUT A REQUEST IN THE MONITOR QUEUE.\r
;ENTER AT MQIN FOR INPUT, MQOUT FOR OUTPUT.\r
;ENTER WITH C(TAC1 0-17) = -SIZE OF BLOCK\r
; C(TAC1 18-35) = CORE ADDRESS\r
; LOSS ON THE DISK\r
>\r
HRLI TAC,TRIES\r
-\r
MOVSM TAC,DSKCNT(DEVDAT);STASH AWAY BLOCK #, ERROR COUNT.\r
PUSHJ PDP,SETACT ;SET IOACT\r
NOSCHEDULE\r
TRNN AC1,IODERR!IODTER!IOIMPM\r
AOS (PDP) ;NO, SKIP RETURN\r
POPJ PDP,\r
-\r
-;*\r
+\f;*\r
;* EVERYTHING FROM HERE THRU SETDUN CALLED AT INTERRUPT LEVEL\r
;*\r
;ROUTINE CALLED BY INTERRUPT IN DISK.\r
EXTERNAL JBTADR\r
EXTERNAL MQTOP,MQUEUE\r
\r
+\r
DFINT:\r
IFN FTSWAP,<\r
EXTERNAL SQREQ,SERA,SQGO,SWPINT\r
MOVEI TAC1,BLKSIZ\r
HRRM TAC1,@TAC\r
\r
- IFG CHKCNT,<\r
+\f IFG CHKCNT,<\r
MOVE TAC,DEVOAD(DEVDAT)\r
TLNE TAC,CKSUPR\r
JRST DINT0B\r
SKIPA\r
DFINT1: PUSHJ PDP,DFOUTX ;CHECK FOR MORE OUTPUT\r
SETZM RUNUSR\r
-\r
JRST DFINT4\r
\r
DINT1A: HRRZ TAC,DEVACC(DEVDAT) ;WRITE-LOCK FOUND, SET WLBIT\r
CAIL TAC,MQTOP\r
MOVEI TAC,MQUEUE\r
MOVEM TAC,MOPTR ;FALL THROUGH TO DFINT4\r
-\r
+\f\r
;DETERMINE NEXT TRANSFER TO MAKE ACCORDING TO PRIOROTY\r
; 1) SWAPPING 2) MQ I/O 3) BUFFERED MODE I/O\r
DFINT4: MOVEM IOS,DEVIOS(DEVDAT) ;CLEAR IOACT\r
JRST FINDV ;YES.\r
SETZM DFBUSY ;NO. TURN OFF BUSY FLAG\r
POPJ PDP, ;EXIT INTERRUPT\r
-\r
+\f\r
;FIND A WAITING USER\r
\r
FINDV: HRRZ DEVDAT,DDBPTR\r
JRST USRGO\r
\r
;START UP A USER READ\r
-\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\r
+\r
DFINT7: ANDCAM TAC,DEVIAD(DEVDAT) ;CLEAR INPUT WAIT BIT IN DDB\r
\r
USRGO: MOVSM DEVDAT,RUNUSR ;SAVE DEVDAT FOR USE AT DFINT\r
\r
USRGO3: HRRI TAC1,@DEVOAD(DEVDAT) ;GET ADDRESS OF OUTPUT BUFFER\r
AOJA TAC1,DFWRT ;FORM IOWD AND WRITE\r
-\r
-\r
+\f\r
;START UP A MONITOR READ OR WRITE\r
\r
MONGO: MOVS ITEM,@MOPTR ;XWD CORE ADDRESS, SAVED DEVDAT\r
TLZE IOS,IOW ;*\r
JRST SETIOD ;*\r
POPJ PDP, ;*\r
-\r
-SUBTTL ERRORS, SUBROUTINES.\r
+\fSUBTTL ERRORS, SUBROUTINES.\r
;ERROR ROUTINES CALLED FROM UUO LEVEL\r
\r
EXTERN EXCALP,ERRPTU,TPOPJ\r
DFER12: MOVEI TAC,0\r
PUSH PDP,TAC ;ADD SOMETHING TO BE REMOVED (SINCE SETLE NOT CALLED)\r
JRST DFERRY\r
-\r
-WERA: MOVSI IOS,NORELB\r
+\fWERA: MOVSI IOS,NORELB\r
ANDCAB IOS,DEVIOS(DEVDAT)\r
ERRORS <NON-RECOVERABLE DISC WRITE ERROR>\r
\r
+\r
RERA: MOVSI IOS,NORELB\r
ANDCAB IOS,DEVIOS(DEVDAT)\r
ERRORS <NON-RECOVERABLE DISC READ ERROR>\r
-\r
-;CALLED AT BOTH INTERUPT AND UUO LEVELS\r
+\f;CALLED AT BOTH INTERUPT AND UUO LEVELS\r
;COMPUTE CHECK-SUM\r
;ENTER WITH C(TAC 18-35) SET TO BUFFER ADDRESS\r
;RETURN WITH C(TAC1)SET TO ONES COMPLEMENT SUM IN RH.\r
ADDI TAC1,1 ;YES BRING IT AROUND\r
POPJ PDP,\r
>\r
-\r
-;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE,\r
+\f;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE,\r
; OTHERWISE NEGATIVE BLOCK COUNT).\r
; ENTER WITH SIZE OF CURRENT BLOCK IN TAC1\r
UPDEVC: HRRZ TAC,SETCNT(DEVDAT) ;*CONVERT CURRENT RELATIVE BLOCK NUMBER TO WORDS\r
HRRZ TAC1,DEVCNT(DEVDAT) ;*PICK UP PREVIOUS MAXIMUM FILE SIZE OF COMPARISON.\r
TRNE TAC1,400000 ;*PREVIOUS MAXIMUM SIZE GREATER THAN 2 EXP 17 WORDS?\r
JRST UPDVC2 ;*YES, THEN COMPARE AND SAVE NEGATIVE BLOCK COUNTS\r
- TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED\r
-\r
+ TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED \r
;* 2EXP17 WORDS?\r
TRNE TAC,40000 ;*\r
JRST UPDVC1 ;*YES, GO SAVE NEGATIVE BLOCK COUNT.\r
HRRM TAC,DEVCNT(DEVDAT) ;*STORE NEW MAXIMUM FILES SIZE ONLY IF PREVIOUS\r
;* MAXIMUM EXEEDED.\r
POPJ PDP, ;*\r
+\f;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE.\r
\r
-;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE.\r
\r
WLERA: HLR TAC,DSKCNT(DEVDAT) ;PICK UP BLOCK NUMBER.\r
PUSHJ PDP,SETFRE ;FREE THE BLOCK\r
;SET WRITE-LOCK INDICATION IN A SAT ENTRY.\r
;ENTER WITH A BLOCK NUMBER IN TAC.\r
\r
+\r
SETWL: MOVEI TAC1,SATENT ;*\r
JRST .+2 ;*\r
SETWL1: ADDI TAC1,SENTSZ ;*\r
MOVEI ITEM,WLBIT ;*\r
ORM ITEM,@TAC1 ;*\r
POPJ PDP, ;*\r
-\r
-DSKSR: END\r
-\f\r
-\0\r
+\fDSKSR: END\r