Trailing-Edge
-
PDP-10 Archives
-
bb-jr93h-bb
-
7,6/ap016/cobddt.c16
There are 8 other files named cobddt.c16 in the archive. Click here to see a list.
REP 26/1 ;16C1
EDIT==47
WIT
EDIT==50
INS 60/2 ;16C2
;.VERSION 12C
;.AUTOPATCH 13
;.NOEDIT
;.ENDA
;.AUTOPATCH 14
;.NOEDIT
;.ENDA
;.AUTOPATCH 15
;.NOEDIT
;.ENDA
;.AUTOPATCH 16
;.EDIT 50 Fix some problems with Subscript handling
; PAM,5-NOV-86,SPR:10-35348
; A:SRC COBDDT
;.ENDA
;.ENDV
REP 23/8 ;16C3
DTFAL: POINT 1,4(T4),8 ;[43] FATHER/BROTHER LINK
WIT
DTOCH: POINT 15,7(DT),17 ;[50] Higher level OCCURS
DTPOP: ;[50]
DTBRO: POINT 15,2(DT),17 ;[50] Father/Brother link
DTFAL: POINT 1,4(T4),8 ;[43] Father/Brother link flag
REP 4/121 ;16C4
LDB DT,[POINT 15,DTSUBW+1(DT),17]
ADD DT,@%DT
SUBSCA: ;GET PROPER BYTE SIZE FOR RECORD
LDB T3,DTUSAG ;GET USAGE
CAIN T3,%US.IN ;INDEX?
MOVEI T3,D1MODE+1 ;USE COMP
HLRZ T2,BYPTRS-1(T3) ;SKELETON BYTE POINTER
TRZ T2,770077 ;JUST LEAVE BYTE SIZE
TLO W2,(T2) ;PUT BYTE SIZE IN
WIT
LDB DT,DTOCH ;[50] Get next higher OCCURS
ADD DT,@%DT
SUBSCA: ;GET PROPER BYTE SIZE FOR RECORD
PUSHJ PP,SUBSCK ;[50] Get usage mode in T1, check for COMP
HLRZ T2,BYPTRS-1(T1) ;[50] Get prototype byte pointer
TRZ T2,770077 ;JUST LEAVE BYTE SIZE
TLO W2,(T2) ;PUT BYTE SIZE IN
;Remember that top level usage is in T1 -- preserve it for SUBSIZ
REP 24/121 ;16C5
LDB T2,[POINT 15,DTSUBW+1(DT),17]
WIT
LDB T2,DTOCH ;[50] Get next higher OCCURS
REP 30/121 ;16C6
;[D42] JRST SUBSC1 ;LOOP
JRST SUBSCA ;[M42] LOOP
WIT
JRST SUBSC1 ;[50] Loop
INS 2/122 ;16C7
; XCT table with current DATAB mode in T5, Grandfather's mode in T1
REP 7/122 ;16C8
MOVEI T2,6 ;4 1-WORD COMP
MOVEI T2,^D12 ;5 2-WORD COMP
MOVEI T2,6 ;6 COMP-1
MOVEI T2,6 ;7 INDEX
PUSHJ PP,SUBSZC ;10 COMP-3
WIT
PUSHJ PP,SUBSZ2 ;[50] 4 1-WORD COMP
PUSHJ PP,SUBSZ3 ;[50] 5 2-WORD COMP
PUSHJ PP,SUBSZ2 ;[50] 6 COMP-1
PUSHJ PP,SUBSZ2 ;[50] 7 INDEX
PUSHJ PP,SUBSZC ;[50] 10 COMP-3
INS 27/122 ;16C9
SUBSZ2: MOVEI T2,6 ;[50] Assume Grandfather is SIXBIT
CAIN T1,%US.D7 ;[50] Grandfather ASCII?
MOVEI T2,5 ;[50] Yes, 5 chrs per word
CAIN T1,%US.EB ;[50] EBCDIC?
MOVEI T2,4 ;[50] Yes, 4 chars/word
POPJ PP, ;[50] Done
SUBSZ3: PUSHJ PP,SUBSZ2 ;[50] Get bytes per word
LSH T2,1 ;[50] Double it
POPJ PP, ;[50] Return.
INS 32/122 ;16C10
SUBSCK: LDB T1,DTUSAG ;[50] Get item's usage
CAIN T1,%US.C3 ;[50] If it's COMP-3, his father
SKIPA T1,[EXP %US.EB] ;[50] must be EBCDIC
CAIG T1,%US.DS ;[50] Is item display?
POPJ PP, ;[50] Yes, we are done
PUSH PP,DT ;[50] Save DATAB pointer
PUSHJ PP,LNKGFA ;[50] Find the Grandfather
LDB T1,DTUSAG ;[50] Get his usage
CAILE T1,%US.DS ;[50] Display?
MOVEI T1,%US.D6 ;[50] No, pretend it is SIXBIT
POP PP,DT ;[50] Restore DATAB pointer
POPJ PP, ;[50] Return with usage in T1
LNKGFA: LDB T1,DTPOP ;[50] Get Father/Brother link
JUMPE T1,CPOPJ ;[50] No links, should be top level
HRRZ DT,T1 ;[50] Create new DATAB pointer
ADD DT,@%DT ;[50]
JRST LNKGFA ;[50] Follow Father/Brother chain
SUM 64079