Trailing-Edge
-
PDP-10 Archives
-
BB-H138E-BM
-
language-sources/pltdcl.mac
There are 38 other files named pltdcl.mac in the archive. Click here to see a list.
;BLISS-10 5(110) 7/11/74 10:34:38 PLTDCL.BLI Page 1
; 1 MODULE PLTOVL(DREGS=6,SREG=#17,VREG=#15,FREG=#13,RESERVE(#16),START)=
; 2 BEGIN
; 3
; 4 !*** DECLARATIONS ***
; 5
; 6 !*** IMPLEMENTATION DEPENDENT BINDS ***
; 7
;COPYRIGHT (C) 1973, 1983 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERRED.
;
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
TITLE PLTO..
TWOSEG
RELOC 400000
; 8 BIND NOCHECK = 0.60, %SEE PHASE 2 OF BRKAPART%
; 9 TRPCHECK = 0.30, %SEE PHASE 3%
; 10 ITOP = 0.75, %AMT OF X-AX IN LEAF POLYGON%
; 11 ISIDE = 0.70, %DITTO FOR Y-AX%
; 12 IXINCR = 1.50, %VERT DIST BETWEEN NODES%
; 13
; 14 % SET PLTDIAG TO SHAPE YOU WANT PLOTTED TREES TO BE %
; 15
; 16 DIAG=0, SQAR=-1,
; 17 PLTDIAG=DIAG
; 18 ;
; 19
; 20 BIND AMTNODE=7,
; 21 MAXST=32, %NUMBER OF SUBTREES ACCEPTED%
; 22 DIAMOND=100000,
; 23 TRAPZOID=100001;
; 24
; 25 !*** MODULE WIDE REGISTERS ***
; 26
; 27 REGISTER TMP1,TMP2;
; 28
; 29 MACHOP ILDB=#134,
; 30 IDPB=#136,
; 31 MOVEI=#201,
; 32 MOVEM=#202,
; 33 BLT=#251,
; 34 JRST=#254,
; 35 PUSH=#261,
; 36 POP=#262,
; 37 POPJ=#263,
; 38 HRLM=#506;
; 39
; 40 MACRO HALT=JRST(4)$;
; 41
; 42 !*** PLOTTER PACKAGE ENTRY POINTS ***
; 43
; 44 EXTERNAL ?.BREG;
; 45
; 46 EXTERNAL LINE, %GIVEN X,Y ARRAYS, IT PLOTS (N) STRAIGHT LINES%
; 47 WHERE, %THE CO-ORDS OF THE PEN%
; 48 PLOT, %MOVE PEN FROM CUR.LOC. TO (X,Y)%
; 49 PLOTS, %INIT THE PACKAGE%
; 50 SYMBOL, %PLOTS AN ASCII STRING FROM AN ARRAY%
; 51 NUMBER, %DITTO FOR FL.PT. NUM%
; 52 LPTOUT; %SPECIALLY FOR LINK--SIMS PLT ON LPT%
;BLISS-10 5(110) 7/11/74 10:34:41 PLTDCL.BLI Page 1-1
; 53
; 54 %THE FORTRAN INTERFACE%
; 55
; 56 EXTERNAL PLTORIG,
; 57 PLTINIT,
; 58 PLTPOLY,
; 59 PLTLINE;
; 60
; 61 %THE LINK-10 CORE ALLOCATION INTERFACE%
; 62
; 63 EXTERNAL ?DY.GET,
; 64 ?DY.RET,
; 65 GETSON,
; 66 % <FILE>/PLOT:(LEAVES:VAL,INCHES:VAL,STPSIZ:VAL) -- RESPECTIVELY
; 67 1) MAX LEAVES ALLOWED IN SUBTREE
; 68 2) WIDTH OF PLOTTER IN INCHES
; 69 3) PHYS. PLT CHARACTERISTIC IN TERMS OF STEPS/INCH
; 70 COMBINED THEY ACT AS A SCALING MECHANISM
; 71 %
; 72 LEAVES,
; 73 STEPS,
; 74 LPBUF, %IF <FILE> IS LPT: THIS WILL PT. AT 2K BUFFER%
; 75 ERRFND,
; 76 INCHES;
; 77
; 78 BIND MAXWT=LEAVES; %THE FORMER WILL BE THE FL. REPR. OF THE LATTER%
; 79
; 80 !*** ROUTINE DECLARATIONS ***
; 81
; 82 FORWARD OVLPLT,
; 83 SUBTREE,
; 84 BRKAPART,
; 85 PLTTREE,
; 86 TRAPBRK,
; 87 MAKTREE,
; 88 SELTREE2P,
; 89 FNDLEAVES,
; 90 CLEANUP,
; 91 TASCII;
; 92
; 93 !*** PRIMITIVE MACROS ***
; 94
; 95
; 96 MACRO PLUS=FADR$,
; 97 SUB=FSBR$,
; 98 MUL=FMPR$,
; 99 DVIDE=FDVR$;
; 100
; 101
; 102 !*** MACROS FOR ACCESS MNEMONICS ***
; 103
; 104 MACRO WHOLE=0,36$,
; 105 LEFT=18,18$,
; 106 RIGHT=0,18$,
; 107 ZZ=0,0$;
; 108
; 109 !*** BLT MACROS ***
;BLISS-10 5(110) 7/11/74 10:34:44 PLTDCL.BLI Page 1-2
; 110
; 111 MACRO ZERO(FIRST,LAST)
; 112 = BEGIN
; 113 REGISTER AC;
; 114 AC<LEFT>_FIRST<ZZ>;
; 115 AC<RIGHT>_(FIRST+1)<ZZ>;
; 116 FIRST_0;
; 117 BLT(AC,LAST);
; 118 END;$;
; 119
; 120 MACRO SAVREGS
; 121 = BEGIN
; 122 REGSAV[15]_.(#17)<WHOLE>;
; 123 #17<WHOLE>_REGSAV<0,0>;
; 124 BLT(#17,REGSAV[14]);
; 125 #17<WHOLE>_.REGSAV[15];
; 126 END;$;
; 127
; 128 MACRO RESREGS
; 129 = BEGIN
; 130 HRLZI(SREG,REGSAV<0,0>);
; 131 BLT(#17,#17)
; 132 END;$;
; 133
; 134 !*** STRUCTURE DECLARATIONS ***
; 135
; 136 MACRO SIZE=0,LEFT$, %SIZE OF STRUCT IN WORDS%
; 137 RSERV1=0,RIGHT$,
; 138 UNUSED=1,LEFT$,
; 139 ASON=1,RIGHT$,
; 140 LNKNODE=2,LEFT$, %PTS. AT NODE IN LINK'S INTERNAL TREE%
; 141 BROTHER=2,RIGHT$,
; 142 NAMLEN=3,LEFT$,
; 143 LNUM=3,RIGHT$, %LINK NUMBER--FOR PSEUDO-NODES IS NODE TYPE, 100000 FOR DIAMOND,100001 FOR TRAPZOID%
; 144 LNAME=4,WHOLE$, %LINK NAME--IN ASCII AND AT MOST 10 CHAR%
; 145 MYWT=6,WHOLE$, % # (FLOATING) OF LEAVES BENEATH NODE%
; 146 REST=7,WHOLE$;
; 147
; 148 MACRO NEXT=0,RIGHT$; %FOR PATCHING--USES NXOFPRV%
; 149
; 150 !*** PSEUDO-ROUTINES ***
; 151
; 152 %AMOUNT MUST BE A CONSTANT%
; 153
; 154 MACRO ALLOC(WHERE,AMOUNT)=
; 155 BEGIN
; 156 PUSH(SREG,1);
; 157 PUSH(SREG,2);
; 158 MOVEI(2,AMOUNT);
; 159 ?DY.GET();
; 160 MOVEM(1,WHERE);
; 161 HRLM(2,0,1);
; 162 POP(SREG,2);
; 163 POP(SREG,1);
; 164 END;
; 165 $;
; 166
;BLISS-10 5(110) 7/11/74 10:34:47 PLTDCL.BLI Page 1-3
; 167 MACRO DEALLOC(WHERE,AMOUNT)=
; 168 BEGIN
; 169 PUSH(SREG,1);
; 170 PUSH(SREG,2);
; 171 MOVEI(2,AMOUNT);
; 172 MOVE(1,WHERE);
; 173 ?DY.RET();
; 174 POP(SREG,2);
; 175 POP(SREG,1);
; 176 END;
; 177 $;
; 178
; 179 MACRO DOABORT=HALT$;
; 180
; 181 MACRO SELFDATA(WHO)=
; 182 TASCII(WHO[LNAME]<ZZ>,.WHO[NAMLEN]);
; 183 $;
; 184
; 185
; 186
; 187 !*** SCALAR DECLARATIONS ***
; 188
; 189 %THESE ARE LOCAL RATHER THAN OWNED BECAUSE OF THE
; 190 REQUIREMENT IMPOSED BY LINK-10 OF MINIMIZING STATIC LOW SEG SP%
; 191
; 192 LOCAL BRKQAD, %SEE PHASE 2 OF BRKAPART%
; 193 LETR, %2ND PART OF TRAP. NODE'S NAME%
; 194 ! MADE A REG MAXSON, %SON WITH LARGEST WT. IN PH3 OF BRKAPART%
; 195 NAME[2],%INDEX PART OF SUBTREE NAMES%
; 196 ROOT[AMTNODE], %NODE FOR ROOT OF TREE%
; 197 SIDE, %IN INCHES, HEIGHT OF NODE%
; 198 TOP, %WIDTH OF SAME%
; 199 TRAPSON[AMTNODE], %DUMMY NODE%
; 200 XINCR, %VERT DIST BETWEEN NODES%
; 201 XMAX; %FURTHEST Y PT. PLOTTED%
; 202
; 203 !*** STRUCTURES ***
; 204
; 205 STRUCTURE BASE[J,K,L]=
; 206 (@.BASE+.J)<.K,.L>; %STANDARD BASED STRUCUTURE%
; 207
; 208 STRUCTURE FIXED[J,K,L]=
; 209 (.FIXED+.J)<.K,.L>;
; 210
; 211 STRUCTURE ARRN2[I]=
; 212 (.ARRN2+.I-DIAMOND)<WHOLE>;
; 213
; 214 !*** MODULE-WIDE STRUCTURE MAPPINGS ***
; 215
; 216 MAP ARRN2 NAME;
; 217 MAP FIXED ROOT:TRAPSON;
; 218 ! FORWARD GETSON;
; 219 ! REQUIRE PLTDEB.BLI;
; 220 REQUIRE PLTOVL.BLI;
; 221
; 222
; 223 %ACTUAL TOP LEVEL FUNCTION...THE MODULE CODE WHICH CALLS IT IS AT
;BLISS-10 5(110) 7/11/74 10:34:52 PLTDCL.BLI Page 1-4
; 224 THE END OF THE FILE%
; 225
; 226 FUNCTION OVLPLT=
; 227 BEGIN
; 228 TMP1_GETSON(ROOT<ZZ>,0,0);
; 229 IF .TMP1 EQL 0 THEN (DOABORT);
; 230 SELFDATA(ROOT)
; 231 SUBTREE(ROOT<ZZ>);
; 232 BRKAPART(ROOT<ZZ>);
; 233 SELTREE2P(ROOT<ZZ>);
; 234 RETURN;
; 235 END;
; 236
OVLPLT:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
ADD $S,PLTO.L+0 ;00005
MOVE 01,1($F) ;00006 228 Formal
HRRZI 01,14(01) ;00007 Local
PUSH $S,1 ;00010
PUSH $S,PLTO.L+1 ;00011
PUSH $S,PLTO.L+1 ;00012
PUSHJ $S,GETSON ;00013 External
SUB $S,PLTO.L+2 ;00014
MOVE 14,15 ;00015 229
JUMPN 14,L.1 ;00016
JRST 04,0 ;00017
L.1: MOVE 03,1($F) ;00020 230 Formal
HRRZI 03,20(03) ;00021 Local
PUSH $S,3 ;00022
MOVE 04,1($F) ;00023 Formal
HLRZ 05,17(04) ;00024 Local
PUSH $S,5 ;00025
PUSHJ $S,TASCII ;00026
SUB $S,PLTO.L+3 ;00027
MOVE 01,1($F) ;00030 231 Formal
HRRZI 01,14(01) ;00031 Local
PUSH $S,1 ;00032
PUSHJ $S,SUBTREE ;00033
SUB $S,PLTO.L+4 ;00034
MOVE 02,1($F) ;00035 232 Formal
HRRZI 02,14(02) ;00036 Local
PUSH $S,2 ;00037
PUSHJ $S,BRKAPART ;00040
SUB $S,PLTO.L+4 ;00041
MOVE 03,1($F) ;00042 233 Formal
HRRZI 03,14(03) ;00043 Local
PUSH $S,3 ;00044
PUSHJ $S,SELTREE2P ;00045
SUB $S,PLTO.L+4 ;00046
SETZ $V,0 ;00047 234
SUB $S,PLTO.L+5 ;00050 236
;BLISS-10 5(110) 7/11/74 10:34:55 PLTDCL.BLI Page 1-5
POP $S,13 ;00051
POPJ $S,0 ;00052
; 237 FUNCTION SUBTREE(SELF)=
; 238 BEGIN
; 239 MACRO NEWSON=TMP2$;
; 240 REGISTER SON;
; 241 MAP BASE SELF:SON:NEWSON;
; 242 LOCAL IDX;
; 243
; 244 IDX_0;
; 245 WHILE 1 DO
; 246 BEGIN
; 247 ALLOC(TMP1,AMTNODE)
; 248 NEWSON_GETSON(.TMP1,.SELF[LNKNODE],.IDX);
; 249 IF .NEWSON NEQ 0
; 250 THEN BEGIN
; 251 IF .IDX EQL 0
; 252 THEN SELF[ASON]_.TMP1
; 253 ELSE SON[BROTHER]_.TMP1;
; 254 SON_.TMP1;
; 255 SELFDATA(SON)
; 256 SUBTREE(.SON);
; 257 END
; 258 ELSE BEGIN
; 259 IF .IDX EQL 0
; 260 THEN SELF[MYWT]_1.0;
; 261 RETURN;
; 262 END;
; 263
; 264 SELF[MYWT]_.SON[MYWT] PLUS .SELF[MYWT];
; 265 IDX_.IDX+1;
; 266 END;
; 267 RETURN; %CANNOT BE REACHED%
; 268 END;
; 269
SUBTREE:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
MOVEM 07,3($F) ;00005 Formal
MOVEM 11,4($F) ;00006 Formal
ADD $S,PLTO.L+6 ;00007
SETZM 00,11($F) ;00010 239 Local
L.2: PUSH $S,1 ;00011 247
PUSH $S,2 ;00012
MOVEI 02,7 ;00013
PUSHJ $S,DY.GET ;00014 External
MOVEM 01,14 ;00015
HRLM 02,0(01) ;00016
POP $S,2 ;00017
POP $S,1 ;00020
;BLISS-10 5(110) 7/11/74 10:35:01 PLTDCL.BLI Page 1-6
PUSH $S,14 ;00021 248
MOVE $V,-2($F) ;00022 Formal
HLRZ 03,2($V) ;00023
PUSH $S,3 ;00024
PUSH $S,11($F) ;00025 Local
PUSHJ $S,GETSON ;00026 External
SUB $S,PLTO.L+2 ;00027
MOVE 12,15 ;00030 249
JUMPE 12,L.3 ;00031
SKIPE 05,11($F) ;00032 251 Local
JRST 00,L.4 ;00033
MOVE $V,-2($F) ;00034 253 Formal
HRRM 14,1($V) ;00035
JRST 00,L.5 ;00036
L.4: HRRM 14,2(11) ;00037 254
L.5: MOVE 11,14 ;00040 255
HRRZI $V,4(11) ;00041
PUSH $S,15 ;00042
HLRZ 01,3(11) ;00043
PUSH $S,1 ;00044
PUSHJ $S,TASCII ;00045
SUB $S,PLTO.L+3 ;00046
PUSH $S,11 ;00047 256
PUSHJ $S,SUBTREE ;00050
SUB $S,PLTO.L+4 ;00051
JRST 00,L.6 ;00052 257
L.3: SKIPE 05,11($F) ;00053 259 Local
JRST 00,L.7 ;00054
MOVE 01,-2($F) ;00055 261 Formal
HRLZI 03,201400 ;00056
MOVEM 03,6(01) ;00057
JRST 00,L.7 ;00060
L.6: MOVE 05,-2($F) ;00061 263 Formal
MOVE 02,6(11) ;00062
FADR 02,6(05) ;00063
MOVEM 02,6(05) ;00064
AOS 01,11($F) ;00065 266 Local
JRST 00,L.2 ;00066 267 ^^^
L.7: SETZ $V,0 ;00067
SUB $S,PLTO.L+4 ;00070
MOVE 07,3($F) ;00071 269 Formal
MOVE 11,4($F) ;00072 Formal
SUB $S,PLTO.L+5 ;00073
POP $S,13 ;00074
POPJ $S,0 ;00075
;BLISS-10 5(110) 7/11/74 10:35:03 PLTDCL.BLI Page 2
; 270 FUNCTION BRKAPART(MEMSELF)=
; 271 BEGIN
; 272
; 273 % FUNCTION CONSISTS OF 3 PHASES:
; 274 1) RECURSIVELY BRKAPART ANY SON WHOSE WEIGHT IS GTR THAN MAX
; 275 2) CREATE SUB-TREES FOR ALL SONS SUCH THAT BRKQAD>SONWT>MAXWT
; 276 3) IF PREV. 2 STEPS NOT SUFFICIENT, TAKE LARGEST & SUCCESSIVELY SMALLER
; 277 SONS LEFT AND MAKE SUB-TREES OUT OF THEM.
; 278 IF SELF WEIGHT STILL TOO LARGE, BREAK UP TRAPEZOIDALLY
; 279 %
; 280
; 281 REGISTER SON,SELF,SELFWT,NXOFPRV;
; 282 MAP BASE SELF:SON;
; 283 MACRO RESTRETWT=(SELF[MYWT]_.SELFWT; RETURN(.SELFWT))$;
; 284
; 285 SELF_.MEMSELF;
; 286 SELFWT_.SELF[MYWT];
; 287
; 288 %PHASE 1%
; 289 SON_.SELF[ASON];
; 290 WHILE .SON NEQ 0 DO
; 291 BEGIN
; 292 IF .SON[MYWT] GTR .MAXWT
; 293 THEN BEGIN
; 294 SELFWT_.SELFWT SUB .SON[MYWT];
; 295 SELFWT_.SELFWT PLUS BRKAPART(.SON);
; 296 END;
; 297 SON_.SON[BROTHER];
; 298 END;
; 299
; 300 IF .SELFWT LEQ .MAXWT
; 301 THEN RESTRETWT;
; 302
; 303 %PHASE 2%
; 304 NXOFPRV_SELF[ASON]<ZZ>;
; 305 SON_.SELF[ASON];
; 306
; 307 WHILE .SON NEQ 0 DO
; 308 BEGIN
; 309 IF .SON[MYWT] GTR .BRKQAD
; 310 THEN BEGIN
; 311 SELFWT_.SELFWT SUB .SON[MYWT] PLUS 1.0;
; 312 SON_MAKTREE(DIAMOND,.SON,.NXOFPRV,.SON[MYWT]);
; 313 IF .SELFWT LEQ .MAXWT
; 314 THEN RESTRETWT;
; 315 END;
; 316 NXOFPRV_SON[BROTHER]<ZZ>;
; 317 SON_.SON[BROTHER]; %NOTE THAT THIS WORKS WHEN IF SATISFIED BECAUSE MAKTREE
; 318 RESETS ALL POINTERS%
; 319 END;
; 320
; 321 %PHASE 3%
; 322 WHILE 1 DO
; 323 BEGIN
; 324 MACRO MAXNOP=TMP1$,MAXSON=TMP2$; %NOTE THAT THESE TWO ARE
; 325 GARBAGE AFTER THE 2 FUNCTION REFS%
; 326 MAP BASE MAXSON;
;BLISS-10 5(110) 7/11/74 10:35:09 PLTDCL.BLI Page 2-1
; 327 MAXSON_TRAPSON<ZZ>;
; 328 NXOFPRV_SELF[ASON]<ZZ>;
; 329 SON_.SELF[ASON];
; 330 WHILE .SON NEQ 0 DO
; 331 BEGIN
; 332 IF .SON[MYWT] GTR .MAXSON[MYWT]
; 333 THEN (MAXSON_.SON; MAXNOP_.NXOFPRV);
; 334 NXOFPRV_SON[BROTHER]<ZZ>;
; 335 SON_.SON[BROTHER];
; 336 END;
; 337
; 338 IF .MAXSON EQL TRAPSON<ZZ>
; 339 THEN BEGIN
; 340 SELF[MYWT]_.SELFWT; %TRAPBRK WILL ADJUST SELF[MYWT]--GET IT UP TO DATE%
; 341 DO TRAPBRK(.SELF) UNTIL .SELF[MYWT] LEQ .MAXWT;
; 342 RETURN(.SELF[MYWT]);
; 343 END;
; 344
; 345 SELFWT_.SELFWT SUB .MAXSON[MYWT] PLUS 1.0;
; 346 %TAKES ADVAN OF VAL PASSING--MAXSON AND MAXNOP%
; 347 SON_MAKTREE(DIAMOND,.MAXSON,.MAXNOP,.MAXSON[MYWT]);
; 348 IF .SELFWT LEQ .MAXWT
; 349 THEN RESTRETWT;
; 350 END;
; 351 RETURN;
; 352 END;
; 353
BRKAPART:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
MOVEM 06,3($F) ;00005 Formal
MOVEM 07,4($F) ;00006 Formal
MOVEM 10,5($F) ;00007 Formal
MOVEM 11,6($F) ;00010 Formal
ADD $S,PLTO.L+0 ;00011
MOVE 10,-2($F) ;00012 272 Formal
MOVE 07,6(10) ;00013 287
HRRZ 11,1(10) ;00014 290
L.10: JUMPE 11,L.11 ;00015
MOVE 02,LEAVES ;00016 292 External
CAML 02,6(11) ;00017
JRST 00,L.12 ;00020
FSBR 07,6(11) ;00021 295
PUSH $S,11 ;00022
PUSHJ $S,BRKAPART ;00023
SUB $S,PLTO.L+4 ;00024
FADR 07,15 ;00025 296
L.12: HRRZ 11,2(11) ;00026 297
JRST 00,L.10 ;00027 299 ^^^
L.11: CAMG 07,LEAVES ;00030 External
JRST 00,L.13 ;00031
HRRZI 05,1(10) ;00032 305
;BLISS-10 5(110) 7/11/74 10:35:16 PLTDCL.BLI Page 2-2
MOVE 06,5 ;00033
HRRZ 11,1(10) ;00034 306
L.14: JUMPE 11,L.15 ;00035
MOVE 02,1($F) ;00036 309 Formal
MOVE 03,10(02) ;00037 Local
CAML 03,6(11) ;00040
JRST 00,L.16 ;00041
MOVE 05,7 ;00042 312
FSBR 05,6(11) ;00043
FADRI 05,201400 ;00044
MOVE 07,5 ;00045
PUSH $S,PLTO.L+7 ;00046
PUSH $S,11 ;00047
PUSH $S,6 ;00050
PUSH $S,6(11) ;00051
PUSHJ $S,MAKTREE ;00052
SUB $S,PLTO.L+10 ;00053
MOVE 11,15 ;00054 313
CAMLE 07,LEAVES ;00055 External
JRST 00,L.16 ;00056
L.13: MOVEM 07,6(10) ;00057
MOVE $V,7 ;00060
JRST 00,L.17 ;00061
L.16: HRRZI 05,2(11) ;00062 315
MOVE 06,5 ;00063
HRRZ 11,2(11) ;00064 318
JRST 00,L.14 ;00065 320 ^^^
L.15: MOVE 12,1($F) ;00066 324 Formal
MOVEI 12,25(12) ;00067 Local
HRRZI 01,1(10) ;00070 329
MOVE 06,1 ;00071
HRRZ 11,1(10) ;00072 330
L.20: JUMPE 11,L.21 ;00073
MOVE 03,6(12) ;00074 332
CAML 03,6(11) ;00075
JRST 00,L.22 ;00076
MOVE 12,11 ;00077
MOVE 14,6 ;00100
L.22: HRRZI 05,2(11) ;00101 334
MOVE 06,5 ;00102
HRRZ 11,2(11) ;00103 336
JRST 00,L.20 ;00104 337 ^^^
L.21: MOVE 01,1($F) ;00105 339 Formal
CAIE 12,25(01) ;00106 Local
JRST 00,L.23 ;00107
MOVEM 07,6(10) ;00110 341
L.24: PUSH $S,10 ;00111
PUSHJ $S,TRAPBRK ;00112
SUB $S,PLTO.L+4 ;00113
MOVE 03,LEAVES ;00114 342 External
CAMGE 03,6(10) ;00115
JRST 00,L.24 ;00116 ^^^
MOVE $V,6(10) ;00117
JRST 00,L.17 ;00120
L.23: MOVE 03,7 ;00121 344
FSBR 03,6(12) ;00122
FADRI 03,201400 ;00123
;BLISS-10 5(110) 7/11/74 10:35:16 PLTDCL.BLI Page 2-3
MOVE 07,3 ;00124
PUSH $S,PLTO.L+7 ;00125
PUSH $S,12 ;00126
PUSH $S,14 ;00127
PUSH $S,6(12) ;00130
PUSHJ $S,MAKTREE ;00131
SUB $S,PLTO.L+10 ;00132
MOVE 11,15 ;00133 348
CAMLE 07,LEAVES ;00134 External
JRST 00,L.15 ;00135 ^^^
MOVEM 07,6(10) ;00136
SKIPA $V,7 ;00137
SETZ $V,0 ;00140 351
L.17: MOVE 06,3($F) ;00141 353 Formal
MOVE 07,4($F) ;00142 Formal
MOVE 10,5($F) ;00143 Formal
MOVE 11,6($F) ;00144 Formal
SUB $S,PLTO.L+5 ;00145
POP $S,13 ;00146
POPJ $S,0 ;00147
;BLISS-10 5(110) 7/11/74 10:35:19 PLTDCL.BLI Page 3
; 354 FUNCTION PLTTREE(SELF,WIDTH,OFFST,XSON,YSELF)=
; 355 BEGIN
; 356 REGISTER SON;
; 357 LOCAL SONWIDTH,XCOM,YSON;
; 358 MAP BASE SELF:SON;
; 359
; 360 IF .XSON GTR .XMAX THEN XMAX_.XSON;
; 361 SON_.SELF[ASON];
; 362 XCOM_.XSON SUB ((.XINCR SUB .SIDE) MUL 0.667);
; 363 SONWIDTH_(.SON[MYWT] DVIDE .SELF[MYWT]) MUL .WIDTH;
; 364 YSON_.OFFST PLUS .SONWIDTH DVIDE 2.0;
; 365 IF .LPBUF NEQ PLTDIAG
; 366 THEN PLTLINE(.XSON SUB .XINCR PLUS .SIDE, .YSELF, .XCOM, .YSELF);
; 367
; 368 WHILE .SON NEQ 0 DO
; 369 BEGIN
; 370 SONWIDTH_(.SON[MYWT] DVIDE .SELF[MYWT]) MUL .WIDTH;
; 371 TMP2_.OFFST PLUS .SONWIDTH DVIDE 2.0;
; 372 IF .LPBUF EQL PLTDIAG
; 373 THEN PLTLINE(.XSON SUB .XINCR PLUS .SIDE, .YSELF, .XSON, .TMP2)
; 374 ELSE BEGIN
; 375 PLTLINE(.XCOM, .YSON, .XCOM, .TMP2);
; 376 PLTLINE(.XCOM, .TMP2, .XSON, .TMP2);
; 377 END;
; 378 YSON_.TMP2;
; 379 PLTPOLY(.XSON, .YSON, .SON[NAMLEN], .SON[LNUM], .SON[LNAME], .SON[1+LNAME]);
; 380
; 381 IF .SON[ASON] NEQ 0
; 382 THEN PLTTREE(.SON,.SONWIDTH,.OFFST,.XSON PLUS .XINCR,.YSON);
; 383 OFFST_.OFFST PLUS .SONWIDTH;
; 384 SON_.SON[BROTHER];
; 385 END;
; 386 RETURN; %THE FORM OF THE WHILE AND THIS, ENDS THE RECURSION%
; 387 END;
; 388
PLTTREE:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
MOVEM 11,3($F) ;00005 Formal
ADD $S,PLTO.L+11 ;00006
MOVE 01,1($F) ;00007 356 Formal
MOVE 02,35(01) ;00010 Local
CAML 02,-3($F) ;00011 Formal
JRST 00,L.25 ;00012
MOVE 04,1($F) ;00013 361 Formal
MOVE 05,-3($F) ;00014 Formal
MOVEM 05,35(04) ;00015 Local
L.25: MOVE 04,-6($F) ;00016 362 Formal
HRRZ 11,1(04) ;00017
MOVE 05,1($F) ;00020 363 Formal
MOVE 01,34(05) ;00021 Local
MOVE 02,1($F) ;00022 Formal
;BLISS-10 5(110) 7/11/74 10:35:34 PLTDCL.BLI Page 3-1
FSBR 01,23(02) ;00023 Local
FMPR 01,PLTO.L+12 ;00024
MOVE 03,-3($F) ;00025 Formal
FSBR 03,1 ;00026
MOVEM 03,12($F) ;00027 Local
MOVE 05,6(11) ;00030 364
FDVR 05,6(04) ;00031
FMPR 05,-5($F) ;00032 Formal
MOVEM 05,11($F) ;00033 Local
FDVRI 05,202400 ;00034 365
FADR 05,-4($F) ;00035 Formal
MOVEM 05,13($F) ;00036 Local
SKIPN 02,LPBUF ;00037 External
JRST 00,L.26 ;00040
MOVE $V,-3($F) ;00041 Formal
MOVE 03,1($F) ;00042 Formal
FSBR $V,34(03) ;00043 Local
MOVE 04,1($F) ;00044 Formal
FADR $V,23(04) ;00045 Local
PUSH $S,15 ;00046
PUSH $S,-2($F) ;00047 Formal
PUSH $S,12($F) ;00050 Local
PUSH $S,-2($F) ;00051 Formal
PUSHJ $S,PLTLINE ;00052 External
SUB $S,PLTO.L+10 ;00053
L.26: JUMPE 11,L.27 ;00054 367
MOVE 04,-6($F) ;00055 370 Formal
MOVE 05,6(11) ;00056
FDVR 05,6(04) ;00057
FMPR 05,-5($F) ;00060 Formal
MOVEM 05,11($F) ;00061 Local
FDVRI 05,202400 ;00062 372
FADR 05,-4($F) ;00063 Formal
MOVE 12,5 ;00064
SKIPE 02,LPBUF ;00065 External
JRST 00,L.30 ;00066
MOVE $V,-3($F) ;00067 Formal
MOVE 03,1($F) ;00070 Formal
FSBR $V,34(03) ;00071 Local
MOVE 04,1($F) ;00072 Formal
FADR $V,23(04) ;00073 Local
PUSH $S,15 ;00074
PUSH $S,-2($F) ;00075 Formal
JRST 00,L.31 ;00076
L.30: PUSH $S,12($F) ;00077 374 Local
PUSH $S,13($F) ;00100 Local
PUSH $S,12($F) ;00101 Local
PUSH $S,12 ;00102
PUSHJ $S,PLTLINE ;00103 External
SUB $S,PLTO.L+10 ;00104
PUSH $S,12($F) ;00105 376 Local
PUSH $S,12 ;00106
L.31: PUSH $S,-3($F) ;00107 Formal
PUSH $S,12 ;00110
PUSHJ $S,PLTLINE ;00111 External
SUB $S,PLTO.L+10 ;00112
MOVEM 12,13($F) ;00113 377 Local
;BLISS-10 5(110) 7/11/74 10:35:34 PLTDCL.BLI Page 3-2
PUSH $S,-3($F) ;00114 Formal
PUSH $S,13($F) ;00115 Local
HLRZ 03,3(11) ;00116
PUSH $S,3 ;00117
HRRZ 04,3(11) ;00120
PUSH $S,4 ;00121
PUSH $S,4(11) ;00122
PUSH $S,5(11) ;00123
PUSHJ $S,PLTPOLY ;00124 External
SUB $S,PLTO.L+0 ;00125
HRRZ 05,1(11) ;00126 380
JUMPE 05,L.32 ;00127
PUSH $S,11 ;00130
PUSH $S,11($F) ;00131 Local
PUSH $S,-4($F) ;00132 Formal
MOVE $V,-3($F) ;00133 Formal
MOVE 01,1($F) ;00134 Formal
FADR $V,34(01) ;00135 Local
PUSH $S,15 ;00136
PUSH $S,13($F) ;00137 Local
PUSHJ $S,PLTTREE ;00140
SUB $S,PLTO.L+13 ;00141
L.32: MOVE 01,11($F) ;00142 383 Local
FADRB 01,-4($F) ;00143 Formal
HRRZ 11,2(11) ;00144 385
JRST 00,L.26 ;00145 386 ^^^
L.27: SETZ $V,0 ;00146
SUB $S,PLTO.L+2 ;00147
MOVE 11,3($F) ;00150 388 Formal
SUB $S,PLTO.L+5 ;00151
POP $S,13 ;00152
POPJ $S,0 ;00153
;BLISS-10 5(110) 7/11/74 10:35:35 PLTDCL.BLI Page 4
; 389 FUNCTION TRAPBRK(SELF)=
; 390 BEGIN
; 391 MACRO TRAPWT=TMP2$;
; 392 REGISTER SON,NXOFPRV;
; 393 LOCAL MAXTRP,RMSON;
; 394 MAP BASE SELF:SON:NXOFPRV;
; 395
; 396 TMP1_2.0;
; 397 DO BEGIN
; 398 MAXTRP_.SELF[MYWT] DVIDE .TMP1;
; 399 TMP1_.TMP1 PLUS 1.0;
; 400 END WHILE .MAXTRP GTR .MAXWT;
; 401
; 402 % THIS IF-STAT CONSTITUTES A SIMPLE HEURISTIC FOR HELPING TREES LOOK PRETTY%
; 403
; 404 IF .MAXTRP PLUS 2.0 GTR .MAXWT
; 405 THEN MAXTRP_.MAXWT
; 406 ELSE MAXTRP_.MAXTRP PLUS 1.0;
; 407
; 408 SON_.SELF[ASON];
; 409 NXOFPRV_SELF[ASON]<ZZ>;
; 410 TRAPWT_0;
; 411 % RMSON NO INIT SINCE AT LEAST 1 SON%
; 412
; 413 LETR_'A'; %TRAP NODES ARE PUT OUT AS 1A,1B,1C,...%
; 414 WHILE .SON NEQ 0 DO
; 415 BEGIN
; 416 IF .TRAPWT PLUS .SON[MYWT] GTR .MAXTRP
; 417 THEN BEGIN
; 418 SELF[MYWT]_.SELF[MYWT] SUB .TRAPWT PLUS 1.0;
; 419 NXOFPRV_MAKTREE(TRAPZOID,.RMSON,.NXOFPRV,.TRAPWT); %MAKTR RETURNS THE NEW LEAF%
; 420
; 421 NXOFPRV_NXOFPRV[BROTHER]<ZZ>;
; 422 TRAPWT_.SON[MYWT];
; 423 END
; 424 ELSE TRAPWT_.TRAPWT PLUS .SON[MYWT];
; 425 RMSON_.SON;
; 426 SON_.SON[BROTHER];
; 427 END;
; 428 IF .TRAPWT GTR .TRAPSON[MYWT]
; 429 THEN BEGIN
; 430 SELF[MYWT]_.SELF[MYWT] SUB .TRAPWT PLUS 1.0;
; 431 NXOFPRV_MAKTREE(TRAPZOID,.RMSON,.NXOFPRV,.TRAPWT);
; 432 END;
; 433 NAME[TRAPZOID]_.NAME[TRAPZOID] PLUS 1.0;
; 434
; 435 RETURN;
; 436 END;
; 437
TRAPBRK:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
;BLISS-10 5(110) 7/11/74 10:35:46 PLTDCL.BLI Page 4-1
MOVEM 10,3($F) ;00005 Formal
MOVEM 11,4($F) ;00006 Formal
ADD $S,PLTO.L+5 ;00007
HRLZI 14,202400 ;00010 391
L.33: MOVE 01,-2($F) ;00011 398 Formal
MOVE 02,6(01) ;00012
FDVR 02,14 ;00013
MOVEM 02,11($F) ;00014 Local
FADRI 14,201400 ;00015 400
CAMLE 02,LEAVES ;00016 External
JRST 00,L.33 ;00017 ^^^
MOVE 04,11($F) ;00020 405 Local
FADRI 04,202400 ;00021
CAMG 04,LEAVES ;00022 External
JRST 00,L.34 ;00023
MOVE $V,LEAVES ;00024 406 External
MOVEM $V,11($F) ;00025 Local
JRST 00,L.35 ;00026
L.34: HRLZI 01,201400 ;00027 407
FADRB 01,11($F) ;00030 Local
L.35: MOVE 01,-2($F) ;00031 409 Formal
HRRZ 11,1(01) ;00032
HRRZI 02,1(01) ;00033 410
MOVE 10,2 ;00034
SETZ 12,0 ;00035 411
MOVE 03,1($F) ;00036 414 Formal
HRLZI 04,404000 ;00037
MOVEM 04,11(03) ;00040 Local
L.36: JUMPE 11,L.37 ;00041
MOVE 01,12 ;00042 416
FADR 01,6(11) ;00043
CAMG 01,11($F) ;00044 Local
JRST 00,L.40 ;00045
MOVE 03,-2($F) ;00046 419 Formal
MOVE 04,6(03) ;00047
FSBR 04,12 ;00050
FADRI 04,201400 ;00051
MOVEM 04,6(03) ;00052
PUSH $S,PLTO.L+14 ;00053
PUSH $S,12($F) ;00054 Local
PUSH $S,10 ;00055
PUSH $S,12 ;00056
PUSHJ $S,MAKTREE ;00057
SUB $S,PLTO.L+10 ;00060
MOVE 10,15 ;00061 420
HRRZI 05,2(10) ;00062 422
MOVE 10,5 ;00063
SKIPA 12,6(11) ;00064 423
L.40: MOVE 12,1 ;00065 425
MOVEM 11,12($F) ;00066 426 Local
HRRZ 11,2(11) ;00067 427
JRST 00,L.36 ;00070 428 ^^^
L.37: MOVE 03,1($F) ;00071 429 Formal
CAMG 12,33(03) ;00072 Local
JRST 00,L.41 ;00073
MOVE 05,-2($F) ;00074 431 Formal
MOVE 01,6(05) ;00075
;BLISS-10 5(110) 7/11/74 10:35:46 PLTDCL.BLI Page 4-2
FSBR 01,12 ;00076
FADRI 01,201400 ;00077
MOVEM 01,6(05) ;00100
PUSH $S,PLTO.L+14 ;00101
PUSH $S,12($F) ;00102 Local
PUSH $S,10 ;00103
PUSH $S,12 ;00104
PUSHJ $S,MAKTREE ;00105
SUB $S,PLTO.L+10 ;00106
MOVE 10,15 ;00107 432
L.41: HRLZI 05,201400 ;00110 433
MOVE 01,1($F) ;00111 Formal
FADRB 05,13(01) ;00112 Local
SETZ $V,0 ;00113
SUB $S,PLTO.L+3 ;00114
MOVE 10,3($F) ;00115 437 Formal
MOVE 11,4($F) ;00116 Formal
SUB $S,PLTO.L+5 ;00117
POP $S,13 ;00120
POPJ $S,0 ;00121
; 438 FUNCTION MAKTREE(TYPE,FWDSELF,PREV,WEIT)=
; 439 BEGIN
; 440 MAP BASE FWDSELF:PREV:TMP1:TMP2;
; 441
; 442 %NEW "ROOT"%
; 443 ALLOC(TMP1,AMTNODE)
; 444 TMP1[MYWT]_.WEIT;
; 445 TMP1[LNUM]_.TYPE;
; 446 TMP1[ASON][email protected];
; 447 TMP2_.TMP1; %WILL BE NEEDED FOR LNKNODE%
; 448
; 449 %NEW LEAF%
; 450 ALLOC(TMP1,AMTNODE)
; 451 TMP1[LNUM]_.TYPE;
; 452 TMP1[MYWT]_1.0;
; 453 TMP1[BROTHER]_.FWDSELF[BROTHER];
; 454 TMP1[LNKNODE]_.TMP2; %THE TREE SPAWNED BY PSEUDO LEAF IS
; 455 CHAINED THRU THIS MECH RATHER THAN SON MECH%
; 456 PREV[NEXT]_.TMP1;
; 457
; 458 %SUPPLANTED SON%
; 459 FWDSELF[BROTHER]_0;
; 460
; 461 %NAME PROCESSING--COMMON TO BOTH%
; 462
; 463 TMP2[LNAME]_TMP1[LNAME]_.NAME[.TYPE];
; 464 IF .TYPE EQL DIAMOND
; 465 THEN BEGIN
; 466 NAME[DIAMOND]_.NAME[DIAMOND] PLUS 1.0;
; 467 END
; 468 ELSE BEGIN
; 469 TMP2[1+LNAME]_TMP1[1+LNAME]_.LETR;
; 470 LETR_.LETR + 1^29;
; 471 END;
; 472
;BLISS-10 5(110) 7/11/74 10:35:54 PLTDCL.BLI Page 4-3
; 473 RETURN(.TMP1);
; 474 END;
; 475
MAKTREE:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
MOVEM 07,3($F) ;00005 Formal
ADD $S,PLTO.L+0 ;00006
PUSH $S,1 ;00007 440
PUSH $S,2 ;00010
MOVEI 02,7 ;00011
PUSHJ $S,DY.GET ;00012 External
MOVEM 01,14 ;00013
HRLM 02,0(01) ;00014
POP $S,2 ;00015
POP $S,1 ;00016
MOVE 03,-2($F) ;00017 445 Formal
MOVEM 03,6(14) ;00020
MOVE 04,-5($F) ;00021 446 Formal
HRRM 04,3(14) ;00022
MOVE 05,-3($F) ;00023 447 Formal
MOVE 02,0(05) ;00024
HRRM 02,1(14) ;00025
MOVE 12,14 ;00026 448
PUSH $S,1 ;00027
PUSH $S,2 ;00030
MOVEI 02,7 ;00031
PUSHJ $S,DY.GET ;00032 External
MOVEM 01,14 ;00033
HRLM 02,0(01) ;00034
POP $S,2 ;00035
POP $S,1 ;00036
MOVE 03,-5($F) ;00037 452 Formal
HRRM 03,3(14) ;00040
HRLZI 04,201400 ;00041 453
MOVEM 04,6(14) ;00042
MOVE 05,-4($F) ;00043 454 Formal
HRRZ 02,2(05) ;00044
HRRM 02,2(14) ;00045
HRLM 12,2(14) ;00046 455
MOVE 01,-3($F) ;00047 457 Formal
HRRM 14,0(01) ;00050
HLLZS 00,2(05) ;00051 460
SUBI 03,303240 ;00052 464
ADD 03,1($F) ;00053 Formal
MOVE 04,12(03) ;00054 Local
MOVEM 04,4(14) ;00055
MOVEM 04,4(12) ;00056
MOVE 02,-5($F) ;00057 465 Formal
CAIE 02,303240 ;00060
JRST 00,L.42 ;00061
HRLZI 05,201400 ;00062 467
;BLISS-10 5(110) 7/11/74 10:35:56 PLTDCL.BLI Page 4-4
MOVE 03,1($F) ;00063 Formal
FADRB 05,12(03) ;00064 Local
JRST 00,L.43 ;00065
L.42: MOVE 05,1($F) ;00066 469 Formal
MOVE 03,11(05) ;00067 Local
MOVEM 03,5(14) ;00070
MOVEM 03,5(12) ;00071
HRLZI 04,4000 ;00072 471
MOVE 02,1($F) ;00073 Formal
ADDB 04,11(02) ;00074 Local
L.43: MOVE $V,14 ;00075 472
MOVE 07,3($F) ;00076 475 Formal
SUB $S,PLTO.L+5 ;00077
POP $S,13 ;00100
POPJ $S,0 ;00101
;BLISS-10 5(110) 7/11/74 10:35:56 PLTDCL.BLI Page 5
; 476 FUNCTION SELTREE2P(CUROOT)=
; 477 BEGIN
; 478
; 479 %THIS FUNCTION AND FNDLEAVES HAVE A FUNNY RECURSIVE INTERACTION--
; 480 THE RECURSION IS CAUSED BY THE LOWER LEVEL FUNCTION FNDLEAVES.
; 481 THIS 2-LEVEL APPROACH IS NECESSARY BECAUSE (SUBTREE) ROOTS MUST BE
; 482 DISTINGUISHED FROM ALL OTHER NODES SO THAT THE SUBTREES CAN BE
; 483 PLOTTED IN THE MOST INTUITIVE ORDER%
; 484 %AFTER PLOTTING A TREE-- THIS PROG CALLS FNDLEAVES TO SEE IF THE CURRENT
; 485 TREE IS CHAINED TO ANY OTHER TREES%
; 486
; 487 REGISTER BASE TRI;
; 488
; 489 MACRO INCHO2=TMP2$;
; 490
; 491 INCHO2_.INCHES DVIDE 2.0;
; 492 XMAX_.XMAX PLUS 3.0;
; 493 IF .LPBUF NEQ 0 THEN PLTINIT(.XMAX, 0);
; 494 TRI_.CUROOT;
; 495 PLTPOLY(.XMAX, .INCHO2, .TRI[NAMLEN], .TRI[LNUM], .TRI[LNAME], .TRI[1+LNAME]);
; 496 PLTTREE(.TRI,.INCHES,0,.XMAX PLUS .XINCR, .INCHO2);
; 497 CLEANUP(.TRI);
; 498 IF .LPBUF NEQ 0 THEN LPTOUT(); %WITHIN PLOTTER PACK%
; 499
; 500 FNDLEAVES(.CUROOT);
; 501 RETURN;
; 502 END;
; 503
SELTREE2P:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
MOVEM 11,3($F) ;00005 Formal
ADD $S,PLTO.L+0 ;00006
MOVE 01,INCHES ;00007 478 External
FDVRI 01,202400 ;00010
MOVE 12,1 ;00011
HRLZI 02,202600 ;00012 493
MOVE 03,1($F) ;00013 Formal
FADRB 02,35(03) ;00014 Local
SKIPN 04,LPBUF ;00015 External
JRST 00,L.44 ;00016
PUSH $S,2 ;00017
PUSH $S,PLTO.L+1 ;00020
PUSHJ $S,PLTINIT ;00021 External
SUB $S,PLTO.L+3 ;00022
L.44: MOVE 11,-2($F) ;00023 494 Formal
MOVE 01,1($F) ;00024 Formal
PUSH $S,35(01) ;00025 Local
PUSH $S,12 ;00026
HLRZ 03,3(11) ;00027
PUSH $S,3 ;00030
HRRZ 02,3(11) ;00031
;BLISS-10 5(110) 7/11/74 10:35:59 PLTDCL.BLI Page 5-1
PUSH $S,2 ;00032
PUSH $S,4(11) ;00033
PUSH $S,5(11) ;00034
PUSHJ $S,PLTPOLY ;00035 External
SUB $S,PLTO.L+0 ;00036
PUSH $S,11 ;00037 496
PUSH $S,INCHES ;00040 External
PUSH $S,PLTO.L+1 ;00041
MOVE $V,1($F) ;00042 Formal
MOVE 04,35($V) ;00043 Local
MOVE $V,1($F) ;00044 Formal
FADR 04,34($V) ;00045 Local
PUSH $S,4 ;00046
PUSH $S,12 ;00047
PUSHJ $S,PLTTREE ;00050
SUB $S,PLTO.L+13 ;00051
PUSH $S,11 ;00052 497
PUSHJ $S,CLEANUP ;00053
SUB $S,PLTO.L+4 ;00054
SKIPE 05,LPBUF ;00055 498 External
PUSHJ $S,LPTOUT ;00056 External
PUSH $S,-2($F) ;00057 499 Formal
PUSHJ $S,FNDLEAVES ;00060
SUB $S,PLTO.L+4 ;00061
SETZ $V,0 ;00062 501
MOVE 11,3($F) ;00063 503 Formal
SUB $S,PLTO.L+5 ;00064
POP $S,13 ;00065
POPJ $S,0 ;00066
; 504 FUNCTION FNDLEAVES(SELF)=
; 505 BEGIN
; 506 REGISTER SON;
; 507 MAP BASE SELF:SON;
; 508
; 509 SON_.SELF[ASON];
; 510 WHILE .SON NEQ 0 DO
; 511 BEGIN
; 512 IF .SON[ASON] EQL 0
; 513 THEN IF .SON[LNUM] GEQ DIAMOND
; 514 THEN SELTREE2P(.SON[LNKNODE])
; 515 ELSE
; 516 ELSE FNDLEAVES(.SON);
; 517 SON_.SON[BROTHER];
; 518 END;
; 519 RETURN;
; 520 END;
; 521
; 522
FNDLEAVES:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
;BLISS-10 5(110) 7/11/74 10:36:04 PLTDCL.BLI Page 5-2
PUSH $S,13 ;00004
MOVEM 11,3($F) ;00005 Formal
ADD $S,PLTO.L+0 ;00006
MOVE 01,-2($F) ;00007 506 Formal
HRRZ 11,1(01) ;00010
L.45: JUMPE 11,L.46 ;00011
HRRZ 03,1(11) ;00012 512
JUMPN 03,L.47 ;00013
HRRZ 05,3(11) ;00014 514
CAIGE 05,303240 ;00015
JRST 00,L.50 ;00016
HLRZ 02,2(11) ;00017 515
PUSH $S,2 ;00020
PUSHJ $S,SELTREE2P ;00021
JRST 00,L.51 ;00022
L.47: PUSH $S,11 ;00023 516
PUSHJ $S,FNDLEAVES ;00024
L.51: SUB $S,PLTO.L+4 ;00025
L.50: HRRZ 11,2(11) ;00026 517
JRST 00,L.45 ;00027 519 ^^^
L.46: SETZ $V,0 ;00030
MOVE 11,3($F) ;00031 521 Formal
SUB $S,PLTO.L+5 ;00032
POP $S,13 ;00033
POPJ $S,0 ;00034
; 523 FUNCTION CLEANUP(SELF)=
; 524 BEGIN
; 525 REGISTER SON;
; 526 MAP BASE SELF:SON;
; 527
; 528 SON_.SELF[ASON];
; 529 WHILE .SON NEQ 0 DO
; 530 BEGIN
; 531 CLEANUP(.SON);
; 532 SON_.SON[BROTHER];
; 533 END;
; 534
; 535 DEALLOC(SELF,AMTNODE)
; 536 RETURN;
; 537 END;
; 538
CLEANUP:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
MOVEM 07,3($F) ;00005 Formal
MOVEM 11,4($F) ;00006 Formal
ADD $S,PLTO.L+0 ;00007
MOVE 01,-2($F) ;00010 525 Formal
HRRZ 11,1(01) ;00011
L.52: JUMPE 11,L.53 ;00012
;BLISS-10 5(110) 7/11/74 10:36:08 PLTDCL.BLI Page 5-3
PUSH $S,11 ;00013 531
PUSHJ $S,CLEANUP ;00014
SUB $S,PLTO.L+4 ;00015
HRRZ 11,2(11) ;00016 532
JRST 00,L.52 ;00017 534 ^^^
L.53: PUSH $S,1 ;00020
PUSH $S,2 ;00021
MOVEI 02,7 ;00022
MOVE 01,-2($F) ;00023 Formal
PUSHJ $S,DY.RET ;00024 External
POP $S,2 ;00025
POP $S,1 ;00026
SETZ $V,0 ;00027 536
MOVE 07,3($F) ;00030 538 Formal
MOVE 11,4($F) ;00031 Formal
SUB $S,PLTO.L+5 ;00032
POP $S,13 ;00033
POPJ $S,0 ;00034
; 539 FUNCTION TASCII(WHERE,BYTES)=
; 540 BEGIN
; 541 REGISTER C,WORDS[2];
; 542 LOCAL INBYTES,OUTBYTES;
; 543 MAP BASE WHERE;
; 544
; 545 INBYTES_WORDS<36,6>;
; 546 WORDS[0]_.WHERE[0,WHOLE];
; 547 WORDS[1]_.WHERE[1,WHOLE];
; 548 OUTBYTES_(.WHERE)<36,7>;
; 549 DECR LEN FROM .BYTES-1 TO 0 DO
; 550 BEGIN
; 551 ILDB(C,INBYTES);
; 552 C_.C+#40;
; 553 IDPB(C,OUTBYTES);
; 554 END;
; 555 RETURN;
; 556 END;
; 557
; 558 !***********************************************************
; 559
; 560 % THE TOP-LEVEL CODE %
; 561
TASCII:
PUSH $S,13 ;00000
PUSH $S,1($F) ;00001 Formal
HRRZ $F,17 ;00002
SUBI $F,1 ;00003
PUSH $S,13 ;00004
MOVEM 06,3($F) ;00005 Formal
MOVEM 07,4($F) ;00006 Formal
MOVEM 10,5($F) ;00007 Formal
MOVEM 11,6($F) ;00010 Formal
ADD $S,PLTO.L+5 ;00011
MOVE 01,PLTO.L+15 ;00012 541
;BLISS-10 5(110) 7/11/74 10:36:11 PLTDCL.BLI Page 5-4
MOVEM 01,11($F) ;00013 Local
MOVE 02,-3($F) ;00014 547 Formal
MOVE 07,0(02) ;00015
MOVE 10,1(02) ;00016 548
HRLI 02,440700 ;00017 549
MOVEM 02,12($F) ;00020 Local
MOVE 03,-2($F) ;00021 Formal
SOJ 03,0 ;00022
MOVE 06,3 ;00023
JUMPL 06,L.54 ;00024 550
L.55: ILDB 11,11($F) ;00025 551 Local
ADDI 11,40 ;00026 553
IDPB 11,12($F) ;00027 Local
SOJGE 06,L.55 ;00030 554 ^^^
L.54: SETZ $V,0 ;00031
SUB $S,PLTO.L+3 ;00032
MOVE 06,3($F) ;00033 557 Formal
MOVE 07,4($F) ;00034 Formal
MOVE 10,5($F) ;00035 Formal
MOVE 11,6($F) ;00036 Formal
SUB $S,PLTO.L+5 ;00037
POP $S,13 ;00040
POPJ $S,0 ;00041
; 562 MACRO RATIO=TMP2$;
; 563
; 564 INCHES_FLOAT(.INCHES);
; 565 MAXWT_FLOAT(.LEAVES);
; 566 BRKQAD_.MAXWT MUL NOCHECK;
; 567 TRAPSON[MYWT]_.MAXWT MUL TRPCHECK;
; 568 IF .TRAPSON[MYWT] LSS 2.0 THEN TRAPSON[MYWT]_2.0;
; 569 RATIO _ .INCHES DVIDE .MAXWT;
; 570 TOP_ITOP MUL .RATIO;
; 571 SIDE_ISIDE MUL .RATIO;
; 572 XINCR_IXINCR MUL .RATIO;
; 573 STEPS _ FLOAT(.STEPS);
; 574 PLTORIG(.TOP, .SIDE, .INCHES);
; 575 IF .ERRFND EQL -1 THEN (DOABORT);
; 576
; 577 NAME[DIAMOND]_NAME[TRAPZOID]_1.0;
; 578 XMAX_0;
; 579 OVLPLT();
; 580 SREG<RIGHT>_.FREG<RIGHT>; %A KLUDGE TO GET STACK RIGHT%
; 581 POPJ(#17,0) !RETURN TO LINK
PLTO.F::
PUSH $S,13 ;00000 1
ADD $S,PLTO.L+16 ;00001
MOVE 01,INCHES ;00002 9 External
IDIVI 01,400000 ;00003
SKIPE 00,1 ;00004
TLC 01,254000 ;00005
TLC 02,233000 ;00006
FAD 01,2 ;00007
MOVEM 01,INCHES ;00010 External
;BLISS-10 5(110) 7/11/74 10:36:16 PLTDCL.BLI Page 5-5
MOVE 03,LEAVES ;00011 566 External
IDIVI 03,400000 ;00012
SKIPE 00,3 ;00013
TLC 03,254000 ;00014
TLC 04,233000 ;00015
FAD 03,4 ;00016
MOVEM 03,LEAVES ;00017 External
FMPR 03,PLTO.L+17 ;00020 567
MOVEM 03,10($F) ;00021 Local
MOVE 05,LEAVES ;00022 568 External
FMPR 05,PLTO.L+20 ;00023
MOVEM 05,33($F) ;00024 Local
MOVE 02,33($F) ;00025 Local
CAML 02,PLTO.L+21 ;00026
JRST 00,L.56 ;00027
HRLZI 04,202400 ;00030 569
MOVEM 04,33($F) ;00031 Local
L.56: MOVE 04,INCHES ;00032 570 External
FDVR 04,LEAVES ;00033 External
MOVE 12,4 ;00034
MOVE 03,12 ;00035 571
FMPR 03,PLTO.L+22 ;00036
MOVEM 03,24($F) ;00037 Local
MOVE 05,12 ;00040 572
FMPR 05,PLTO.L+23 ;00041
MOVEM 05,23($F) ;00042 Local
MOVE 02,12 ;00043 573
FMPRI 02,201600 ;00044
MOVEM 02,34($F) ;00045 Local
MOVE 01,STEPS ;00046 574 External
IDIVI 01,400000 ;00047
SKIPE 00,1 ;00050
TLC 01,254000 ;00051
TLC 02,233000 ;00052
FAD 01,2 ;00053
MOVEM 01,STEPS ;00054 External
PUSH $S,3 ;00055
PUSH $S,5 ;00056
PUSH $S,INCHES ;00057 External
PUSHJ $S,PLTORIG ;00060 External
SUB $S,PLTO.L+2 ;00061
MOVE 04,ERRFND ;00062 575 External
CAMN 04,PLTO.L+24 ;00063
JRST 04,0 ;00064
HRLZI 01,201400 ;00065 578
MOVEM 01,13($F) ;00066 Local
MOVEM 01,12($F) ;00067 Local
SETZM 00,35($F) ;00070 579 Local
PUSHJ $S,OVLPLT ;00071
HRR $S,13 ;00072 581
POPJ $S,0 ;00073 582
MOVE $V,17 ;00074
SUB $S,PLTO.L+25 ;00075
CALLI 00,12 ;00076
;BLISS-10 5(110) 7/11/74 10:36:19 PLTDCL.BLI Page 5-6
;Special register declarations
$S=: 17
$F=: 13
$V=: 15
;PLIT area
PLTO.P::
;Constant pointers
PLTO.C::
;Literals
PLTO.L::
XWD 000006,000006 ;00000
XWD 000000,000000 ;00001
XWD 000003,000003 ;00002
XWD 000002,000002 ;00003
XWD 000001,000001 ;00004
XWD 000010,000010 ;00005
XWD 000007,000007 ;00006
XWD 000000,303240 ;00007
XWD 000004,000004 ;00010
XWD 000011,000011 ;00011
XWD 200525,402031 ;00012
XWD 000005,000005 ;00013
XWD 000000,303241 ;00014
XWD 440600,000007 ;00015
XWD 000035,000035 ;00016
XWD 200463,146315 ;00017
XWD 177463,146315 ;00020
XWD 202400,000000 ;00021
XWD 200577,777777 ;00022
XWD 200546,314631 ;00023
XWD 777777,777777 ;00024
XWD 000026,000026 ;00025
RELOC ;To low segment
;GLOBAL area
PLTO.G::
;OWN area
PLTO.O::
;EXTERNAL requests
EXTERN ERRFND,PLTORIG,STEPS,DY.RET,LPTOUT,PLTINIT
;BLISS-10 5(110) 7/11/74 10:36:19 PLTDCL.BLI Page 5-7
EXTERN INCHES,PLTPOLY,PLTLINE,LPBUF,LEAVES,DY.GET
EXTERN GETSON
END PLTO.F ;Pseudo-op for MACRO-10
Module length: 675+22
[BLSNED No errors detected]