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