Trailing-Edge
-
PDP-10 Archives
-
BB-H506D-SM_1983
-
cobol/source/cobcom.mac
There are 14 other files named cobcom.mac in the archive. Click here to see a list.
; UPD ID= 3293 on 12/29/80 at 11:35 AM by NIXON
TITLE COBCOM FOR COBOL V12B
SUBTTL SUBROUTINES USED BY ALL PHASES IN COBOL AL BLACKINGTON/CAM
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1974, 1981 BY DIGITAL EQUIPMENT CORPORATION
SEARCH P,COBVER
IFE TOPS20,<SEARCH UUOSYM> ;[1014] GET SYMBOLS FOR PATH SPECIFICATION
%%P==:%%P
DEBUG==:DEBUG
ONESEG==:ONESEG
TOPS20==:TOPS20
;EDITS
;NAME DATE COMMENTS
;V12*****************
;DMN 23-APR-80 [1014] LIST FULL PATH ON LOOKUP/ENTER ERRORS.
;DMN 22-FEB-79 [636] MORE OF EDIT 510
;V10*****************
;EHM 14-SEP-77 [510] PREVENT CATASTROPHE IN PHASE E WHEN COPY
; TO LINKAGE SECTION IS INCORRECT SUCH THAT THERE
; IS NO LINK SET UP TO THE 01 LEVEL GRANDFATHER.
;EHM 11-AUG-77 [506] MAKE NEW EXIT QUITS WHICH RETURNS TO
; COBOLA WITHOUT GOING TO COBOLK
;DBT 12/7/74 FIX KILL TO JRST TO COBOLK IN ONESEG COMPILER
;DBT 12/1/74 CHANGE REFERENCES TO REGO TO LOCATION RATHER THAN
; IMMEDIATE ADDRESS
;********************
;EDIT 266 ADD TTY ROUTINE TO TURN OFF USER CONTROL O
LOC 137
EXP CBLVER
TWOSEG %HISEG
RELOC %HISEG
SALL
;ENTRY POINTS AND GLOBAL SYMBOLS
IFE ONESEG,<
ENTRY COBEXO ;EXECUTE ONLY ENTRY FROM GETSEG CODE
>
ENTRY DEVERA ;DEVICE TRANSMISSION ERROR
ENTRY DEVDED ;WRITE ERROR ON SCRATCH FILE
ENTRY EOTAPE ;PUT OUT MAG-TAPE EOT MESSAGE
ENTRY SIXOUT ;TYPE OUT A SIXBIT WORD
ENTRY LNKSET ;CREATE A TABLE ADDRESS FROM TABLE-LINK
ENTRY RESTRT ;RESTART COMPILATION (REENTER)
ENTRY REDO ;RESTART COMPILATION (START)
ENTRY KILL ;KILL COMPILATION, DUMP CORE AND FILES
ENTRY KILLF ;KILL COMPILATION, DUMP FILES ONLY
ENTRY QUITS ;[506] STOP COMPILATION, NO DUMP
ENTRY UUOCAL ;UUO TRAP
ENTRY FILOUT ;TYPE OUT DEV:FILE.EXT[P,P]
ENTRY ERATYP ;TYPE OUT ENTER/LOOKUP FAIL MESSAGE
ENTRY TTYON ;[266] TURN TTY OUTPUTS BACK ON
ENTRY PUTLNK,FNDLNK,FNDNXT,GETENT,GETLOC
INTERN CPOPJ,CPOPJ1,CPOPJ2
$LF==12 ;LINE-FEED
$CR==15 ;CARRIAGE-RETURN
$EOF==32 ;END OF FILE
EXTERN KILLAC
EXTERN DEVDEV,DEVFIL,DEVEXT,DEVPP
EXTERN LITLOC,FILLOC,DATLOC,CONLOC,PROLOC,EXTLOC,MNELOC,VALLOC
EXTERN GETFNM, PHASEN, GETFST, MLOAD1,TOPLOC
EXTERN WARNW,FATALW
IFE ONESEG,<
EXTERN GETLOD,SAVEAC
>
;HERE FOR EXECUTE ONLY (TOPS-10 STYLE) ENTRY
;THIS ROUTINE MUST BE THE FIRST IN THE HIGH SEGMENT
IFE ONESEG,<
COBEXO:
IFE TOPS20,<
PORTAL .+1 ;INCASE EXECUTE ONLY
>
HRRZ 17,%HISEG+.JBHSA## ;STARTING ADDRESS
EXCH 17,GETFST ;SWAP WITH INCREMENT
CAILE 17,2 ;MAKE SURE INCREMENT IS LEGAL
HALT . ;NO, KILL JOB
ADDM 17,GETFST ;ADD IN INCREMENT
MOVE 17,SAVEAC+17 ;RESTORE ACC 17
JRST @GETFST## ;GO TO SEGMENT START ADDRESS
>
;DEVICE TRANSMISSION ERROR
;THIS ROUTINE IS ENTERED WITH RH OF "CH" POINTING TO A TABLE
; CONSISTING OF:
; WORD1: DEVICE NAME IN SIXBIT
; WORD2: FILE-NAME IN SIXBIT
; WORD3: FILE-NAME EXTENSION IN LH, IN SIXBIT
; LH OF CH CONTAINS GETSTS FLAGS WHEN DEVERA CALLED.
;A MESSAGE IS TYPED OUT
;DEVERA WAITS FOR THE OPERATOR TO TYPE "CONTINUE".
;WHEN HE DOES, THE ROUTINE RETURNS TO:
; CALL+1 IF DEVICE IS MTA
; CALL+2 IF DEVICE IS DSK OR DTA
; CALL+3 IF DEVICE IS CDR OR LPT
;IF THE DEVICE IS NOT DTA,DSK,MTA,CDR OR LPT, THIS ROUTINE DOES
; A CALL [SIXBIT /EXIT/]
;DEVDED ALWAYS CALLS [SIXBIT /EXIT/]
DEVERA: PUSH PP,TE
MOVE TE,(CH) ;IS IT MTA?
CALLI TE,$DEVCH
TLNE TE,$MTA
TLNN CH,$EOT ;YES--END OF TAPE?
JRST .+3 ;NO
POP PP,TE ;YES--RETURN
POPJ PP,
POP PP,TE
PUSHJ PP,DEVERB
JRST DEVERC
DEVDED: PUSHJ PP,DEVERB
JRST DEVER2
;TYPE OUT ERROR MESSAGE
DEVERB: OUTSTR [ASCIZ "Transmission error for "]
DVERB1: PUSH PP,TA
PUSH PP,TE
MOVE TA,(CH)
PUSHJ PP,SIXOUT
MOVEI TD,":"
OUTCHR TD
SKIPE TA,1(CH)
PUSHJ PP,SIXOUT
HLLZ TA,2(CH)
JUMPE TA,DVERB2
MOVEI TD,"."
OUTCHR TD
PUSHJ PP,SIXOUT
DVERB2: POP PP,TE
POP PP,TA
OUTSTR CRLF
POPJ PP,
CRLF: [ASCIZ "
"]
;END OF MAG-TAPE
EOTAPE: OUTSTR [ASCIZ "Mount another reel on "]
JRST DVERB1
;GET CHARACTERISTICS OF DEVICE
DEVERC: MOVE CH,(CH)
CALLI CH,$DEVCH
TLNN CH,OKDEVS ;IS IT POSSIBLE TO CONTINUE?
JRST DEVER2 ;NO
OUTSTR [ASCIZ "To Retry, type Continue
"]
CALLI 1,$EXIT
TLNN CH,$MTA ;IS IT MAG-TAPE?
POPJ PP, ;YES--EXIT TO CALL+1
TLNN CH,$DSK!$DTA ;NO--IS IT DISK OR DEC-TAPE?
CPOPJ2: AOS (PP) ;NO--EXIT TO CALL+3
CPOPJ1: AOS (PP) ;YES--EXIT TO CALL+2
CPOPJ: POPJ PP,
;CANNOT CONTINUE--EXIT
DEVER2: OUTSTR [ASCIZ "?Cannot continue
"]
JRST RESTRT
OKDEVS=$MTA!$DTA!$LPT!$CDR!$DSK
ERATYP: PUSHJ PP,FILOUT ;TYPE 'DEV:FILE.EXT[PROJ,PROG]'
OUTSTR [ASCIZ " ("]
HRRZ TA,I2
PUSHJ PP,OCTOUT
MOVE TA,ERAPTR
ERAT1: HLRZ TB,(TA)
CAIE TB,(I2)
AOBJN TA,ERAT1
HRRZ TA,(TA)
OUTSTR (TA)
OUTSTR CRLF
TSWT FDSKC;
SWOFF FECOM;
JRST RESTRT
ERAT2: XWD 0,[ASCIZ ") No file name"]
XWD 1,[ASCIZ ") Incorrect proj-prog no."]
XWD 2,[ASCIZ ") Protection failure"]
XWD 3,[ASCIZ ") File being modified"]
XWD 6,[ASCIZ ") Bad UFD or bad RIB"]
XWD 14,[ASCIZ ") No room, or quota exceeded"]
XWD 15,[ASCIZ ") Write lock"]
XWD 16,[ASCIZ ") Not enough table space in monitor"]
XWD 23,[ASCIZ ") SFD not found"]
XWD 24,[ASCIZ ") Search list empty"]
XWD 25,[ASCIZ ") SFD nest level too deep"]
XWD 26,[ASCIZ ") No-create on for all search list"]
XWD 0,[ASCIZ ") Unknown error"] ;Safety valve
INTERN ERAPTR
ERAPTR: XWD ERAT2-.+1,ERAT2
;TYPE OUT "DEV:FILE.EXT[PROJ,PROG]""
FILOUT: MOVE TA,DEVDEV(DA) ;TYPE OUT DEVICE NAME
PUSHJ PP,SIXOUT
MOVEI CH,":"
OUTCHR CH
SKIPE TA,DEVFIL(DA) ;ANY FILE NAME?
PUSHJ PP,SIXOUT ;YES--TYPE IT OUT
SKIPN TA,DEVEXT(DA) ;ANY EXTENSION?
JRST FILO1 ;NO
MOVEI CH,"." ;YES--TYPE IT OUT
OUTCHR CH
PUSHJ PP,SIXOUT
FILO1: SKIPN DEVPP(DA) ;ANY PROJ-PROG #?
POPJ PP, ;NO
MOVEI CH,"[" ;YES--TYPE IT OUT
OUTCHR CH
HLRZ TA,DEVPP(DA)
IFE TOPS20,<
JUMPE TA,FILO4 ;[1014] FULL PATH SPECIFIED IF <0,,ADDRESS>
>
PUSHJ PP,OCTOUT
MOVEI CH,","
OUTCHR CH
HRRZ TA,DEVPP(DA)
PUSHJ PP,OCTOUT
FILO3: MOVEI CH,"]" ;[1014]
OUTCHR CH
POPJ PP,
IFE TOPS20,<
;[1014] TYPE OUT THE FULL PATH SPECIFICATION
FILO4: PUSH PP,DA ;[1014] IN CASE IT'S NEEDED LATER
MOVE DA,DEVPP(DA) ;[1014] GET THE PATH POINTER
HLRZ TA,.PTPPN(DA) ;[1014] GET THE PPN
PUSHJ PP,OCTOUT ;[1014]
MOVEI CH,"," ;[1014]
OUTCHR CH ;[1014]
HRRZ TA,.PTPPN(DA) ;[1014]
PUSHJ PP,OCTOUT ;[1014]
HRLI DA,-5 ;[1014] MAX. SFDS ALLOWED
FILO5: SKIPN TA,.PTSFD(DA) ;[1014] GET SFD
JUMPE TA,FILO6 ;[1014] ALL DONE
MOVEI CH,"," ;[1014]
OUTCHR CH ;[1014]
PUSHJ PP,SIXOUT ;[1014]
AOBJN DA,FILO5 ;[1014] LOOP FOR ALL SFDS
FILO6: POP PP,DA ;[1014]
JRST FILO3 ;[1014] FINISH OFF PATH
>
;TYPE OUT THE OCTAL NUMBER IN RH OF "TA"
INTERN OCTOUT
OCTOUT: MOVE TB,[POINT 3,TA,17]
ILDB CH,TB
TLNE TB,770000
JUMPE CH,.-2
OCTO1: ADDI CH,"0"
OUTCHR CH
TLNN TB,770000
POPJ PP,
ILDB CH,TB
JRST OCTO1
;PUT OUT A SIXBIT WORD ONTO TTY
SIXOUT: MOVE TE,[POINT 6,TA]
SIXO1: ILDB TD,TE
JUMPE TD,CPOPJ
ADDI TD,40
OUTCHR TD
TLNE TE,770000
JRST SIXO1
POPJ PP,
;SET UP A TABLE ADDRESS
;THIS ROUTINE IS USED TO CONVERT A TABLE LINK TO AN ADDRESS WHEN WE
; DON'T KNOW OR CARE WHAT TABLE THE LINK IS TO.
;ENTER WITH TABLE-LINK IN "TA"
; BITS 18-20 = TABLE TYPE, BITS 21-35 = RELATIVE ADDRESS
;EXIT WITH ADDRESS IN "TA"
LNKSET: LDB TE,LNKCOD## ;GET TABLE CODE.
ANDI TA,LMASKB## ;GET THE OFFSET INTO THE TABLE.
JUMPE TA,BADLNK ;IF IT'S ZERO, WE'RE IN TROUBLE.
ADD TA,@LNKTAB(TE) ;ADD IN THE BASE ADDRESS OF THE TABLE.
MOVE TE,LNKTAB(TE) ;GET THE ADDRESS OF THE BASE ADDRESS.
HRRZ TE,1(TE) ;GET THE HIGHEST LOCATION IN THE TABLE.
CAIL TE,-1(TA) ;ARE WE STILL IN THE TABLE?
POPJ PP, ;YES, RETURN.
;FALL INTO ERROR ROUTINE.
;IMPROPER LINK TYPE
BADLNK: OUTSTR [ASCIZ "Bad table-link at "]
SOS (PP)
MOVE TE,[POINT 3,(PP),17]
BADL1: ILDB CH,TE
ADDI CH,"0"
OUTCHR CH
TLNE TE,770000
JRST BADL1
OUTSTR [ASCIZ "
"]
JRST KILL
;SET UP TABLE ADDRESS OF OLDEST GRANDFATHER OF DATAB ITEM
;ENTER WITH TABLE-LINK IN "TA"
; BITS 18-20 = TABLE TYPE, BITS 21-35 = RELATIVE ADDRESS
;EXIT WITH ADDRESS IN "TA"
LNKFA:: PUSHJ PP,LNKSET ;GET ITEMS DATAB ADDR
LNKFA1::LDB TB,DA.LVL## ;IF THIS IS TOP LEVEL, WE'RE DONE
CAIE TB,01
CAIN TB,77
POPJ PP,
JRST LNKFA3 ;[510] JUMP AROUND PUSHJ TO LNKSET
LNKFA2: JUMPE TA,LNKFA4 ;[510] NO MORE LINKS TROUBLE
PUSHJ PP,LNKSET ;GET ADDR OF BROTHER OR FATHER
LNKFA3: LDB TB,DA.FAL## ;[501] WHICH IS IT?
LDB TA,DA.BRO## ;WHICHEVER, THIS IS THE LINK
JUMPE TB,LNKFA2 ;BROTHER
JUMPN TA,LNKFA ;[636] IF NO FATHER, GOT ERROR IN PHASE C
LNKFA4: SWON FERROR ;[510] WE COULDN'T FIND 01 LEVEL
POPJ PP, ;[510] TURN ON ERROR FLAG AND LEAVE.
;TABLE OF ADDRESSES OF POINTERS
LNKTAB: EXP FILLOC
EXP DATLOC
EXP CONLOC
EXP LITLOC
EXP PROLOC
EXP EXTLOC
EXP VALLOC
EXP MNELOC
;PUTLNK INSERTS A TABLE ENTRY IN A NAMTAB SAME NAME CHAIN
;AT ENTRY TA==XWD TABLE ENTRY REL. ADDR.,NAMTAB REL. ADDR.
;THERE ARE NO EXIT PARAMETERS
PUTLNK: HLRZM TA,NEWENT## ;SAVE REL. ADDR. OF NEW ENTRY
ANDI TA,077777
HRRZ TB,NAMLOC## ;NAMTAB S.A.
ADD TA,TB ;NAMTAB ENTRY ABS. ADDR.
LDB TB,[POINT 3,NEWENT,20]
HRRZM TB,NEWTYP## ;TYPE CODE FOR NEW ENTRY
PUTLP: HRRZ TB,(TA) ;LINK ADDRESS
JUMPN TB,PUTCMP ;JUMP IF NOT END OF CHAIN
HRRZ TB,NEWENT ;MAKE CURRENT ENTRY POINT
HRRM TB,(TA) ;TO NEW ONE
POPJ PP,
PUTCMP: HRRZ TC,TB
LSH TC,-17 ;TYPE OF LINK ENTRY
CAML TC,NEWTYP
JRST INSRT ;INSERT IN CHAIN
HRRZ TA,TB ;REL. ADDR. OF LINK
PUSHJ PP,LNKSET ;GET ABS. ADDR. OF LINK IN TA
JRST PUTLP
INSRT: HRRZM TB,SAVE1## ;SAVE LINK
HRRZ TB,NEWENT ;MAKE CURRENT ENTRY POINT
HRRM TB,(TA) ;TO NEW ENTRY
HRRZ TA,TB
PUSHJ PP,LNKSET ;GET ABS. ADDR. OF NEW ENTRY
HRRZ TB,SAVE1 ;MAKE NEW ENTRY POINT WHERE
HRRM TB,(TA) ;CURRENT ENTRY DID
POPJ PP,
;FNDLNK FINDS, IN A SAME NAME CHAIN, A LINK TO A SPECIFIED TABLE
;AT ENTRY TA==XWD 0,REL. ADDR. OF NAMTAB ENTRY
;AND TB==TYPE CODE OF TABLE SOUGHT
;SUCCESS RETURN = CALLING ADDRESS + 2
; TB==XWD REL. ADDR. OF ENTRY FOUND,ABS. ADDR. OF ENTRY FOUND
;FAILURE RETURN = CALLING ADDRESS + 1
;FNDNXT FINDS NEXT ENTRY OF SAME TYPE AS LAST ENTRY TO FNDLNK SOUGHT
;ENTRY PARAMETER IS TA==ABS. ADDR. OF LAST LINK FOUND IN CHAIN
FNDLNK: ANDI TA,077777 ;NAMTAB REL. ADDR.
HRRZ TC,NAMLOC ;NAMTAB S. A.
ADD TA,TC ;NAMTAB ENTRY ABS. ADDR.
HRRZM TB,SAVE1 ;SAVE TYPE SOUGHT
FNDNXT: HRRZ TC,(TA) ;LINK WORD
JUMPE TC,CPOPJ ;FAILURE
HRLZM TC,SLNK## ;SAVE REL. ADDR.
HRRZ TB,TC
LSH TB,-17 ;TYPE OF LINK
CAMLE TB,SAVE1 ;COMPARE TO TYPE SOUGHT
POPJ PP, ;FAILURE
XCT GETLOC(TB) ;GET TABLE S.A. IN TD
ANDI TC,077777 ;ENTRY REL. ADDR.
ADD TC,TD ;ENTRY ABS. ADDR.
HRRZ TA,TC
CAME TB,SAVE1 ;SKIP IF FOUND
JRST FNDNXT
HRRZ TB,TA ;ABSOLUTE ADDRESS OF ENTRY
HLL TB,SLNK ;RELATIVE ADDRESS OF ENTRY
POP PP,TE ;RETURN ADDRESS
JRST 1(TE) ;SUCCESS EXIT
;GETENT FINDS AN ENTRY OF A GIVEN SIZE IN A SPECIFIED TABLE,
; EXPANDING THE TABLE IF NECESSARY
;AT ENTRY TA==XWD TABLE TYPE CODE,ENTRY SIZE
;AT EXIT TA=XWD ENTRY REL. ADDR.,ENTRY ABS. ADDR.
GETENT: HLRZ TC,TA ;TABLE TYPE
IFN XPNTST,< ;FORCE TABLE EXPANSION
PUSH PP,TA ; FOR COMPILER DEBUGGING
CAIN TC,CD.DAT ;ONLY FOR A CERTAIN TABLE-TYPE.
PUSHJ PP,@XP1TBL(TC) ;EXPAND TABLE BY 1
POP PP,TA ;RESTORE TA
HLRZ TC,TA ;RESTORE TC
>;END IFN XPNTST
XCT GETNXT(TC) ;NEXT-HOLE WORD IN TB
MOVE CP,TB ;SAVE NEXT HOLE POINTER
HRLZ TD,TA
HRR TD,TA ;ENTRY SIZE IN BOTH HALVES OF TD
HRRZ TE,TD ;SAVE SIZE
ADD TD,TB
JUMPGE TD,XPNIT ;NOT ENOUGH ROOM--EXPAND
XCT PUTNXT(TC) ;UPDATE NEXT-HOLE WORD
HRRZI LN,0
PUSH CP,LN ;CP WILL POINT TO ACTUAL ENTRY
HRRZ TA,CP ;ABS. ADDR. OF ENTRY IN RIGHT HALF OF TA
XCT GETLOC(TC) ;GET S.A. OF TABLE IN TD
HRRZ TB,TA ;ENTRY ABS. ADDR.
SUB TB,TD
CAILE TB,77777 ;[506] IF TABLE BIGGER THAN 32768
CAIL TC,3 ;[506] AND IF FILTAB,DATTAB OR CONTAB
SKIPA ;[506] O.K. EITHER SMALLER OR OTHER TABLE
JRST OVRFLO ;[506] TABLE OVERFLOW TROUBLE!!
CAILE TC,7
HRRZI TC,0
LSH TC,17
OR TB,TC ;ENTRY TYPE CODE
HRL TA,TB ;L. H. OF TA==REL. ADDR. OF ENTRY
HRRZ TB,TA ;R. H. OF TB==ABS. ADDR. OF ENTRY
SETZM (TB)
ADDI TB,1
SOJG TE,.-2 ;ZERO OUT ENTRY
POPJ PP,
XPNIT: MOVEM TA,SAVETA## ;SAVE PARAMETER
PUSHJ PP,@XPNTBL(TC) ;EXPAND TABLE
MOVE TA,SAVETA ;RESTORE PARAMETER
JRST GETENT ;TRY AGAIN
OVRFLO: XCT GIVERR(TC) ;[506] GIVE USER PROPER ERROR MESSAGE
MOVEI TA,"C" ;[506] QUIT NEEDS TO KNOW PHASE NUMBER
MOVEM TA,PHASEN## ;[506] SO BE SURE IT IS THERE
JRST QUITS ;[506] THERE IS NOTHING MORE WE CAN DO
;[506] TO HELP USER DUMP IS NO USE HERE
GIVERR: OUTSTR [ASCIZ /?File table overflow - FILE SECTION too big/] ;[506]
OUTSTR [ASCIZ /?Data table overflow - DATA DIVISION too big/] ;[506]
OUTSTR [ASCIZ /?Condition table overflow - too many level 88's/];[506]
DEFINE TABSET (A,B,C,D,E,F,G)<
IFN G,<
MOVE TB,A'NXT## ;A'TAB
>>
GETNXT: TABLES
DEFINE TABSET (A,B,C,D,E,F,G)<
IFN G,<
MOVEM TD,A'NXT ;A'TAB
>>
PUTNXT: TABLES
DEFINE TABSET (A,B,C,D,E,F,G)<
IFN G,<
HRRZ TD,A'LOC## ;A'TAB
>>
GETLOC: TABLES
DEFINE TABSET (A,B,C,D,E,F,G)<
IFN G,<
XWD 0,XPN'A## ;A'TAB
>>
XPNTBL: TABLES
IFN XPNTST,<
DEFINE TABSET (A,B,C,D,E,F,G)<
IFN G,<
XWD 0,XP1'A## ;A'TAB
>>
XP1TBL: TABLES
>;END IFN XPNTST
;RESTART DUE TO "START" CONSOLE COMMAND
REDO: MOVEI SW,0
;RESTART DUE TO "REENTER" CONSOLE COMMAND
; ALSO USED BY COBOLG, COBOLK, AND QUITS [506]
RESTRT: TSWF FECOM; ;ANY MORE COMMANDS?
CALLI $EXIT ;NO--QUIT
HRRZ TA,%HISEG+.JBHSA## ;STARTING ADDRESS
AND SW,[EXP FDSKC] ;TURN OFF ALL FLAGS EXCEPT FDSKC
IFE ONESEG,<
MOVE TB,PHASEN ;ARE WE IN FIRST MACHINE LOAD?
CAIG TB,MLOAD1
>
JRST 2(TA) ;YES--NO NEED TO LOAD IT
IFE ONESEG,<
IFN ANS68,<
IFE FT68274,<
MOVE TB,['COBOL ']
>
IFN FT68274,<
MOVE TB,['68274 ']
>
>
IFN ANS74,<
MOVE TB,['CBL74 ']
>
MOVEM TB,GETFNM+1
MOVEI TA,2 ;STARTING ADDRESS INCREMENT
MOVEM TA,GETFST## ;INCREMENT
JRST GETLOD
>
;IF THIS ROUTINE IS ENTERED AT "KILL", THE FOLLOWING OCCURS:
; 1) AC'S SAVED
; 2) ALL DEVICES RELEASED
; 3) CORE DUMP OF THE IMPURE AREA TAKEN
; 4) ALL SCRATCH FILES DUMPED
;IF THIS ROUTINE IS ENTERED AT "KILLF", THE FOLLOWING OCCURS
; 1) ALL DEVICES RELEASED
; 2) ALL SCRATCH FILES DUMPED
KILL:
IFE ONESEG,<
PORTAL .+1 ;INCASE EXECUTE ONLY
>
MOVEM 17,KILLAC+17 ;SAVE AC'S
MOVEI 17,KILLAC
BLT 17,KILLAC+16
JSP TB,SETUP
SETZ TE, ;STARTING ADDRESS INCREMENT
JRST KILLCALL
KILLF: JSP TB,SETUP
IFE ONESEG,< MOVEI TE,2> ;STARTING ADDRESS INCREMENT
IFN ONESEG,< JRST COBOLK##+2>
KILLCALL:
IFE ONESEG,<
IFN ANS68,<
IFE FT68274,<
MOVE TB,['COBOLK']
>
IFN FT68274,<
MOVE TB,['68274K']
>
>
IFN ANS74,<
MOVE TB,['CBL74K']
>
MOVEM TB,GETFNM+1
MOVEM TE,GETFST
JRST GETLOD
>
IFN ONESEG,<JRST COBOLK##>
SETUP: SKIPE TA,TOPLOC
MOVEM TA,.JBFF##
MOVSI TA,(RELEASE) ;RELEASE ALL DEVICES
KILL1: XCT TA
ADD TA,[Z 1,]
CAME TA,[RELEASE 17,0]
JRST KILL1
MOVE 0,PHASEN ;SAVE PHASE NUMBER FOR COBOLK
JRST (TB)
;[506] THIS ROUTINE STOPS COMPILATION, RELEASES ALL DEVICSE AND
;[506] RETURNS TO COBOLA WITHOUT DOING A DUMP OR GIVING CATASTROPHE
;[506] IN PHASE ? MESSAGE FOR USER ERROR WHEN COMPILER CAN'T CONTINUE
QUITS: OUTSTR [ASCIZ /
?Cannot continue compilation
/] ;[506] TELL USER WE ARE QUITTING
JSP TB,SETUP ;[506] RELEASE ALL DEVICES
MOVE 0,KILLAC ;[506]
JRST RESTRT ;[506] RESTART AT COBOLA
;HANDLE UUO TRAPS
UUOCAL:
IFE TOPS20,<
PORTAL .+1 ;INCASE EXECUTE ONLY
>
MOVEM TE,KILLAC+1 ;SAVE TE
LDB TE,[POINT 9,.JBUUO##,8]; GET OP-CODE OF UUO
CAILE TE,HIUUO ;ONE WE RECOGNIZE?
JRST UUOC1 ;NO--ERROR
PUSHJ PP,@UUOTAB(TE) ;YES--EXECUTE A ROUTINE
MOVE TE,KILLAC+1 ;RESTORE TE
POPJ PP,
UUOC1: MOVEM CH,KILLAC ;SAVE CH
OUTSTR [ASCIZ "Illegal UUO at location "]
SOS (PP)
MOVE TE,[POINT 3,(PP),17]
UUOC2: ILDB CH,TE
ADDI CH,"0"
OUTCHR CH
TLNE TE,770000
JRST UUOC2
OUTSTR [ASCIZ "
"]
MOVE TE,KILLAC+1
MOVE CH,KILLAC
JRST KILL
UUOTAB: EXP UUOC1 ;0 - ILLEGAL
EXP UUO1 ;1 - WARNING DIAG
EXP UUO2 ;2 - WARNING DIAG (POP OFF ONE RETURN)
EXP UUO3 ;3 - FATAL DIAG
EXP UUO4 ;4 - FATAL DIAG (POP OFF ONE RETURN)
HIUUO==.-UUOTAB-1 ;HIGHEST LEGAL UUO
UUO2: POP PP,DW ;POP OFF ONE RETURN
MOVEM DW,(PP)
UUO1: HRRZ DW,.JBUUO
JRST WARNW
UUO4: POP PP,DW ;POP OFF ONE RETURN
MOVEM DW,(PP)
UUO3: HRRZ DW,.JBUUO
JRST FATALW
; TURN ON THE USERS TTY OUTPUT IF HE DID A CONTROL O
TTYON: SETO TA, ;[266] GET USERS
GETLCH TA ;[266] TTY LINE
HRRZS TA ;[266] STORE UNIVERSAL INDEX NUMBER
TTYLP: MOVE TC,[XWD 2,TB] ;[266] SET UP TO SEE
MOVEI TB,1000 ;[266] CHECK TOIP BIT OF
TRMOP. TC, ;[266] USERS TTY OUTPUT
JRST TTYDON ;[266] NO TRMOP. UUO- TRY TO FORCE IT
JUMPE TC,TTYDON ;[266] OUTPUT IN PROGRESS; IF SO SLEEP
TTYSLP: MOVEI TB,1 ;[266] FOR SLEEPING
MOVEI TC,100 ;[266] SLEEP 100MS
HIBER TC, ;[266]
SLEEP TB, ;[266] SLEEP 1 SEC IF NO HIBER
JRST TTYLP ;[266] TRY AGAIN
TTYDON: SKPINC ;[266] THIS TURN OFF CONTROL BIT
JFCL ;[266] DON'T CARE WHAT IS IN TTY BUFFER
POPJ PP, ;[266] RETURN
END