Trailing-Edge
-
PDP-10 Archives
-
BB-H138B-BM
-
language-sources/lnkplt.mac
There are 38 other files named lnkplt.mac in the archive. Click here to see a list.
TITLE LNKPLT - INTERFACE TO PLOTTER MODULE
SUBTTL D.M.NIXON/DMN/JLd/SRM/JBC/JNG/DZN 24-Aug-79
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1973, 1979 BY DIGITAL EQUIPMENT CORPORATION
SEARCH LNKPAR,LNKLOW,MACTEN,UUOSYM,SCNMAC
SALL
ENTRY LNKPLT,GETSON
CUSTVR==0 ;CUSTOMER VERSION
DECVER==4 ;DEC VERSION
DECMVR==1 ;DEC MINOR VERSION
DECEVR==1220 ;DEC EDIT VERSION
SEGMENT
SUBTTL REVISION HISTORY
;START OF VERSION 2
;137 INITIAL VERSION
;170 INTEGRATE WITH BLISS CODE ETC.
;START OF VERSION 2B
;261 Plot root if null structure
;263 Allow more words per level in stack size calculation
;315 FIX BUG CAUSED BY MACRO 50A
;342 INCLUDE EDIT 315 IN MAINTENANCE SOURCES
;START OF VERSION 2C
;557 Clean up listing for release.
;START OF VERSION 3A
;560 Release on both TOPS-10 and TOPS-20 as LINK version 3A(560)
;START OF VERSION 4
;731 SEARCH MACTEN,UUOSYM
;765 Release on both TOPS-10 and TOPS-20 as LINK version 4(765)
;1113 Don't shrink back on TOPS-20, and add LNKPOT message.
;1174 Label and clean up all error messages.
;1217 Clean up the listings for release.
;1220 Release on both TOPS-10 and TOPS-20 as version 4A(1220).
SUBTTL BLISS CONVENTIONS
FREG==13
VREG==15
;LOCAL DEFINITIONS
PC==17 ;REAL PLOTTER CHANNEL
;MATERIALIZE THESE SYMBOLS FOR PLOTTER CODE
EXP INCHES,LEAVES,STEPS
RELOC .-3
SUBTTL DEFAULTS
P$LEAVES==^D16
L$LEAVES==^D8
P$INCHES==^D29
L$INCHES==^D12
P$STEPS==^D100
L$STEPS==^D20
L$BUFSIZ==^D2160
DEFINE KEYMAC (A,B)<
IFIDN <A>,<PLT>,<
IRP B,<
EXP P$'B
>>>
PLTTBL: KEYWORDS
DEFINE KEYMAC (A,B)<
IFIDN <A>,<PLT>,<
IRP B,<
EXP L$'B
>>>
LPTTBL: KEYWORDS
SUBTTL ENTRY
LNKPLT: JFCL ;IN CASE CCL
E$$POT::.ERR. (MS,0,V%L,L%I,S%I,POT,<Plotting overlay tree>) ;[1174]
ZAPTMP ;CLEAR TEMP AREA
;NOW REDUCE CORE TO A MINIMUM
MOVE T1,DY.AB ;WHAT WE NEED
ADDI T1,2000 ;PLUS SPACE FOR BUFFERS
IFN TOPS20,< ;[1113] SHRINK THEN EXPAND TO SAME SIZE ON TOPS-20
MOVE T2,.JBREL ;[1113] REMEMBER HOW BIG WE ARE
CORE T1, ;[1113] SHRINK TO KILL PAGES
JFCL ;[1113]
MOVE T1,T2 ;[1113] NOW GROW TO OLD SIZE WITH EMPTY PAGES
>
CORE T1, ;[1113] SHRINK ON TOPS-10, GROW ON TOPS-20
JFCL ;TOO BAD
SETZM CORFUL ;[1113] ALLOW LNKCOR TO WORK HARD FOR US
MOVE T1,DY.UB ;PREVIOUS UPPER BOUND
MOVE T2,.JBREL## ;CURRENT UPPER BOUND
CAML T1,T2 ;REDUCED SIZE BUT NOT TOO FAR
JRST [CAME T1,T2 ;DID WE DO ANYTHING?
MOVEM T2,DY.UB ;YES, CUT BACK
JRST LNKPL1] ;AND CLEAR TABLES
HRL T1,T1
ADDI T1,1 ;FORM BLT PTR
SETZM -1(T1)
BLT T1,(T2) ;CLEAR REST OF CORE
LNKPL1: ADDI T2,1 ;.JBREL+1
MOVEM T2,.JBFF## ;STOPS SCREW UPS
MOVE T1,[TAB.LB+1,,TAB.LB+2]
SETZM TAB.LB+1 ;CLEAR TABLES
BLT T1,TAB.LB+HG.TAB
MOVE T1,[TAB.AB+1,,TAB.AB+2]
SETZM TAB.AB+1
BLT T1,TAB.AB+HG.TAB
MOVE T1,[TAB.UB+1,,TAB.UB+2]
SETZM TAB.UB+1
BLT T1,TAB.UB+HG.TAB
MOVE T2,BRNMAX ;LONGEST BRANCH
IMULI T2,^D50 ;50 WORDS PER LEVEL
ADDI T2,^D100 ;PLUS FUDGE FACTOR
PUSHJ P,DY.GET## ;GET SPACE
MOVN T2,T2 ;- LENGTH
HRL T1,T2 ;NEW PUSHDOWN STACK
MOVEM T1,SAVEP ;WILL USE IT TO CALL PLOT ROUTINES WITH
MOVEI T1,PC ;SET REAL CHAN #
MOVEM T1,IO.CHN ;AS CHAN TO USE
MOVE T1,IO.PTR+%PC ;GET FAKE CHAN
MOVEM T1,IO.PTR+PC ;REAL CHAN
SETZM IO.PTR+%PC ;JUST IN CASE
;NOW SET THE COMMON DEFAULTS
MOVE T2,LODNAM ;DEFAULT NAME
SKIPN I.NAM(T1) ;BUT NOT IF ALREADY SETUP
MOVEM T2,I.NAM(T1)
MOVSI T2,'PLT' ;DEFAULT EXT
SKIPN I.EXT(T1)
HLLZM T2,I.EXT(T1)
MOVSI T2,(Z PC,) ;SET REAL CHAN
MOVEM T2,I.CHN(T1)
MOVSI T2,POB ;OUTPUT BUFFER HEADER
MOVEM T2,I.BUF(T1)
MOVE T2,VERNUM ;GET VERSION#
SKIPN I.VER(T1) ;ALREADY SET BY SWITCH
MOVEM T2,I.VER(T1)
;NOW TO SEE IF WE USE PLT OR LPT SIMULATOR
PUSHJ P,DVCHK.## ;GET DEVCHR WORD
MOVE T2,IO.CHR ;...
TXNE T2,DV.DSK ;TEST FOR NUL:
JRST .+3
TXNE T2,DV.LPT!DV.TTY ;NEED TO SIMULATE?
JRST LPTPLT ;YES
MOVEI T2,.IOIBN ;REAL PLOTTER USES MODE 13
MOVEM T2,I.MOD(T1)
DMOVE T1,PLTTBL ;GET DEFAULTS
SKIPN PLTTAB ;AND SETUP IF NOT ALREADY
MOVEM T1,PLTTAB ; BY SWITCHES
SKIPN PLTTAB+1
MOVEM T2,PLTTAB+1
MOVE T1,PLTTBL+2
SKIPN PLTTAB+2
MOVEM T1,PLTTAB+2
PLTOPN: PUSHJ P,DVOPN.## ;OPEN DEVICE
PUSHJ P,DVENT.## ;ENTER FILE NAME
EXCH P,SAVEP ;USE NEW, LARGER PDL
HRRZI FREG,1(P) ;SET UP FRAME PTR
PUSHJ P,PLTO.F## ;CALL PLOTTER
EXCH P,SAVEP ;PUT P BACK
PUSHJ P,DVCLS.## ;CLOSE FILE
JRST ENDSAV## ;AND GO BACK TO LNKXIT
SUBTTL LPT SIMULATION SETUP
LPTPLT: MOVEI T2,.IOASL ;LPT USES ASCII LINE
MOVEM T2,I.MOD(T1)
DMOVE T1,LPTTBL ;GET DEFAULTS
SKIPN PLTTAB ;AND SETUP IF NOT ALREADY
MOVEM T1,PLTTAB ; BY SWITCHES
SKIPN PLTTAB+1
MOVEM T2,PLTTAB+1
MOVE T1,LPTTBL+2
SKIPN PLTTAB+2
MOVEM T1,PLTTAB+2
MOVEI T2,L$BUFSIZ ;NEEDED FOR SIMULATION
PUSHJ P,DY.GET##
MOVEM T1,LPBUF ;STORE FOR PLOTTER
JRST PLTOPN ;JOIN COMMON CODE
SUBTTL GETSON ROUTINE
;CALLED FROM BLISS WITH 3 ARGS ON STACK
;ARGS ARE
;1 PTR TO NODE TO BE BUILT (RETURNED)
;2 PTR TO CURRENT FATHER (0 FOR ROOT)
;3 INDEX TO WHICH SON
;ARG1 POINTS TO BLOCK OF FOLLOWING FORM
LOC 0
P%HDR:! BLOCK 1 ;LENGTH ,, 0
P%UNU:! BLOCK 1 ;UNUSED
P%SON:! BLOCK 1 ;ADDRESS OF SON ,, UNDEFINED
P%NUM:! BLOCK 1 ;LENGTH OF NAME ,, NUMBER
P%NAM:! BLOCK 2 ;NAME (2 WORDS)
P%ZER:! BLOCK 1 ;SET TO ZERO
RELOC
GETSON: EXCH P1,-3(P) ;PICK UP THE ARGS
EXCH P2,-2(P) ;...
EXCH P3,-1(P) ;...
SPUSH <T1,T2,T3,T4> ;GET SOME ACCS
SETO VREG, ;ASSUME WE WILL SUCCEED
JUMPE P2,GETROO ;WANTS ROOT IF ZERO
CAIN P2,-1 ;SPECIAL CASE OF NO LEAF?
AOJA VREG,RET ;YES, GIVE FALSE RETURN
HLRE T1,0(P2) ;GET - LENGTH
MOVM T1,T1
CAIL P3,-2(T1) ;VALID INDEX?
AOJA VREG,RET ;NO, GIVE ERROR RETURN
MOVE T1,P2 ;PTR TO FATHER
ADDI T1,2(P3) ;POINT TO SON WE WANT
SKIPN T2,(T1) ;GET NUMBER & PTR
AOJA VREG,RET ;HANDLES PATHOL. CASE OF 1 SON
TRNN T2,-1 ;NO SON LEAF
IORI T2,-1 ;YES, SET SPECIAL MARKER
HLRZM T2,P%NUM(P1) ;STORE NUMBER
HRLM T2,P%SON(P1) ;POINT TO ITS SON
HLRZ T1,T2 ;NUMBER ONLY
GETRST: MOVS T2,LNMPTR ;GET START OF NAME TABLE
GETNXT: HLRZ T3,1(T2) ;GET NUMBER
CAMN T1,T3 ;MATCH
JRST GETNAM ;YES
HRRZ T2,1(T2) ;GET NEXT ONE
JUMPN T2,GETNXT ;IF THERE IS ONE
SETZ T3, ;CLEAR SIZE
STRNAM: HRLM T3,P%NUM(P1) ;LENGTH IN CHARS
MOVEM T2,P%NAM(P1) ;STORE NAME
SETZM P%NAM+1(P1) ;ZERO SECOND WORD
SETZM P%ZER(P1) ;ALWAYS
RET: SPOP <T4,T3,T2,T1> ;RESTORE
EXCH P1,-3(P) ;RESTORE ARGS
EXCH P2,-2(P) ;...
EXCH P3,-1(P)
POPJ P, ;RETURN
GETNAM: MOVE T2,(T2) ;GET NAME
MOVEI T3,6 ;ASSUME SIX CHARS
MOVEI T4,77 ;MASK
TDNE T2,T4 ;SEE IF CHAR EXISTS
JRST STRNAM ;YES, COUNT IN T3
LSH T4,6 ;SHIFT TO NEXT PLACE
SOJA T3,.-3 ;ONE LESS
GETROO: MOVE T1,FSTPTR ;GET START OF TREE
SKIPN FSTPTR ;ZERO IF NO BRANCHES
MOVEI T1,-1 ;FLAG ROOT AS END OF ALL
HRLM T1,P%SON(P1) ;POINT TO IT
SETZB T1,P%NUM(P1) ;SET NUMBER TO ZERO
JRST GETRST ;SETUP REST OF DATA
SUBTTL DATA STORAGE
.ZZ==.TEMP
U (SAVEP) ;STORE INITIAL PUSHDOWN STACK
U (LPBUF) ;PTR TO LTP BUFFER IF NEEDED
U (POB,3) ;PLOT OUTPUT BUFFER HEADER
SUBTTL THE END
PLTLIT: END