;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) DIGITAL EQUIPMENT CORPORATION 1973,1986,1988. ; ALL RIGHTS RESERVED. ; ;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 % /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 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_FIRST; ; 115 AC_(FIRST+1); ; 116 FIRST_0; ; 117 BLT(AC,LAST); ; 118 END;$; ; 119 ; 120 MACRO SAVREGS ; 121 = BEGIN ; 122 REGSAV[15]_.(#17); ; 123 #17_REGSAV<0,0>; ; 124 BLT(#17,REGSAV[14]); ; 125 #17_.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],.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); ; 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,0,0); ; 229 IF .TMP1 EQL 0 THEN (DOABORT); ; 230 SELFDATA(ROOT) ; 231 SUBTREE(ROOT); ; 232 BRKAPART(ROOT); ; 233 SELTREE2P(ROOT); ; 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]; ; 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]; ; 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; ; 328 NXOFPRV_SELF[ASON]; ; 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]; ; 335 SON_.SON[BROTHER]; ; 336 END; ; 337 ; 338 IF .MAXSON EQL TRAPSON ; 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]; ; 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]; ; 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]_@.PREV; ; 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_.FREG; %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]