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