1
0
mirror of https://github.com/PDP-10/stacken.git synced 2026-03-01 01:19:17 +00:00
Files
Lars Brinkhoff 6e18f5ebef Extract files from tape images.
Some tapes could not be extracted.
2021-01-29 10:47:33 +01:00

295 lines
11 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE USGSUB - SUBROUTINE PACKAGE TO INTERFACE BACKUP TO THE ACTDAE
SUBTTL C.D.O'Toole/CDO 22-AUG-85
SEARCH UUOSYM,ACTSYM
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1980,1981,1984,1986. ALL RIGHTS RESERVED.
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
;THIS PACKAGE HAS ONLY BEEN TESTED WITH BACKUP AND PERFORMS THE FUNCTIONS
; REQUIRED BY IT TO IMPLEMENT USAGE ACCOUNTING FOR DISK FILES. NO
; OTHER SUPPORT IS IMPLIED.
;AC DEFINITIONS PARALLEL THOSE FOUND IN BACKUP
T1=1 ;TEMP AC
T2==T1+1 ;...
T3==T2+1 ;...
T4==T3+1 ;...
P1==T4+1 ;PERMANENT AC
P2==P1+1 ;...
P3==P2+1 ;...
P4==P3+1 ;...
P==17 ;A STACK
.BCOPY
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1980,1986. ALL RIGHTS RESERVED.
\;END COPYRIGHT MACRO
.ECOPY
;LOCAL STORAGE
IPCBLK: BLOCK 4 ;BLOCK FOR IPCF SEND
DCHBLK: BLOCK 2 ;BLOCK FOR DSKCHR
USGTAB: BLOCK 1 ;ADDRESS OF THE ACCOUNT STRING DATA BLOCKS
USGDAT: BLOCK UB$ACT ;DATA FOR ACCOUNTING
STRLEN==<UB$END-UB$ACT> ;SIZE OF DATA FOR INDIVIDUAL ACCOUNT STRINGS
CORREQ==<STRLEN*UB$MAC> ;AMOUNT OF CORE REQUIRED FOR ACCOUNT STRINGS
;USGINI -- INITIALIZE THE PACKAGE. CALLED WHEN BACKUP DISCOVERS IT IS
; DOING A "SAVE" OPERATION AND "/USAGE" HAS BEEN SPECIFIED.
;RETURNS CPOPJ IF CANNOT GET ENOUGH CORE TO ALLOCATE ACCOUNTING TABLES.
USGINI::MOVEI T1,CORREQ ;AMOUNT REQUIRED
ADD T1,.JBFF## ;COMPUTE NEW FIRST FREE
CAMG T1,.JBREL## ;SEE IF IT FITS
JRST USGIN1 ;IT DOES, GO CLEAN IT UP A LITTLE
CAIG T1,377777 ;TOO LARGE? (BACKUP RESTRICTION)
CORE T1, ;NO, ALLOCATE THE CORE
POPJ P, ;GIVE FAIL RETURN TO CALLER
USGIN1: MOVE T1,.JBFF## ;WHERE IT IS
MOVEM T1,USGTAB ;SAVE BASE
MOVEI T1,CORREQ ;AMOUNT ACQUIRED AGAIN
ADDM T1,.JBFF## ;UPDATE FIRST FREE
AOS (P) ;GIVE GOOD RETURN
POPJ P, ;RETURN
;USGDIP -- PROTECTION FAILURE ON UFD OR SOME FILE (EITHER USGDIP OR
;USGFIP -- USGFIP). T1 = EXTENDED LOOKUP BLOCK THAT FAILED
USGDIP:: HLRZ T2,.RBEXT(T1) ;GET THE EXTENSION
CAIE T2,'UFD' ;IS THIS THE UFD
JRST USGFIP ;NO, SFD, TREAT SAME AS A FILE PROTECTION FAILURE
MOVSI T2,'Y ' ;GET 'YES'
MOVEM T2,USGDAT+UB$UPF ;FLAG IT FOR DOWN STREAM BILLING
POPJ P, ;AND RETURN
USGFIP:: MOVSI T2,'Y ' ;GET 'YES'
MOVEM T2,USGDAT+UB$FPF ;FLAG A FILE IS PROTECTED FOR DOWN STREAM BILLING
POPJ P, ;AND RETURN
;USGNST -- NEW STRUCTURE TO BE SAVED, T1 = DISK STRUCTURE NAME
USGNST:: MOVEM T1,DCHBLK ;STORE FOR DSKCHR
MOVE T1,[1,,DCHBLK] ;ARG FOR DSKCHR
DSKCHR T1,UU.PHY ;DO IT FOR PHYSICAL STRUCTURE
SETZB T1,DCHBLK ;WHAT!
MOVEM T1,DCHBLK+1 ;SAVE CHARACTERISTICS FOR LATER
POPJ P, ;RETURN
;USGNDI -- BEGIN ACCOUNTING FOR A NEW DIRECTORY. CALLED WHEN BACKUP
; LOOKUPS A UFD OR SFD. T1 = THE EXTENDED LOOKUP BLOCK.
USGNDI:: HLRZ T2,.RBEXT(T1) ;GET THE EXTENSION
CAIE T2,'UFD' ;THIS THE UFD
JRST USGFIL ;NO, SFD, COUNT IT AS A FILE
SETZM USGDAT ;CLEAR DATA AREA
MOVE T2,[USGDAT,,USGDAT+1]
BLT T2,USGDAT+UB$ACT-1
MOVSI T2,(ASCII/N/) ;GET ASCII 'NO' INDICATOR
MOVEM T2,USGDAT+UB$EXP ;SET NOT EXPIRED
MOVSI T2,'N ' ;GET SIXBIT 'NO' INDICATOR
MOVEM T2,USGDAT+UB$UPF ;UFD IS NOT BEEN PROTECTED AGAINST US
MOVEM T2,USGDAT+UB$FPF ;NOR HAS ANY PARTICULAR FILE
MOVEM T2,USGDAT+UB$ABO ;AND THERE HASN'T BEEN AN OVERFLOW OF STRINGS
MOVE T2,.RBNAM(T1) ;THE PPN
MOVEM T2,USGDAT+UB$PPN ;SAVE IT
MOVE T2,.RBQTF(T1) ;FCFS QUOTA
MOVEM T2,USGDAT+UB$QIN ;SAVE IT
MOVE T2,.RBQTO(T1) ;LOGGED OUT QUOTA
MOVEM T2,USGDAT+UB$QOU ;SAVE IT
MOVE T2,.RBLAD(T1) ;LAST ACCOUNTING DATE/TIME
MOVEM T2,USGDAT+UB$LAT ;STORE THAT
LDB T2,[POINT 11,.RBPRV(T1),23] ;CREATION TIME (RB.CRT) = LAST LOGIN
HRRM T2,USGDAT+UB$LLG ;STORE TIME
LDB T2,[POINT 12,.RBPRV(T1),35] ;LOW ORDER DATE (RB.CRD)
HRLM T2,USGDAT+UB$LLG ;STORE DATE
LDB T2,[POINT 3,.RBEXT(T1),20] ;HIGH ORDER EXTENDED DATE (RB.CRX)
DPB T2,[POINT 3,USGDAT+UB$LLG,5] ;COMPLETE DATE
MOVE T2,[%CNDTM] ;GET "NOW"
GETTAB T2, ;GET IT
POPJ P, ;WHAT!
MOVEM T2,.RBLAD(T1) ;NOW IS THE LAST ACCOUNTING DATE/TIME
CAMLE T2,.RBDED(T1) ;CHECK EXPIRATION
SKIPN .RBDED(T1) ;YES, BUT WAIT, DO WE KNOW THE EXPIRATION DATE
SKIPA T2,[ASCII/N/] ;NOT EXPIRED
MOVSI T2,(ASCII/Y/) ;IS EXPIRED
MOVEM T2,USGDAT+UB$EXP ;SET EXPIRED CORRECTLY
POPJ P, ;DON'T COUNT UFD PROPER IN ACCOUNTING
;USGFIL -- ACCOUNT FOR A FILE. CALLED WHEN BACKUP LOOKUPS THE FILE.
; T1 = EXTENDED LOOKUP BLOCK.
USGFIL:: PUSH P,P1 ;SAVE CALLERS
PUSH P,P2 ;...
PUSH P,P3 ;...
MOVE T2,USGDAT+UB$ACN ;NUMBER OF UNIQUE ACCOUNT STRINGS SO FAR
MOVE P1,USGTAB ;GET BASE OF THE TABLES
JUMPE T2,USGFI5 ;FIRST ACCOUNT STRING
USGFI1: MOVEI T3,10 ;NUMBER OF WORDS IN AN ACCOUNT STRING
MOVEI P2,UB$ACT-UB$ACT(P1) ;POINT TO THE STRING
MOVEI P3,.RBACT(T1) ;...
USGFI2: MOVE T4,(P2) ;GET WORD FROM ACCOUNT STRING
CAME T4,(P3) ;MUST HAVE EXACT MATCH FOR ALL WORDS
JRST USGFI4 ;NO MATCH, TRY NEXT TABLE
AOS P2 ;NEXT WORD IN STRING
AOS P3 ;...
SOJG T3,USGFI2 ;MATCH THEM ALL UP
;HERE WE HAVE THE MATCHING ACCOUNT STRING TABLE IN P1
USGFI3: SKIPE P1 ;P1 = 0 IF NO MORE ROOM FOR ACCOUNT STRINGS
AOS UB$NFL-UB$ACT(P1) ;BUMP NUMBER OF FILES
AOS USGDAT+UB$TNF ;BUMP COUNT OF FILES
MOVE T2,.RBALC(T1) ;GET ALLOCATED LENGTH OF FILE
SKIPE P1
ADDM T2,UB$BAL-UB$ACT(P1) ;ADD IN UNDER THIS ACCOUNT STRING
ADDM T2,USGDAT+UB$TAU ;ADD IT IN
MOVE T2,.RBSIZ(T1) ;GET FILE SIZE (WORDS WRITTEN)
ADDI T2,177 ;ROUND UP TO FULL DISK BLOCKS
LSH T2,-7 ;/128
SKIPE P1
ADDM T2,UB$BWR-UB$ACT(P1) ;ADD IN UNDER ACCOUNT STRING
ADDM T2,USGDAT+UB$TWU ;ADD IT IN
POP P,P3 ;RESTORE CALLERS
POP P,P2 ;...
POP P,P1 ;...
POPJ P, ;AND RETURN
;HERE WHEN THE ACCOUNT STRINGS DON'T MATCH, TRY NEXT BLOCK
USGFI4: ADDI P1,STRLEN ;STEP TO NEXT ACCOUNT STRING BLOCK
SOJG T2,USGFI1 ;AND LOOK FOR ANOTHER MATCH
;HERE WHEN THE FILE HAS A UNIQUE ACCOUNT STRING, P1 ALREADY POINTS AT NEW BLOCK
USGFI5: MOVE T2,USGDAT+UB$ACN ;GET NUMBER OF ACCOUNT STRINGS SO FAR
CAIL T2,UB$MAC ;ROOM FOR THE NEW ONE
JRST [MOVSI P1,'Y ' ;FLAG TOO MANY ACCOUNT STRINGS
MOVEM P1,USGDAT+UB$ABO ;REMEMBER FOR DOWN-STREAM BILLING
SETZ P1, ;INDICATE NO TABLE TO UPDATE
JRST USGFI3] ;CONTINUE TO COUNT AGAINST UFD PROPER THOUGH
AOS USGDAT+UB$ACN ;ANOTHER ACCOUNT STRING PRESENT
HRLI T2,.RBACT(T1) ;WHERE IT IS
HRRI T2,UB$ACT-UB$ACT(P1) ;WHERE WE WANT IT
BLT T2,UB$ACT-UB$ACT+7(P1) ;MOVE INTO TABLES
SETZM UB$BAL-UB$ACT(P1) ;START COUNTERS FRESH
SETZM UB$BWR-UB$ACT(P1) ;...
SETZM UB$NFL-UB$ACT(P1) ;...
JRST USGFI3 ;AND ADD IT IN
;USGEND -- MAKE A USAGE ENTRY FOR THE UFD JUST SAVED
USGEND:: MOVSI T1,'Y ' ;GET ERROR INDICATOR
CAME T1,USGDAT+UB$UPF ;CHECK IF THE UFD WAS PROTECTED
CAMN T1,USGDAT+UB$FPF ;OR SOME FILES WERE PROTECTED
JRST USGEN0 ;YES, MUST MAKE THE ENTRY
SKIPN USGDAT+UB$ACN ;NOW SEE IF UFD WAS EMPTY
POPJ P, ;DON'T BOTHER MAKING THE ENTRY
USGEN0: PUSH P,P1 ;SAVE CALLERS
MOVE P1,[%SIACT] ;GET THE PID OF THE ACTDAE
GETTAB P1, ;ASK THE MONITOR
SETZ P1, ;WHAT!
JUMPE P1,USGERT ;RETURN IF NOBODY TO TELL THIS TOO
MOVEM P1,IPCBLK+.IPCFR ;STORE RECEIVER
HRRZ P1,.JBREL## ;GET HIGHEST ADDRESS IN LOW SEG
LSH P1,-^D9 ;TO PAGE NUMBER
AOS P1 ;P1 IS NOW THE PAGE WE WILL USE FOR IPCF
USGEN1: MOVE T1,[.PAGCD,,T2] ;POINT TO ARGUMENTS FOR CREATE
MOVEI T2,1 ;1 ARGUMENT
MOVE T3,P1 ;THE PAGE NUMBER
PAGE. T1, ;CREATE THE PAGE
JRST [CAIE T1,PAGNS% ;OUT OF VIRTUAL CORE?
JRST USGERT ;NO, GIVE UP
MOVEI T1,1 ;WAIT 1 SECOND
SLEEP T1, ;IN CASE SOME SHOWS UP
JRST USGEN1] ;AND TRY IT AGAIN
HRLI P1,1000 ;SIZE OF IPCF PAGE
MOVEM P1,IPCBLK+.IPCFP ;STORE POINTERS
LSH P1,^D9 ;CONVERT TO AN ADDRESS
MOVSI T1,USGDAT ;COLLECTED DATA
HRRI T1,(P1) ;WHERE TO MOVE IT
BLT T1,UB$ACT-1(P1) ;MOVE IT
HRL T1,USGTAB ;WHERE ACCOUNT STRING STUFF IS STORED
HRRI T1,UB$ACT(P1) ;WHERE IT GOES
BLT T1,UB$ACT+CORREQ-1(P1) ;MOVE IT
MOVEI T1,UGDUE$ ;TYPE = DISK USAGE ENTRY
MOVEM T1,UX$TYP(P1) ;STOPE IT
SETZM UB$TNO(P1) ;GET RID OF OLD STUFF FIRST
SETZM UB$NOD(P1) ;...
PJOB T1, ;GET OUR JOB NUMBER
MOVEM T1,UB$JOB(P1) ;STORE IT
MOVSI T4,(ASCIZ/D/) ;ASSUME DETACHED
TRMNO. T1, ;GET TERMINAL DESIGNATOR
JRST USGEN3 ;DETACHED
DPB T1,[POINT 9,UB$TNO(P1),35] ;STORE IN CASE NO NETWORKS
GETLCH T1 ;GET LINE CHARACTERISTICS
MOVSI T4,(ASCIZ/T/) ;ASSUME REGULAR TTY
TLNE T1,(GL.CTY) ;THE SYSTEM CTY
MOVSI T4,(ASCIZ/C/) ;YES
TLNE T1,(GL.ITY) ;INVISIBLE (PSEUDO) TTY
MOVSI T4,(ASCIZ/P/) ;YES
HRRZS T1 ;GET RID OF GETLCH BITS
GTNTN. T1, ;CONVERT TO NODE AND LINE
JRST USGEN3 ;NO NETWORKS
HRRZM T1,UB$TNO(P1) ;STORE REAL LINE NUMBER
HLRZ T3,T1 ;ISOLATE NODE NUMBER
MOVEI T2,2 ;NUMBER OF ARGUMENTS
MOVE T1,[.NDRNN,,T2] ;RETURN NODE NAME FOR NUMBER
NODE. T1, ;ASK TODD
SKIPA ;FAILED?
MOVEM T1,UB$NOD(P1) ;STORE SIXBIT NODE NAME
USGEN3: MOVEM T4,UB$TRD(P1) ;STORE TERMINAL DESIGNATOR
MOVE T1,[SIXBIT/BACKUP/] ;THIS PROGRAMS NAME
MOVEM T1,UB$PNM(P1) ;STORE THAT
MOVE T1,.JBVER## ;THE VERSION NUMBER
MOVEM T1,UB$PVR(P1) ;AND STORE THAT
MOVE T1,DCHBLK ;THE DISK STRUCTURE
MOVEM T1,UB$FSN(P1) ;STORE THAT
LDB T1,[POINT 1,DCHBLK+1,6] ;GET "PRIVATE" BIT
AOS T1 ;MAKE 1=PUB, 2=PRIVATE
MOVEM T1,UB$FST(P1) ;STORE
LDB T1,[POINT 6,DCHBLK+1,26] ;GET CONTROLLER TYPE
MOVEM T1,UB$CNT(P1) ;STORE
LDB T1,[POINT 3,DCHBLK+1,32] ;GET DEVICE (UNIT) TYPE
MOVEM T1,UB$DVT(P1) ;STORE
MOVEI T1,IP.CFV ;A PAGE MODE SEND
MOVEM T1,IPCBLK+.IPCFL ;STORE FLAG WORD
SETZM IPCBLK+.IPCFS ;DON'T SUPPLY A SENDERS PID
USGEN2: MOVE T1,[4,,IPCBLK] ;POINT TO THE BLOCK
IPCFS. T1, ;SEND OFF THE ACCOUNTING MESSAGE
SKIPA ;CHECK FAILURE
JRST USGERT ;RETURN
CAIE T1,IPCRS% ;MY QUOTA EXCEEDED
CAIN T1,IPCRR% ;OR ACTDAE'S QUOTA
USGRTY: JRST [MOVEI T1,1 ;YES, GIVE ACTDAE A CHANCE TO CATCH UP
SLEEP T1, ;SO WAIT A SECOND
JRST USGEN2] ;AND TRY IT AGAIN
CAIN T1,IPCRY% ;SYSTEM OUT OF FREE SPACE
JRST @USGRTY ;YES, WAIT AND RETRY
LSH P1,-^D9 ;THE PAGE NUMBER AGAIN
MOVE T1,[.PAGCD,,T2] ;POINT TO ARGUMENTS FOR DESTROY
MOVEI T2,1 ;1 ARGUMENT
MOVE T3,P1 ;THE PAGE NUMBER
TLO T3,(1B0) ;MUST DESTROY THE PAGE
PAGE. T1, ;DESTROY THE PAGE
JFCL ;OH WELL!
USGERT: POP P,P1 ;...
POPJ P, ;AND RETURN
XLIST ;FORCE OUT LITERALS
LIT
LIST
END