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