1268 lines
30 KiB
Plaintext
1268 lines
30 KiB
Plaintext
/NOW SEE IF THE SEGMENT BEING SOUGHT IS ONE WHICH FOLLOWS
|
||
/THOSE WHICH ARE PRESENTLY IN THE CORE WINDOW. IF THE
|
||
/SOUGHT BLOCK DOES FOLLOW THE PRESENT ONE, WE CAN LOOK
|
||
/THROUGH THE RETRIEVAL INFORMATION BLOCKS STARTING AT THE ONE
|
||
/NOW IN CORE. OTHERWISE, WE MUST START AT THE VERY BEGINNING
|
||
/OF THE LIST OF FILE RETRIEVAL INFORMATION BLOCKS
|
||
TAD WNSEGC
|
||
SPA SNA
|
||
JMP WND6 /PREVIOUS BLOCK, SO MUST START AT BEGINNING OF STRING
|
||
JMS I WND201 /DIVIDE BY 7
|
||
CIA
|
||
DCA WNDCNT /MOVE FORWARD THIS MANY WINDOWS
|
||
TAD WNDPTR
|
||
WND10, DCA WNDIRP
|
||
TAD I WNDIRP /PICK UP ADDRESS OF NEXT WINDOW
|
||
CFLD /CHANGE TO CURRENT FIELD
|
||
SNA
|
||
JMP WND13 /END OF STRING
|
||
DCA WND11
|
||
TAD WNRETP /POINTER TO UFD RETRIEVAL INFORMATION
|
||
JMS I GE01 /GET ENTRY INTO CORE
|
||
WND11, 0
|
||
ISZ WNDCNT /HAVE WE MOVED AHEAD ENOUGH BLOCKS?
|
||
JMP WND10 /NOT PROPER WINDOW, KEEP LOOKING
|
||
DCA WNDIRP
|
||
WND13, 6202 /CIF FIELD 0
|
||
BLT
|
||
6221 /SOURCE FIELD (ALWAYS 2)
|
||
WNDIRP, 0 /SOURCE
|
||
DATFLD /DESTINATION FIELD
|
||
WNDPTR, 0 /DESTINATION
|
||
-10 /WORD COUNT
|
||
TAD WNDCNT /CORRECT FOR WINDOWS THAT WEREN'T THERE
|
||
JMS WND30 /MULTIPLY BY 7
|
||
TAD WNSEGC /SEGMENT NUMBER OF FIRST IN WINDOW
|
||
DATFLD
|
||
DCA I WNFCBP /FILE CONTROL BLOCK POINTER
|
||
ISZ WNFCBP /POINT AT PROTECTION WORD IN CONTROL BLOCK
|
||
TAD I WNFCBP /GET CURRENT STATUS
|
||
AND P0007 /SAVE ONLY STATUS BITS
|
||
TAD WND11 /ADD IN POINTER TO CURRENT RETRIEVAL WINDOW
|
||
DCA I WNFCBP /AND SAVE
|
||
JMP I .+1 /GO SET #JSIOTC# BEFORE EXITING
|
||
INF6
|
||
|
||
WND6, CFLD /CHANGE TO CURRENT FIELD
|
||
CLA CLL
|
||
TAD WNSEGC /SEGMENT TO GET INTO IN CORE WINDOW
|
||
JMS I WND201 /DIVIDE BY 7
|
||
CMA
|
||
DCA WNDCNT /WINDOW NUMBER TO GET INTO CORE
|
||
ISZ WNENTP
|
||
TAD I WNENTP /UFD ENTRY ADDRESS OF OPEN FILE
|
||
DCA WND5
|
||
TAD WNRETP /RETRIEVAL INFORMATION POINTER
|
||
JMS I GE01 /GET ENTRY INTO CORE
|
||
WND5, 0
|
||
TAD P0007
|
||
JMP WND10
|
||
|
||
/ROUTINE TO MULTIPLY A NUMBER BY 7
|
||
|
||
WNDSCT,
|
||
WND30, 0
|
||
DCA CFH
|
||
TAD CFH
|
||
CLL RAL
|
||
TAD CFH
|
||
CLL RAL
|
||
TAD CFH
|
||
JMP I WND30
|
||
|
||
WNFCBP, 0
|
||
WNENTP, 0
|
||
WNRETP, 0
|
||
WNDCNT, 0
|
||
WNSEGC, 0
|
||
WNDCCT, 7773
|
||
WNCURS, 0
|
||
C0177, 177
|
||
|
||
|
||
IODISP,
|
||
ASD1
|
||
REL1
|
||
REN0
|
||
OPN0
|
||
CLS0
|
||
WND0
|
||
PRT0
|
||
WND0
|
||
CRF0
|
||
EXT0
|
||
RED0
|
||
INF0
|
||
LGI0
|
||
LGO0
|
||
WHO0
|
||
SEGS0
|
||
|
||
*1200
|
||
|
||
/ROUTINE TO CREATE A NEW FILE
|
||
|
||
CRF0, TAD FIOSTK+1
|
||
SNA CLA
|
||
JMP CRF30
|
||
JMS I JBLD0
|
||
JMS I UTS01 /SEARCH THE UFD TABLE
|
||
JMP I DIRBAD /***************DEBUG**************
|
||
JMS I BLDP1 /BUILD A PTR TO RETTBL
|
||
DCA FIOSTK /MAKE A LINKAGE FOR DIRECTORY SEARCH
|
||
JMS I ACC01 /IS IT ACCOUNT 1?
|
||
CMA /YES; MAKE IT A ONE WORD SEARCH
|
||
JMS I DS01 /SEARCH THE DIRECTORY FOR THIS NAME
|
||
FIOSTK /POINTER TO SEARCH PARAMETERS
|
||
JMP CRF2 /COULD NOT FIND THIS NAME, CONTINUE
|
||
DCA CRBUFP /FOUND A FILE OF THIS NAME IN UFD. PTR INTO CRBUFP
|
||
JMS I ACC01 /SEE IF THIS IS ACCOUNT 1
|
||
JMP CRF30 /CAN'T DELETE UFD'S AS THOUGH THEY ARE FILES
|
||
TAD I ZDS1 /POINTER TO "DS1"=ADDR WITHIN UFD WHERE THIS FILE NAME'S BLOCK IS
|
||
DCA CRF11 /UFD ADDRESS OF DIRECTORY ENTRY
|
||
TAD FIOSTK
|
||
JMS I CRENS /SEARCH ENT TABLE FOR ACCESSES TO THIS FILE
|
||
CRF11, 0 /UFD ADDR OF DIRECTORY ENTRY
|
||
JMP CRF10 /ERROR, FILE IS OPEN
|
||
/COMES HERE IF A FILE BY THIS NAME ALREADY EXISTS, BUT NO ONE HAS OPENED IT
|
||
TAD CRF11
|
||
DCA I CRGD11 /GD1
|
||
TAD FIOSTK
|
||
DCA GDRETP
|
||
TAD CRBUFP /PTR TO WHERE IN CORE BUFFER THE UFD BLOCK FOR THIS FILE IS
|
||
JMS I SAVCRA /DELETE THE EXISTING FILE OF THIS NAME
|
||
JMS I DS01 /SEARCH THE UFD FOR AN EXISTING FILE OF THE SAME NAME
|
||
FIOSTK
|
||
SKP /NONE THERE, SO OKAY TO CREATE ONE
|
||
JMP I DIRBAD /**************DEBUG ONLY**********
|
||
/NOW ALL SET TO CREATE THE FILE. TO DO THIS, WE NEED TWO BLOCKS OF
|
||
/THE UFD -- ONE FOR A NAME BLOCK AND THE SECOND FOR A FILE RETRIEVAL INFORMATION
|
||
/BLOCK. THESE BLOCKS ARE OBTAINED BY TWO CALLS TO DE0. AFTER THE FIRST,
|
||
/A DUMMY 7777 IS PUT IN THE FOUND BLOCK TO PREVENT THE SECOND CALL
|
||
/TO DE0 FROM FINDING THE SAME BLOCK. IF BOTH BLOCKS CANNOT BE OBTAINED,
|
||
/THE CREATE CANNOT BE EXECUTED.
|
||
CRF2, DCA CRLINK /ADDR OF LINK WORD OF LAST ENTRY IN UFD CHAIN
|
||
ISZ UTPRNU /POINTS AT LOGIN DISK QUOTA
|
||
TAD I UTPRNU /-SEGMENTS ALLOWED WHILE LOGGED IN
|
||
TAD SEGLIM /PLUS NUMBER OF SEGMENTS FOUND WHILE SEARCHING HIS/HER DIRECTORY
|
||
ISZ UTPRNU /POINT AT HOLD REG FOR SEGMENT COUNT
|
||
SMA CLA /IS [S]HE ALLOWED ONE MORE?
|
||
JMP CRF1 /NO; TELL HIM/HER DIRECTORY FULL
|
||
TAD FIOSTK /POINTER TO RETRIEVAL INFORMATION
|
||
JMS I DE01 /FIND AN EMPTY DIRECTORY ENTRY
|
||
JMP CRF1 /ERROR, NO AVAILABLE ENTRIES
|
||
DCA CRF4 /ADDRESS OF THIS ENTRY
|
||
JMS CRF40 /GET THIS ENTRY INTO CORE
|
||
CLA CMA
|
||
DCA I CRBUFP /SIMULATE A USED ENTRY
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
TAD FIOSTK
|
||
JMS I DE01 /FIND ANOTHER ENTRY
|
||
JMP CRF51 /ERROR
|
||
DCA CRF3
|
||
TAD FIOSTK
|
||
JMS I GE01 /MAKE SURE SECOND ENTRY IS IN CORE
|
||
CRF3, 0
|
||
DCA INDEX
|
||
JMS I SATL1 /FIND A FREE SEGMENT IN THE SAT
|
||
SNA
|
||
JMP CRF20 /COULD NOT FIND A FREE SEGMENT
|
||
/AT THIS POINT, WE HAVE A DISC SEGMENT AND TWO BLOCKS FROM THE
|
||
/UFD. THIS IS ALL THAT IS NEEDED, SO GO AHEAD AND EXECUTE THE CREATE
|
||
DCA CRF11 /SAVE SEGMENT NUMBER
|
||
TAD CRF11
|
||
DCA I INDEX /PUT IT IN THE FIRST BLOCK OF RETRIEVAL
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
JMS CRF40 /GET FIRST FOUND ENTRY INTO CORE
|
||
TAD FIOSTK+1 /TRANSFER FILE NAME INTO DIRECTORY ENTRY
|
||
DCA I CRBUFP
|
||
TAD CRBUFP /MOVE POINTER TO AUTO-INDEX
|
||
DCA INDEX
|
||
TAD FIOSTK+2
|
||
DCA I INDEX
|
||
TAD FIOSTK+3
|
||
DCA I INDEX
|
||
DCA I INDEX /ZERO LINK (THIS IS THE LAST FILE)
|
||
TAD CRPROT /PICK UP PROTECTION BITS
|
||
DCA I INDEX /STORE INITIAL PROTECTION CODE
|
||
JMS I CRFUFA /GO SEE IF WE'RE CREATING A NEW ACCOUNT
|
||
CDF /CDF FIELD 0
|
||
TAD I DATE /GLOBAL TO DATE
|
||
CFLD /CHANGE TO CURRENT FIELD
|
||
CRFUFR, DCA I INDEX /STORE DATE OF CREATION
|
||
TAD CRF3 /POINTER TO RETRIEVAL
|
||
DCA I INDEX /SET UP PTR TO RETRIEVAL INFORMATION
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
TAD FIOSTK /GET LAST ENTRY ON STRING INTO CORE
|
||
JMS I GE01
|
||
CRLINK, 0
|
||
DCA CRBUFP /PTR TO WHERE THE PRESENT LAST ENTRY IS
|
||
TAD CRF4
|
||
DCA I CRBUFP
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
JMS I ACC01 /IS [S]HE CREATING A NEW UFD?
|
||
JMP CRFUFZ /YES
|
||
IAC
|
||
CRFSEG, TAD SEGLIM /STORE SEGMENT COUNT IN THE UFDTBL
|
||
DCA I UTPRNU
|
||
JMP I .+1 /REMEMBER TO WRITE OUT THE TABLES
|
||
TABOUT
|
||
|
||
CRFUFZ, TAD CRF11
|
||
JMS I SCL01 /WRITE OUT DIRECTORY BLOCK & CLEAR NEW UFD BLBOCK
|
||
JMP I FIEXIT /DON'T MODIFY THE MFD'S ENTRY IN THE UFDTBL
|
||
CRF20, STL RTR /DISK FULL
|
||
STL RTR
|
||
DCA FIUSAC /SAVE PARTIAL ERROR CODE
|
||
CRF51, JMS CRF40 /GET FIRST ENTRY BACK AGAIN
|
||
DCA I CRBUFP /ZERO OUT THE -1 WE PUT THERE
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
CRF1, CLA CLL CML RTR
|
||
CLL CML RAR
|
||
TAD FIUSAC /GET PARTIAL ERROR CODE
|
||
DCA FIUSAC /SAVE ERROR CODE; EITHER DISK FULL OR DIRECTORY FULL
|
||
JMP CRFSEG /GO SAVE SEGMENT COUNT ANYWAY
|
||
CRF30, CLA CLL CML RTR
|
||
CRF10, TAD C4400
|
||
DCA FIUSAC /SAVE ERROR CODE; EITHER FILE IN USE OR BAD FILE NAME
|
||
JMP I FIEXIT
|
||
|
||
CRF40, 0
|
||
TAD FIOSTK
|
||
JMS I GE01
|
||
CRF4, 0
|
||
DCA CRBUFP
|
||
JMP I CRF40
|
||
|
||
|
||
CRPROT, 12
|
||
CRGD11, GD1
|
||
CRENS, ENS0
|
||
SAVCRA, SAVCRE
|
||
SCL01, SCL0
|
||
CRFUFA, CRFUFD
|
||
CRBUFP, 0
|
||
/ROUTINE TO EXTEND A FILE
|
||
|
||
*1400
|
||
|
||
EXT0, JMS EXT1 /MAKE SURE IT'S OKAY TO EXTEND THIS FILE
|
||
TAD P0007 /...EXT1 RETURNS WITH PTR TO NAME BLOCK FOR THIS FILE
|
||
DCA EXBUFP /SAVE POINTER TO RETRIEVAL CHAIN
|
||
JMS I EXTQUA /CHECK THE DISK QUOTA FOR THIS USER
|
||
/NOW TRACE THROUGH TO LAST RETRIEVAL INFORMATION BLOCK FOR THIS FILE
|
||
EXT4, TAD I EXBUFP
|
||
SNA /END OF CHAIN?
|
||
JMP EXT3 /YES
|
||
DCA EXWNDP /WINDOW POINTER
|
||
TAD EXWNDP
|
||
JMS EXGE0 /GET WINDOW INTO CORE
|
||
DCA EXBUFP /SAVE POINTER TO NEXT RETRIEVAL WINDOW
|
||
JMP EXT4 /KEEP LOOKING FOR END
|
||
|
||
EXT3, TAD C7771
|
||
DCA EXT1 /7 SEGS PER WINDOW
|
||
EXT5, ISZ EXBUFP
|
||
TAD I EXBUFP /PICK UP ENTRY IN WINDOW
|
||
SNA CLA /IS IT THE FIRST FREE?
|
||
JMP EXT7 /YES, FIND A SEGMENT
|
||
ISZ EXT1 /END OF WINDOW?
|
||
JMP EXT5 /NO, KEEP LOOKING
|
||
EXT9, TAD GDRETP /RETRIEVAL POINTER
|
||
JMS I DE01 /FIND AN EMPTY ENTRY
|
||
JMP EXT20 /PARTIALLY SATISFIED
|
||
DCA EXNFRE /FREE SEGMENT ADDRESS
|
||
TAD EXWNDP /CURRENT WINDOW POINTER
|
||
JMS EXGE0 /GET IT INTO CORE
|
||
DCA EXBUFP
|
||
JMS I SATL1 /GET A FREE DISK SEGMENT FOR THE NEXT WINDOW
|
||
SNA
|
||
JMP EXT20 /THERE ARE NONE; AVOID LINKING TO NEXT WINDOW
|
||
DCA EXPROP /SAVE UNTIL WINDOWS ARE LINKED UP
|
||
TAD EXNFRE /NEXT FREE WINDOW
|
||
DCA I DXBUFP /LINK IT ONTO CHAIN
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
TAD EXNFRE
|
||
DCA EXWNDP /UPDATE CURRENT WINDOW POINTER
|
||
TAD EXWNDP
|
||
JMS EXGE0 /GET NEW WINDOW INTO CORE
|
||
IAC
|
||
DCA EXBUFP /POINTER TO FIRST ENTRY OF NEW WINDOW
|
||
TAD C7771 /ALLOW 7 ENTRIES IN NEW WINDOW
|
||
DCA EXT1
|
||
TAD EXPROP /GET DISK SEGMENT
|
||
EXT12, DCA I EXBUFP /STORE SEGMENT IN RETRIEVAL WINDOW
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
ISZ I EXQ1 /INCREMENT TOTAL COUNT IN UFDTBL
|
||
ISZ EXBUFP /INCR WINDOW POINTER
|
||
ISZ EXSEGC /HAVE WE EXTENDED FAR ENOUGH?
|
||
JMP EXT6 /NO
|
||
EXT20, TAD EXSEGC
|
||
CIA
|
||
DCA FIUSAC /NUMBER OF SEGMENTS WE FAILED TO FIND
|
||
TAD FIOSTK+1 /REQUEST IS SATISFIED
|
||
JMS I GD01 /GET DIRECTORY ENTRY INTO CORE
|
||
TAD C0005
|
||
DCA EXBUFP /POINTER TO SEGMENT COUNT
|
||
TAD FIOSTK+2 /NUMBER OF WORDS TO BE ADDED
|
||
TAD I EXBUFP /NUMBER ALREADY IN FILE
|
||
TAD EXSEGC /MINUS NUMBER WE FAILED TO GET
|
||
DCA I EXBUFP /UPDATE ENTRY
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
JMP I .+1 /EXIT AND WRITE OUT TABLES
|
||
TABOUT
|
||
|
||
EXT6, ISZ EXT1 /END OF CURRENT WINDOW?
|
||
SKP /NOT YET
|
||
JMP EXT9 /YES, TRY LINKING TO ANOTHER
|
||
EXT7, JMS I SATL1 /GET A FREE SEGMENT FROM SAT
|
||
SNA
|
||
JMP EXT20 /PARTIALLY SATISFIED
|
||
JMP EXT12 /SAVE NEW SEGMENT
|
||
EXGE0, 0 /GET WORD OF THIS UFD INTO CORE
|
||
DCA EXGE1
|
||
TAD GDRETP
|
||
JMS I GE01
|
||
EXGE1, 0
|
||
JMP I EXGE0
|
||
|
||
EXT30, TAD C4400
|
||
JMP EXT10+2
|
||
|
||
EXT10, CLL CML RAR
|
||
CLL CML RAR
|
||
DCA FIUSAC
|
||
JMP I FIEXIT
|
||
|
||
EXTQUA, EXTQU0
|
||
EXFCBP, 0
|
||
EXPROP, 0
|
||
EXBUFP, 0
|
||
EXWNDP, 0
|
||
EXSEGC, 0
|
||
EXNFRE, 0
|
||
/ROUTINE TO SET UP TO ALTER A FILE (BY EITHER EXTENDING IT OR
|
||
/REDUCING IT). CHECK PROTECTION CODE TO SEE IF THIS IS ALLOWED. MAKE SURE
|
||
/NO ONE ELSE HAS THIS FILE OPEN. JMP TO ERROR EXIT ON EITHER OF THESE CON-
|
||
/DITIONS. IF ALL IS OKAY. RETURN WITH PTR TO UFD NAME BLOCK ENTRY
|
||
EXT1, 0
|
||
JMS I IFN01 /MASK OFF BITS 0-9 OF FIOSTK+1
|
||
TAD FIOSTK+1 /INTERNAL FILE NUMBER
|
||
JMS I LNK01 /GET PTR TO APPROPRIATE FILE CONTROL BLOCK
|
||
SNA
|
||
JMP EXT10+1 /ERROR, FILE NOT OPEN
|
||
DCA EXFCBP /FILE CONTROL BLOCK POINTER
|
||
JMS I ACC01 /AS [S]HE UNDER ACCOUNT1?
|
||
JMP EXT2 /YES; SKIP PROTECTION CHECK
|
||
TAD FILPRP /GLOBAL TO "FILPRO"
|
||
TAD EXFCBP
|
||
DCA EXPROP /POINTER TO PROTECTION BIT
|
||
DATFLD /CDF FIELD 1
|
||
TAD I EXPROP /PICK UP PROTECTION BIT
|
||
CFLD /CHANGE TO CURRENT FIELD
|
||
AND P0004 /STRAIN OFF ANY EXTRANEOUS BITS
|
||
SZA CLA
|
||
JMP EXT10 /WRITE PROTECTED
|
||
EXT2, TAD FIOSTK+1 /INTERNAL FILE NUMBER
|
||
JMS I GD01 /GET DIRECTORY ENTRY INTO CORE
|
||
DCA REL6 /POINTS TO WHERE UFD NAME BLOCK IS IN CORE
|
||
JMS I ENR01 /IS THIS THE ONLY USER WHO HAS THIS FILE OPEN?
|
||
JMP EXT30 /NO, SO ABORT AND RETURN ERROR CODE
|
||
TAD FIOSTK+2 /ARE ANY SEGMENTS INVOLVED?
|
||
SNA
|
||
JMP I FIEXIT /NO, NOTHING TO DO THEN
|
||
CIA
|
||
DCA EXSEGC /SAVE NEGATIVE COUNT
|
||
DATFLD
|
||
TAD I EXFCBP /GET POINTER TO CURRENT WINDOW
|
||
DCA EXPROP
|
||
IAC
|
||
DCA I EXPROP /INVALIDATE THE WINDOW
|
||
CFLD
|
||
TAD REL6
|
||
JMP I EXT1
|
||
/ROUTINE TO REDUCE A FILE
|
||
|
||
*1600
|
||
|
||
RED0, JMS I EXT11 /MAKE SURE IT'S OKAY TO REDUCE THIS FILE
|
||
DCA REBUFP /...IF OKAY, RETURNS WITH PTR TO FILE NAME BLOCK
|
||
JMS I ACC01 /IS [S]HE UNDER ACCOUNT 1?
|
||
JMS I REDUFD /SEE IF [S]HE'S REDUCING A UFD
|
||
TAD REBUFP
|
||
TAD C0005
|
||
DCA RELINK /NOW POINTS TO NUMBER OF SEGMENTS PRESENTLY IN FILE
|
||
TAD FIOSTK+2 /SEGMENTS TO BE REMOVED
|
||
SPA /IS IT NEGATIVE?
|
||
JMP RED5 /YES; DELETE THE ENTIRE FILE
|
||
CIA
|
||
TAD I RELINK
|
||
SMA SZA /DELETE THE FILE?
|
||
JMP RED6 /NO, REDUCE IT
|
||
RED5, CLA CLL /YES, WIPE IT OUT AND CLOSE
|
||
TAD REBUFP
|
||
JMS RED1 /WIPE OUT THE FILE NAME BLOCK FROM THE UFD
|
||
TAD FIOSTK+1 /INTERNAL FILE NUMBER
|
||
JMS I CL01 /CLOSE THIS FILE SINCE IT NO LONGER EXISTS
|
||
JMP I FIEXIT
|
||
RED6, DCA I RELINK /UPDATE SEGMENT COUNT
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
TAD I RELINK
|
||
DCA CFH
|
||
ISZ RELINK
|
||
ISZ RELINK
|
||
TAD I RELINK
|
||
DCA RELINK /POINTER TO FIRST WINDOW ON CHAIN
|
||
TAD CFH
|
||
JMS RED40 /WIPE OUT REST OF FILE
|
||
JMP I FIEXIT
|
||
|
||
REDGD1, GD1
|
||
|
||
RED40, 0
|
||
JMS I WND201 /DIVIDE BY 7
|
||
CMA
|
||
DCA REWNDC /NUMBER OF WHOLE WINDOWS WHICH ARE TO REMAIN
|
||
TAD RELINK /GET POINTER TO FIRST RETRIEVAL WINDOW
|
||
JMS I RED302 /ROUTINE TO DO ACTUAL REDUCTION
|
||
JMP I RED40
|
||
|
||
EXT11, EXT1
|
||
LINK01, LINK0
|
||
RED302, RED30
|
||
REDUFD, REDUF0
|
||
REBUFP, 0
|
||
/ROUTINE TO DELETE A FILE
|
||
|
||
UFBUFP,
|
||
RED1, 0
|
||
DCA REBUFP /PTR TO THE UFD ENTRY FOR THE FILE
|
||
TAD REBUFP
|
||
TAD P0003
|
||
DCA RELINK /LINK TO NEXT FILE NAME IN THIS UFD
|
||
TAD I RELINK
|
||
DCA RED3
|
||
TAD I REDGD1 /UFD ADDR OF THIS DIRECTORY ENTRY
|
||
DCA RED4
|
||
TAD REBUFP
|
||
TAD P0007
|
||
DCA RELINK /NOW POINTS TO A RETRIEVAL BLOCK FOR THIS FILE
|
||
TAD I RELINK
|
||
DCA RELINK
|
||
RED2, DCA I REBUFP /CLEAR OUT FIRST WORD OF ENTRY
|
||
ISZ REBUFP
|
||
TAD REBUFP
|
||
AND P0007
|
||
SZA CLA /END OF CURRENT WINDOW?
|
||
JMP RED2 /NO, KEEP CLEARING
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
JMS I LINK01
|
||
RED4, 0 /UFD ADDR OF THIS DIRECTORY ENTRY
|
||
RED3, 0 /UFD ADDR OF DIRECTORY ENTRY WHICH IS NEXT IN THE CHAIN
|
||
JMS RED40 /GO WIPE OUT ACTUAL FILE
|
||
JMP I RED1
|
||
/ROUTINE TO EXTEND A UFD
|
||
|
||
/CALLING SEQUENCE:
|
||
/ TAD (RETRIEVAL POINTER)
|
||
/ JMS UFD0
|
||
/ ERROR RETURN
|
||
/ NORMAL RETURN
|
||
|
||
UFD0, 0
|
||
DCA UFRETP /RETRIEVAL POINTER
|
||
TAD C7771
|
||
DCA CFH /COUNTER FOR OVERSIZE UFD
|
||
/NOW SCAN DOWN THE UFD'S FILE RETRIEVAL BLOCK
|
||
UFD2, TAD I UFRETP
|
||
SNA CLA
|
||
JMP UFD1 /FOUND THE END OF THE LIST OF SEGMENT NUMBERS
|
||
ISZ UFRETP /POINT TO NEXT SEGMENT NUMBER
|
||
ISZ CFH /UFD ALREADY MAXIMUM SIZE?
|
||
JMP UFD2 /NO, LOOK AT NEXT WORD
|
||
JMP I UFD0 /YES, ERROR RETURN
|
||
|
||
/COMES HERE WHEN IT HAS FOUND THE END OF THE RETRIEVAL BLOCK'S LIST OF SEGMENTS
|
||
UFD1, JMS I SATL1 /GET A FREE SEGMENT FROM SAT
|
||
SNA
|
||
JMP I UFD0 /NO MORE FREE SEGMENTS
|
||
DCA I UFRETP /ADD TO RETRIEVAL INFORMATION
|
||
TAD UFRETP
|
||
JMS I ENS31 /CONVERT ABS RETTBL PTR TO A RELATIVE ENTRY NUMBER
|
||
CLL RTL /...TIMES FOUR
|
||
TAD UFDTBL /...PLUS BASE ADDR OF UFDTBL
|
||
DCA CFH /POINTER TO PROJ,PROG NUMBER OF FILE OWNER
|
||
TAD I CFH /PICK UP PROJ,PROG NUMBER
|
||
JMS I UFO61 /GO GET THE RETRIEVAL INFO FOR THIS GUY'S UFD INTO CORE
|
||
JMP I DIRBAD /*************DEBUG ONLY***********
|
||
DCA UFBUFP /PTR TO RETRIEVAL INFORMATION
|
||
ISZ UFBUFP
|
||
TAD I UFBUFP
|
||
SZA CLA /SCAN TO END OF LIST OF SEGMENT NUMBERS
|
||
JMP .-3
|
||
TAD I UFRETP /GET NUMBER OF NEW SEGMENT
|
||
DCA I UFBUFP /PUT IT IN RETRIEVAL BLOCK LIST
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
STA
|
||
DCA TABSTA /SET TABLE STATUS TO CHANGE
|
||
TAD I UFRETP /NEW SEGMENT NUMBER
|
||
JMS SCL0 /ZERO OUT THE NEW SEGMENT
|
||
ISZ UFD0 /SET UP NORMAL RETURN
|
||
JMP I UFD0
|
||
|
||
ENS31, ENS3
|
||
UFO61, UFO6
|
||
/ROUTINE TO ZERO OUT A DISC SEGMENT
|
||
/IT ZEROES THE CORE BUFFER THEN EXECUTES A CALL
|
||
/TO RD301 (THE ACTUAL READ NEVER HAPPENS).
|
||
/THUS, THE SYSTEM THINKS THAT THE SEGMENT BEING
|
||
/CLEARED IS ACTUALLY IN CORE. IT WILL BE WRITTEN OUT LATER.
|
||
SCL0, 0
|
||
DCA UFRETP /SEGMENT NUMBER
|
||
JMS I WRT1 /MAKE SURE THE BUFFER IS EMPTY
|
||
TAD P7400
|
||
DCA CFH /SET UP COUNTER FOR CLEARING SEGMENT
|
||
TAD BUFFER
|
||
DCA UFBUFP
|
||
UFD3, DCA I UFBUFP /START TO CLEAR BUFFER AREA
|
||
ISZ UFBUFP
|
||
ISZ CFH
|
||
JMP UFD3
|
||
STA
|
||
TAD UFRETP /SEGMENT NUMBER
|
||
JMS I SCL11 /NOW FAKE A READ
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
JMP I SCL0
|
||
RELINK,
|
||
UFRETP, 0
|
||
SCL11, SCL1
|
||
P7400, 7400
|
||
|
||
/ROUTINE TO PROVIDE FILE INFORMATION
|
||
|
||
*2000
|
||
|
||
INF0, JMS I IFN01 /GET INTERNAL FILE NUMBER IN FIOSTK+1
|
||
TAD FIOSTK+1 /INTERNAL FILE NUMBER
|
||
JMS I EBLD0
|
||
DCA CFH /RELATIVE POINTER TO UFD RETRIEVAL INFORMATION
|
||
TAD I CFH /GET PTR TO RETTBL OUT OF ENTTBL
|
||
SNA /DOES IT EXIST?
|
||
JMP INF1 /NO, SO FILE IS NOT OPEN
|
||
CIA
|
||
CLL CMA RTL /SUBTRACT ONE; MULTIPLY BY FOUR
|
||
TAD UFDTBL
|
||
DCA INUFDP /POINTER TO USER PROJ,PROG NUMBER
|
||
TAD I INUFDP
|
||
DCA FIOSTK+2 /SET UP LINKAGE FOR GD0
|
||
TAD FIOSTK+1 /INTERNAL FILE NUMBER
|
||
JMS I GD01 /GET DIRECTORY ENTRY FOR THIS FILE INTO CORE
|
||
CIA
|
||
CMA
|
||
DCA INDEX /SET UP INDEX REGISTER FOR TRANSFER
|
||
TAD I INDEX /OF NAME AND OTHER DIRECTORY INFORMATION
|
||
DCA FIOSTK+3
|
||
TAD I INDEX
|
||
DCA FIOSTK+4
|
||
TAD I INDEX
|
||
DCA FIOSTK+5
|
||
ISZ INDEX
|
||
TAD I INDEX
|
||
DCA FIOSTK+6
|
||
TAD I INDEX
|
||
DCA FIOSTK+7
|
||
INF5, DATFLD
|
||
TAD I FIOPTR /PICK UP JOBLNK WORD FROM JOB STATUS BLOCK
|
||
DCA INF4 /DESTINATION IN FIELD 0
|
||
CFLD /CHANGE TO PRESENT FIELD
|
||
6202 /CIF FIELD 0
|
||
BLT /MOVE FIOSTK INFORMATION INTO IOT PARAMETER BLOCK
|
||
6221 /SOURCE FIELD
|
||
FIOSTK /SOURCE
|
||
DATFLD /DESTINATION FIELD
|
||
INF4, 0 /DESTINATION
|
||
-10 /WORD COUNT
|
||
INF6, CDF
|
||
TAD I OURFLD
|
||
AND C0200
|
||
SZA CLA
|
||
JMP I FIEXIT /WE WERE CALLED BY SI - DON'T SET JSIOTC OR WE'LL GAG
|
||
DATFLD
|
||
TAD I JOBDAT /GLOBAL TO "JOBDAT"
|
||
IAC
|
||
DCA INSPTR /NOW POINTS TO STATUS WORD
|
||
TAD INIOTC /JSIOTC
|
||
CMA
|
||
AND I INSPTR /SET JSIOTC TO INDICATE THAT FIP
|
||
TAD INIOTC /...IS RETURNING INFORMATION IN THE IOT PAR. BLOCK
|
||
DCA I INSPTR
|
||
JMP I FIEXIT /EXIT
|
||
|
||
INF1, DCA FIOSTK+2
|
||
JMP INF5
|
||
|
||
INUFDP, 0
|
||
INSPTR, 0
|
||
OURFLD, CORTBL+1
|
||
INIOTC, 40
|
||
|
||
|
||
/ROUTINE TO SKIP IF CALLING USER IS NOT SYSTEM MANAGER
|
||
ACT01, 0
|
||
JMS I JBLD0 /GET PPN
|
||
CLL RAR
|
||
SZA CLA /IS IN ACCOUNT 1?
|
||
ISZ ACT01 /NO; SKIP ON RETURN
|
||
JMP I ACT01
|
||
/LOGIN ROUTINE
|
||
|
||
LGI0, TAD RETTBL /MFD RETRIEVAL IS IN ENTRY 0
|
||
DCA FIOSTK+1 /SET UP PTR TO RETRIEVAL INFORMATION CONTAINED IN RETTBL
|
||
TAD FIOSTK+2 /ACCOUNT #0
|
||
SNA CLA
|
||
JMP LGI20 /UNAUTHORIZED ACCOUNT
|
||
JMS I DS01 /SEARCH THE MFD (AC=0 TO INDICATE 3-WORD SEARCH)
|
||
FIOSTK+1 /ADDR OF PTR TO RETRIEVAL INFORMATION OF DIRECTORY TO BE SEARCHED
|
||
JMP LGI20 /COULD NOT FIND ENTRY IN MFD
|
||
DCA LGMFDP /OK TO LOG IN - POINTER TO DIRECTORY ENTRY IS IN ACC.
|
||
TAD FIOSTK+2 /PROJ,PROG NUMBER
|
||
JMS I UTS01 /SEARCH THE UFD TABLE
|
||
SKP /THIS PROJ,PROG NUMBER NOT THERE
|
||
JMP LGI1 /UFD ALREADY ON TABLE - RETURNS WITH ITS RELATIVE POSITION IN TABLE
|
||
TAD FIOSTK+2 /PROJ,PROG NUMBER
|
||
JMS I UFO01 /OPEN THE UFD - I.E. MAKE AN ENTRY IN UFDTBL, RETTBL
|
||
JMP LGI20 /COULD NOT FIND ROOM ON TABLE
|
||
|
||
LGI1, CLA CMA
|
||
TAD I UTPRNU
|
||
DCA I UTPRNU /ACCOUNT FOR NEW ENTRY IN ACCESS COUNT
|
||
|
||
/COMES HERE WHEN THE UFDTBL & RETTBL HAVE BEEN UPDATED
|
||
/TO INCLUDE THIS LOGIN
|
||
|
||
FGETJT
|
||
JOBSTS
|
||
DCA LGI3 /ADDRESS OF STR0
|
||
TAD FIOSTK+2 /ACCOUNT NUMBER?
|
||
AND C7774 /IS IT LESS THAN 4?
|
||
SNA CLA
|
||
TAD C0200 /YES - SET ACCOUNT PRIVILEGE BIT
|
||
DATFLD
|
||
DCA I LGI3 /AND SAVE IT
|
||
JMS I JBLD0
|
||
CLA
|
||
TAD FIOSTK+2 /PROJ,PROG NUMBER
|
||
JMP I .+1
|
||
RESET
|
||
|
||
LGI20, CFLD
|
||
CLA CMA /COULD NOT LOGIN - RETURN WITH 7777
|
||
DCA FIUSAC /INDICATE INABILITY TO LOG IN
|
||
JMP I FIEXIT
|
||
|
||
GTB1,
|
||
LGMFDP, 0
|
||
|
||
/DIRECTORY SEARCH
|
||
|
||
/CALLING SEQUENCE:
|
||
/ CLA OR CIA (3 OR 1 WORD SEARCH)
|
||
/ JMS DS0
|
||
/ POINTER-----------------RETRIEVAL STACK POINTER
|
||
/ RETURN IF NOT FOUND NA
|
||
/ GOOD RETURN ME
|
||
/ (POINTER IN AC) XX
|
||
|
||
*2200
|
||
DS0, 0
|
||
SNA CLA /SKIP IF ONE WORD SEARCH
|
||
CLL CML RTL /THREE WORD COMPARE
|
||
CMA
|
||
DCA DSWDNR /MINUS NUMBER OF WORDS TO COMPARE
|
||
TAD I DS0 /PICK UP POINTER TO RETRIEVAL INFORMATION
|
||
DCA DSRETS
|
||
ISZ DS0
|
||
TAD DSM160 /SET UP COUNTER ON # ENTRIES CHECKED
|
||
DCA DSKCNT
|
||
TAD I DSRETS /GET RETRIEVAL POINTER
|
||
CIA
|
||
TAD RETTBL
|
||
SNA CLA
|
||
STA /INHIBIT SEGMENT COUNTING OF THE MFD
|
||
DCA SEGLIM /ZERO SEGMENT COUNTER
|
||
DS2, DCA DS1
|
||
TAD I DSRETS /GET PTR TO RETRIEVAL INFORMATION BLOCK
|
||
JMS I GE01 /GET THE ENTRY INTO CORE
|
||
DS1, 0 /WORD NUMBER -- I.E. THE ADDR WITHIN THE DIRECTORY
|
||
SNA
|
||
JMP BADDIR /FOULED-UP DIRECTORY!
|
||
DCA DSENTP /STORE POINTER TO ENTRY
|
||
TAD C0005
|
||
TAD DSENTP
|
||
DCA DSCNTR /POINTS TO SEGMENT COUNT
|
||
TAD SEGLIM /THE TOTAL FOR THIS UFD
|
||
SPA /IS IT A UFD?
|
||
JMP DS4 /NO; SEE IF WE SHOULD RESET THE MFD
|
||
TAD I DSCNTR /ADD THIS FILE'S COUNT
|
||
DCA SEGLIM /SAVE NEW TOTAL
|
||
DS3, TAD DSWDNR /NUMBER OF WORDS TO COMPARE
|
||
DCA DSCNTR
|
||
TAD DSRETS
|
||
DCA DSOBJT /POINTER TO OBJECT NAME
|
||
TAD DSENTP
|
||
DCA DSENT /POINTER TO NAME IN BUFFER
|
||
DSCOM2, TAD I DSENT
|
||
ISZ DSENT
|
||
CIA
|
||
ISZ DSOBJT
|
||
TAD I DSOBJT
|
||
SZA CLA
|
||
JMP DSCOM1 /NOT FOUND
|
||
ISZ DSCNTR
|
||
JMP DSCOM2 /LOOK AT NEXT WORD OF NAME
|
||
ISZ DS0 /FOUND THE ENTRY
|
||
TAD DSENTP /PICK UP POINTER
|
||
JMP I DS0 /RETURN
|
||
/THIS ENTRY IS NOT THE ONE WE'RE LOOKING FOR, SO WE MUST
|
||
/GO LOOK AT THE NEXT ONE. IN THIS ENTRY IS A RELATIVE PTR TO THE NEXT ONE
|
||
/GET IT.
|
||
DSCOM1, ISZ DSKCNT /BAD DIRECTORY?
|
||
JMP DSCOM3 /IT ISN'T BAD AT THIS POINT
|
||
BADDIR, DCA RESFLG /CLEAR AC AND RESET FLAG
|
||
TAD P5400 /YES, INDICATE BAD DIRECTORY AND GET OUT
|
||
DCA FIUSAC /ONCE AGAIN, GOODNESS TRIUMPHS OVER EVIL
|
||
JMP RETURN /GO CLEAN UP BEFORE ABORTING
|
||
DSCOM3, TAD P0003 /CREATE POINTER TO NEXT ENTRY
|
||
TAD DSENTP
|
||
DCA DSCNTR
|
||
TAD I DSCNTR
|
||
SZA /IS THIS THE END OF THE DIRECTORY CHAIN?
|
||
JMP DS2 /NO, SO CONTINUE SEARCH
|
||
TAD P0003
|
||
TAD DS1
|
||
JMP I DS0
|
||
DS4, TAD RESFLG /SHOULD WE RESET?
|
||
SZA CLA
|
||
JMP DS3 /NO
|
||
DCA I DSCNTR /CLEAR CPU TIME ACCUMULATOR
|
||
ISZ DSCNTR
|
||
DCA I DSCNTR /CLEAR DEVICE TIME ACCUMULATOR
|
||
DCA BUFMOD /REMEMBER TO WRITE IT BACK
|
||
JMP DS3
|
||
DSWDNR, 0
|
||
ENRETP,
|
||
DSRETS, 0
|
||
ENADDR,
|
||
DSENTP, 0
|
||
DSOBJT, 0
|
||
DSENT, 0
|
||
DSM160, -161 /-MAXIMUM # FILES USER CAN OWN (+2)
|
||
/RETURN A BLOCK OF FREE CORE
|
||
RESFLG,
|
||
RETBKS, 0
|
||
CFLD
|
||
CIF
|
||
RETBLK
|
||
JMP I RETBKS
|
||
/RETURN A LINKED LIST OF FREE BLOCKS
|
||
ENTPTR,
|
||
DSKCNT,
|
||
RETBLS, 0
|
||
SNA
|
||
JMP I RETBLS
|
||
JMS RETBKS
|
||
JMP .-3
|
||
/SEARCH ENTTBL FOR OPENINGS TO FILE
|
||
/CALLING SEQUENCE:
|
||
/ TAD (RETRIEVAL POINTER)
|
||
/ JMS ENS0
|
||
/ UFD ADDRESS OF DIRECTORY ENTRY
|
||
/ RETURN - FOUND AN ACCESS
|
||
/ RETURN - FOUND NO ACCESS
|
||
|
||
DSCNTR,
|
||
ENS0, 0
|
||
JMS I ENS30
|
||
DCA ENRETP /RELATIVE POINTER
|
||
TAD I ENS0 /GET FILE DIRECTORY ADDRESS
|
||
CIA
|
||
DCA ENADDR
|
||
ISZ ENS0 /SKIP PAST ARG
|
||
TAD ENTTBL
|
||
DCA ENTPTR
|
||
ENS2, TAD ENRETP
|
||
CMA
|
||
TAD I ENTPTR
|
||
ISZ ENTPTR
|
||
SZA CLA
|
||
JMP ENS1 /DIFFERENT UFD ACCESS
|
||
TAD I ENTPTR /SAME UFD, SAME FILE?
|
||
TAD ENADDR
|
||
SZA CLA
|
||
JMP ENS1 /DIFFERENT FILE
|
||
TAD FIOSTK /WHICH IOT BROUGHT US HERE?
|
||
TAD ENSCRF /IF IT'S "CRF" ONE MATCH IS ENOUGH
|
||
SNA CLA
|
||
JMP I ENS0 /IT WAS; GET OUT
|
||
TAD FIOSTK+1 /FOUND A SIMILAR ENTRY
|
||
JMS I EBLD0 /SEE IF WE FOUND THE ENTRY FOR
|
||
CMA /THE GUY WHO CAUSED THE CALL TO
|
||
TAD ENTPTR /ENS0; IF IT IS, IGNORE THIS MATCH
|
||
SZA CLA
|
||
JMP I ENS0 /FOUND A SIMILAR ENTRY; DIFFERENT ENTTBL ENTRY
|
||
ENS1, ISZ ENTPTR
|
||
TAD ENTPTR
|
||
CIA
|
||
TAD ENTEND /END OF ENT TABLE
|
||
SZA CLA
|
||
JMP ENS2 /KEEP LOOKING
|
||
ISZ ENS0 /SKIP ON RETURN
|
||
JMP I ENS0
|
||
ENS30, ENS3
|
||
ENSCRF, -CRF
|
||
/ROUTINE TO LOOK IN THE SAT FOR A FREE SEGMENT
|
||
|
||
/CALLING SEQUENCE:
|
||
/ JMS SATLOK
|
||
/ RETURN (SEGMENT NUMBER IN AC, 0=NONE AVAILABLE)
|
||
*2400
|
||
SATLOK, 0
|
||
CLA CMA CLL RAL /7776
|
||
DCA SATMSK /MAKE TWO PASSES OF THE TABLE
|
||
TAD I SATCNT /# OF AVAILABLE DISC SEGMENTS
|
||
SNA /ARE THERE ANY?
|
||
JMP I SATLOK /NO, SO FORGET IT
|
||
CIA
|
||
CMA
|
||
DCA I SATCNT /DECREMENT SATCNT
|
||
DCA SATCT2
|
||
CLA CMA
|
||
DCA SATSTA /SET SAT STATUS TO WRITE OUT
|
||
/LOOK FOR A WORD IN SAT TABLE WITH A ZERO BIT IN IT
|
||
SAT1, TAD I SATPNT /GET A WORD FROM SAT TABLE
|
||
CMA
|
||
SZA CLA /ARE ALL BITS SET TO ONE?
|
||
JMP SAT2 /NO, SO WE'VE FOUND A SEGMENT
|
||
ISZ SATPNT /WAS THIS THE LAST WORD IN THE SAT TABLE?
|
||
JMP SAT1 /NO, SO KEEP LOOKING
|
||
TAD SAT5 /START LOOKING FROM THE BEGINNING
|
||
DCA SATPNT /PTR INTO SAT TABLE
|
||
ISZ SATMSK
|
||
JMP SAT1 /MAKE 1 MORE PASS
|
||
DCA I SATCNT /SOMETHING WRONG.. BETTER AVOID L2Q OVERFLOW
|
||
/BY SAYING NO SEGMENTS AVAILABLE
|
||
JMP I SATLOK
|
||
SAT5, -SATSIZ+2
|
||
|
||
/WE FOUND A SAT WORD WITH A ZERO BIT. NOW FIND THAT BIT.
|
||
SAT2, CLL CML RAR /4000 INTO ACC.
|
||
DCA SATMSK
|
||
ISZ SATCT2
|
||
TAD I SATPNT /GET WORD FROM SAT TABLE
|
||
AND SATMSK /IS THE BIT CORRESPONDING TO THE ONE IN SATMSK SET?
|
||
SNA
|
||
JMP SAT3 /NO, SO WE FOUND THE ZERO BIT
|
||
RAR /MOVE MASK BIT ONE TO THE RIGHT
|
||
JMP SAT2+1 /...AND LOOK AT THE NEXT BIT
|
||
|
||
/FOUND THE BIT WITHIN THE WORD - SATCNT INDICATES WHICH ONE IT IS
|
||
SAT3, TAD SATMSK
|
||
TAD I SATPNT
|
||
DCA I SATPNT /SET THE BIT IN SATTBL TO INDICATE THAT THIS SEGMENT IS NOW ALLOCATED
|
||
TAD SATPNT
|
||
TAD C0526
|
||
DCA SATMSK
|
||
/NOW CALCULATE THE NUMBER OF THE DISC SEGMENT
|
||
/WHICH CORRESPONDS TO THIS BIT IN THE SAT TABLE
|
||
TAD SATMSK
|
||
CLL RAL
|
||
TAD SATMSK
|
||
RTL
|
||
TAD SATCT2
|
||
JMP I SATLOK /EXIT WITH DISC SEGMENT NUMBER IN AC
|
||
|
||
|
||
SATPNT, -SATSIZ+2
|
||
SATCNT, -SATSIZ+1
|
||
SATEMP,
|
||
SATCT2, 0
|
||
SATMSK, 0
|
||
/ROUTINE TO RELEASE A SEGMENT IN SAT
|
||
|
||
/CALLING SEQUENCE:
|
||
/ TAD (SEGMENT NUMBER)
|
||
/ JMS SATREL
|
||
|
||
/DIVIDE SEGMENT NUMBER BY 14 (12 DECIMAL)
|
||
/QUOTIENT INDICATES WHICH WORD IN SAT TABLE CORRESPONDS
|
||
/TO THIS DISC SEGMENT. REMAINDER INDICATES WHICH BIT IN
|
||
/THAT WORD.
|
||
SATREL, 0
|
||
TAD P2000 /SUBTRACT 14 X 400
|
||
SZL /WAS THE SEGMENT THAT BIG?
|
||
JMP .+3 /YES
|
||
TAD P6000 /NO, ADD 14 X 400
|
||
CLL /UN-DO THE LINK
|
||
RAL /SHIFT OUT A BIT OF THE QUOTIENT
|
||
ISZ CFH
|
||
JMP SATREL+1 /MORE TO DO YET
|
||
DCA SATPNT /REMAINDER IN LINK THRU AC2; QUOTIENT IN AC3 THRU AC11
|
||
TAD SATPNT
|
||
AND P7000
|
||
RTL
|
||
RTL
|
||
CMA /NEGATE THE REMAINDER
|
||
DCA SATEMP
|
||
TAD SATPNT
|
||
AND P0777 /JUST THE QUOTIENT THIS TIME
|
||
TAD SAT5
|
||
DCA SATPNT
|
||
CLL CMA
|
||
RAR
|
||
ISZ SATEMP /SET UP A MASK CORRESPONDING TO PROPER BIT
|
||
JMP .-2
|
||
AND I SATPNT /CLEAR SAT TABLE BIT; SEGMENT IS NOW AVAILABLE
|
||
DCA I SATPNT
|
||
ISZ I SATCNT /UPDATE THE AVAILABLE SEGMENTS COUNT
|
||
CLL STA
|
||
DCA SATSTA /REMEMBER WE CHANGED THE SAT TABLE
|
||
JMP I SATREL
|
||
/ACTUAL I/O ROUTINE
|
||
/SET UP ALL I/O PARAMETERS IN #FLPARB#, AND JMS FIPIO
|
||
|
||
FIPIO, 0
|
||
TAD FIPFLD
|
||
RAR
|
||
DCA FLPARB+2 /='S FIELD WE'RE IN TIMES 4
|
||
CDF
|
||
TAD I JOB
|
||
AND C0400 /FIP OR SI CORTBL BIT ON?
|
||
SNA CLA
|
||
JMP .+3 /SI
|
||
TAD FIJOB
|
||
DCA I FIPJOB /FIP - KEEP HIGH PRIORITY ON THE SCHEDULER
|
||
TAD FIRETP /POINTER TO FIORET
|
||
DCA 1 /RETURN ADDRESS - SET TO RETURN BELOW WHEN FIP IS RESTARTED
|
||
TAD FIO3 /GET FIPBLK
|
||
DATFLD
|
||
DCA I FIUTBA
|
||
CFLD
|
||
CIF 00
|
||
BLT /MOVE DISC TRANSFER PARAMETERS INTO FREE BLOCK LINKED TO DSUTBL
|
||
CFLD /FIP ALWAYS IN FIELD 2
|
||
FLPARB /PARAMETER BLOCK
|
||
DATFLD /DESTINATION FIELD
|
||
FIO3, FIPBLK /DESTINATION
|
||
-10 /WORD COUNT
|
||
CDF CIF 00
|
||
ISZ I DSBUSY /GLOBAL TO "DSBUSY"
|
||
WAIT /DISK BUSY
|
||
JMP I OVER /GO TO FIELD 0 TO INITIATE THE TRANSFER
|
||
|
||
/MONITOR RETURNS CONTROL HERE AFTER COMPLETING THE TRANSFER
|
||
FIORET, CLA /RETURNS FROM DISC I/O COME HERE
|
||
TAD C0200 /RESET THE FIP STARTING ADDRESS
|
||
DCA 1 /... TO 0200
|
||
FGETJT
|
||
JOBSTS
|
||
DATFLD
|
||
DCA FIPTR1
|
||
TAD I FIPTR1 /PICK UP #JOBSTS#
|
||
CFLD /CHANGE TO CURRENT FIELD
|
||
TAD P0003
|
||
AND P0007 /CHECK ERROR BITS
|
||
SZA CLA
|
||
ISZ FIPIO /NO DISC TRANSFER ERROR
|
||
JMP I FIPIO /EXIT WITHOUT SKIPPING TO INDICATE DISC TRANSFER ERROR
|
||
|
||
FIPTR1, 0
|
||
FIUTBA, DSUTBL+4+4
|
||
FIRETP, FIORET
|
||
C0526, 0526
|
||
OVER, OVRLA1
|
||
/ROUTINE TO GET A DIRECTORY WORD INTO CORE
|
||
/CALLING SEQUENCE:
|
||
/ TAD (POINTER TO RETRIEVAL INFORMATION)
|
||
/ JMS GE0
|
||
/ WORD NUMBER
|
||
/ RETURN (BUFFER POINTER IN AC. 0 IF NON-EXISTENT)
|
||
|
||
*2600
|
||
|
||
GE0, 0
|
||
DCA GERETP /STORE RETRIEVAL INFORMATION POINTER
|
||
TAD I GE0
|
||
CLL RAL
|
||
RTL
|
||
RTL
|
||
AND P0007
|
||
TAD GERETP
|
||
DCA GERETP
|
||
TAD I GERETP
|
||
SNA
|
||
JMP GE3
|
||
CIA
|
||
CMA
|
||
DCA RDTEMP
|
||
/FILE READ ROUTINE, CHECKS TO SEE IF BUFFER IS FULL.
|
||
/IF SO, IS IT THE SEGMENT WE ARE TRYING TO READ?
|
||
/IF YES, LEAVE. IF NO, WRITE OUT THE BUFFER
|
||
/BEFORE READING THE PROPER SEGMENT.
|
||
TAD RDCURR /MAY THE DESIRED SEGMENT ALREADY BE IN THE BUFFER
|
||
CIA
|
||
TAD RDTEMP
|
||
SNA CLA
|
||
TAD BUFSTA /PROBABLY; IS THE DATA STILL VALID?
|
||
SPA
|
||
JMP RD3 /YES
|
||
SNA /MAYBE
|
||
JMS I WRT1 /WRONG SEGMENT, SO WRITE IT OUT (IF MODIFIED)
|
||
DCA BUFSTA /SAVE BUFFER STATUS
|
||
TAD RDTEMP
|
||
JMS RD30 /SET UP PARAMETERS FOR A READ OPERATION
|
||
TAD BUFSTA /WAS THE CORRECT DATA IN THE BUFFER AFTER ALL?
|
||
SZA CLA
|
||
JMP RD3 /YES; ONLY NEEDED TO SET THE DISK PARAMETERS
|
||
JMS I FIO01 /PERFORM THE READ
|
||
JMP I DIRBAD /ERROR ON READ
|
||
IAC
|
||
DCA BUFMOD /NEW DATA AS YET UNCHANGED
|
||
RD3, CLA CMA
|
||
DCA BUFSTA /SET BUFFER STATUS TO FULL
|
||
TAD C0377
|
||
AND I GE0 /ADDRESS WITHIN SEGMENT
|
||
TAD BUFFER /CREATE A POINTER
|
||
GE3, ISZ GE0
|
||
JMP I GE0 /RETURN
|
||
GERETP, 0
|
||
RDTEMP, 0
|
||
RDCURR, 0
|
||
K7400, 7400
|
||
C0377, 0377
|
||
|
||
|
||
|
||
/ROUTINE TO DIVIDE A NUMBER BY 7
|
||
/REMAINDER IS LEFT IN WNDREM, PAGE 0
|
||
|
||
WND20, 0
|
||
DCA WNDREM
|
||
DCA CFH
|
||
TAD WNDREM
|
||
WND24, TAD C7771
|
||
SPA
|
||
JMP WND21
|
||
ISZ CFH
|
||
JMP WND24
|
||
WND21, TAD P0007
|
||
DCA WNDREM
|
||
TAD CFH
|
||
JMP I WND20
|
||
|
||
/ROUTINE TO SET UP FOR A READ.
|
||
/ENTER WITH SEGMENT NUMBER. THIS IS CONVERTED TO
|
||
/A PHYSICAL DISC ADDRESS.
|
||
RD30, 0
|
||
DCA RDCURR /SAVE SEGMENT NUMBER
|
||
TAD RDCURR
|
||
CLL RTR
|
||
RTR
|
||
DCA RDTEMP
|
||
TAD RDTEMP
|
||
RAR
|
||
AND K7400
|
||
DCA FLPARB+5
|
||
TAD RDTEMP
|
||
AND C0377
|
||
TAD FIBASE
|
||
CLL RTL
|
||
DCA FLPARB+1
|
||
CFLD /CHANGE TO CURRENT FIELD
|
||
TAD K7400
|
||
DCA FLPARB+3 /WORD COUNT (ONE BUFFER)
|
||
CLA CMA
|
||
TAD BUFFER
|
||
DCA FLPARB+4 /CORE ADDRESS
|
||
TAD C0603 /READ IOT
|
||
DCA FLPARB
|
||
JMP I RD30
|
||
FIPFIP= C0400
|
||
|
||
|
||
FIX301, FIX30
|
||
C5600, 5600
|
||
USENAM, 0 /CALLED ONLY ONCE BY RE-NAME ROUTINE
|
||
TAD FIOSTK+1 /TO SEE IF THE NEW NAME EXISTS IN DIRECTORY
|
||
DCA FIOSTK
|
||
JMS I JBLD0
|
||
JMS I UTS01
|
||
JMP I DIRBAD
|
||
JMS I BLDP1
|
||
DCA FIOSTK+1
|
||
JMS I DS01
|
||
FIOSTK+1
|
||
ISZ USENAM /NO FILE OF THIS NAME FOUND - OK TO RENAME
|
||
CLA
|
||
JMP I USENAM
|
||
|
||
NUCOR, CORSRC-2
|
||
C7437, SWAP LOCK NOTRUN FIP CJOB
|
||
JOBMX, -JOBMAX
|
||
FIPLOC, FIPLOK
|
||
FIPTIM, TIMFIP
|
||
|
||
REL1, TAD FIOSTK+1 /RELEASE A DEVICE
|
||
SPA /DON'T LET THE USER RELEASE CONSOLES
|
||
JMS I REL01
|
||
CLA
|
||
JMP I FIEXIT
|
||
|
||
|
||
FIX50, TAD I FIOPTR
|
||
AND FIPFIP /GLOBAL TO "FIP"
|
||
SNA CLA /IF FIP BIT IS NOT SET, FIP WAS CALLED BY SI
|
||
JMP I FIX301 /GET THE SYSTEM INTERPRETER BACK INTO CORE
|
||
TAD C5600
|
||
AND I FIOPTR
|
||
DCA I FIOPTR /CLEAR OUT THE LOCK BIT
|
||
TAD JOBMX
|
||
DCA CFH /SAVE COUNT OF JOBS TO SCAN
|
||
STL RTL
|
||
TAD I NUCOR
|
||
SMA
|
||
JMP FIX51
|
||
DCA I FIPTIM
|
||
TAD C7437
|
||
DCA I FIPLOC
|
||
FIX51, CLA
|
||
DATFLD
|
||
TAD FIJOB
|
||
TAD DEVOVR
|
||
DCA INDEX
|
||
FIX50L, TAD INDEX
|
||
TAD JEND
|
||
SZA CLA
|
||
JMP .+3
|
||
TAD DEVOVR
|
||
DCA INDEX
|
||
TAD I INDEX
|
||
SZA
|
||
JMS I FIX5CK
|
||
ISZ CFH
|
||
JMP FIX50L
|
||
JMP I .+1
|
||
FIXOUT
|
||
JEND, -JOBTBL-JOBMAX
|
||
FIX5CK, FIXSCH
|
||
/ROUTINE TO FREE AN ENTRY ON THE UFD TABLE AND RETTBL
|
||
|
||
/CALLING SEQUENCE:
|
||
/ TAD (POSITION ON UFDTBL)
|
||
/ JMS TF0
|
||
/ RETURN
|
||
|
||
|
||
TF0, 0
|
||
DCA TFUFDP /POSITION ON TABLE
|
||
DCA I TFUFDP /CLEAR OWNER'S PROJ,PROG NUMBER
|
||
TAD UFDTBL /BEGINNING OF TABLE
|
||
CIA
|
||
TAD TFUFDP
|
||
CLL RTR /RELATIVE POSITION ON TABLE
|
||
IAC
|
||
JMS I BLDP1 /BUILD A PTR TO RETTBL
|
||
DCA TFUFDP /POINTER TO RETRIEVAL INFORMATION
|
||
TAD P7770 /8 WORDS PER ENTRY
|
||
DCA TFCNTR
|
||
TF1, DCA I TFUFDP /ZERO OUT THE ENTRY
|
||
ISZ TFUFDP
|
||
ISZ TFCNTR
|
||
JMP TF1
|
||
JMP I TF0
|
||
|
||
TFUFDP, 0
|
||
TFCNTR, 0
|
||
|
||
/ROUTINE TO CHECK WHETHER THE FILE A USER
|
||
/IS ATTEMPTING TO ACCESS IS HIS/HERS OR SOMEONE ELSE'S.
|
||
|
||
/CALLING SEQUENCE:
|
||
/ TAD (INTERNAL FILE NUMBER)
|
||
/ JMS UC0
|
||
/ ERROR RETURN (AC=0 IF FILE NOT OPEN)
|
||
/ NORMAL RETURN
|
||
|
||
UC0, 0
|
||
JMS I EBLD0
|
||
DCA UCENTP
|
||
TAD I UCENTP /PICK UP ENTRY FOR THIS FILE OF THIS USER'S
|
||
SNA
|
||
JMP I UC0 /FILE NOT OPEN
|
||
CIA
|
||
CLL CMA RTL /SUBTRACT ONE; MULTIPLY BY FOUR
|
||
TAD UFDTBL
|
||
DCA UCUFDP /POINTER TO OPEN UFD TABLE
|
||
JMS I JBLD0
|
||
CIA
|
||
TAD I UCUFDP
|
||
SNA /SKIP IF DIFFERENT
|
||
ISZ UC0 /CORRECT RETURN
|
||
JMP I UC0
|
||
|
||
UCENTP, 0
|
||
UCUFDP, 0
|
||
/LOGOUT ROUTINE
|
||
|
||
LGO0, JMS I ACC01 /IS IT FROM ACCOUNT 1?
|
||
TAD FIOSTK+1 /YES; SEE IF [S]HE WANTS TO RESET
|
||
TAD FIJOB /SEE IF HIS/HER AC=JOB
|
||
SNA CLA
|
||
JMP I LGRESA /GO CLEAR EVERYBODY'S CPU & DEVICE TIME ACCUMULATORS
|
||
TAD FIOSTK+1 /DID [S]HE SET HIS/HER AC= TO HIS/HER JOB #?
|
||
CIA
|
||
TAD FIJOB
|
||
SZA CLA
|
||
JMP I LGO1A /NO; SO SEE IF [S]HE WANTS COUNT OF USERS UNDER HIS/HER ACCOUNT
|
||
JMS I LNS01 /RELEASE ALL HIS/HER DEVICES
|
||
JMP .+3
|
||
JMS I REL01
|
||
JMP .-3 /KEEP GOING
|
||
JMS I CL01 /CLOSE FILE 0
|
||
IAC
|
||
JMS I CL01 /CLOSE FILE 1
|
||
CLL CML RTL
|
||
JMS I CL01 /CLOSE FILE 2
|
||
TAD P0003
|
||
JMS I CL01 /CLOSE FILE 3
|
||
JMS I JBLD0
|
||
DCA LOSRRI+1 /DELIVER TO CALLING SEQUENCE FOR SEARCH
|
||
TAD CFH
|
||
DCA LOJOBP
|
||
CLA CMA
|
||
JMS I DS01 /FIND MFD ENTRY; 1 WORD SEARCH
|
||
LOSRRI
|
||
JMP I DIRBAD /************DEBUG ONLY***********
|
||
TAD C0006
|
||
DCA LOSRRI+1 /POINTER TO CP TIME COUNTER
|
||
FGETJT
|
||
JOBRTM /JOB RUN TIME IN STATUS
|
||
DCA FIOSTK+6 /INTS TO LOW ORDER RUN TIME
|
||
DATFLD
|
||
TAD I FIOSTK+6
|
||
RTR
|
||
RTR
|
||
RTR /USE ONLY HIGH ORDER OF LOW ORDER RUN TIME
|
||
AND P0077
|
||
DCA FIOSTK+7
|
||
ISZ FIOSTK+6
|
||
TAD I FIOSTK+6
|
||
CFLD /BACK TO THIS FIELD
|
||
AND P0077
|
||
CLL RTL
|
||
RTL
|
||
RTL
|
||
TAD FIOSTK+7
|
||
TAD I LOSRRI+1
|
||
DCA I LOSRRI+1 /LOW ORDER TIME UPDATE
|
||
DCA BUFMOD /SCHEDULE WRITE
|
||
|