Add README.md
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / x1.ra
1 /\ e X1.RA FOR HP7475 AND ADCOMP X80-SP
2 / \ eX Y P L O T . R A
3 /
4 IFSW 1 <ASCIITEST=1 > / TRACE ASCII OUTPUT TO PLOTTER
5 IFNSW 1 <ASCIITEST=0> / NO TRACE
6 IFSW 2 <PAUSETEST=1> / ADDITIONAL TRACE WITH CALL PAUSE # (SEE SRC LISTING FOR #)
7 IFNSW 2 <PAUSETEST=0> / NO CALL PAUSE
8 /
9 / PART TWO OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M.HURLEY
10 / INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV 77
11 / COPIED J.J. ANDRES 1.NOV. 1980
12 / PLOTS,XYPLOT,FACTOR,WHERE,SYMBOL,SYMB(FOR NUMBER ONLY)
13 /
14 /
15 / PLOTTER ROUTINES FOR PDP 8
16 /
17 / VER 1.0 1.NOV. 1980 H.A.
18 / VER 2.0 12.NOV 1980 H.A.
19 / VER 2.1 20.NOV 1980 H.A. CORRECTS BUG IN SYMBOL CONCERNING #XFCTX,#XFCTY
20 / VER 3.0 27.NOV 1980 H.A. INSERTS SYMBOL (999.,999.,....)
21 / VER 3.1 27.NOV.1980 H.A. CORRECTS PEN UP/DOWN TIMING ERROR
22 / VER 3.2 18.JAN.1981 H.A. CORRECTS WHERE AND OVERLAY PROBLEMS
23 / VER 3.3 4.AUG.1982 H.A. REDUCES NUMBER OF EXTERNAL REFERENCES
24 / VER 3.4 24.NOV.1983 H.A. REDUCES ASCII OUTPUT (VARIABLE OUTPUT FORMAT)
25 / VER 3.5 14-SEP-84 H.A. FIXES FILE OVERFLOW ERROR (INSERTS REWIND 2)
26 / VER 4.0 12-JUN-85 H.A. ASCII OUTPUT FOR X80-SP AND HP7475 PLOTTER ONLY
27 / VER 4.1 12-AUG-85 H.A. REMOVES BUG IN HP INITIALISATION STRING
28 / VER 4.2 22-AUG-85 H.A. REMOVES BUG IN FORMATTED OUTPUT ROUTINE
29 /
30 / UPDATES:
31 / 1. PLEXIT LOCKED OUT THE PLOTTER.
32 / 2. PLOTS DIDN'T DROVE PLOTTER TO THE ORIGIN
33 / * #XONCE IS REMOVED, SO #XNTST IS CALLED FROM PLOTS ALL TIMES
34 / 1-NOV-80 H.A.
35 / 3. FACTOR DID NOT WORK CORRECT ALL THE TIMES.
36 / FACTOR(1),XYPLOT(1,1),FACTOR(2),XYPLOT(1,1) DID NOT WORK
37 / 4. TRUNCATION ERROR IN XYPLOT CAUSED ROUNDING PROBLEMS:
38 / XSTEPS=INT(INT(X/#XINCR)*FACTOR)
39 / * FACTOR NOW WORKS CORRECT IN ANY CASE
40 / * FACTOR NOW HAS AN OPTIONAL SECOND PARAMETER. IF BOTH PRESENT
41 / * THEY SPECIFY THE X-FACTOR AND THE Y-FACTOR.
42 / * A NEGATIVE FACTOR IS NO MORE VALID YET. (ERROR WALKBACK)
43 / * ZERO FACTOR DISABLES PLOTTING.
44 / * XYPLOT NOW COMPUTES XSTEPS=INT(X/#XINCR*FACTOR)
45 / * WHERE HAS GOT AN OPTIONAL FOURTH PARAMETER FOR THE Y-FACTOR.
46 / * IF X AND Y FACTOR DO NOT MATCH AND THERE ARE ONLY THREE PARAMETERS
47 / * AN ERROR WALKBACK IS TAKEN.
48 / 7-NOV-80 H.A.
49 / 5. SYMBOL CALLS #XMBTB TO LOAD THE SYMBOL TABLE
50 / 12-NOV-80 H.A.
51 / 6. CALLING SYMBOL/NUMBER WITH X/Y EQUAL TO 999. WILL REPLACE THE
52 / 999. WITH THE ACTUAL POSITION OF THE PEN. VERY USEFULL IF YOU
53 / ARE EDITING AN OUTPUT LINE USEING SOME CALLS TO SYMBOL & NUMBER.
54 / IF YOU CALL FACTOR PRIOR TO SYMBOL(999.,....) THEN THE POSITION
55 / OF THE PEN IS NEVER CHANGED PRIOR PLOTTING THE SYMBOL. BUT THE
56 / FACTOR IS USED WHEN PLOTTING THE SYMBOL.
57 / 27-NOV-80 H.A.
58 / 7. EACH TIME XYPLOT WAS CALLED IT ISSUED A PEN UP/DOWN COMMAND.
59 / THIS CAUSED A STEP BY STEP MOVING OF THE PEN ALTHOUGH THE
60 / DIRECTION WAS NOT CHANGED. INTERFACE PROBLEM.
61 / NOW WE ISSUE THE PEN MOVE COMMAND ONLY WHEN WE WANT TO CHANGE
62 / THE DIRECTION OF THE PEN. THIS SPEEDS UP THE PLOTTER!
63 / * NOT VALID PEN VALUES (NOT -3 TO 3) CAUSE #ARGERR WITH X0 =1
64 / 27-NOV-80 H.A. A HARD DAY'S NIGHT.... AND MIDNIGHT TOO!
65 / 8. REMOVES BUG IN WHERE ROUTINE
66 / 9. TOO LARGE DELTA X (DELETA Y) CAUSE #ARGER WITH X0=2 (3)
67 / 18-JAN-81 H.A.
68 / 10. ASCII OUPUT ONLY:
69 / CALL PLOTS PLOTTERTYPE: 1 FOR HP7475 PLOTTER
70 / 2 FOR ADCOMP X80-SP PLOTTER
71 / OUTPUT TO FORTRAN UNIT 2
72 / ASSIGN OS/8 I/O HANDLER TO UNIT 2
73 / NO INCREMENTAL PLOTTER ANY MORE.
74 / OPTIONAL 4.TH PARAMETER TO CALL XYPLOT (X,Y,PEN,SELPEN)
75 / SELPEN SELECTS PEN FOR HP7475 PLOTTER: DEFAULTS TO PEN #1
76 / NO EFFECT FOR ADCOMP PLOTTER.
77 / 11-JUN-85
78 /
79 \f/
80 / FPP CODE PART CONTAINING PLOTS,PLOT,PLEXIT,WHERE,FACTOR
81 / THIS PROGRAM MAY BE PLACED INTO AN OVERLAY.
82 / IT REFERENCES THE PROGRAM PDPPLT LOCATED IN FIELD 1.
83 /
84 SECT XYPLOT
85 JA XYPLTT
86 /
87 / REFERENCES INTO FRTS (FIELD 0)
88 /
89 EXTERN #ARGER / WRONG NUMBER OF PARAMETERS
90 EXTERN #REW
91 EXTERN #WRITO
92 EXTERN #RSVO
93 EXTERN #RENDO
94 /
95 / REFERENCES INTO FIELD 1 (PDPPLT)
96 /
97 EXTERN #XORGX / LAST ABSOLUTE ORIGIN IN PLOTTER STEPS X (REAL)
98 #XORGY= #XORGX+3
99 #XABSX= #XORGY+3 / ACTUAL ABSOLUTE X POSITION IN STEPS (REAL)
100 #XABSY= #XABSX+3
101 #XOLDP= #XABSY+3 / OLD PEN STATUS
102 #XXOLD= #XOLDP+3 / OLD XPT WITH EFFECT OF FACTOR
103 #XYOLD= #XXOLD+3 / OLD YPT WITH EFFECT OF FACTOR
104 #XPENC= #XYOLD+3 / OLD PEN STATUS ( USED BY SYMBOL, NUMBER)
105 #XINCX= #XPENC+3 / INCREMENT SIZE FOR X STEP MOTOR OF PLOTTER
106 #XINCY= #XINCX+3 / INCREMENT SIZE FOR Y STEP MOTOR OF PLOTTER
107 #XFCTX= #XINCY+3 / X - FACTOR
108 #XFCTY= #XFCTX+3 / Y - FACTOR
109 PLUNIT=#XFCTY+3 / PLOTTER UNIT NUMBER INSERTED BY CALL PLOTS
110 SPENUP=PLUNIT+3 / HERE PLOTS INSERTS THE PEN UP/DOWN CMD'S
111 SPENDN=SPENUP+2 / THREE WORD TRANSFER!
112 /
113 / HERES THE INITIALIZATION ROUTINE
114 / STANDARD CALLING SEQUENCE, SHARED BY ALL SUBROUTINES
115 /
116 XRPLOT, 0 / MULTI PURPOSE XRS
117 X0= 0 / AT #ARGER X0 HOLDS THE XYPLOT ERROR NUMBER
118 X1= 1
119 XR1, 0
120 XR2, 0
121 XR3, 0
122 XR4, 0
123 XR5, 0
124 XR6, 0 / NOT USED
125 X7= 7
126 XR7, 0 / NUMBER OF PARAMETERS AT SUBROUTINE CALL
127 WBW, TEXT #XYPLOT# / WALK BACK WORD
128 PLOTXR, SETX XRPLOT
129 SETB BPPLOT
130 BPPLOT, FNOP
131 0
132 0
133 TERM2, F 0.
134 YPT, F 0. / VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR
135 XPT, F 0. / X VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR
136 TERM1, F 0. / TEMPORARY STORAGE
137 ARG1, F 0.
138 ARG2,
139 YDIFF, F 0. / PEN VALUE
140 ORG 10*3+BPPLOT
141 FNOP
142 JA PLOTXR
143 ORG .+1 / TO MAKE A 3 WORD BASE ENTRY FOR PLTRTN
144 PLTRTN, JA .
145 MAJOR, F 0. / HORIZONTAL AXIS MOVE
146 MINOR, F 0. / DIAGONAL AXIS MOVE
147 XACT, F 0.
148 YACT, F 0. / HOLDS X,Y VALUES TYPED IN
149 XDIFF, F 0 / DELTA X
150 P1, F 1.
151 PF2, F 2.
152 P3, F 3.
153 P4, F 4.
154 PF7, F 7.
155 TWO,/ / 0;2;0 = F 0.5
156 PT5, F .5
157 PORS, F 0. / =1 IF ENTERED FROM SYMBOL ROUTINE
158 XCHRPT, F 0. / X,Y VALUES FROM PDP TABLES
159 YCHRPT, F 0.
160 NUMENT, F 0. / INDICATES ENTRY FROM NUMBER SUBROUTINE
161 COSANG, F 0.
162 SINANG, F 0.
163 DEGRAD, F 0.017453293 / RADIANS TO DEGREES
164 F999, F 999.
165 F100, F 100.
166 XREAL, F 0. / FOR ORIGIN AND WHERE RTN
167 YREAL, F 0.
168 CENTSY, F 0. / CENTERED SYMBOL INDICATOR
169 NUMSYM, F 0. / NO. OF CHARACTERS TO PLOT
170 ANGADJ, F 0.
171 P22, F 18. / 22 OCTAL=18 DECIMAL
172 WRP, F 0. / HOLDS PEN CMD FOR WRITEIT ROUTINE
173 WRX, F 0. / HOLDS X VALUE
174 WRY, F 0. / HOLDS Y VALUE
175 /
176 /
177 / - - - - - - - - - - - - -
178 \f 0
179 SYMSTR, JA . / SYMBOL ENTRY
180 JA SYMST / NEEDED TO PICK UP 2 WORD ADDRESSES
181 0
182 BASE 0
183 /
184 / SET UP THE BASE PAGE AND INDEX REGISTERS FOR THE PLOT ROUTINES
185 / PLOTS,XYPLOT,WHERE,FACTOR AND SYMBOL
186 /
187 /
188 PLTSTR, JA . / SAVE TWO WORDS FOR RETURN
189 STARTD
190 FLDA 3*10 / SAVE CALLERS RETURN ARGUMENT LIST
191 FSTA PLTRTN
192 FLDA% 0 / COMPUTE THE NUMBER OF PARAMETERS
193 FSUB 0
194 FSUB# TWO
195 SETX XRPLOT
196 LDX 1,1 / DIVIDE BY TWO
197 ALN 1
198 FNEG / MAKE COUNTER
199 ATX X7 / AND BUMP INTO X7
200 FLDA 0 / POINTER TO THE PARAMETER LIST --> FAC
201 SETB BPPLOT
202 BASE BPPLOT
203 FSTA ARG1 / POINTER TO PARAMETER LIST --> ARG1
204 JA PLTSTR / 1 --> X1, INDEX TO PARAMETER LIST
205 \f/
206 / XYPLOT SUBROUTINE
207 / CALL XYPLOT (XPT,YPT,PENCMD)
208 /
209 / REAL XPT,YPT AND MUST BE POSSIBLE TO FIX INTO 24 BIT NUMBER
210 / INTEGER PENCMD (-3,-2,2,3 AND NOTHING ELSE)
211 /
212 / ARGERR ERRORS:
213 / 1 BAD PENCMD
214 / 2 NOT USED
215 / 3 NOT USED
216 / 4 XPT UNNORMALIZED OR TO LARGE ( FOR 24 BIT FRACTIONAL)
217 / 5 YPT "" "" "
218 / 6 BAD UNIT NUMBER TO CALL PLOTS
219 / 7 BAD MACHINE TYPE TO CALL PLOTS
220 / 10 BAD # OF ARGUMENTS TO CALL WHERE (1 OR 2 ARG'S ONLY)
221 / 11 BAD # OF ARGUMENTS TO CALL WHERE - 4 EXPECTED SINCE X/Y FACTOR DIAGREE
222 / 12 BAD # OF ARGUMENTS TO CALL FACTOR
223 / 13 BAD ARGUMENTS TO CALL FACTOR (NEGATIVE FACTOR)
224 /
225 /
226 WB0, TEXT 'XYPLOT' / INSERT THE CORRECT WALK BACK WORD
227 XYPLTT,
228 FLDA# WB0 / INSERT THE CORRECT WALK BACK WORD
229 FSTA WBW / IN FRONT OF THE BASE PAGE
230 JSA PLTSTR / SET UP THE BASE PAGE AND X REGISTERS
231 IFZERO PAUSETEST < JA PAUS1 >
232 IFNZRO PAUSETEST < FNOP;FNOP >
233 EXTERN #PAUSE
234 STARTF
235 FLDA P1
236 JSR #PAUSE
237 STARTD
238 PAUS1,/
239 SYMENT, FLDA% ARG1,1 / LOAD ADR. OF ARGUMENTS --> XPT,YPT,YDIFF
240 FSTA XPT
241 FLDA% ARG1,1+
242 FSTA YPT
243 FLDA% ARG1,1+
244 FSTA YDIFF / VALUE OF PEN
245 STARTF
246 / GET THE X POINT
247 FLDA #XORGX / REMEMBER THE X OFFSET
248 FSTA #XABSX
249 FLDA% XPT / X POINT
250 FDIV #XINCX / ALL INTERNAL CALCULATIONS DONE IN TERMS OF
251 / PLOTTING INTERVALS, HENCE INTEGERS SO
252 FMUL #XFCTX
253 FADDM #XABSX / ABSOLUTE NUMBER OF STEPS IN REAL
254 /
255 JAL XPTERR / IF IT IS IMPOSSIBLE TO FIX XPT THEN ERROR OFF
256 JA XPTOK
257 XPTERR, LDX 4,X0 / WITH #ARGER 4
258 TRAP4 #ARGER
259 XPTOK,
260 JSA MAKINT / INTERGERIZE IT
261 FSTA XACT / WITH FACTOR
262 FSTA XPT / WITH EFFECT OF FACTOR
263 / GET Y - POINT
264 FLDA #XORGY / DON'T FORGET THE OFFSET
265 FSTA #XABSY
266 FLDA% YPT
267 FDIV #XINCY
268 FMUL #XFCTY
269 FADDM #XABSY / HERE WE STORE THE ABSOLUTE NUMBER OF STEPS DONE
270 /
271 JAL YPTERR / IF IT IS IMPOSSIBLE TO FIX YPT THEN WE ERROR OFF
272 JA YPTOK
273 YPTERR, LDX 5,X0 / WITH #ARGERR 5
274 TRAP4 #ARGER
275 YPTOK,
276 JSA MAKINT / INTERGERIZE IT
277 FSTA YACT
278 FSTA YPT / WITH EFFECT OF FACTOR
279 / GET PEN VALUE
280 FLDA% YDIFF / 2=DOWN, 3=UP, NEG=NEW ORG
281 FSTA #XPENC
282 JGE MORPEN
283 FNEG
284 MORPEN, JSA MAKINT
285 FSTA YDIFF / SAVE NEW STATUS OF PEN
286 FSUB P1 / IF PEN LT 2 THEN
287 JLE PENERR / GOTO PENERR EXIT
288 FSUB PF2 / PASS ONLY 2,3
289 JLE ALEGAL / GOOD BOY
290 PENERR, FLDA YDIFF / PEN --> FAC
291 LDX 1,0 / BAD PEN CMD CAUSES XYPLOT ERROR 1
292 TRAP4 #ARGERR / FUCK OFF
293 ALEGAL,
294 FLDA YDIFF / SAVE THE NEW PEN STATUS FOR THE NEXT CALL
295 FSTA #XOLDP
296 IFZERO PAUSETEST < JA PAUS2 >
297 IFNZRO PAUSETEST < FNOP;FNOP >
298 LDX 2,X0
299 XTA X0
300 JSR #PAUSE
301 PAUS2,/
302 JA REALPT
303 /
304 /
305 MAKINT, JA . / FOR ALL THOSE INTEGERIZATIONS REQUIRED
306 FADD PT5 / ROUND THE VALUE
307 ALN 0 / GET RID OF FRACTIONAL PART
308 FNORM / NORMALIZE IT FOR OTHER FPP OPERXATIONS
309 JA MAKINT
310 \f/ HERES THE CALCULATING PART OF THE PLOT ROUTINES
311 PRERL1, FCLA
312 PREREL, JA . / RTN USED AS SUBROUTINE
313 REALPT, FLDA XPT / AND JA'D TO
314 FSUB #XXOLD / COMPARE NEW X AND OLD
315 FSTA XDIFF
316 /
317 FLDA YPT
318 FSUB #XYOLD / SAME FOR Y PNTS
319 FSTA YDIFF
320 FLDA #XOLDP / GET ACTUAL PEN STATUS
321 FSUB P3
322 JLT DP0
323 FLDA# SPENUP / PEN 2 ( PEN UP) [# MUST BE HERE BECAUSE WE ARE IN BASE PAGE]
324 JA DP1
325 DP0,
326 FLDA# SPENDN
327 DP1, FSTA WRP / STORE PEN CMD INTO FORMATTED WRITE RTN
328 FLDA #XABSY
329 FSTA WRY
330 FLDA #XABSX
331 FSTA WRX
332 JSA WRITEIT / DO FORMATTED I/O
333 JA NX1
334 \f/
335 / FORMATTED WRITE ROUTINE
336 / ENTRY: STARTF, DESTROYED FAC
337 / PARAMETERS ARE STORED INTO WRP,WRX,WRY PRIOR TO CALL
338 /
339 WRITEIT, ORG .+2
340 IFZERO PAUSETEST < JA PAUS3 >
341 IFNZRO PAUSETEST < FNOP;FNOP >
342 LDX 3,X0
343 XTA X0
344 JSR #PAUSE
345 PAUS3,/
346 /
347 /
348 / HERE WE COMPUTE THE FORMAT FORM1
349 /
350 FLDA PLUNIT / TEST FOR PLOTTER UNIT NO.
351 FSUB P1
352 JEQ WRI0 / FOR HP 7475 NO SPECIAL HANDLING
353 / X80-SP OUTPUT ROUTINE
354 TRAP3 #WRITO
355 JA UNIX80
356 IFNZRO ASCIITEST < JA FORM0 >
357 IFZERO ASCIITEST < JA FORM1 >
358 FLDA WRX
359 FNEG / WE NEED NEGATIVE NUMBER FOR Y-AXIS
360 FADD WRY / Y-X --> FAC
361 FADDM WRX / X+Y-X --> WRX
362 FSUB WRY / Y-X-Y --> FAC
363 FSTA WRY / -X --> Y WONDERFULL ISN'T IT? HOPE NO CARRY!
364 JMP WRI1 / GO AND COMPUTE FORMAT
365 / HP7475 OUTPUT ROUTINE
366 WRI0,
367 TRAP3 #WRITO
368 JA UNIX80
369 IFNZRO ASCIITEST < JA FORM0 >
370 IFZERO ASCIITEST < JA FORHP >
371 / OUTPUT ROUTINE COMMON FOR BOTH PLOTTER
372 WRI1,
373 FLDA WRP
374 TRAP3 #RSVO / OUTPUT PEN UP/DOWN COMMAND
375 FLDA WRX / SO WE SAVE SPACE IN THE OUTPUT LINE
376 JSA COLUMNS / COMPUTE MAGNITUDE OF NUMBER, SWITCH TO STARTD
377 / STARTD DONE BY COLUMNS!
378 FADD FORM1C / ADD LEADING SPACES
379 FSTA FORM1A / AND INSERT INTO FORMAT (I.E. 2I,...)
380 FSTA FORHPA / FORMAT FOR HP7475
381 STARTF
382 FLDA WRY
383 JSA COLUMNS / COMPUTE MAGNITUDE OF NUMBER, SWITCH TO STARTD
384 FADD FORM1C / ADD THE LEADING SPACES
385 FSTA FORM1B / INSERT SECOND FORMAT STATEMENT
386 FSTA FORHPB / FORMAT FOR HP7475
387 STARTF
388 /
389 / WRITE (2,FORM1) WRP,WRX,WRY
390 / DIAGNOSTIC OUTPUT:
391 / WRITE (2,FORM0) WRP,#XPENC,#XORGX,#XFCTX,#XINCX,XACT
392 / * ,#XORGY,#XFCTY,#XINCY,YACT,FORM1,FORHP,WRX,WRY
393 /
394 IFNZRO ASCIITEST < FNOP;FNOP >
395 IFZERO ASCIITEST < JA DP4711 >
396 FLDA #XPENC
397 TRAP3 #RSVO
398 FLDA #XORGX
399 TRAP3 #RSVO
400 FLDA #XFCTX
401 TRAP3 #RSVO
402 FLDA #XINCX
403 TRAP3 #RSVO
404 FLDA XACT
405 TRAP3 #RSVO
406 FLDA #XORGY
407 TRAP3 #RSVO
408 FLDA #XFCTY
409 TRAP3 #RSVO
410 FLDA #XINCY
411 TRAP3 #RSVO
412 FLDA YACT
413 TRAP3 #RSVO
414 FLDA FORM1
415 TRAP3 #RSVO
416 FLDA FORM1+3
417 TRAP3 #RSVO
418 FLDA FORM1+6
419 TRAP3 #RSVO
420 FLDA FORM1+11
421 TRAP3 #RSVO
422 FLDA FORHP
423 TRAP3 #RSVO
424 FLDA FORHP+3
425 TRAP3 #RSVO
426 FLDA FORHP+6
427 TRAP3 #RSVO
428 FLDA FORHP+11
429 TRAP3 #RSVO
430 DP4711,/
431 FLDA WRX / AND NOW WE OUTPUT THEM UNDER CONTROL OF FORM1
432 TRAP3 #RSVO
433 FLDA WRY
434 TRAP3 #RSVO
435 TRAP3 #RENDO
436 /
437 /
438 JA WRITEIT / RETURN
439 /
440 / SUBROUTINE TO COMPUTE FORMAT FOR OUTPUT
441 / ENTRY: WITH STARTF, FAC CONTAINS NUMBER (POS. OR NEG.)
442 / RETURN: FAC CONTAINS FORMAT, DOUBLE PRECISION MODE
443 / DESTROYED: X1
444 /
445 COLUMNS, ORG .+2
446 LDX 1,X1 / HERE WE COUNT THE DIGITS USED TO PRINT THE NUMBER
447 JGE COLUM1
448 ADDX 1,X1 / NEGATIVE NUMBERS: ONE MORE COL FOR SIGN
449 FNEG / I DO NOT KNOW IF IT MUST BE DONE, DO YOU KNOW?
450 COLUM1, FADD PT5 / ROUND
451 LOOP,
452 FDIV TEN
453 ALN 0 / INTEGER DIVISION, STRIP OFF REMAINDER
454 FNORM
455 JEQ DONE
456 JXN LOOP,X1+ / COUNT THE NUMBER OF DIVISIONS BY 10
457 DONE,
458 STARTD
459 XTA X1
460 FADD C60 / CONVERT TO ASCII
461 JA COLUMNS
462 TEN, F 10.
463 C60, 0;1160 / I0
464 /
465 FORM0, TEXT #(1X,A2,A6,2(I7,2F9.4,I8)/4X,8A6,2I6)#
466 FORM1, TEXT #(1XA1,#
467 FORM1A, TEXT # I0, #
468 TEXT #1X, #
469 FORM1B, TEXT # I0) #
470 FORM1C, TEXT # #; 0
471 FORHP, TEXT #(1XA2,#
472 FORHPA, TEXT # I0, #
473 TEXT #1H,, #
474 FORHPB, TEXT # I0) #
475 \fNX1,
476 SETX XRPLOT
477 NOTHIN, FLDA PORS
478 JEQ REGPLT / 0 MEANS WAS FROM XYPLOT
479 JLT SYMSET / WAS A MOVE IN SYMBOL
480 FCLA / IS FIRST MOVE IN SYMBOL (0 ORG)
481 FSTA #XXOLD
482 FSTA #XYOLD
483 FSTA PORS
484 JA SYMSTR
485 REGPLT, FLDA #XPENC
486 JLT ZEROLD / NEQ MEANS ZERO THE ORG
487 / SET X AND Y FOR NEXT MOVE TO START AT END OF THIS MOVE
488 FLDA XACT
489 FSTA #XXOLD
490 FLDA YACT
491 FSTA #XYOLD
492 JA PLTRTN
493 SYMSET, FLDA XPT / CONT FROM CURRENT POINT
494 FSTA #XXOLD
495 FLDA YPT
496 FSTA #XYOLD
497 JA PRERL1
498 /
499 / NEGATIVE PEN STATUS, SO WE ZERO THE ORIGIN
500 /
501 ZEROLD,
502 FLDA #XABSX / SAVE THE ACTUAL PEN POSITION (MOTOR STEPS)
503 FSTA #XORGX
504 FLDA #XABSY
505 FSTA #XORGY
506 FCLA
507 FSTA #XXOLD
508 FSTA #XYOLD
509 JA PLTRTN
510 ENTRY SYMSTR
511 SYMST,
512 FLDA P1 / ENTERED WITH 36 BIT MODE TURNED ON
513 FSTA PORS / SET THE FROM SYMBOL FLAG
514 STARTD / USED BY SYMBOL FOR ORIGIN PLOT
515 FLDA SYMSTR / GET START OF ARG CHAIN
516 FSTA ARG1
517 LDX 1,1
518 JA SYMENT
519 \f ENTRY WHERE / WITHOUT EFFECT OF FACTOR
520 WB1, TEXT 'WHERE ' / THE WALK BACK WORD
521 WHERE,
522 FLDA# WB1
523 FSTA WBW
524 JSA PLTSTR
525 JXN WH0,7 / NO PARAMETERS AT ALL THEN
526 TRAP4 #ARGER / ABORT THE USER PROGRAM
527 / WARNING: WHERE RETURNS A WRONG RESULT IF YOU CALL FACTOR PRIOR
528 / TO THE WHERE ROUTINE WITHOUT PLOTTING WITH XYPLOT.
529 WH0,
530 FLDA% ARG1,1
531 FSTA TERM1 / ADDRESS OF X (FIRST PARAMETER)
532 FLDA% ARG1,1+
533 FSTA YDIFF / SAVE ADDRESS OF Y (SECOND PARAMETER)
534 STARTF
535 FLDA #XXOLD
536 FMUL #XINCX
537 FDIV #XFCTX / WHERE RETURNS X WITHOUT EFFECT OF FACTOR
538 FSTA% TERM1
539 JXN WH1,7+ / IF ONLY ONE PARAMETER, THEN ABORT USER
540 LDX 10,0 / WITH ERROR NUMBER 10
541 TRAP4 #ARGER
542 WH1,
543 FLDA #XYOLD
544 FMUL #XINCY
545 FDIV #XFCTY / RETURNED WITHOUT EFFECT OF FACTOR
546 FSTA% YDIFF / SEND BACK THE VALUES
547 JXN WH2,7+ / IF ONLY TWO PARAMETERS, THEN ABORT USER
548 LDX 10,0 / WITH ERROR NUMBER 10
549 TRAP4 #ARGER
550 WH2,
551 STARTD
552 FLDA% ARG1,1+
553 FSTA ARG2 / ADR. OF X -FACTOR (THIRD PARAMETER)
554 FLDA% ARG1,1+
555 FSTA ARG1 / ADR. OF Y -FACTOR (FOURTH PARAMETER) --> ARG1
556 STARTF
557 FLDA #XFCTX / IF THE X AND Y FACTOR MATCH THEN
558 FSUB #XFCTY
559 JNE WHXYF / WE NEED THREE PARAMETERS ONLY, ELSE WE GO WHXYF
560 FLDA #XFCTX
561 FSTA% ARG2
562 JXN PLTRTN,X7+ / IF THERE ARE ONLY THREE PARAMETERS THEN RETURN
563 FSTA% ARG1 / ELSE INSERT FACTOR INTO FOURTH PARAMETER AND
564 JA PLTRTN / RETURN
565 WHXYF, / WE REQUIRE X AND Y FACTOR PARAMETERS
566 FLDA #XFCTX
567 FSTA% ARG2 / INSERT THE X FACTOR INTO THE OUTPUT
568 JXN WH3,X7+
569 LDX 11,0 / WITH ERROR # 11
570 TRAP4 #ARGER / SORRY, BUT THERE ARE NOT ENOUGH ARGUMENTS
571 WH3,
572 FLDA #XFCTY
573 FSTA% ARG1
574 JA PLTRTN
575 ENTRY FACTOR / RESET FACTOR VALUE
576 WB2, TEXT 'FACTOR'
577 FACTOR,
578 FLDA# WB2
579 FSTA WBW
580 JSA PLTSTR
581 JXN FA0,7 / IF THERE ARE NO PARAMETERS AT ALL THEN
582 LDX 12,0 / WITH ERROR # 12
583 TRAP4 #ARGER / ABORT USER PROGRAM
584 FA0,
585 FLDA% ARG1,1
586 FSTA ARG2
587 STARTF
588 FLDA% ARG2
589 JGE FA1 / IF NEGATIVE FACTOR THEN
590 LDX 13,0 / WITH ERROR # 13
591 TRAP4 #ARGER / ABORT USER PROGRAM ELSE
592 FA1,
593 FSTA #XFCTX / STORE X AND Y FACTOR
594 FSTA #XFCTY / ONE PARAMETER MEANS X&Y GET THE SAME FACTOR
595 JXN FA3,7+
596 JA FACRTN
597 FA3,
598 STARTD / TWO PARAMETERS, GET THE Y FACTOR
599 FLDA% ARG1,1+
600 FSTA ARG2
601 STARTF
602 FLDA% ARG2
603 JGE FA2 / IF NEGATIVE FACTOR THEN
604 LDX 13,0 / WITH ERROR # 13
605 TRAP4 #ARGER / ABORT USER PROGRAM
606 FA2,
607 FSTA #XFCTY
608 FACRTN,
609 STARTF
610 JA PLTRTN
611 \f/ MUST DO A PLOTS AS FIRST ROUTINE IN ANY PLOTTING SEQUENCE
612 / USER SPECIFIES INCREMENT AND MACHINE TYPE (0=8/E, 1=12,8/I,8/L)
613 ENTRY PLOTS
614 WB3, TEXT 'PLOTS '
615 /
616 / CONSTANTS USED IN PLOTS
617 /
618 INHPX, F 0.0024873 / INCREMENT SIZE HP 7475 [CM/STEP]
619 INHPY, F 0.0024880 / INCREMENT SIZE Y DIRECTION [CM/STEP]
620 INX80Y, F 0.02648 / INCREMENT SIZE X80-SP X DIRECTION (96 CHAR. LINE)
621 INX80X, F 0.03968 / INCREMENT SIZE X80-SP Y DIRECTION (6 STEPS PER LINE)
622 PENHP, TEXT #PU PD# / 3 WORD TRANSFER INTO SPENUP,SPENDN!
623 PENX80, TEXT #P K # / WITH FLDA & FSTA
624 FORM2, TEXT "('1[STP 6'/' MC1'/' P 0 0')"
625 FORM3, TEXT "(' P 0 -576'/' STP 8]')"
626 FORM4, TEXT "(' \.J\.KOE;\.N;19:\.I64;;17:SP1')"
627 FORM5, TEXT "(' ;SP0;PU 11000,7500;')"
628 UNIX80, F 2.
629 /
630 / VARIABLES FOR PLOTS, PLEXIT
631 /
632 /
633 /
634 PLOTS, / CALL PLOTS (PLOTTER TYPE, MACHINE TYPE)
635 /
636 / INTEGER PLOTTER TYPE: 1 XY PLOTTER
637 / 2 X80-SP PRINTER PLOTTER
638 / 3 BOTH (DOESN'T WORK TODAY)
639 / INTEGER MACHINE TYPE: 0 PDP 8/E
640 / 1 OTHER PDP 8 OR 12
641 /
642
643 FLDA# WB3
644 FSTA WBW
645 JSA PLTSTR
646 FLDA% ARG1,1
647 FSTA XPT
648 FLDA% ARG1,1+
649 FSTA ARG1
650 STARTF / THIS ROUTINE SETS UP A LOT OF CONSTANTS
651 FLDA% XPT / LOAD FIRST ARGUMENT (PLOTTER TYPE ) --> FAC
652 JLE PLTSER / WRONG INPUT PARAMETER, ERROR OFF
653 FSTA PLUNIT / SAVE PLOTTER UNIT NUMBER
654 FSUB P1
655 JGT PLS1
656 /
657 / PREPARE FOR HP 7475 OUTPUT: UNIT .EQ. 1
658 /
659 FLDA INHPX
660 FSTA #XINCX
661 FLDA INHPY
662 FSTA #XINCY
663 FLDA PENHP / PLOTTER INCREMENTS AND PEN UP/DOWN CMD INTO OUTPUT ROUTINE
664 FSTA SPENUP / THREE WORD TRANSFER!
665 TRAP3 #WRITO / AND OUTPUT THE INITIALIZATION STRING
666 JA UNIX80
667 JA FORM4 / ABORTS ANY PREVIOUS PLOTT AND SET PEN UP
668 TRAP3 #RENDO / AND SETS XON/XOFF HANDSHAKE PROCEDURE
669 JA MACHIN / GO AND FETCH NEXT PARAMETER
670 /
671 PLTSER, LDX 6,X0 / BAD UNIT NO TO CALL PLOTS
672 TRAP4 #ARGERR / WRONG UNIT NUMBER TO CALL PLOTS
673 /
674 / PREPARE FOR X80-SP PLOTTER: UNIT .GT.1
675 /
676 PLS1,
677 FSUB P1
678 JGT PLTSER / WRONG PLOTTER UNIT
679 FLDA INX80X
680 FSTA #XINCX
681 FLDA INX80Y / INSERT INCREMENT SIZE
682 FSTA #XINCY
683 FLDA PENX80 / AND PEN UP/DOWN CMD INTO THE OUTPUT ROUTINE
684 FSTA SPENUP
685 TRAP3 #WRITO
686 JA UNIX80
687 JA FORM2 / ' [STP6'/' MC1'/' P 0 0'
688 TRAP3 #RENDO
689 MACHIN,
690 FLDA% ARG1
691 JEQ EIGHTE
692 LDX 7,X0 / BAD MACHINE TYPE TO CALL PLOTS
693 TRAP4 #ARGERR
694 EIGHTE,
695 FLDA P1
696 FSTA #XFCTX / FACTOR=1 INITIALLY
697 FSTA #XFCTY
698 FCLA
699 FSTA #XOLDP / AND REALLY MOVE IT!
700 FSTA #XPENC / SO WILL DO FIRST PEN MOVEMENT
701 FSTA #XXOLD
702 FSTA #XYOLD
703 FSTA #XORGX
704 FSTA #XORGY
705 FSTA PORS
706 JA PLTRTN
707 ENTRY PLEXIT / BE SHURE ALL DONE
708 WB4, TEXT 'PLEXIT'
709 PLEXIT,
710 FLDA# WB4
711 FSTA WBW
712 JSA PLTSTR
713 STARTF
714 FLDA PLUNIT / GET PLOTTER UNIT NUMBER
715 FSUB P1 / AND PREPARE SPECIAL PLOTT TERMINATION LINE
716 JNE PLEX1
717 TRAP3 #WRITO
718 JA UNIX80
719 JA FORM5 / 'PU 603,7500;SP 0'
720 JA PLEX0
721 PLEX1,
722 TRAP3 #WRITO
723 JA UNIX80
724 JA FORM3
725 PLEX0,
726 TRAP3 #RENDO
727 FLDA UNIX80 / REWIND SHOULD BE HERE TO PREVENT BLOCK NUMBERS LARGER THAN 7777
728 TRAP3 #REW
729 / TRAP4 #XDNCK
730 JA PLTRTN
731 \f SECT SYMBOL
732 JA SYMBLL
733 EXTERN SIN
734 EXTERN COS
735 EXTERN #XMBTB / HERE STARTS THE SYMBOL TABLE
736 /
737 / EXTERNAL REFERENCES INTO FIELD 1 (PDPPLT)
738 /
739 EXTERN #XTXAD
740 EXTERN #XLTCD
741 EXTERN #XLEFT
742 EXTERN #XRGHT
743 EXTERN #XNDLF
744 EXTERN #XNDRT
745 EXTERN #XPSNM
746 EXTERN #XPSIN
747 /
748 /
749 WB5, TEXT 'SYMBOL'
750 SYMBLL,
751 FLDA# WB5
752 FSTA WBW
753 JSA PLTSTR
754 JSR #XMBTB / LOAD THE SYMBOL TABLE ( SYMBTB )
755 IFZERO PAUSETEST < JA PAUS10 >
756 IFNZRO PAUSETEST < FNOP;FNOP >
757 STARTF
758 LDX 10,X0
759 XTA X0
760 JSR #PAUSE
761 STARTD
762 PAUS10,/
763 SYM1, FLDA% ARG1,1
764 FSTA XPT / X POINT
765 FLDA% ARG1,1+
766 FSTA YPT / Y VALUE
767 FLDA% ARG1,1+
768 FSTA YDIFF / HEIGHT
769 FLDA% ARG1,1+
770 FSTA TERM1 / TEXT
771 FLDA% ARG1,1+
772 FSTA TERM2 / ANGLE
773 FLDA% ARG1,1+
774 FSTA ARG1 / NUMBER CHARS.
775 STARTF
776 FLDA% TERM2
777 FMUL DEGRAD / CONVERT TO RADIANS
778 FSTA XCHRPT / THEN DONT NEED SIND
779 FLDA% XPT
780 FSTA COSANG / VALUE OF X
781 FSUB F999 / IF X NEQ 999 THEN
782 JNE SY0 / WE USE THE X VALUE SPECIFIED ELSE
783 FLDA #XXOLD / WE START WITH THE OLD VALUE
784 FMUL #XINCX / THIS WILL CAUSE SOME TRUNCATION ERROR
785 FDIV #XFCTX / IN XYPLOT ROUTINE BUT THE ERROR IS SMALL
786 FSTA COSANG / AND WE HOPE FAC > 0 BUT THIS MUST NOT BE SO!
787 SY0,
788 FLDA% YPT
789 FSTA SINANG
790 FSUB F999 / IF Y NEQ 999 THEN
791 JNE SY1 / WE USE THE Y VALUE SPECIFIED ELSE
792 FLDA #XYOLD / WE START WITH THE OLD Y VALUE
793 FMUL #XINCY / THIS CAUSES SOME TRUNCATION ERRORS
794 FDIV #XFCTY
795 FSTA SINANG
796 SY1,
797 IFZERO PAUSETEST < JA PAUS11 >
798 IFNZRO PAUSETEST < FNOP;FNOP >
799 LDX 11,X0
800 XTA X0
801 JSR #PAUSE
802 PAUS11,/
803 FCLA
804 FSTA #XPENC / SO ALWAYS DOES INITIAL PEN U/D
805 FSTA CENTSY
806 FLDA TERM1 / GET TEXT ADDRESS
807 FSTA #XTXAD / PUT IT DOWN IN PDP PART
808 \f FLDA% YDIFF / ASSUME ITS A REGULAR
809 JGE NOTNEG / NEGATIVE SIZE IS NOT NICE
810 FNEG
811 NOTNEG, FDIV PF7 / ADJUST LATER IF A CENT
812 FSTA ANGADJ
813 FLDA% ARG1 / SHOWNS NUM. CHARS + PEN STATUS
814 FSTA NUMSYM
815 JGE REGSYM / GT OR =0 IS REG SYM
816 FLDA% TERM1 / CHECK FOR REG CHAR PASSED
817 FSUB F100 / AS AN INTEGER EQUIV.
818 JLT INTEQ / ITS A INTEGER EQUIV
819 FLDA% YDIFF / CENTERED SYMBOL
820 JGE NOTNG1
821 FNEG
822 NOTNG1, FDIV P4
823 FSTA ANGADJ
824 FLDA NUMSYM / -1=PEN UP, -2=PEN DOWN (CNTRD ONLY)
825 FADD P1
826 JGE UPPEN / MOVE WITH PEN UP
827 FSTA CENTSY / NEG MEANS DOWN FROM THE START
828 PTITON, FLDA PF2
829 CPEN, FSTA YCHRPT / =-2 FOR DOWN (CENT. + INTEQ ONLY)
830 / -3 FOR UP FOR ALL SYMBOLS + INTEQ
831 IFZERO PAUSETEST < JA PAUS12 >
832 IFNZRO PAUSETEST < FNOP;FNOP >
833 LDX 12,X0
834 XTA X0
835 JSR #PAUSE
836 PAUS12,/
837 JSA SYMSTR / PLOT ORIGIN
838 JA .+10
839 JA COSANG
840 JA SINANG
841 JA YCHRPT
842 FLDA XPT
843 FMUL #XFCTX
844 FSTA XREAL / KEEP TRACK OF PASSED VALUES
845 FLDA YPT
846 FMUL #XFCTY
847 FSTA YREAL
848 JSA PENUP
849 FLDA CENTSY
850 JLE PENOK
851 JSA PNDOWN / PUT PEN DOWN NOW (CENT ONLY)
852 PENOK, JSR SIN
853 JA .+4
854 JA XCHRPT
855 FMUL ANGADJ
856 FSTA SINANG / SAVE SIN+HGT, USE FOR ALL VALUES
857 JSR COS
858 JA .+4
859 JA XCHRPT
860 FMUL ANGADJ
861 FSTA COSANG / COS(ANGLE)+HGT (IN INCREMENTS NOW)
862 LDX 0,4 / ZERO STEP COUNT
863 FLDA NUMENT
864 JGT NUM2 / JUMP IF FROM NUMBER
865 JA FSTLFT
866 UPPEN, FLDA P3 /
867 FSTA CENTSY / PUT PEN DOWN AFTER INITIAL MOVE
868 JA CPEN / MOVE WITH PEN UP
869 \fPENSET, JSA PNDOWN
870 ONEXY, JA .
871 SETX #XLTCD
872 XTA 2 / SET Y
873 FSTA YCHRPT
874 XTA 1 / GET X
875 FSTA XCHRPT / GET FIRST MOVE
876 SETX XRPLOT
877 FSUB PF7 / 7,0=PEN UP, 7,7=END
878 JEQ PENUPM
879 IFZERO PAUSETEST < JA PAUS13 >
880 IFNZRO PAUSETEST < FNOP;FNOP >
881 LDX 13,X0
882 XTA X0
883 JSR #PAUSE
884 PAUS13,/
885 FLDA CENTSY
886 JEQ CALALL / CENTEREDS REQUIRE MODIFIED ORIGIN
887 FLDA PF2
888 FNEG
889 FADDM XCHRPT
890 FADDM YCHRPT
891 CALALL, JSA CALANG
892 JXN PENSET,5 / PUT PEN BACK DOWN IF NEG
893 JA ONEXY
894 INTEQ, FLDA NUMSYM / CHECK ON PEN
895 FADD P1
896 JLT PTITON
897 REGSYM, FLDA P3
898 JA CPEN
899 PENUPM, JSA PENUP
900 FLDA YCHRPT / CHECK FOR 7,7 END
901 FSUB PF7
902 JEQ NXTCHR / JUMP IF END OF CHARACTER
903 JA ONEXY / ON TO NEXT PAIR
904 PENUP, JA .
905 FLDA# SPENUP / 'P' PEN UP
906 FSTA SYMPEN
907 LDX 1,5 / SET FOR PEN UP
908 JA PENUP
909 PNDOWN, JA .
910 FLDA# SPENDN / 'K' PEN DOWN
911 FSTA SYMPEN
912 LDX 0,5
913 JA PNDOWN
914 \fSYMPEN, F 0.0
915 CALANG, JA .
916 IFZERO PAUSETEST < JA PAUS14 >
917 IFNZRO PAUSETEST < FNOP;FNOP >
918 LDX 14,X0
919 XTA X0
920 JSR #PAUSE
921 PAUS14,/
922 FLDA YCHRPT
923 FDIV #XINCY
924 FSTA YCHRPT / Y MOVE AS STEPS (UNITERGERIZED)
925 FMUL SINANG
926 FNEG
927 FSTA TERM1 / =-SINA*Y
928 FLDA XCHRPT
929 FDIV #XINCX
930 FSTA XCHRPT
931 FMUL COSANG
932 FADD TERM1
933 FMUL #XFCTX
934 JSA MAKINT
935 FSTA XACT / FOR AT END OF TEXT
936 FSTA XPT / X*COSA+OLDX-SINA*Y
937 / REQUIRES AN OLDX+OLDY TERM, BUT I DO THIS ALL REL TO A
938 / LOGICAL 0,0 FOR EACH CHAR, SO I #XLEFT THEM OUT.
939 FLDA YCHRPT
940 FMUL COSANG
941 FSTA TERM1 / COSA*Y
942 FLDA XCHRPT
943 FMUL SINANG
944 FADD TERM1
945 FMUL #XFCTY
946 JSA MAKINT
947 FSTA YACT
948 FSTA YPT / NEWX*SINA*OLDY*COSA*Y
949 FLDA P1
950 FSTA #XPENC / USE SAME ORIGIN THROUOUT THE LETTER
951 FNEG
952 FSTA PORS
953 / JSA PREREL / PEN MUST BE IN NEC POS BY NOW
954 FLDA SYMPEN
955 FSTA WRP
956 FLDA YREAL
957 FDIV #XFCTY
958 FADD YPT
959 FADD #XORGY
960 FSTA WRY
961 FLDA XREAL
962 FDIV #XFCTX
963 FADD XPT
964 FADD #XORGX
965 FSTA WRX
966 JSA WRITEIT
967 JA CALANG
968 \fLEFTJS, XTA 4 / NUM OF MOVES
969 SETX #XLTCD
970 ATX 0 / PASS NUMBER OF STEPS INTO LETTER
971 SETX XRPLOT
972 TRAP4 #XLEFT / RETURN WITH A X,Y PAIR
973 JSA ONEXY
974 XTA 4
975 SETX #XLTCD
976 ATX 0 / STEP COUNT
977 SETX XRPLOT
978 JNE NOTFST / CHANGE IF BEFORE FIRST MOVE OF CHARACTER
979 JSA PNDOWN / PUT PEN DOWN NOW
980 NOTFST, TRAP4 #XRGHT / SET NEXT XY PAIR
981 JSA ONEXY
982 ADDX 1,4 / UPDATE COUNT
983 JA LEFTJS / 77 AT END OF CHAR USED TO DET END
984 \fCENTEX, JSA PENUP
985 JA CENTOO
986 NXTCHR, FLDA CENTSY
987 JNE CENTEX / LEAVE PEN AT CENTER FOR CENTS ONLY
988 FSTA YCHRPT
989 FLDA PF7
990 FSTA XCHRPT / MOVE PEN TO 7,0 FOR REG CHARS
991 JSA CALANG / PLOT IT
992 FLDA XACT / UPDATE COLLECTIVE ENDING X VALUE
993 FMUL #XFCTX / WITH EFFECT OF FACTOR
994 FADDM XREAL / ALSO WITH EFFECT OF FACTOR
995 FLDA YACT / UPDATE COLLECTIVE ENDING Y VALUE
996 FMUL #XFCTY / WITH EFFECT OF FACTOR
997 FADDM YREAL
998 CENTOO, LDX 0,4 / ZERO STEP NUM WITHIN CHAR
999 FCLA
1000 FSTA #XXOLD
1001 FSTA #XYOLD
1002 FLDA P1
1003 FNEG
1004 FADD NUMSYM / UPDATE COUNTER
1005 JLE SYMDON / NO MORE
1006 FSTA NUMSYM / MORE, SAVE COUNT
1007 FLDA NUMENT
1008 JGT NUM3 / EXIT FOR NUM SUBR
1009 FCLA
1010 JXN RTCHAR,3 / 1=CHAR IS #XRGHT SIX BITS
1011 FSTLFT, LDX 1,3 / POINT TO #XRGHT 6 WHEN TIME FOR NEXT CHAR
1012 FLDA NUMSYM
1013 JLT NUM5 / JUMP IF CENTERED SYM OR INTEQ
1014 / CENTEREDS + INTEQ EQUIV PASSING 3 WORD VALUE IN NUM5
1015 / REG SYM USES PDP ROUTINE TO GET ONE WORD OF LIST
1016 FCLA
1017 TRAP4 #XNDLF
1018 JA LEFTJS / GO PLOT THE ACTUAL CHAR
1019 RTCHAR, LDX 0,3 / POINT TO #XLEFT 6 BITS FOR NEXT TIME
1020 TRAP4 #XNDRT
1021 JA LEFTJS
1022 SYMDON,
1023 IFZERO PAUSETEST < JA PAUS15 >
1024 IFNZRO PAUSETEST < FNOP;FNOP >
1025 LDX 15,X0
1026 XTA X0
1027 JSR #PAUSE
1028 PAUS15,/
1029 FCLA
1030 FSTA PORS
1031 FSTA NUMENT
1032 FLDA XREAL / UPDATES ORG X VALUE
1033 FDIV #XFCTX
1034 JSA MAKINT
1035 FSTA #XXOLD
1036 FLDA YREAL / UPDATES ORG Y VALUE
1037 FDIV #XFCTY
1038 JSA MAKINT
1039 FSTA #XYOLD
1040 JA PLTRTN / NOW CAN CONTINUE PLOT FROM HERE
1041 \f/ SPECIAL ENTRY FOR NUMBER SUBROUTINE
1042 ENTRY SYMB
1043 WB6, TEXT 'SYMB '
1044 SYMB,
1045 FLDA# WB6
1046 FSTA WBW
1047 JSA PLTSTR / SPECIAL ENTRY FOR NUMBER SUBROUTINE
1048 JSR #XMBTB / LOAD THE SYMBOL TABLE (SYMBTB)
1049 STARTF
1050 FLDA P1
1051 FSTA NUMENT
1052 STARTD
1053 JA SYM1
1054 NUM2, SETX NUMENT / FOR NUMBER SUBROUTINE ONLY
1055 / HERE ONLY FOR FIRST NUMBER OF STRING
1056 LDX -1,2
1057 NUM3, JSA GETARG / FOR SECOND AND LATER NUMBERS
1058 TRAP4 #XPSNM
1059 JA LEFTJS
1060 NUM5, SETX NUMENT / FOR INTEQ + CENETEREDS
1061 LDX -1,2
1062 JSA GETARG
1063 TRAP4 #XPSIN
1064 JA LEFTJS
1065 GETARG, JA .
1066 SETX NUMENT / USED FOR MORE THAN ONE CHARACTER
1067 STARTD
1068 FLDA #XTXAD+1 / CENTEREDS SYMBOLS AND NUM SUBROUTINE
1069 / PASS VALUES AS THREE WORDS
1070 FSTA ARG1
1071 STARTF
1072 FLDA% ARG1,2+ / PASS A NUMBER
1073 SETX #XTXAD
1074 JSA MAKINT
1075 ATX 0
1076 SETX XRPLOT
1077 JA GETARG
1078 END
1079
1080 \1a