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