1
0
mirror of https://github.com/PDP-10/stacken.git synced 2026-02-16 20:51:02 +00:00
Files
PDP-10.stacken/files/stacken-tape-backup/dskb:10_7/soupr/update.mac
Lars Brinkhoff 6e18f5ebef Extract files from tape images.
Some tapes could not be extracted.
2021-01-29 10:47:33 +01:00

527 lines
12 KiB
Plaintext
Raw 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 UPDATE MODULE FOR SOUPR
SUBTTL DEFINITONS
;HANLEY A. STRAPPMAN
SEARCH PRS,JOBDAT,UUOSYM
SALL
TWOSEG
EXTERN PROMPT,SPCI,COLON,SWTCH,EATEOL,CI,DECO,PUR,INDIR
EXTERN EATCR,WLDMAT,LKP,NTR,OCH,ICH
EXTERN SIXI,FNDNAM,DECI,EATS,PUTC,BP,SAVE1,LSTI
EXTERN LSNI,CPOPJ1,OCLS,ICLS,RST,SWINI
EXTERN WILDP,WILDER,SAVE3,WLDCNT,SPCO,CO,CRLFO
;DEFINE AC'S
F=0 ;FLAGS
;FLAGS
F.LOG==1 ;LOG FILENAMES
F.YN==2 ;1=INCLUDE
F.SUM==4 ;CHECKSUM COMMAND
F.UNC==10 ;1=UNCLUDE
F.BAS==40 ;BASE FILE IS WILD
;ASSEMBLY PARAMETERS
PDLSIZ==100 ;SIZE OF PDL
IFNDEF FLAGS,<FLAGS==F.LOG+F.UNC>;DEFAULT FLAGS
;CHANNEL USAGE
A==1 ;INPUT OF BASE FILE
B==2 ;INPUT OF COR FILE
O==3 ;OUTPUT FILE
DEFINE FTL(AA,BB),<
JRST [MOVEI T1,[TSEQO
VB ER.EAT,"?",AA,<BB at ^>]+1
JRST VERBO##]
>
SUBTTL EDIT HISTORY
VEDIT==1 ;COMPLETE VMAJOR=2 AUG 77
VEDIT==2 ;SUPPORT LINE SEQUENCE NUMBERS 9-17-77
VEDIT==3 ;ADD /UNCLUD/UXCLUD 9-17-77
VEDIT==4 ;FIX BUG CREATED BY /UNCLUD 10-10-77
VEDIT==5 ;ADD ERROR RETURN TO OCLS 10-15-77
VEDIT==6 ;CHANGE FROM WILD TO WILDER 10-15-77
VEDIT==7 ;IMPROVED ERROR MESSAGES 1-11-81
VEDIT==10 ;INDIRECT FILES 9-15-81
VEDIT==11 ;/BASE 12-3-82
VEDIT==12 ;SWITCH.INI 6-18-83
VEDIT==13 ;FIX LOG TO ALWAYS APPEND A CRLF TO OUTPUT 3-19-85
;LOAD WITH NEW PARSE WHICH USES UU.LBF (LARGE BUFFERS)
VWHO==0
VMAJOR==2
VMINOR==0
LOC .JBVER
BYTE (3)VWHO(9)VMAJOR(6)VMINOR(18)VEDIT
SUBTTL INITIALIZATION
RELOC 400000
UPDATE: JFCL ;NO CCL
MOVE P,[IOWD PDLSIZ,PDL] ;SETUP PDL
PUSHJ P,RST ;RESET
MOVEI F,FLAGS ;DEFAULT FLAGS
MOVE P2,[XWD -SWIL,SWN] ;READ SWITCH.INI
MOVEI P3,SWX
PUSHJ P,SWINI
JFCL
MOVEM F,SAVFLG ;SAVE DEFAULT FLAGS
COMMAN: PUSHJ P,RST ;RESET
SETZM ZER ;ZERO CORE
MOVE T1,[XWD ZER,ZER+1]
BLT T1,ZER+ZERSIZ-1
PUSHJ P,PARSE ;DO A COMMAND
JRST COMMAN
SUBTTL PARSE THE COMMAND LINE
PARSE: MOVE P2,[XWD -SWL,SWN] ;PROMPT USER
MOVEI P3,SWX
PUSHJ P,PROMPT
POPJ P,
PUSHJ P,INDIR ;DO INDIRECT FILE
MOVE T1,[XWD HGH,LOW] ;COPY NON-NULL DATA
BLT T1,LOW+LOWSIZ-1
MOVE F,SAVFLG ;DEFAULT FLAGS
MOVEI P1,OSPC ;GET O SPC
PUSHJ P,SPCI
POPJ P,
PUSHJ P,EATS ;EAT EQUAL
POPJ P,
CAIE C,"="
FATAL UPDSYN,<Syntax error>
PUSHJ P,CI
POPJ P,
MOVEI P1,ASPC ;GET A SPC
PUSHJ P,SPCI
POPJ P,
PUSHJ P,EATS ;EAT COMMA
POPJ P,
CAIE C,","
FATAL UPDSYN,<Syntax error>
PUSHJ P,CI
POPJ P,
MOVE T1,[XWD ASPC,BSPC] ;STICKY SPC
BLT T1,BSPC+SPCSIZ-1
HRLZI T1,'COR' ;BUT NEW DEFAULT EXT
MOVEM T1,BSPC+.SBEXT
MOVEI P1,BSPC ;GET B SPC
PUSHJ P,SPCI
POPJ P,
MOVE P2,[XWD -SWL,SWN] ;PARSE SWITCHES
MOVEI P3,SWX
PUSHJ P,SWTCH
POPJ P,
PUSHJ P,EATCR ;TEST FOR BREAK CHAR
POPJ P,
PUSHJ P,BP
FATAL UPDSYN,<Syntax error>
MOVEI P1,BSPC ;ASSUME B IS WILD
MOVEI P2,ASPC ;AND A IS NOT
TRNE F,F.BAS ;TRUE?
EXCH P1,P2 ;NOPE, SWITCH THEM
PUSHJ P,WILDP ;WILD?
EXCH P1,P2 ;NO, SWITCH AGAIN
MOVEI P2,MAIN ;WILDCARD LOOKUP
PUSHJ P,WILDER
JFCL
POPJ P,
SUBTTL MAINSTREAM
MAIN: PUSHJ P,SAVE3 ;SAVE P1-P3
AOS WLDCNT ;COUNT IT
MOVEI P2,ASPC ;MATCH WLD SPCS
MOVEI P3,ASPC2
PUSHJ P,WLDMAT
MOVEI P2,BSPC
MOVEI P3,BSPC2
PUSHJ P,WLDMAT
MOVEI P2,OSPC
MOVEI P3,OSPC2
PUSHJ P,WLDMAT
MOVE T1,ASPC2+.SBNAM ;OUTPUT DEFAULT TO INPUT
SKIPN OSPC2+.SBNAM
MOVEM T1,OSPC2+.SBNAM
PUSHJ P,LOG ;DO LOGGING
POPJ P,
MOVEI T1,A ;LOOKUP A FILE
MOVEM T1,ICH
MOVEI P1,ASPC2
PUSHJ P,LKP
POPJ P,
MOVEI T1,B ;LOOKUP B FILE
MOVEM T1,ICH
MOVEI P1,BSPC2
PUSHJ P,LKP
POPJ P,
MOVEI T1,O ;ENTER OUTPUT FILE
MOVEM T1,OCH
MOVEI P1,OSPC2
PUSHJ P,NTR
POPJ P,
MOVE T1,[XWD 1,1] ;PAGE 1 LINE 1
MOVEM T1,SEQ
SETZM CHKSUM ;RESET CHECK SUM
TRZ F,F.SUM ;NO CHECKSUM YET
PUSHJ P,LSNI ;GET 1ST CHAR
JRST EOFNG
LOOP: PUSHJ P,DOIT ;PROCESS ONE COMMAND
JRST EOFNG
TRNN F,F.SUM ;CHECKSUM COMMAND?
JRST LOOP ;NO
JRST CPOPJ1 ;YES
EOFNG: TRNN C,IO.EOF ;REAL ERROR OR JUST EOF?
POPJ P, ;ERROR
ERR ER.EAT,"?",UPDEOF,<Premature EOF>
;ROUTINE TO PROCESS A CORRECTION COMAAND
DOIT: PUSHJ P,EATS ;EAT SPACES
POPJ P,
CAIE C,";" ;COMMENT?
JRST DISP ;NO
PUSHJ P,EATEOL ;YES, EAT IT
POPJ P,
JRST LSNI ;GET 1ST CHAR
DISP: PUSHJ P,SIXI ;GET NAME OF CMD
POPJ P,
MOVE T2,[XWD -CMDL,CMDN] ;FIND IT IN TABLE
PUSHJ P,FNDNAM
POPJ P,
JRST @CMDX(T2) ;DISPATCH IT
;INSERT COMMAND
INS: PUSHJ P,SEQI ;GET STARTING LINE
POPJ P,
PUSHJ P,FIND ;FIND IT
POPJ P,
;FALL TO INSLP1
;ROUTINE TO DO AN INSERT
INSLP1: PUSHJ P,LSNI ;GET 1ST CHAR
POPJ P,
CAIN C," " ;NEW COMMAND?
JRST CPOPJ1 ;YES
CAIE C,11 ;PREFIX?
JRST INSNE ;NO
INSLP2: PUSHJ P,LSNI ;YES, GET NEXT CHAR
POPJ P,
INSNE: TRNN F,F.YN ;INCLUDE IT?
JRST .+3 ;NO
PUSHJ P,PUTC ;YES, OUTPUT IT
POPJ P,
PUSHJ P,BP ;A BREAK CHAR?
JRST INSLP2 ;NO, CONTINUE LINE
JRST INSLP1 ;YES, START NEW LINE
;REPLACE COMMAND
REP: PUSHJ P,SEQI ;GET STARTING LINE
POPJ P,
PUSHJ P,FIND ;FIND IT
POPJ P,
PUSHJ P,DELLP1 ;DO A DELETE
POPJ P,
PUSHJ P,EATEOL ;EAT A LINE
POPJ P,
JRST INSLP1 ;DO AN INSERT
;DELETE COMMAND
DEL: PUSHJ P,SEQI ;GET STARTING LINE
POPJ P,
PUSHJ P,FIND ;FIND IT
POPJ P,
;FALL TO DELLP1
;ROUTINE TO DO A DELETE
DELLP1: PUSHJ P,LSNI ;GET 1ST CHAR
POPJ P,
CAIN C," " ;A NEW COMMAND?
JRST CPOPJ1 ;YES
CAIE C,11 ;PREFIX?
JRST DELNE ;NO
DELLP2: PUSHJ P,LSNI ;YES, INPUT NEXT CHAR
POPJ P,
DELNE: MOVE P1,C ;SAVE IT
TRNN F,F.YN ;YES, INCLUDE THIS COMMAND?
JRST DELNO ;NO
MOVEI T1,A ;YES, ISELECT BASE FILE
MOVEM T1,ICH
PUSHJ P,AI ;INPUT A CHAR
POPJ P,
MOVEI T1,B ;ISELECT COR FILE
MOVEM T1,ICH
DELNO: CAME P1,C ;YES, THEN CHARS MUST MATCH
FTL UPDDEL,<Text to be deleted doesn't match base file>
PUSHJ P,BP ;A BREAK CHAR?
JRST DELLP2 ;NO, CONTINUE LINE
JRST DELLP1 ;YES, START NEW LINE
;CHECK SUM COMMAND
SUM: PUSHJ P,DECI ;GET CHECKSUM
POPJ P,
MOVE P1,T1
PUSHJ P,COMI ;EAT COMMENTS
POPJ P,
PUSHJ P,COPY ;COPY REST OF FILE
POPJ P,
HRRZ T1,CHKSUM ;COMPARE CHECK SUMS
ADDI T1,1
CAME P1,T1
FATAL UPDSUM,<Checksum error>
PUSHJ P,OCLS ;CLOSE FILES
JFCL
MOVEI T1,A
MOVEM T1,ICH
PUSHJ P,ICLS
MOVEI T1,B
MOVEM T1,ICH
PUSHJ P,ICLS
TRO F,F.SUM ;CHECKSUM DONE
JRST CPOPJ1
;ROUTINE TO COPY REST OF FILE
COPY: MOVEI T1,A ;ISELECT BASE FILE
MOVEM T1,ICH
COPYLP: PUSHJ P,AI ;GET A CHAR
JRST COPY0
PUSHJ P,PUTC
POPJ P,
JRST COPYLP
COPY0: TRNE C,IO.EOF ;REAL ERROR OR JUST EOF?
AOS (P) ;EOF, WIN
POPJ P, ;ERROR
;ROUTINE TO TYPE OUT LOG MESSAGE
LOG: TRNN F,F.LOG ;LOGGING?
JRST CPOPJ1 ;NO
SETOM OCH ;OSELECT TTY
PUSHJ P,CRLFO
POPJ P,
MOVEI P1,OSPC2 ;TYPE O SPEC
PUSHJ P,SPCO
POPJ P,
MOVEI C,"="
PUSHJ P,CO
POPJ P,
MOVEI P1,ASPC2 ;TYPE A SPEC
PUSHJ P,SPCO
POPJ P,
MOVEI C,","
PUSHJ P,CO
POPJ P,
MOVEI P1,BSPC2 ;TYPE B SPEC
PUSHJ P,SPCO
POPJ P,
JRST CRLFO
;ROUTINE TO PARSE SEQUENCE NUMBERS
SEQI: PUSHJ P,DECI ;GET LINE NUMBER
POPJ P,
HRRZM T1,TSEQ
PUSHJ P,EATS ;EAT SLASH
POPJ P,
CAIE C,"/"
FATAL UPDSYN,<Syntax error in COR file>
PUSHJ P,LSNI
POPJ P,
PUSHJ P,DECI ;GET PAGE NUMBER
POPJ P,
HRLM T1,TSEQ
;FALL TO COMI
;ROUTINE TO EAT COMMENTS
COMI: TRZ F,F.YN ;ASSUME EXCLUDE
TRNE F,F.UNC ;UNCLUDE?
TRO F,F.YN ;OOPS, INCLUDE
PUSHJ P,EATCR ;EAT CR
POPJ P,
PUSHJ P,BP ;BREAK CHAR?
JRST .+2
JRST CPOPJ1 ;YES
CAIE C,";" ;NO, COMMENT?
FTL UPDSYN,<Syntax error in COR file>
PUSHJ P,LSNI ;YES, EAT THE SEMI
POPJ P,
PUSHJ P,SIXI ;GET NAME
POPJ P,
TRO F,F.YN ;ASSUME INCLUDE
SKIPN T2,NCLD ;INCLUDE SWITCH?
JRST NONCLD ;NO
NCLDLP: MOVE T3,1(T2) ;YES, GET AN ITEM
XOR T3,T1 ;MATCHES?
ANDCM T3,2(T2)
JUMPE T3,EATEOL ;YES, INCLUDE
HRRZ T2,(T2) ;ADVANCE TO NEXT ITEM
JUMPN T2,NCLDLP ;LOOP UNTIL NONE LEFT
TRZ F,F.YN ;NONE LEFT, EXCLUDE
NONCLD: SKIPN T2,XCLD ;EXCLUDE SWITCH?
JRST EATEOL ;NO
TRZ F,F.YN ;YES, ASSUME EXCLUDE
XCLDLP: MOVE T3,1(T2) ;GET AN ITEM
XOR T3,T1 ;MATCHES?
ANDCM T3,2(T2)
JUMPE T3,EATEOL ;YES, EXCLUDE
HRRZ T2,(T2) ;ADVANCE TO NEXT ITEM
JUMPN T2,XCLDLP ;LOOP UNTIL NONE LEFT
TRO F,F.YN ;NONE LEFT, INCLUDE
JRST EATEOL ;EAT THE REST OF THE LINE
;ROUTINE TO FIND A SEQUENCE NUMBER
FIND: TRNN F,F.YN ;INCLUDE THIS?
JRST CPOPJ1 ;NO
MOVEI T1,A ;ISELECT BASE FILE
MOVEM T1,ICH
FINDLP: MOVE T1,SEQ ;THERE YET?
CAMN T1,TSEQ
JRST FOUND ;YES
CAML T1,TSEQ ;NO, TOO FAR?
FTL UPDOOO,<Out of order>
PUSHJ P,AI ;NO, COPY A CHAR
POPJ P,
PUSHJ P,PUTC
POPJ P,
JRST FINDLP ;TRY AGAIN
FOUND: MOVEI T1,B ;ISELECT COR FILE
MOVEM T1,ICH
JRST CPOPJ1
;ROUTINE TO INPUT A CHAR FROM BASE FILE
;CALL WITH BASE FILE ALREADY SELECTED
AI: PUSHJ P,LSNI ;INPUT A CHAR
POPJ P,
MOVE T1,CHKSUM ;ADD IT TO CHECKSUM
ROT T1,1
ADDI T1,1(C)
MOVEM T1,CHKSUM
PUSHJ P,BP ;BREAK CHAR?
JRST CPOPJ1 ;NO
CAIE C,14 ;YES, FORM FEED?
JRST AI0 ;NO
HLRZ T1,SEQ ;YES, BUMP PAGE
ADDI T1,1
HRLZM T1,SEQ
AI0: AOS SEQ ;BUMP LINE
JRST CPOPJ1
SUBTTL ERROR MESSAGES
;ROUTINE TO TYPE THE TARGET SEQUENCE NUMBER
TSEQO: HRRZ T1,TSEQ
PUSHJ P,DECO
POPJ P,
MOVEI C,"/"
PUSHJ P,CO
POPJ P,
HLRZ T1,TSEQ
PJRST DECO
SUBTTL COMMANDS
DEFINE CMD,<
X DELETE,DEL
X INSERT,INS
X REPLAC,REP
X SUM,SUM
> ;END OF CMD
DEFINE X(A,B),<
SIXBIT /A/
>
CMDN: CMD
CMDL=.-CMDN
DEFINE X(A,B),<
B
>
CMDX: CMD
SUBTTL SWITCHES
;/INCLUDE SWITCH
INCLUD: PUSHJ P,SAVE1 ;SAVE P1
MOVEI T1,NCLD ;HE CHANGED HIS MIND, PURGE OLD CORE
PUSHJ P,PUR
PUSHJ P,COLON ;EAT COLON
JRST CPOPJ1
PUSHJ P,LSTI ;GET A SIXBIT LIST
JRST CPOPJ1
MOVEM P1,NCLD ;STORE ADR
POPJ P, ;WIN
;/EXCLUDE SWITCH
EXCLUD: PUSHJ P,SAVE1 ;SAVE P1
MOVEI T1,XCLD ;HE CHANGED HIS MIND, PURGE OLD CORE
PUSHJ P,PUR
PUSHJ P,COLON ;EAT COLON
JRST CPOPJ1
PUSHJ P,LSTI ;GET A SIXBIT LIST
JRST CPOPJ1
MOVEM P1,XCLD ;STORE ADR
POPJ P, ;WIN
DEFINE SW,<
X LOG,<TRO F,F.LOG>
X NOLOG,<TRZ F,F.LOG>
X UNCLUD,<TRO F,F.UNC>
X UXCLUD,<TRZ F,F.UNC>
X BASE,<TRO F,F.BAS>
X NOBASE,<TRZ F,F.BAS>
X COR,<TRZ F,F.BAS>
X NOCOR,<TRO F,F.BAS> ;;LAST SWITCH IN SWITCH.INI
X EXIT,<JRST EXT##>
X HELP,<PUSHJ P,HELPER##>
X XCLUDE,<PUSHJ P,EXCLUD>
X NCLUDE,<PUSHJ P,INCLUD>
>
DEFINE X(A,B),<
SIXBIT /A/
>
SWN: SW
SWL==.-SWN
SWIL==^D8 ;NUMBER OF SWITCHES IN SWITCH.INI
DEFINE X(A,B),<
B
>
SWX: SW
SUBTTL LOWSEG
LIT ;PUT LITERALS IN HIGHSEG
RELOC 0
PDL: BLOCK PDLSIZ ;PUSH DOWN LIST
BSPC: BLOCK SPCSIZ ;B SPC, WITH WILDCARDS
ASPC2: BLOCK SPCSIZ ;A SPC, WITHOUT WILDCARDS
BSPC2: BLOCK SPCSIZ ;B SPC, WITHOUT WILDCARDS
OSPC2: BLOCK SPCSIZ ;O SPC, WITHOUT WILDCARDS
TSEQ: BLOCK 1 ;TARGET SEQUENCE
CHKSUM: BLOCK 1 ;CHECK SUM
SEQ: BLOCK 1 ;SEQUENCE NUMBER
SAVFLG: BLOCK 1 ;SAVED FLAGS FROM SWITCH.INI
;BEGIN REGION TO BE ZEROED
ZER:!
XCLD: BLOCK 1 ;ADR OF EXCLUDE CHAIN
NCLD: BLOCK 1 ;ADR OF INCLUDE CHAIN
;END REGION TO BE ZEROED
ZERSIZ==.-ZER
LOW: ;NON-NULL DATA
RELOC ;BACK TO HIGHSEG
HGH: PHASE LOW
;BEGIN DO NOT SEPARATE
;O SPC, WITH WILDCARDS
OSPC: XWD SPCSIZ,0 ;SIZE OF BLK
SIXBIT /DSK/ ;DEVICE
0 ;DEVICE MASK
BLOCK SFDS+1 ;PPN&SFDS
IFN SFDS,<0>
BLOCK SFDS+1 ;PPN&SFDS MASKS
0 ;FILENAME
0 ;FILENAME MASK
SIXBIT /MAC/ ;EXTENSION
.IOASC ;ASCII MODE
;A SPC, WITH WILDCARDS
ASPC: XWD SPCSIZ,0 ;SIZE OF BLK
SIXBIT /DSK/ ;DEVICE
0 ;DEVICE MASK
BLOCK SFDS+1 ;PPN&SFDS
IFN SFDS,<0>
BLOCK SFDS+1 ;PPN&SFDS MASKS
0 ;FILENAME
0 ;FILENAME MASK
SIXBIT /MAC/ ;EXTENSION
.IOASC ;ASCII MODE
;END DO NOT SEPARATE
DEPHASE
LOWSIZ==.-HGH
RELOC LOW ;BACK TO LOWSEG
BLOCK LOWSIZ
END UPDATE