mirror of
https://github.com/rcornwell/ctss.git
synced 2026-01-12 00:02:48 +00:00
497 lines
12 KiB
Plaintext
497 lines
12 KiB
Plaintext
* LDCTSS - SETUP CTSS FILES.
|
|
*
|
|
* FILES FROM TAPE SYSCK1 (B5) TO THE CTSS DISK.
|
|
* IMAGE FILES FROM TAPE (B6) TO THE CTSS DISK.
|
|
* BSS FILES FROM TAPE (B7) TO THE CTSS DISK.
|
|
*
|
|
LBL LDCTSS
|
|
COUNT 100
|
|
SST IBSYS
|
|
PMC ON
|
|
ENTRY LOAD
|
|
REM
|
|
*
|
|
BLKSIZ EQU 432
|
|
IMGORG EQU 20
|
|
RETRY EQU 100 MAX. NUMBER OF READ TRIES
|
|
UNIT EQU 9 SYSCK2
|
|
RECLEN EQU 140 10 84 CHARACTER LINES PER RECORD
|
|
CTSSID MACRO CTSS FILE DIRECTORY NAME
|
|
BCI 2, M1416CMFL02
|
|
CTSSID END
|
|
*
|
|
LOAD EQU *
|
|
TCOA *
|
|
TCOB *
|
|
HTR *+1
|
|
TSX $SETIO,4 INITIALIZE FILE SYSTEM
|
|
MZE =0
|
|
SXA DONE,4
|
|
STZ MODE
|
|
STZ RECS
|
|
TSX (PROUT,4 WRITE OUT FIRST LINE OF BUFFER
|
|
PZE 1
|
|
PZE STR,,4
|
|
*
|
|
* Read records until end of file
|
|
*
|
|
LOOP TSX READ,4
|
|
ZET EOFS
|
|
TRA DONE
|
|
ZET RTTS
|
|
TRA ERROR
|
|
LXA EORS,2
|
|
AXT 0,1
|
|
TXI *+1,1,-14
|
|
TIX *-1,2,14 COMPUTE THE NUMBER OF RECORDS IN BLOCK
|
|
LXA EORS,2
|
|
TXH *+4,2,14 CHECK IF MORE THEN ONE RECORD
|
|
FILE CAL BUF CHECK IF $CTSS
|
|
ERA CTSS
|
|
TZE FUNC
|
|
LXA RECS,2 COMPUTE NUMBER OF LINES AND SUM
|
|
TXI *+1,2,1
|
|
TIX *-1,1,14
|
|
SXA RECS,2
|
|
TRA LOOP
|
|
REM RECS CHECK IF NO RECORDS.
|
|
REM SFIL GO SAVE FILE.
|
|
FUNC AXT 14,1
|
|
CAL BUF+14,1
|
|
SLW CMD+14,1
|
|
TIX *-2,1,1
|
|
TSX (PROUT,4
|
|
PZE 1
|
|
PZE CMD,,14
|
|
CAL TYPE
|
|
SLW M2+1
|
|
AXT 14,1 SAVE LINE AWAY.
|
|
CAL TYPE Get command
|
|
LAS =HO Check if octal file
|
|
TRA TYP2
|
|
TRA OCTAL PROCESS OCTAL FILE
|
|
LAS =HM CHECK FOR LINE MARK
|
|
TRA TYPX
|
|
TRA LINMRK
|
|
LAS =HL CHECK IF LINK
|
|
TRA TYPX
|
|
TRA LNKFIL
|
|
TYP3 LAS =HC
|
|
TRA TYP4
|
|
TRA CARD
|
|
LAS =HB COPY BSS FILE
|
|
TRA TYPX
|
|
TRA BSSFIL
|
|
TRA TYPX
|
|
TYP4 LAS =HF TRANSFER FILE
|
|
TRA TYPX
|
|
TRA XFRFIL
|
|
TRA TYPX
|
|
* GREATER THEN O
|
|
TYP2 LAS =HU If UFD mode
|
|
TRA TYPX
|
|
TRA SETUFD
|
|
LAS =HS CHECK IF SYSTEM FILE
|
|
TRA TYPX
|
|
TRA SYSFIL
|
|
TYPX EQU *
|
|
TSX (PROUT,4 WRITE OUT FIRST LINE OF BUFFER
|
|
PZE 2
|
|
PZE M2,,4
|
|
PZE CMD,,14
|
|
TRA LOOP
|
|
ERROR TSX (PROUT,4 WRITE OUT ERROR MESSAGE
|
|
PZE 1
|
|
PZE EMSG,,4
|
|
DONE TSX $EXIT,4
|
|
AXT **,4 RETURN WHEN DONE.
|
|
HTR *+1
|
|
TRA 1,4
|
|
MSG BCI 1,READ
|
|
PZE
|
|
BCI 2, RECORDS
|
|
PZE
|
|
PZE
|
|
PZE
|
|
M BCI 4, START RECORD
|
|
M2 BCI 4, GOT
|
|
EMSG BCI 4, READ ERROR
|
|
STR BCI 4, LDCTSS START
|
|
CTSS BCI 1,$CTSS
|
|
*
|
|
* Process $CTSS U records.
|
|
*
|
|
* BUF+2 = PROJ
|
|
* BUF+3 = PROG
|
|
* BUF+4 = QUOTA in octal.
|
|
SETUFD EQU *
|
|
AXC 6,4 Load count.
|
|
LDQ SFILE1 LOAD QUOTA.
|
|
tsx boct,4
|
|
SLW QUOTA
|
|
LDQ SFILE2 LOAD drum QUOTA.
|
|
tsx boct,4
|
|
SLW dquota
|
|
SET3 TSX $ATTACH,4 Try ATTACH to UFD
|
|
PAR PROJ
|
|
PAR PROG
|
|
PAR ADDUSR Go add it if not defined
|
|
TRA UQ It's defined, Check next.
|
|
ADDUSR TSX $UPDMFD,4 Add it
|
|
PAR PROJ
|
|
PAR PROG
|
|
PAR ERRMFD
|
|
PAR MFCODE
|
|
TSX $ATTACH,4 Try ATTACH to UFD
|
|
PAR PROJ
|
|
PAR PROG
|
|
UQ NZT QUOTA
|
|
TRA ADDIT
|
|
TSX $ALLOT,4 Space on DISK
|
|
PAR =1 DISK
|
|
PAR dquota
|
|
PAR =0
|
|
PAR ALLERR
|
|
PAR MFCODE
|
|
TSX $ALLOT,4 Space on DISK
|
|
PAR =2 DISK
|
|
PAR QUOTA
|
|
PAR =0
|
|
PAR ALLER1
|
|
PAR MFCODE
|
|
ADDIT CLA QUOTA REPORT LAST FILE READ.
|
|
TSX (DECVA,4
|
|
STQ UFDADD+5
|
|
CLA dQUOTA REPORT LAST FILE READ.
|
|
TSX (DECVA,4
|
|
STQ UFDADD+6
|
|
CAL PROJ
|
|
SLW UFDADD+2
|
|
CAL PROG
|
|
SLW UFDADD+4
|
|
TSX (PROUT,4
|
|
PZE 1
|
|
PZE UFDADD,,6
|
|
TRA LOOP
|
|
UFDADD BCI 8, UFD ADDED
|
|
ALLERR CAL =HALL1
|
|
TRA ERRMFD+1
|
|
ALLER1 CAL =HALL2
|
|
TRA ERRMFD+1
|
|
ERRMFD CAL =HUPDMFD
|
|
SLW MFDERR+2
|
|
CAL PROJ
|
|
SLW MFDERR+3
|
|
CAL PROG
|
|
SLW MFDERR+4
|
|
TSX (PROUT,4
|
|
PZE 1
|
|
PZE MFDERR,,7
|
|
TRA LOOP
|
|
MFDERR BCI 6, UFD ERROR
|
|
MFCODE PZE
|
|
QUOTA PZE
|
|
DQUOTA PZE
|
|
*
|
|
*
|
|
* $CTSS L PROJ PROG NAME1 NAME2 PROJ PROG FNAME1 FNAME2 Link
|
|
* BUF+2 = PROJ1
|
|
* BUF+3 = PROG1
|
|
* BUF+4 = NAME1
|
|
* BUF+5 = NAME2
|
|
* BUF+6 = PROJ2
|
|
* BUF+7 = PROG2
|
|
* BUF+8 = FNAME1
|
|
* BUF+9 = FNAME2
|
|
LNKFIL EQU *
|
|
* $CTSS C PROJ PROG NAME1 NAME2 Card deck
|
|
* $CTSS M PROJ PROG NAME1 NAME2 Line mark
|
|
* $CTSS O PROJ PROG NAME1 NAME2 octal file
|
|
* $CTSS S NAME1 Same as card deck, but name1 TIMACC
|
|
SYSID CTSSID
|
|
SYSFIL STZ LFLAG
|
|
TSX $ATTACH,4 Try ATTACH to UFD
|
|
PAR SYSID
|
|
PAR SYSID+1
|
|
PAR =0 Go add it if not defined
|
|
CAL PROJ
|
|
SLW SFILE1
|
|
CAL =HTIMACC
|
|
SLW SFILE2
|
|
TRA LDFIL
|
|
LINMRK STL LFLAG
|
|
TRA *+2
|
|
CARD STZ LFLAG
|
|
TSX $ATTACH,4 Try ATTACH to UFD
|
|
PAR PROJ
|
|
PAR PROG
|
|
PAR =0 Go add it if not defined
|
|
LDFIL TSX $OPEN,4 OPEN FILE
|
|
PAR =HW
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
PAR =0
|
|
PAR =2
|
|
TSX $BUFFER,4
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
PAR BUF1,,BLKSIZ
|
|
AXT BLKSIZ,1 set up number of words to write.
|
|
SXA SPTR,1
|
|
STZ RECS
|
|
RD TSX READ,4
|
|
ZET EOFS
|
|
TRA DONE
|
|
ZET RTTS
|
|
TRA ERROR
|
|
LXA EORS,2
|
|
AXT 0,1
|
|
TXI *+1,1,1
|
|
TIX *-1,2,14 COMPUTE THE NUMBER OF RECORDS IN BLOCK
|
|
TXH *+4,1,1 CHECK IF MORE THEN ONE RECORD
|
|
CAL BUF CHECK IF $CTSS
|
|
ERA CTSS
|
|
TZE RDONE DONE READING FILE
|
|
* write records to file.
|
|
* XR1 has number of lines.
|
|
LXA EORS,2
|
|
CLA EORS
|
|
ADD L(BUF)
|
|
STA L2
|
|
L1 AXT 14,4 COPY ONE LINE
|
|
L2 CAL **,2
|
|
SLW LINE+14,4
|
|
TIX *+1,2,1
|
|
TIX L2,4,1
|
|
TSX (PROUT,4 WRITE OUT FIRST LINE OF BUFFER
|
|
PZE 1
|
|
PZE LINE,,14
|
|
CLA RECS Bump record count
|
|
ADD =1
|
|
STO RECS
|
|
AXC 14,4 Number of words to copy
|
|
NZT LFLAG CHECK IF LINE MARK
|
|
TRA WRL NO GO WRITE IT OUT.
|
|
* Line marked file, find last non blank word
|
|
CAL LINE-1,4 BLANK OUT LAST RECORD.
|
|
ANA =O777700000000
|
|
ORA =H00
|
|
SLW LINE-1,4
|
|
CAL =H LOAD BLANKS
|
|
L3 LAS LINE-1,4 SEE IF BLANKS
|
|
TRA L4
|
|
TXI *+2,4,1 Find first non blank word.
|
|
TRA L4
|
|
TXL L3,4,-1 Always at least one word
|
|
L4 PCA 0,4 Set Length
|
|
ORA MARK
|
|
LXA SPTR,1
|
|
SLW BUF1+BLKSIZ+1,1 Write it out.
|
|
TIX *+1,1,1 Go flush it.
|
|
SXA SPTR,1
|
|
TXL FLUSH,1,0
|
|
WRL PCA 0,4
|
|
PAX 0,4
|
|
TXI *+1,4,LINE
|
|
SXA WR,4
|
|
PAX 0,4
|
|
SPTR AXT **,1
|
|
WR CAL **,4
|
|
SLW BUF1+BLKSIZ+1,1
|
|
TIX *+1,1,1
|
|
SXA SPTR,1
|
|
TXL FLUSH,1,0
|
|
TIX WR,4,1
|
|
WR1 TXH L1,2,1 record done?
|
|
TRA RD
|
|
RDONE AXT BLKSIZ,1 COMPUTE LENGTH OF BUFFER
|
|
PXA 0,1
|
|
SUB SPTR
|
|
PAX 0,1
|
|
SXD LEN,1
|
|
TNX NOWR,1,0
|
|
TSX $WRWAIT,4
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
PAR =0
|
|
LEN PAR BUF1,,**
|
|
NOWR TSX $CLOSE,4
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
CLA RECS REPORT LAST FILE READ.
|
|
TSX (DECVA,4
|
|
STQ MSG+1
|
|
CAL SFILE1
|
|
SLW MSG+4
|
|
CAL SFILE2
|
|
SLW MSG+5
|
|
TSX (PROUT,4 WRITE OUT FIRST LINE OF BUFFER
|
|
PZE 1
|
|
PZE MSG,,6
|
|
* Report file read and number of records.
|
|
TRA FUNC
|
|
FLUSH EQU *
|
|
SXA FLXR4,4
|
|
TSX $WRWAIT,4
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
PAR =0
|
|
PAR BUF1,,BLKSIZ
|
|
AXT BLKSIZ,1
|
|
SXA SPTR,1
|
|
FLXR4 AXT **,4
|
|
TRA WR
|
|
OCTAL EQU *
|
|
* Read a record into memory.
|
|
READ SXA RDXR4,4 SAVE INDEX FOR RETURN
|
|
STZ RTTS
|
|
STZ EOFS
|
|
TCOB *
|
|
TRCB *+1
|
|
RTDB 5 READ TAPE B5
|
|
RCHB IOCOM
|
|
TCOB *
|
|
TRCB BADREC
|
|
TEFB TRPEOF
|
|
SCHB ERCODE GET RECORD LENGTH
|
|
CLA ERCODE
|
|
SUB IOCOM
|
|
STA EORS
|
|
RDXR4 AXT **,4
|
|
TRA 1,4
|
|
BADREC STL RTTS
|
|
TRA RDXR4
|
|
TRPEOF STL EOFS
|
|
TRA RDXR4
|
|
* Read a record into memory.
|
|
RDBIN SXA RDXR4,4 SAVE INDEX FOR RETURN
|
|
STZ RTTS
|
|
STZ EOFS
|
|
TCOB *
|
|
TRCB *+1
|
|
RTBB 6 READ TAPE B6
|
|
RCHB BINCOM
|
|
TCOB *
|
|
TRCB BADREC
|
|
TEFB TRPEOF
|
|
SCHB ERCODE GET RECORD LENGTH
|
|
CLA ERCODE
|
|
SUB IOCOM
|
|
STA EORS
|
|
TRA RDXR4
|
|
* Read a bss record into memory.
|
|
RDBSS TRA *+1
|
|
RTBB 7 READ TAPE 7
|
|
TCOB *
|
|
TEFB *-2 REPEAT UNTIL EOF
|
|
STL RDBSS SKIP THIS AFTER FIRST TIME.
|
|
SXA RDXR4,4 SAVE INDEX FOR RETURN
|
|
STZ RTTS
|
|
STZ EOFS
|
|
TCOB *
|
|
TRCB *+1
|
|
RTBB 7 READ TAPE B7
|
|
RCHB BSSCOM
|
|
TCOB *
|
|
TRCB BADREC
|
|
TEFB TRPEOF
|
|
SCHB ERCODE GET RECORD LENGTH
|
|
CLA ERCODE
|
|
SUB IOCOM
|
|
STA EORS
|
|
TRA RDXR4
|
|
XFRFIL STZ LFLAG
|
|
TSX $ATTACH,4 Try ATTACH to UFD
|
|
PAR PROJ
|
|
PAR PROG
|
|
PAR =0 Go add it if not defined
|
|
TSX $OPEN,4 OPEN FILE
|
|
PAR =HW
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
PAR =0
|
|
PAR =2
|
|
TSX $BUFFER,4
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
PAR BUF1,,BLKSIZ
|
|
STZ RECS
|
|
RDB TSX RDBIN,4
|
|
ZET EOFS
|
|
TRA DONBIN
|
|
ZET RTTS
|
|
TRA ERROR
|
|
LXA EORS,2
|
|
SXD BINSZ,2
|
|
TSX $WRWAIT,4
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
PAR =0
|
|
BINSZ PAR BUF1,,**
|
|
TRA RDB
|
|
DONBIN TSX $CLOSE,4
|
|
PAR SFILE1
|
|
PAR SFILE2
|
|
CAL MSG
|
|
SLW BUF
|
|
CAL =HBIN
|
|
SLW BUF+1
|
|
CAL SFILE1
|
|
SLW BUF+2
|
|
CAL SFILE2
|
|
SLW BUF+3
|
|
TSX (PROUT,4 WRITE OUT FIRST LINE OF BUFFER
|
|
PZE 1
|
|
PZE BUF,,4
|
|
TRA LOOP
|
|
BSSFIL EQU *
|
|
* Convert BCD to Octal BCD in MQ
|
|
boct stz num
|
|
sxa boct3,4
|
|
axt 6,4
|
|
boct1 zac
|
|
LGL 6 SHIFT CHARACTER INTO AC
|
|
CAS =H00000 COMPARE TO BLANK
|
|
TRA *+2 Check for octal
|
|
TRA boct2 SKIP if blank
|
|
cas =7 Check if octal
|
|
tra boct3
|
|
tra *+1
|
|
LGR 3 MOVE NUMBER TO LOWER BITS OF MQ
|
|
CAL num GET QUOTA
|
|
LGL 3 MOVE BITS IN PLACE
|
|
SLW num
|
|
boct2 TIX boct1,4,1
|
|
boct3 axt **,4
|
|
cal num
|
|
tra 1,4
|
|
REM
|
|
num pze **
|
|
LFLAG PZE **
|
|
MODE PZE **
|
|
RTTS PZE **
|
|
EORS PZE **
|
|
EOFS PZE **
|
|
RECS PZE **
|
|
TA PZE
|
|
TB PZE
|
|
ERCODE PZE
|
|
BINCOM IOST BUF1,0,BLKSIZ READ IN BINARY RECORD.
|
|
IOCOM IOST BUF,0,RECLEN COM TO READ UP TO N WORDS
|
|
BSSCOM IOST BUF,0,RECLEN+RECLEN READ IN BSS RECORD.
|
|
MARK OCT 777777000000
|
|
LINE BSS 14
|
|
L(BUF) PZE *+1
|
|
BUF BSS RECLEN
|
|
BSS RECLEN
|
|
BUF1 BSS BLKSIZ
|
|
CMD BSS 14
|
|
TYPE EQU CMD+1
|
|
PROJ EQU CMD+2
|
|
PROG EQU CMD+3
|
|
SFILE1 EQU CMD+4
|
|
SFILE2 EQU CMD+5
|
|
REM
|
|
REM
|
|
END
|