A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / xyplot.ra
1 / \ eXYPLOT.RA
2 /
3 / PART TWO OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M.HURLEY
4 / INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV 77
5 / COPIED J.J. ANDRES 1.NOV. 1980
6 / PLOTS,XYPLOT,FACTOR,WHERE,SYMBOL,SYMB(FOR NUMBER ONLY)
7 /
8 /
9 / PLOTTER ROUTINES FOR PDP 8
10 /
11 / VER 1.0 1.NOV. 1980 H.A.
12 / VER 2.0 12.NOV 1980 H.A.
13 / VER 2.1 20.NOV 1980 H.A. CORRECTS BUG IN SYMBOL CONCERNING #XFCTX,#XFCTY
14 / VER 3.0 27.NOV 1980 H.A. INSERTS SYMBOL (999.,999.,....)
15 / VER 3.1 27.NOV.1980 H.A. CORRECTS PEN UP/DOWN TIMING ERROR
16 / VER 3.2 18.JAN.1981 H.A. CORRECTS WHERE AND OVERLAY PROBLEMS
17 /
18 / UPDATES:
19 / 1. PLEXIT LOCKED OUT THE PLOTTER.
20 / 2. PLOTS DIDN'T DROVE PLOTTER TO THE ORIGIN
21 / * #XONCE IS REMOVED, SO #XNTST IS CALLED FROM PLOTS ALL TIMES
22 / 1-NOV-80 H.A.
23 / 3. FACTOR DID NOT WORK CORRECT ALL TIMES.
24 / FACTOR(1),XYPLOT(1,1),FACTOR(2),XYPLOT(1,1) DID NOT WORK
25 / 4. TRUNCATION ERROR IN XYPLOT CAUSED ROUNDING PROBLEMS:
26 / XSTEPS=INT(INT(X/#XINCR)*FACTOR)
27 / * FACTOR NOW WORKS CORRECT IN ANY CASE
28 / * FACTOR NOW HAS AN OPTIONAL SECOND PARAMETER. IF BOTH PRESENT
29 / * THEY SPECIFY THE X-FACTOR AND THE Y-FACTOR.
30 / * A NEGATIVE FACTOR IS NO MORE VALID YET. (ERROR WALKBACK)
31 / * ZERO FACTOR DISABLES PLOTTING.
32 / * XYPLOT NOW COMPUTES XSTEPS=INT(X/#XINCR*FACTOR)
33 / * WHERE HAS GOT AN OPTIONAL FOURTH PARAMETER FOR THE Y-FACTOR.
34 / * IF X AND Y FACTOR DO NOT MATCH AND THERE ARE ONLY THREE PARAMETERS
35 / * AN ERROR WALKBACK IS TAKEN.
36 / 7-NOV-80 H.A.
37 / 5. SYMBOL CALLS #XMBTB TO LOAD THE SYMBOL TABLE
38 / 12-NOV-80 H.A.
39 / 6. CALLING SYMBOL/NUMBER WITH X/Y EQUAL TO 999. WILL REPLACE THE
40 / 999. WITH THE ACTUAL POSITION OF THE PEN. VERY USEFULL IF YOU
41 / ARE EDITING AN OUTPUT LINE USEING SOME CALLS TO SYMBOL & NUMBER.
42 / IF YOU CALL FACTOR PRIOR TO SYMBOL(999.,....) THEN THE POSITION
43 / OF THE PEN IS NEVER CHANGED PRIOR PLOTTING THE SYMBOL. BUT THE
44 / FACTOR IS USED WHEN PLOTTING THE SYMBOL.
45 / 27-NOV-80 H.A.
46 / 7. EACH TIME XYPLOT WAS CALLED IT ISSUED A PEN UP/DOWN COMMAND.
47 / THIS CAUSED A STEP BY STEP MOVING OF THE PEN ALTHOUGH THE
48 / DIRECTION WAS NOT CHANGED. INTERFACE PROBLEM.
49 / NOW WE ISSUE THE PEN MOVE COMMAND ONLY WHEN WE WANT TO CHANGE
50 / THE DIRECTION OF THE PEN. THIS SPEEDS UP THE PLOTTER!
51 / * NOT VALID PEN VALUES (NOT -3 TO 3) CAUSE #ARGERR WITH X0 =1
52 / 27-NOV-80 H.A. A HARD DAY'S NIGHT.... AND MIDNIGHT TOO!
53 / 8. REMOVES BUG IN WHERE ROUTINE
54 / 9. TOO LARGE DELTA X (DELETA Y) CAUSE #ARGER WITH X0=2 (3)
55 / 18-JAN-81 H.A.
56 /
57 \f/
58 / FPP CODE PART CONTAINING PLOTS,PLOT,PLEXIT,WHERE,FACTOR
59 / THIS PROGRAM MAY BE PLACED INTO AN OVERLAY.
60 / IT REFERENCES THE PROGRAM PDPPLT LOCATED IN FIELD 1.
61 /
62 SECT #XYPLT
63 /
64 / REFERENCES INTO FRTS (FIELD 0)
65 /
66 EXTERN #ARGER / WRONG NUMBER OF PARAMETERS
67 /
68 / REFERENCES INTO FIELD 1 (PDPPLT)
69 /
70 EXTERN #XETXR
71 EXTERN #XOLDP / OLD PEN STATUS
72 EXTERN #XXOLD / OLD X PT WITH EFFECT OF FACTOR
73 EXTERN #XYOLD / OLD Y PT WITH EFFECT OF FACTOR
74 EXTERN #XPENC / OLD PEN STATUS (USED BY SYMBOL, NUMBER)
75 EXTERN #XINCR / #XINCREMENT SIZE OF EACH PLOTTER
76 EXTERN #XFCTX / X - FACTOR
77 EXTERN #XFCTY / Y - FACTOR
78 EXTERN #XETUP
79 EXTERN #XDPXR
80 EXTERN #XATIO
81 EXTERN #XNPLT
82 EXTERN #XCHTP
83 EXTERN #XCHCK
84 EXTERN #XNTST
85 EXTERN #XDNCK
86 /
87 / HERES THE INITIALIZATION ROUTINE
88 / STANDARD CALLING SEQUENCE, SHARED BY ALL SUBROUTINES
89 /
90 XRPLOT, 0 / MULTI PURPOSE XRS
91 X0= 0 / AT #ARGER X0 HOLDS THE XYPLOT ERROR NUMBER
92 X1= 1
93 XR1, 0
94 XR2, 0
95 XR3, 0
96 XR4, 0
97 XR5, 0
98 XR6, 0 / NOT USED
99 X7= 7
100 XR7, 0 / NUMBER OF PARAMETERS AT SUBROUTINE CALL
101 WBW, TEXT #XYPLOT# / WALK BACK WORD
102 PLOTXR, SETX XRPLOT
103 SETB BPPLOT
104 BPPLOT, FNOP
105 0
106 0
107 TERM2, F 0.
108 YPT, F 0. / VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR
109 XPT, F 0. / X VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR
110 TERM1, F 0.
111 ARG1, F 0.
112 ARG2,
113 YDIFF, F 0. / PEN VALUE
114 ORG 10*3+BPPLOT
115 FNOP
116 JA PLOTXR
117 ORG .+1 / TO MAKE A 3 WORD BASE ENTRY FOR PLTRTN
118 PLTRTN, JA .
119 MAJOR, F 0. / HORIZONTAL AXIS MOVE
120 MINOR, F 0. / DIAGONAL AXIS MOVE
121 XACT, F 0.
122 YACT, F 0. / HOLDS X,Y VALUES TYPED IN
123 XDIFF, F 0 / DELTA X
124 P1, F 1.
125 PF2, F 2.
126 P3, F 3.
127 P4, F 4.
128 PF7, F 7.
129 PT5, F .5
130 PORS, F 0. / =1 IF ENTERED FROM SYMBOL ROUTINE
131 XCHRPT, F 0. / X,Y VALUES FROM PDP TABLES
132 YCHRPT, F 0.
133 NUMENT, F 0. / INDICATES ENTRY FROM NUMBER SUBROUTINE
134 COSANG, F 0.
135 SINANG, F 0.
136 DEGRAD, F 0.017453293 / RADIANS TO DEGREES
137 F999, F 999.
138 F100, F 100.
139 XREAL, F 0. / FOR ORIGIN AND WHERE RTN
140 YREAL, F 0.
141 CENTSY, F 0. / CENTERED SYMBOL INDICATOR
142 NUMSYM, F 0. / NO. OF CHARACTERS TO PLOT
143 ANGADJ, F 0.
144 P22, F 18. / 22 OCTAL=18 DECIMAL
145 TWO, 0;2;0 / CONSTANT
146 F4095, F 4095. / LARGEST NUMBER FITTING INTO 12 BITS PDP 8 WORD
147 /
148 / - - - - - - - - - - - - -
149 \f 0
150 SYMSTR, JA . / SYMBOL ENTRY
151 JA SYMST / NEEDED TO PICK UP 2 WORD ADDRESSES
152 0
153 BASE 0
154 /
155 / SET UP THE BASE PAGE AND INDEX REGISTERS FOR THE PLOT ROUTINES
156 / PLOTS,XYPLOT,WHERE,FACTOR AND SYMBOL
157 /
158 /
159 PLTSTR, JA . / SAVE TWO WORDS FOR RETURN
160 STARTD
161 FLDA 3*10 / SAVE CALLERS RETURN ARGUMENT LIST
162 FSTA PLTRTN
163 FLDA% 0 / COMPUTE THE NUMBER OF PARAMETERS
164 FSUB 0
165 FSUB# TWO
166 SETX XRPLOT
167 LDX 1,1 / DIVIDE BY TWO
168 ALN 1
169 FNEG / MAKE COUNTER
170 ATX X7 / AND BUMP INTO X7
171 FLDA 0 / POINTER TO THE PARAMETER LIST --> FAC
172 SETB BPPLOT
173 BASE BPPLOT
174 FSTA ARG1 / POINTER TO PARAMETER LIST --> ARG1
175 JA PLTSTR / 1 --> X1, INDEX TO PARAMETER LIST
176 \f ENTRY XYPLOT
177 WB0, TEXT 'XYPLOT' / INSERT THE CORRECT WALK BACK WORD
178 XYPLOT,
179 FLDA# WB0 / INSERT THE CORRECT WALK BACK WORD
180 FSTA WBW / IN FRONT OF THE BASE PAGE
181 JSA PLTSTR / SET UP THE BASE PAGE AND X REGISTERS
182 SYMENT, FLDA% ARG1,1
183 FSTA XPT
184 FLDA% ARG1,1+
185 FSTA YPT
186 FLDA% ARG1,1+
187 FSTA YDIFF / VALUE OF PEN
188 STARTF
189 FLDA% XPT / X POINT
190 FDIV #XINCR / ALL INTERNAL CALCULATIONS DONE IN TERMS OF
191 / PLOTTING INTERVALS, HENCE INTEGERS SO
192 FMUL #XFCTX
193 JSA MAKINT / INTERGERIZE IT
194 FSTA XACT / WITH FACTOR
195 FSTA XPT / WITH EFFECT OF FACTOR
196 FLDA% YPT
197 FDIV #XINCR
198 FMUL #XFCTY
199 JSA MAKINT / INTERGERIZE IT
200 FSTA YACT
201 FSTA YPT / WITH EFFECT OF FACTOR
202 FLDA% YDIFF / 2=DOWN, 3=UP, NEG=NEW ORG
203 FSTA #XPENC
204 JGE MORPEN
205 FNEG
206 MORPEN, JSA MAKINT
207 SETX #XETXR
208 ATX 0 / ABS VALUE PEN
209 XTA 0 / FOR THE FPP SIMULATOR
210 SETX XRPLOT
211 FSTA YDIFF / SAVE NEW STATUS OF PEN
212 FSUB P3 / PASS ONLY 0-3
213 JLE ALEGAL / GOOD BOY
214 LDX 1,0 / BAD PEN CMD CAUSES XYPLOT ERROR 1
215 TRAP4 #ARGERR / FUCK OFF
216 ALEGAL,
217 FLDA YDIFF / RESTORE THE NEW VALUE OF PEN
218 FSUB #XOLDP / COMPARE WITH THE OLD VALUE
219 JEQ NOCHNG / IF THEY MATCH THEN GOTO NOCHANGE
220 TRAP4 #XETUP / ELSE SET UP THE NEW PEN
221 NOCHNG,
222 FLDA YDIFF / SAVE THE NEW PEN STATUS FOR THE NEXT CALL
223 FSTA #XOLDP
224 JA REALPT
225 /
226 /
227 MAKINT, JA . / FOR ALL THOSE INTEGERIZATIONS REQUIRED
228 FADD PT5 / ROUND THE VALUE
229 ALN 0 / GET RID OF FRACTIONAL PART
230 FNORM / NORMALIZE IT FOR OTHER FPP OPE#XATIONS
231 JA MAKINT
232 \f/ HERES THE CALCULATING PART OF THE PLOT ROUTINES
233 PRERL1, FCLA
234 PREREL, JA . / RTN USED AS SUBROUTINE
235 REALPT, FLDA XPT / AND JA'D TO
236 FSUB #XXOLD / COMPARE NEW X AND OLD
237 FSTA XDIFF
238 JGE ABSDX
239 FNEG
240 ABSDX, FSTA TERM1 / ABS DELTA X
241 /
242 FSUB F4095 / IF THE DELTA X DOESN NOT FIT INTO
243 JLE DXOK / A 12 BIT PDP 8 WORD THEN TAKE ERROR 2
244 LDX 2,0 / ELSE CONTINUE FI
245 TRAP4 #ARGER / HOME TO CCL
246 DXOK, /
247 /
248 FLDA YPT
249 FSUB #XYOLD / SAME FOR Y PNTS
250 FSTA YDIFF
251 JLE DELXY
252 FNEG
253 DELXY, FADDM TERM1 / DX-DY
254 /
255 FNEG / ABS DELTA Y --> FAC
256 FSUB F4095 / IF DELTA Y DOESN'T FIT INTO 12 BITS THEN
257 JLE DYOK / WE ERROR OFF ELSE CONTINUE FI
258 LDX 3,0 / THIS IS ERROR 3
259 TRAP4 #ARGER
260 DYOK,/
261 /
262 FLDA TERM1 / DETERMINE OCTANT + MAJOR AXIS
263
264 JGT XMAJ
265 FLDA YDIFF / Y AXIS IS MAJOR
266 FSTA MAJOR
267 FLDA XDIFF
268 FSTA MINOR
269 JA KNOWOC
270 XMAJ, FLDA XDIFF / X AXIS MAJOR
271 FSTA MAJOR
272 FLDA YDIFF
273 FSTA MINOR
274 KNOWOC, LDX 2,1 / 2*OCTANT VALUE COLLECTED IN XR1
275 / USES A SPECIAL (NON SEQUENTIAL) ORDERING
276 FLDA XDIFF
277 JLE .+4
278 ADDX 10,1
279 FLDA YDIFF
280 JLE .+4
281 ADDX 4,1
282 FLDA TERM1
283 JLE .+4
284 ADDX 2,1 / KEEP IT IN XR1
285 LDX 0,2
286 FLDA MAJOR / GET MAJOR MOVE
287 JGT POSMAJ / NEED AS ABS. VALUE
288 JEQ NOTHIN / IF NO MAJOR MOVES, THEN NO MOVES
289 FNEG
290 FSTA MAJOR / NO ABS. VALUE
291 POSMAJ, JSA MAKINT
292 SETX #XDPXR
293 ATX 1 / PASS THIS TO PDP CODE
294 SETX XRPLOT
295 / USE 2 WORD #XATIO IN PDP CODE TO DET SEQ OF MOVES
296 FLDA MINOR
297 JGT POSMIN / ABS VALUE
298 JEQ ZROCAS
299 FNEG
300 POSMIN, FDIV MAJOR / FORM #XATIO OF MINOR TO MAJOR MOVES
301 ALN 2
302 ZROCAS, FSTA #XATIO / DOWN TO PDP CODE
303 XTA 1
304 SETX #XDPXR / GET 2*OCTATNT
305 ATX 0
306 SETX XRPLOT
307 TRAP4 #XNPLT
308 \fNOTHIN, FLDA PORS
309 JEQ REGPLT / 0 MEANS WAS FROM XYPLOT
310 JLT SYMSET / WAS A MOVE IN SYMBOL
311 FCLA / IS FIRST MOVE IN SYMBOL (0 ORG)
312 FSTA #XXOLD
313 FSTA #XYOLD
314 FSTA PORS
315 JA SYMSTR
316 REGPLT, FLDA #XPENC
317 JLT ZEROLD / NEQ MEANS ZERO THE ORG
318 / SET X AND Y FOR NEXT MOVE TO START AT END OF THIS MOVE
319 FLDA XACT
320 FSTA #XXOLD
321 FLDA YACT
322 YS, FSTA #XYOLD
323 JA PLTRTN
324 SYMSET, FLDA XPT / CONT FROM CURRENT POINT
325 FSTA #XXOLD
326 FLDA YPT
327 FSTA #XYOLD
328 JA PRERL1
329 ZEROLD, FCLA
330 FSTA #XXOLD
331 JA YS
332 ENTRY SYMSTR
333 SYMST,
334 FLDA P1 / ENTERED WITH 36 BIT MODE TURNED ON
335 FSTA PORS / SET THE FROM SYMBOL FLAG
336 STARTD / USED BY SYMBOL FOR ORIGIN PLOT
337 FLDA SYMSTR / GET START OF ARG CHAIN
338 FSTA ARG1
339 LDX 1,1
340 JA SYMENT
341 \f ENTRY WHERE / WITHOUT EFFECT OF FACTOR
342 WB1, TEXT 'WHERE ' / THE WALK BACK WORD
343 WHERE,
344 FLDA# WB1
345 FSTA WBW
346 JSA PLTSTR
347 JXN WH0,7 / NO PARAMETERS AT ALL THEN
348 TRAP4 #ARGER / ABORT THE USER PROGRAM
349 / WARNING: WHERE RETURNS A WRONG RESULT IF YOU CALL FACTOR PRIOR
350 / TO THE WHERE ROUTINE WITHOUT PLOTTING WITH XYPLOT.
351 WH0,
352 FLDA% ARG1,1
353 FSTA TERM1 / ADDRESS OF X (FIRST PARAMETER)
354 FLDA% ARG1,1+
355 FSTA YDIFF / SAVE ADDRESS OF Y (SECOND PARAMETER)
356 STARTF
357 FLDA #XXOLD
358 FMUL #XINCR
359 FDIV #XFCTX / WHERE RETURNS X WITHOUT EFFECT OF FACTOR
360 FSTA% TERM1
361 JXN WH1,7+ / IF ONLY ONE PARAMETER, THEN ABORT USER
362 TRAP4 #ARGER
363 WH1,
364 FLDA #XYOLD
365 FMUL #XINCR
366 FDIV #XFCTY / RETURNED WITHOUT EFFECT OF FACTOR
367 FSTA% YDIFF / SEND BACK THE VALUES
368 JXN WH2,7+ / IF ONLY TWO PARAMETERS, THEN ABORT USER
369 TRAP4 #ARGER
370 WH2,
371 STARTD
372 FLDA% ARG1,1+
373 FSTA ARG2 / ADR. OF X -FACTOR (THIRD PARAMETER)
374 FLDA% ARG1,1+
375 FSTA ARG1 / ADR. OF Y -FACTOR (FOURTH PARAMETER) --> ARG1
376 STARTF
377 FLDA #XFCTX / IF THE X AND Y FACTOR MATCH THEN
378 FSUB #XFCTY
379 JNE WHXYF / WE NEED THREE PARAMETERS ONLY, ELSE WE GO WHXYF
380 FLDA #XFCTX
381 FSTA% ARG2
382 JXN PLTRTN,X7+ / IF THERE ARE ONLY THREE PARAMETERS THEN RETURN
383 FSTA% ARG1 / ELSE INSERT FACTOR INTO FOURTH PARAMETER AND
384 JA PLTRTN / RETURN
385 WHXYF, / WE REQUIRE X AND Y FACTOR PARAMETERS
386 FLDA #XFCTX
387 FSTA% ARG2 / INSERT THE X FACTOR INTO THE OUTPUT
388 JXN WH3,X7+
389 TRAP4 #ARGER / SORRY, BUT THERE ARE NOT ENOUGH ARGUMENTS
390 WH3,
391 FLDA #XFCTY
392 FSTA% ARG1
393 JA PLTRTN
394 ENTRY FACTOR / RESET FACTOR VALUE
395 WB2, TEXT 'FACTOR'
396 FACTOR,
397 FLDA# WB2
398 FSTA WBW
399 JSA PLTSTR
400 JXN FA0,7 / IF THERE ARE NO PARAMETERS AT ALL THEN
401 TRAP4 #ARGER / ABORT USER PROGRAM
402 FA0,
403 FLDA% ARG1,1
404 FSTA ARG2
405 STARTF
406 FLDA% ARG2
407 JGE FA1 / IF NEGATIVE FACTOR THEN
408 TRAP4 #ARGER / ABORT USER PROGRAM ELSE
409 FA1,
410 FSTA #XFCTX / STORE X AND Y FACTOR
411 FSTA #XFCTY / ONE PARAMETER MEANS X&Y GET THE SAME FACTOR
412 JXN FA3,7+
413 JA FACRTN
414 FA3,
415 STARTD / TWO PARAMETERS, GET THE Y FACTOR
416 FLDA% ARG1,1+
417 FSTA ARG2
418 STARTF
419 FLDA% ARG2
420 JGE FA2 / IF NEGATIVE FACTOR THEN
421 TRAP4 #ARGER / ABORT USER PROGRAM
422 FA2,
423 FSTA #XFCTY
424 FACRTN,
425 STARTF
426 JA PLTRTN
427 \f/ MUST DO A PLOTS AS FIRST ROUTINE IN ANY PLOTTING SEQUENCE
428 / USER SPECIFIES #XINCREMENT AND MACHINE TYPE (0=8/E, 1=12,8/I,8/L)
429 ENTRY PLOTS
430 WB3, TEXT 'PLOTS '
431 PLOTS,
432 FLDA# WB3
433 FSTA WBW
434 JSA PLTSTR
435 FLDA% ARG1,1
436 FSTA XPT
437 FLDA% ARG1,1+
438 FSTA ARG1
439 STARTF / THIS ROUTINE SETS UP A LOT OF CONSTANTS
440 FLDA% XPT
441 FSTA #XINCR
442 FLDA% ARG1
443 JEQ EIGHTE
444 FLDA P22 / SET MATCHTP TO 22 IF NON-8/E
445 EIGHTE, SETX #XCHTP
446 ATX 0 / 0=8/E, 022=12,8/I,8/L
447 XTA 0
448 SETX #XCHCK / FOR INITIALISATION CHECK
449 ATX 0
450 SETX XRPLOT
451 TRAP4 #XNTST
452 FLDA P1
453 FSTA #XFCTX / FACTOR=1 INITIALLY
454 FSTA #XFCTY
455 FCLA
456 FSTA #XOLDP / AND REALLY MOVE IT!
457 FSTA #XPENC / SO WILL DO FIRST PEN MOVEMENT
458 FSTA #XXOLD
459 FSTA #XYOLD
460 FSTA PORS
461 JA PLTRTN
462 ENTRY PLEXIT / BE SHURE ALL DONE
463 WB4, TEXT 'PLEXIT'
464 PLEXIT,
465 FLDA# WB4
466 FSTA WBW
467 JSA PLTSTR
468 STARTF
469 TRAP4 #XDNCK
470 JA PLTRTN
471 \f SECT #SYMBL
472 EXTERN SIN
473 EXTERN COS
474 EXTERN #XMBTB / HERE STARTS THE SYMBOL TABLE
475 /
476 / EXTERNAL REFERENCES INTO FIELD 1 (PDPPLT)
477 /
478 EXTERN #XTXAD
479 EXTERN #XLTCD
480 EXTERN #XPNOP
481 EXTERN #XLEFT
482 EXTERN #XRGHT
483 EXTERN #XNDLF
484 EXTERN #XNDRT
485 EXTERN #XPSNM
486 EXTERN #XPSIN
487 /
488 /
489 ENTRY SYMBOL
490 WB5, TEXT 'SYMBOL'
491 SYMBOL,
492 FLDA# WB5
493 FSTA WBW
494 JSA PLTSTR
495 JSR #XMBTB / LOAD THE SYMBOL TABLE ( SYMBTB )
496 SYM1, FLDA% ARG1,1
497 FSTA XPT / X POINT
498 FLDA% ARG1,1+
499 FSTA YPT / Y VALUE
500 FLDA% ARG1,1+
501 FSTA YDIFF / HEIGHT
502 FLDA% ARG1,1+
503 FSTA TERM1 / TEXT
504 FLDA% ARG1,1+
505 FSTA TERM2 / ANGLE
506 FLDA% ARG1,1+
507 FSTA ARG1 / NUMBER CHARS.
508 STARTF
509 FLDA% TERM2
510 FMUL DEGRAD / CONVERT TO RADIANS
511 FSTA XCHRPT / THEN DONT NEED SIND
512 FLDA% XPT
513 FSTA COSANG / VALUE OF X
514 FSUB F999 / IF X NEQ 999 THEN
515 JNE SY0 / WE USE THE X VALUE SPECIFIED ELSE
516 FLDA #XXOLD / WE START WITH THE OLD VALUE
517 FMUL #XINCR / THIS WILL CAUSE SOME TRUNCATION ERROR
518 FDIV #XFCTX / IN XYPLOT ROUTINE BUT THE ERROR IS SMALL
519 FSTA COSANG / AND WE HOPE FAC > 0 BUT THIS MUST NOT BE SO!
520 SY0,
521 FLDA% YPT
522 FSTA SINANG
523 FSUB F999 / IF Y NEQ 999 THEN
524 JNE SY1 / WE USE THE Y VALUE SPECIFIED ELSE
525 FLDA #XYOLD / WE START WITH THE OLD Y VALUE
526 FMUL #XINCR / THIS CAUSES SOME TRUNCATION ERRORS
527 FDIV #XFCTY
528 FSTA SINANG
529 SY1,
530 FCLA
531 FSTA #XTXAD
532 FSTA #XPENC / SO ALWAYS DOES INITIAL PEN U/D
533 FSTA CENTSY
534 FLDA TERM1 / GET TEXT ADDRESS
535 FSTA #XTXAD / PUT IT DOWN IN PDP PART
536 \f FLDA% YDIFF / ASSUME ITS A REGULAR
537 JGE NOTNEG / NEGATIVE SIZE IS NOT NICE
538 FNEG
539 NOTNEG, FDIV PF7 / ADJUST LATER IF A CENT
540 FSTA ANGADJ
541 FLDA% ARG1 / SHOWNS NUM. CHARS + PEN STATUS
542 FSTA NUMSYM
543 JGE REGSYM / GT OR =0 IS REG SYM
544 FLDA% TERM1 / CHECK FOR REG CHAR PASSED
545 FSUB F100 / AS AN INTEGER EQUIV.
546 JLT INTEQ / ITS A INTEGER EQUIV
547 FLDA% YDIFF / CENTERED SYMBOL
548 JGE NOTNG1
549 FNEG
550 NOTNG1, FDIV P4
551 FSTA ANGADJ
552 FLDA NUMSYM / -1=PEN UP, -2=PEN DOWN (CNTRD ONLY)
553 FADD P1
554 JGE UPPEN / MOVE WITH PEN UP
555 FSTA CENTSY / NEG MEANS DOWN FROM THE START
556 PTITON, FLDA PF2
557 CPEN, FSTA YCHRPT / =-2 FOR DOWN (CENT. + INTEQ ONLY)
558 / -3 FOR UP FOR ALL SYMBOLS + INTEQ
559 JSA SYMSTR / PLOT ORIGIN
560 JA .+10
561 JA COSANG
562 JA SINANG
563 JA YCHRPT
564 FLDA XPT
565 FMUL #XFCTX
566 FSTA XREAL / KEEP TRACK OF PASSED VALUES
567 FLDA YPT
568 FMUL #XFCTY
569 FSTA YREAL
570 FLDA CENTSY
571 JLE PENOK
572 JSA PNDOWN / PUT PEN DOWN NOW (CENT ONLY)
573 PENOK, JSR SIN
574 JA .+4
575 JA XCHRPT
576 FMUL ANGADJ
577 FSTA SINANG / SAVE SIN+HGT, USE FOR ALL VALUES
578 JSR COS
579 JA .+4
580 JA XCHRPT
581 FMUL ANGADJ
582 FSTA COSANG / COS(ANGLE)+HGT (IN #XINCREMENTS NOW)
583 LDX 0,4 / ZERO STEP COUNT
584 FLDA NUMENT
585 JGT NUM2 / JUMP IF FROM NUMBER
586 JA FSTLFT
587 UPPEN, FLDA P3 /
588 FSTA CENTSY / PUT PEN DOWN AFTER INITIAL MOVE
589 JA CPEN / MOVE WITH PEN UP
590 \fPENSET, JSA PNDOWN
591 ONEXY, JA .
592 SETX #XLTCD
593 XTA 2 / SET Y
594 FSTA YCHRPT
595 XTA 1 / GET X
596 FSTA XCHRPT / GET FIRST MOVE
597 SETX XRPLOT
598 FSUB PF7 / 7,0=PEN UP, 7,7=END
599 JEQ PENUPM
600 FLDA CENTSY
601 JEQ CALALL / CENTEREDS REQUIRE MODIFIED ORIGIN
602 FLDA PF2
603 FNEG
604 FADDM XCHRPT
605 FADDM YCHRPT
606 CALALL, JSA CALANG
607 JXN PENSET,5 / PUT PEN BACK DOWN IF NEG
608 JA ONEXY
609 INTEQ, FLDA NUMSYM / CHECK ON PEN
610 FADD P1
611 JLT PTITON
612 REGSYM, FLDA P3
613 JA CPEN
614 PENUPM, JSA PENUP
615 FLDA YCHRPT / CHECK FOR 7,7 END
616 FSUB PF7
617 JEQ NXTCHR / JUMP IF END OF CHARACTER
618 JA ONEXY / ON TO NEXT PAIR
619 PENUP, JA .
620 LDX 1,5 / SET FOR PEN UP
621 SETX #XDPXR
622 LDX 0,0 / PASS A ZERO FOR UP
623 SETX XRPLOT
624 TRAP4 #XPNOP
625 JA PENUP
626 PNDOWN, JA .
627 SETX #XDPXR
628 LDX 1,0 / PASS A ONE FOR DOWN
629 SETX XRPLOT
630 TRAP4 #XPNOP
631 LDX 0,5
632 JA PNDOWN
633 \fCALANG, JA .
634 FLDA YCHRPT
635 FDIV #XINCR
636 FSTA YCHRPT / Y MOVE AS STEPS (UNITERGERIZED)
637 FMUL SINANG
638 FNEG
639 FSTA TERM1 / =-SINA*Y
640 FLDA XCHRPT
641 FDIV #XINCR
642 FSTA XCHRPT
643 FMUL COSANG
644 FADD TERM1
645 FMUL #XFCTX
646 JSA MAKINT
647 FSTA XACT / FOR AT END OF TEXT
648 FSTA XPT / X*COSA+OLDX-SINA*Y
649 / REQUIRES AN OLDX+OLDY TERM, BUT I DO THIS ALL REL TO A
650 / LOGICAL 0,0 FOR EACH CHAR, SO I #XLEFT THEM OUT.
651 FLDA YCHRPT
652 FMUL COSANG
653 FSTA TERM1 / COSA*Y
654 FLDA XCHRPT
655 FMUL SINANG
656 FADD TERM1
657 FMUL #XFCTY
658 JSA MAKINT
659 FSTA YACT
660 FSTA YPT / NEWX*SINA*OLDY*COSA*Y
661 FLDA P1
662 FSTA #XPENC / USE SAME ORIGIN THROUOUT THE LETTER
663 FNEG
664 FSTA PORS
665 JSA PREREL / PEN MUST BE IN NEC POS BY NOW
666 JA CALANG
667 \fLEFTJS, XTA 4 / NUM OF MOVES
668 SETX #XLTCD
669 ATX 0 / PASS NUMBER OF STEPS INTO LETTER
670 SETX XRPLOT
671 TRAP4 #XLEFT / RETURN WITH A X,Y PAIR
672 JSA ONEXY
673 XTA 4
674 SETX #XLTCD
675 ATX 0 / STEP COUNT
676 SETX XRPLOT
677 JNE NOTFST / CHANGE IF BEFORE FIRST MOVE OF CHARACTER
678 JSA PNDOWN / PUT PEN DOWN NOW
679 NOTFST, TRAP4 #XRGHT / SET NEXT XY PAIR
680 JSA ONEXY
681 ADDX 1,4 / UPDATE COUNT
682 JA LEFTJS / 77 AT END OF CHAR USED TO DET END
683 \fCENTEX, JSA PENUP
684 JA CENTOO
685 NXTCHR, FLDA CENTSY
686 JNE CENTEX / LEAVE PEN AT CENTER FOR CENTS ONLY
687 FSTA YCHRPT
688 FLDA PF7
689 FSTA XCHRPT / MOVE PEN TO 7,0 FOR REG CHARS
690 JSA CALANG / PLOT IT
691 FLDA XACT / UPDATE COLLECTIVE ENDING X VALUE
692 FMUL #XFCTX / WITH EFFECT OF FACTOR
693 FADDM XREAL / ALSO WITH EFFECT OF FACTOR
694 FLDA YACT / UPDATE COLLECTIVE ENDING Y VALUE
695 FMUL #XFCTY / WITH EFFECT OF FACTOR
696 FADDM YREAL
697 CENTOO, LDX 0,4 / ZERO STEP NUM WITHIN CHAR
698 FCLA
699 FSTA #XXOLD
700 FSTA #XYOLD
701 FLDA P1
702 FNEG
703 FADD NUMSYM / UPDATE COUNTER
704 JLE SYMDON / NO MORE
705 FSTA NUMSYM / MORE, SAVE COUNT
706 FLDA NUMENT
707 JGT NUM3 / EXIT FOR NUM SUBR
708 FCLA
709 JXN RTCHAR,3 / 1=CHAR IS #XRGHT SIX BITS
710 FSTLFT, LDX 1,3 / POINT TO #XRGHT 6 WHEN TIME FOR NEXT CHAR
711 FLDA NUMSYM
712 JLT NUM5 / JUMP IF CENTERED SYM OR INTEQ
713 / CENTEREDS + INTEQ EQUIV PASSING 3 WORD VALUE IN NUM5
714 / REG SYM USES PDP ROUTINE TO GET ONE WORD OF LIST
715 FCLA
716 TRAP4 #XNDLF
717 JA LEFTJS / GO PLOT THE ACTUAL CHAR
718 RTCHAR, LDX 0,3 / POINT TO #XLEFT 6 BITS FOR NEXT TIME
719 TRAP4 #XNDRT
720 JA LEFTJS
721 SYMDON, FCLA
722 FSTA PORS
723 FSTA NUMENT
724 FLDA XREAL / UPDATES ORG X VALUE
725 FDIV #XFCTX
726 JSA MAKINT
727 FSTA #XXOLD
728 FLDA YREAL / UPDATES ORG Y VALUE
729 FDIV #XFCTY
730 JSA MAKINT
731 FSTA #XYOLD
732 JA PLTRTN / NOW CAN CONTINUE PLOT FROM HERE
733 \f ENTRY SYMB
734 WB6, TEXT 'SYMB '
735 SYMB,
736 FLDA# WB6
737 FSTA WBW
738 JSA PLTSTR / SPECIAL ENTRY FOR NUMBER SUBROUTINE
739 JSR #XMBTB / LOAD THE SYMBOL TABLE (SYMBTB)
740 STARTF
741 FLDA P1
742 FSTA NUMENT
743 STARTD
744 JA SYM1
745 NUM2, SETX NUMENT / FOR NUMBER SUBROUTINE ONLY
746 / HERE ONLY FOR FIRST NUMBER OF STRING
747 LDX -1,2
748 NUM3, JSA GETARG / FOR SECOND AND LATER NUMBERS
749 TRAP4 #XPSNM
750 JA LEFTJS
751 NUM5, SETX NUMENT / FOR INTEQ + CENETEREDS
752 LDX -1,2
753 JSA GETARG
754 TRAP4 #XPSIN
755 JA LEFTJS
756 GETARG, JA .
757 SETX NUMENT / USED FOR MORE THAN ONE CHARACTER
758 STARTD
759 FLDA #XTXAD+1 / CENTEREDS SYMBOLS AND NUM SUBROUTINE
760 / PASS VALUES AS THREE WORDS
761 FSTA ARG1
762 STARTF
763 FLDA% ARG1,2+ / PASS A NUMBER
764 SETX #XTXAD
765 JSA MAKINT
766 ATX 0
767 SETX XRPLOT
768 JA GETARG
769 END
770
771 \1a