557e172894a38e40bbb5b72ca23b7a549d3dad57
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / pdpplt.ra
1 / \ ePDPPLT.RA\ e
2 /
3 / PART ONE OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M. HURLEY
4 / INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV. 77
5 / COPIED: J.J. ANDRES 1.NOV. 1980
6 /
7 / PLOTTER ROUTINES FOR OS8 FORTRAN 4 FOR LAB 8/E ONLY!
8 / VER 1.0 1. NOV. 1980 H.A.
9 / VER 2.0 12. NOV. 1980 H.A.
10 / VER 2.1 18. NOV. 1981 H.A.
11 /
12 / UPDATES:
13 / 1. PLEXIT DISABLED THE PLOTTER INTERRUPTS AT ALL AND PLOTS DID
14 / NOT SWITCH THEM ON A SECOND TIME.
15 / 2. X-Y PLOTTER CANNOT BE DRIVEN TO THE ORIGIN (0,0) BY PLOTS.
16 / * #XNTST IS CALLED FROM PLOTS EACH TIME PLOTS ITSELF IS CALLED.
17 / * NOW #XNTST TEST AND SETS THE ONCE FLAG.
18 / * #XNTST PUSHES THE PLOTTER 4095 TIMES INTO THE LOWER LEFT CORNER.
19 / 1-NOV-1980 H.A.
20 / 3. #XMSMBP = ADDR SYMBTB
21 / #XSMBP = ADDR SYMCNT
22 / THESE TWO VALUES ARE NOW INSERTED VIA A CALL TO SYMBOL.
23 / SYMBOL CALLS #XMBTB TO SWAP IN THE SYMBOL TABLE OVERLAY.
24 / 12-NOV-1980 H.A.
25 /
26 \f/
27 / THE PDP8 CODE LOCATED IN FIELD 1
28 /
29 /
30 / INTO THESE WORDS SYMBOL INSERTS THE ADR. OF THE SYMBOL TABLE AND LENGTH
31 / THIS MUST BE DONE SINCE THE SYMBOL TABLE #XMBTB MAY BE LOCATED INTO
32 / AN OVERLAY AND THEREFORE THE ADDR DIRECTIVE WILL PRODUCE WRONG CODE.
33 / THE LOADER INSERTS THE ADR. OF THE OVERLAY LOADER BUT NOT THE DESIRED
34 / ONE.
35 /
36 ENTRY #XMCNT
37 ENTRY #XSMBP
38 /
39 / EXTERNAL REFERENCED FROM XYPLOT ONLY
40 /
41 / ENTRIES USED BY XYPLOT:
42 ENTRY #XOLDP
43 ENTRY #XXOLD
44 ENTRY #XYOLD
45 ENTRY #XPENC
46 ENTRY #XINCR
47 ENTRY #XFCTX
48 ENTRY #XFCTY
49 ENTRY #XETXR
50 ENTRY #XETUP
51 ENTRY #XDPXR
52 ENTRY #XATIO
53 ENTRY #XNPLT
54 ENTRY #XCHTP
55 ENTRY #XCHCK
56 ENTRY #XNTST
57 ENTRY #XDNCK
58 /
59 / ENTRIES USED BY SYMBOL
60 /
61 ENTRY #XNDLF
62 ENTRY #XNDRT
63 ENTRY #XLEFT
64 ENTRY #XLTCD
65 ENTRY #XPSIN
66 ENTRY #XPSNM
67 ENTRY #XPNOP
68 ENTRY #XRGHT
69 ENTRY #XTXAD
70 /
71 PLCE= 06500 / CLEAR INTERRUPT ENABLE
72 PLSF= 06501 / SKIP ON PLOTTER FLAG SET
73 PLCF= 06502 / CLEAR PLOTTER FLAG
74 PLLR= 06504 / LOAD PLOTTER DIRECTION REGISTER
75 PLSE= 06507 / SET INTERRUPT ENABLE
76 /
77 /
78 FIELD1 PDPPLT
79 / ALL THESE ROUTINES USES XRS TO GET ARGS FROM FPP CODE
80 EXTERN ONQI
81 EXTERN #DISMS
82 /ASSUMES USER ADDED 6502(CLEAR FLAG) TO FRTS CLEAR QUEUE
83 #XNTST, ORG .+1 / INIT PTRS + ADD JOB TO INTERRUPT QUEUE
84 CLA CMA / SET UP POINTERS
85 DCA% PBFCNT+1 / COUNTER FOR LOCN OF NEXT CHARACTER TO PLOT
86 TAD UBUFL / COMPL. LENGTH OF BUFFER --> AC
87 DCA% PMBFLG+1 / RESET BUFFER POINTERS
88 TAD PUBFMN+1
89 DCA% OCHAR+1
90 TAD PUBFMN+1
91 DCA% ICHAR+1
92 TAD DISMS+1
93 DCA% PDISMS+1 / FOR HANG
94 ISZ ONCE / TEST THE ONCE ONLY FLAG
95 JMP .+5
96 JMS% VONQI+1 / ADD PLOTTER INTO THE INTERRUPT QUEUE ONLY ONCE
97 PLSF / CODE TO DETECT IF PLOTTER INTERRUPTED
98 ADDR INTPLT / ADR. OF INTERRUPT SERVICE ROUTINE
99 CLA
100 DCA ONCE / CLEAR THE ONCE ONLY FLAG TO ZERO
101 / THIS IS FOR GUYES PLOTTING MORE THAN 4095 DRAWINGS WITH ONE PROGRAM.
102 / SOME PEOPLE ARE CRAZY, AREN'T THEY?
103 DCA PREP / SET UP COUNTER TO RESET PEN TO ORIGIN 0,0
104 TAD PENUP / LIFT PEN AND THEN
105 JMS PLOTIT
106 CLA
107 TAD DECRXY / GO 4096 STEPS TO THE LEFT CORNER DOWN
108 JMS REPIT
109 PLCF / CLEAR FLAG FROM THE LAST STEP
110 ION PLSE / ENABLE PLOTTER INTERRUPTS
111 CIF CDF
112 JMP% #XNTST
113 /
114 / THIS ROUTINE RESETS X-Y PLOTTER TO 0,0
115 PENUP, 2
116 DECRXY, 44
117 /
118 REPIT, ORG .+1
119 JMS PLOTIT
120 ISZ PREP / REPEAT 4096 TIMES
121 JMP .-2
122 JMP% REPIT
123 PLOTIT, ORG .+1
124 IOF
125 PLCF PLLR
126 PLSF
127 JMP .-1
128 ION
129 JMP% PLOTIT
130 /
131 ONCE, 7777 / TO ADD PLSF INTO INTERRUPT QUEUE ONLY ONCE
132 PREP,
133 VONQI, ADDR ONQI
134 /THIS ROUTINE CALLED ONCE FOR EACH CALL TO XYPLOT
135 /AND DOES INITAL PEN UP OR DOWN
136 #XETUP, 0
137 TAD #XETXR / GET PEN STATE
138 AND A3
139 CLL RAR / LOOK AT 3 BITS
140 SZA / SKIP IF 0
141 SNL CLA
142 IAC / 3=UP, 0-2=DOWN
143 CLL
144 JMS% QPLDBL+1
145 CDF CIF
146 JMP% #XETUP
147 QPLDBL, ADDR PLDBL
148 A3, 3
149 #XETXR,
150 OCHAR, ADDR POCHAR+1
151 PBFCNT, ADDR BUFCNT
152 #XCHCK,
153 ICHAR, ADDR PICHAR+1
154 PMBFLG, ADDR MBUFLG
155 PUBFMN, ADDR USBFMN
156 DISMS, ADDR #DISMS
157 PDISMS, ADDR DISPTR
158 /
159 / FPP 12 VARIABLES SET BY XYPLOT WICH MAY NOT BE LOADED INTO AN OVERLAY
160 /
161 #XOLDP, ORG .+3 / VALUE OF PEN AT LAST XYPLOT
162 #XXOLD, ORG .+3 / OLD X PT WITH EFFECT OF FACTOR
163 #XYOLD, ORG .+3 / OLD Y PT WITH EFFECT OF FACTOR
164 #XPENC, ORG .+3 / OLD PEN STATUS (SYMBOL & NUMBER)
165 #XINCR, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER
166 #XFCTX, ORG .+3 / X - FACTOR
167 #XFCTY, ORG .+3 / Y - FACTOR
168 BUFFL= 435
169 UBUFL, -BUFFL / LENGTH OF BUFFER
170 USBFMN, ZBLOCK BUFFL / PLOTTING BUFFER
171 USBFMX, 0
172 \f ORG #XNTST+600
173 / THESE ROUTINES GET THE PLOTTING CODES WITHIN A LETTER
174 / PASS THEM AS X,Y PAIRS FOR PLOT ROUTINE
175 #XLEFT, 0
176 JMS GETXYS / GET A #XLEFT HAND X,Y PAIR
177 RTR
178 RTR
179 RTR
180 JMS PASSXY
181 CDF CIF
182 JMP% #XLEFT
183 P7, 7
184 PASSXY, 0
185 DCA LETCD2 / SAVE X,Y PAIR
186 TAD LETCD2
187 CLL RTR
188 RAR / GET IN LO THREE BITS
189 AND P7
190 DCA LETCD1 / PASS X VALUE
191 TAD LETCD2 / NOW FOR THE Y PART
192 AND P7
193 DCA LETCD2 / PASS THE Y VALUE
194 JMP% PASSXY
195 #XRGHT, 0 / GET A #XRGHT HAND X,Y PAIR
196 JMS GETXYS
197 JMS PASSXY
198 CDF CIF
199 JMP% #XRGHT
200 #XLTCD, 0
201 LETCD1, 0
202 LETCD2, 0
203 \f/ THIS ROUTINE GETS X,Y PAIRS FROM THE PACKED SEQ FOR EACH LETTER
204 GETXYS, 0
205 TAD #XLTCD
206 CLL
207 TAD LOCNPT / START OF LETTER CODE
208 DCA LETCD2 / UPDATE PTR TO LETTER
209 RAL / IF LINK SET, CROSSED FIELDS, SO UPDATE FIELD
210 / POINTER
211 TAD LOCNFL / FIELD PASSED FROM FINDIT ROUTINE
212 CLL RTL
213 RAL
214 TAD CDFINS
215 DCA NFLD
216 NFLD, 0 / GET FIELD
217 TAD% LETCD2 / GET PLOTTING CODES
218 CDF 10
219 JMP% GETXYS
220 CDFINS, 6201
221 LOCNFL, 0 / FIELD
222 LOCNPT, 0
223 \f/ HERES START OF THE TABLE FOR PDP-8 ES
224 OCT8BL, 6503 / PEN UP
225 6505 / PEN DOWN
226 / GEOM. OCTANT 1=CODED OCTANT 8, 2=7, 3=3, 4=4, 5=2, 6=1, 8=6
227 40 / PEN R
228 44
229 4 / DRUM UP
230 44
231 20 / PEN L
232 24
233 4 / DRUM UP
234 24
235 40 / PEN R
236 50
237 10 / DRUM D
238 50
239 20 / PEN L
240 30
241 10 / DRUM D
242 30
243 / THIS IS THE START OF THE PLOT VECTOR TABLE FOR PDP-12S
244 OCT12, 6504 / PEN UP
245 6524 / DOWN
246 6511 / PEN #XRGHT
247 6513
248 6522 / DRUM UP
249 6513
250 6521 / PEN #XLEFT
251 6523
252 6522 / DRUM UP
253 6523
254 6511 / PEN #XRGHT
255 6515
256 6514 / DRUM DOWN
257 6515
258 6521 / PEN #XLEFT
259 -6514 / 2 WORD IOT
260 6514 / DRUM DOWN
261 -6514
262 \f/ FIGURE OUT IF A MAJOR MOVE OR MAJ+MINOR
263 FIGURE, 0
264 CLL
265 TAD RATIO2
266 TAD HOLD2
267 DCA HOLD2 / ADD LO WORDS
268 RAL / CARRY LINK
269 TAD RATIO1
270 TAD HOLD1 / ADD HIGH WORDS
271 DCA HOLD1
272 CLL
273 TAD HOLD1
274 RAL / G.T. 1?
275 SNL
276 JMP MAJONL / NO-MAJOR MOVE ONLY
277 CLL RAR / PUT IT BACK-1
278 DCA HOLD1
279 IAC
280 JMP% FIGURE / RETURN WITH AC=1
281 MAJONL, CLA
282 JMP% FIGURE / RETURN WITH ZERO AC
283 #XATIO, 0 / #XATIO CALCULATED IN REALPT
284 RATIO1, 0
285 RATIO2, 0
286 HOLD1, 0
287 HOLD2, 0
288 / INITIALIZE HOLD1+2 TO A ROUNDING FUDGE
289 SPCAS, 0
290 DCA HOLD1
291 TAD RFUDGE
292 DCA HOLD2
293 JMP% SPCAS
294 RFUDGE, 1000 / TAKES CARE OF TRUNCATION ERRORS
295 \f ORG #XLEFT+200
296 NXTLCN,
297 PLETPS, ADDR LOCNPT / POINTS TO START OF CODE FOR PASSED LETTER
298 COUNT, / COUNT OF STEPS INTO CHAR PLOTTING CODE TABLE
299 PLCNM1, ADDR LOCNFL / USED TO PASS FIELD
300 #XTXAD, 0
301 0
302 0 / ADDRESS OF PACKED 6 BIT LETTERS TO PRINT
303 LETTER, 0
304 #XSMBP, / HERE WE INSERT THE ADR. OF THE SYMBOL TABLE
305 PSYMB, ORG .+2
306 PP7, 7
307 / THESE ROUTINES DETERMINE THE START OF PLOTTING CODES FOR A CHARACTER
308 / PASSED AS A HOLERITH (6 BIT) FROM SYMBOL ROUTINE.
309 / FIND LOCATION OF START OF PLOT VECTORS
310 / FOR THE #XLEFT HALF OF 2 6 BIT CHARACTERS
311 #XNDLF, 0
312 TAD #XTXAD+1 / DO FIELD STUFF
313 AND PP7
314 CLL RTL
315 RAL
316 TAD CDF
317 DCA DOCDF
318 DOCDF, NOP
319 TAD% #XTXAD+2 / GET TWO 6 BIT VALUES
320 CDF 10
321 DCA LETTER
322 CLL
323 TAD LETTER / MOVE #XLEFT CHARACTER
324 RTR
325 RTR
326 RTR
327 AND P77 / INTO THE #XRGHTMOST 6 BITS
328 JMS FINDIT
329 ISZ #XTXAD+2 / PREPARE FOR NEXT CHARACTER TO #XLEFT
330 JMP FLDOK / IF SKIPS, THEN AT FIELD BOUNDARY
331 ISZ #XTXAD+1 / SO UPDATE FIELD ALSO
332 FLDOK, CDF CIF
333 JMP% #XNDLF
334 \fFINDIT, 0 / GET LOC OF LETTER IN SYMBOL TABLE
335 SPA SNA / CHECK FOR ZERO
336 TAD P40 / WHICH DEFAULTS TO SPACE
337 CIA CLL / MAKE A COUNTER
338 DCA #XTXAD
339 DCA COUNT / ZERO TOTAL STEP COUNTER
340 TAD PTRTBL+1
341 DCA NXTLCN / POINTS TO LOCN IN POINTER TABLE
342 / THIS TABLE HAS STEPS FOR EACH LETTER, SO
343 / COUNT TOTAL STEPS TO DESIRED LETTER
344 TAD PTRTBL
345 CLL RTL
346 RAL
347 TAD CDF
348 DCA SCANTB
349 SCANTB, NOP
350 TAD% NXTLCN / GET NEXT STEP COUNT
351 CDF 10
352 TAD COUNT / AND ADD IT TO TOTAL STEP COUNT
353 DCA COUNT
354 ISZ NXTLCN / BUMP POINTER
355 SKP / SKIP IF DIDN'T CROSS BOUNDARIES
356 TAD P10 / IT DID, UPDATE FIELD WORD
357 TAD SCANTB
358 DCA SCANTB
359 ISZ #XTXAD
360 JMP SCANTB / NOT THERE YET
361 CLL
362 TAD COUNT / ADD COUNT TO
363 TAD PSYMB+1 / START OF CODE TABLE
364 DCA% PLETPS+1 / NOW IT'S CORRECT POINTER
365 RAL / IF LINK SET, WE CROSSED FIELD BOUNDARIES
366 TAD PSYMB / GET FIELD OF TABLE
367 DCA% PLCNM1+1 / PASS IT
368 JMP% FINDIT / GOT THE LETTER
369 P40, 40
370 P77, 77
371 #XMCNT, / HERE WE INSERT THE POINTER INTO THE SYMBOL TABLE
372 PTRTBL, ORG .+2
373 CDF, 6201
374 P10, 10
375 \f#XNDRT, 0
376 TAD LETTER / #XLEFT FROM LAST #XLEFT LETTER
377 AND P77
378 JMS FINDIT
379 CDF CIF
380 JMP% #XNDRT
381 / ROUTINE TO HANDLE NUMBERS FROM FORTRAN SUBR. NUMBER
382 / NOT CALLED BY USER DIRECTLY
383 #XPSNM, 0
384 TAD #XTXAD
385 IAC
386 SNA
387 JMP USZRO / IF EQ -1, USE 0
388 TAD T2
389 SPA / L.T. -3 BAD
390 JMP USZRO / SO USE ZERO
391 TAD M15
392 SPA CLA / G.T. 9 BAD TOO
393 JMP USEIT / IT'S -3,-2,0-9
394 USZRO, CLA
395 INDEX, TAD P60 / INDEX INTO TABLE
396 JMS FINDIT
397 CDF CIF
398 JMP% #XPSNM
399 USEIT, TAD #XTXAD
400 JMP INDEX
401 / PLOT AN INTEGER EQUIV OR CENTERED (100-117 DEC =144-165 OCT)
402 #XPSIN, 0
403 TAD #XTXAD
404 SPA SNA / .L.T. ZERO NO GOOD
405 JMP USSPAC
406 TAD M166 / G.T. 117 DEC. BAD
407 SMA
408 JMP USSPAC
409 TAD A22
410 SMA
411 JMP OKVAL / ITS A CENTERED 100-121 (0144-0165)
412 TAD P44
413 SMA CLA
414 JMP USSPAC / 0100-0143 ILLEGAL
415 TAD #XTXAD
416 ACHAR, JMS FINDIT
417 CDF CIF
418 JMP% #XPSIN
419 USSPAC, CLA
420 TAD P40 / DEFAULT TO SPACE
421 JMP ACHAR
422 OKVAL, TAD P100 / PASS CENTERED AS 100-121
423 JMP ACHAR
424 P100, 100
425 A22, 22
426 P44, 44
427 M166, -166
428 P60, 60
429 M15, -15
430 T2, 2
431 \f ORG NXTLCN+200
432 EXTERN #HANG
433 #XNPLT, 0 / NON INTERRUPT TIME PLOT ROUTINE
434 TAD TOTSTP
435 CMA
436 DCA TOTSTP
437 JMS% PSPCAS+1 / PREP FOR OCTANT CHECK
438 MORE, ISZ TOTSTP
439 JMP ANOTHR / DO ANOTHER STEP
440 DONE, CDF CIF / ALL DONE WITH THIS VECTOR
441 JMP% #XNPLT
442 ANOTHR, JMS% PFIGUR+1 / TO FIGURE OUT IF MAJ OR DIAG
443 / RETURNS ZERO IF MAJOR ONLY, 1 IF MAJ + MINOR
444 TAD #XDPXR / OCTANT
445 JMS PLDBL
446 JMP MORE
447 PLDBL, 0
448 TAD POCTBL+1 / START OF VECTOR TABLE
449 TAD #XCHTP / ADD 22 IF A PDP-12 OR NON 8-E
450 DCA PLTVCT / SAVE POINTER TO PROPER PLOT VECTOR
451 CIF 10
452 TAD BUFCNT / GET NUM. CHARACTERS IN BUF -1
453 TAD MBUFLG / AND MINUS LENGTH
454 CLL
455 SPA CLA
456 JMP ISROOM / STILL ROOM IN BUFFER
457 IOF / NO ROOM YET, GO TO HANG
458 CIF 0
459 JMS% PHANG+1
460 DISPTR, 0
461 ION / HANG LEAVES INTERRUPT OFF
462 ISROOM, TAD% PLTVCT / NOW GET THE VECTOR
463 DCA% PICHAR+1 / INTO BUFFER
464 ISZ PICHAR+1 / UPDATE LOCN
465 TAD PICHAR+1
466 CIA
467 TAD PBMX+1 / ARE WE OVERFLOWING MAX LOCN OF BUFFER
468 CLL
469 SMA CLA / PAST END ?
470 JMP LIMOK / NO
471 TAD PBMN+1 / YES, RESET TO BOTTOM
472 DCA PICHAR+1
473 LIMOK, ISZ BUFCNT / UPDATE CHAR COUNT
474 / IF EMPTY WAS -1, SO NOW 0
475 JMP% PLDBL / WASNT EMPTY-CANT START TO PLOT
476 JMP OUTSUB
477 \f#XPNOP, 0
478 TAD #XDPXR / USE AS INDEX INTO OPCODE TABLE
479 JMS PLDBL
480 CDF CIF
481 JMP% #XPNOP
482 #XDPXR, 0
483 TOTSTP, 0
484 PSPCAS, ADDR SPCAS
485 POCHAR, ADDR USBFMN
486 INTFLG, / HANG ALWAYS FIELD 0
487 PHANG, ADDR #HANG
488 PICHAR, ADDR USBFMN
489 BUFCNT,
490 POCTBL, ADDR OCT8BL
491 MBUFLG,
492 PBMN, ADDR USBFMN
493 #XCHTP,
494 PFIGUR, ADDR FIGURE
495 PLTVCT,
496 PBMX, ADDR USBFMX
497 \fOUTSUB, CLA
498 TAD% POCHAR+1 / GET NEXT LINE TO PLOT
499 DCA QTEMP5 / SAVE ACTUAL VECTOR FOR A SECOND
500 ISZ POCHAR+1
501 TAD POCHAR+1
502 CIA
503 TAD PBMX+1 / CHECK THAT OUTPUT DOESNT OVERFLOW THE BUFFER
504 CLL
505 SMA CLA / WILL IT?
506 JMP CLRFLG / NO
507 TAD PBMN+1 / YES
508 DCA POCHAR+1 / RESET IT
509 CLRFLG, 6502
510 TAD QTEMP5 / GET VARIABLE
511 AND A7000 / DETERMINE TYPE OF PLOTTER
512 SZA CLA
513 JMP PENUD / A PEN OP (PDP-12 OR 8/E)
514 TAD QTEMP5 / ITS AN 8E
515 6506 / SEND A CHARR
516 CLA
517 JMP OUTCHK / RETURN
518 PENUD, TAD QTEMP5 / ITS A 12 OR NON-8/E PEN UP OR DOWN
519 SMA CLA
520 JMP TWOWD / IT'S A TWO WORD IOT
521 QTEMP5, NOP / 1-WORDER SO DO IT NOW
522 OUTCHK, TAD INTFLG
523 SNA CLA
524 JMP% PLDBL / DONE FOR NON-INTERRUPT
525 DCA INTFLG / INT MODE, CLEAR FLAG
526 CDF CIF
527 JMP% XDISMS+1
528 XDISMS, ADDR #DISMS
529 A7000, 7000
530 TWOWD, 6514 / DRUM DOWN
531 6521 / SECOND PART PEN #XLEFT
532 JMP OUTCHK
533 \fINTPLT, 0 / HERE ONLY IF FLAG SET
534 CLA CMA
535 TAD BUFCNT / DECREMENT BUFFER COUNTER
536 SPA
537 JMP EMPTY
538 DCA BUFCNT
539 ISZ INTFLG / SHOULD NEVER SKIP
540 NOP
541 JMP OUTSUB
542 EMPTY, CLA CMA
543 DCA BUFCNT / INITIALIZE BUFFER CNT-1
544 6502 / CLEAR
545 JMP% INTPLT / EXIT IN FIELD 1
546 / BE SHURE BUFFER EMPTY BEFORE EXITING
547 #XDNCK, 0
548 CLA
549 JMS PLDBL / DO A FINAL PEN UP
550 WAIT, TAD BUFCNT
551 SMA CLA
552 JMP WAIT / STILL MORE TO DO
553 TAD #XCHTP
554 SNA CLA
555 6500 / CLEAR INTERRUPT ENABLE FOR 8-ES
556 CIF CDF / ALL EMPTY
557 JMP% #XDNCK
558 END
559 \f\1a