software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape1 / LIBSET.PA
1 /LIBSET - LIBRARY BUILDER PROGRAM
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /COPYRIGHT (C) 1974,1977 BY DIGITAL EQUIPMENT CORPORATION
12 /
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.
26 /
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
31 /
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34 /DIGITAL.
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 \f FIELD 1
46 HILOC=20
47 INFPTR=21
48 IFPTR=22
49 TEMP=23
50 NAMPTR=24
51 /VERSION=3
52 /PATCH="A
53
54 *2600
55 START, SKP
56 JMP .+4
57 CALLCD, JMS I (200
58 5
59 RL, 2214
60 0 /DON'T RESET OUTPUT FILES
61 ISZ FIRST
62 JMP NOTFST
63 TAD I (7604
64 SNA
65 TAD RL
66 DCA I (7604
67 TAD I (7600
68 SZA CLA /IS THERE AN OUTPUT FILE?
69 JMP OUTYES /YES
70 CLA IAC
71 DCA I (7600 /NO - MAKE SYS:LIB8.RL THE OUTPUT FILE
72 TAD (1411
73 DCA I (7601
74 TAD (0270
75 DCA I (7602
76 TAD I (7617
77 SNA CLA /HOW ABOUT INPUT FILES?
78 TAD I (MPARAM+1
79 AND (40 /IF NO INPUT FILES,
80 SNA CLA /AND /S OPTION IS ON,
81 JMP OUTYES
82 DCA PTRCOD /USE PTR: FOR INPUT
83 JMS I (200
84 12
85 4224
86 PTRCOD, 0
87 0
88 JMP I PERROR /NO PTR - BAD
89 TAD PTRCOD
90 DCA I (7617
91 OUTYES, JMS I (XOPEN
92 JMS I (OCHAR
93 JMS I (DMPREC /PUT OUT NOTHIN IN FIRST RECORD
94 TAD (7000
95 DCA NAMPTR
96 TAD (7376
97 DCA INFPTR
98 NOTFST, TAD (7617
99 DCA IFPTR
100 FILELP, TAD I IFPTR
101 SNA CLA
102 JMP NEXTCD
103 TAD IFPTR
104 JMS I (IOPEN
105 READLP, CLA CMA
106 TAD I (OUCCNT
107 DCA FLEN
108 DCA HILOC
109 JMS I (IREAD /READ AND COPY A RELOCATABLE PROGRAM
110 SZA CLA /TEST CHECKSUM
111 JMP I PERROR
112 TAD HILOC
113 AND (7600
114 TAD FLEN
115 DCA I INFPTR
116 JMS I (DMPREC
117 ISZ INFPTR
118 DCA I INFPTR
119 CLA CLL CMA RTL
120 TAD INFPTR
121 DCA INFPTR
122 TAD I (MPARAM+1
123 AND (40
124 SZA CLA
125 JMP READLP /IF /S SWITCH ON , CONTINUE READING TAPES UNTIL A ^Z
126 NXFIL, ISZ IFPTR
127 ISZ IFPTR
128 JMP FILELP
129 NEXTCD, TAD I (MPARAM-1
130 SMA CLA
131 JMP CALLCD
132 DCA I NAMPTR
133 ISZ NAMPTR
134 ISZ NAMPTR
135 ISZ NAMPTR
136 DCA I NAMPTR
137 TAD NAMPTR
138 CMA IAC
139 TAD INFPTR
140 SMA CLA
141 JMP I (FINISH
142 JMP I .+1
143 TOOBIG
144
145 FIRST, -1
146 FLEN, 0
147
148 JTABL, DATAWD
149 DATAWD
150 ERROR
151 SYMDEF
152 ORIGIN
153 DATAWD
154 DATAWD
155 PERROR, ERROR
156 ENDTAP
157 ERROR
158 COMMON
159 ERROR
160 ERROR
161 ERROR
162 ERROR
163 TRANVC
164
165 VERSON, 6301 /VERSION AND PATCH LEVEL
166 \f *3000
167 IREAD, 0
168 TAD (200
169 DCA LOC
170 ILEADR, JMS I (ICHAR
171 DCA CKSM
172 TAD CKSM
173 AND (177
174 SNA CLA
175 JMP ILEADR
176 TAD CKSM
177 TAD (-232
178 SNA CLA
179 JMP I (NXFIL
180 TAD (200
181 JMS I (OCHAR
182 TAD CKSM
183 JMS I (OCHAR
184 TAD CKSM
185 SKP
186 NXTFRM, JMS RCHAR
187 CLL RTR
188 RTR
189 RAR
190 DCA CHAR1
191 TAD CHAR1
192 RAL
193 AND (17
194 TAD JMPTAB
195 DCA BTMP
196 TAD I BTMP
197 DCA BTMP
198 JMP I BTMP
199 JMPTAB, JTABL
200
201 RCHAR, 0
202 JMS I (ICHAR
203 DCA CHAR
204 TAD CKSM
205 TAD CHAR
206 DCA CKSM
207 TAD CHAR
208 JMS I (OCHAR
209 TAD CHAR
210 JMP I RCHAR
211
212 DATAWD, JMS RCHAR
213 CLA CLL
214 TAD LOC
215 CMA
216 TAD HILOC
217 SZL CLA
218 JMP .+3
219 TAD LOC
220 DCA HILOC
221 ISZ LOC
222 JMP NXTFRM
223
224 SYMDEF, JMS RCHAR
225 CLA CLL CMA RTL
226 DCA CHAR1
227 GTNMLP, JMS RCHAR
228 AND (77
229 CLL RTL
230 RTL
231 RTL
232 DCA BTMP
233 JMS RCHAR
234 AND (77
235 TAD BTMP
236 DCA I NAMPTR
237 ISZ NAMPTR
238 ISZ CHAR1
239 JMP GTNMLP
240 TAD INFPTR
241 AND (377
242 DCA I NAMPTR
243 ISZ NAMPTR
244 TAD NAMPTR
245 CIA
246 TAD INFPTR
247 SPA SNA CLA
248 JMP I (TOOBIG
249 JMP NXTFRM
250
251 ORIGIN, JMS RCHAR
252 CLA
253 TAD CHAR1
254 AND (7400
255 TAD CHAR
256 DCA LOC
257 JMP NXTFRM
258
259 COMMON, JMS RCHAR
260 CLA
261 JMP NXTFRM
262
263 TRANVC, JMS RCHAR
264 CLL RAL
265 TAD CHAR
266 CLL RAL
267 CIA
268 DCA BTMP
269 JMS RCHAR
270 CLA
271 ISZ BTMP
272 JMP .-3
273 JMP NXTFRM
274
275 ENDTAP, TAD CKSM
276 CIA
277 TAD CHAR
278 DCA BTMP
279 JMS RCHAR
280 CLA
281 TAD CHAR1
282 AND (7400
283 TAD CHAR
284 TAD BTMP
285 JMP I IREAD
286
287 LOC, 0
288 CHAR1, 0
289 CHAR, 0
290 BTMP, 0
291 CKSM, 0
292
293 \f *3200
294 XOPEN, 0
295 TAD (7577
296 DCA 10
297 TAD (FILENM-1
298 DCA 11
299 TAD (-5
300 DCA 12
301 TAD I 10
302 DCA I 11
303 ISZ 12
304 JMP .-3
305 JMS I (OOPEN
306 TAD I (OUBLK
307 DCA CTLWRI
308 TAD I (OUHNDL
309 DCA ODVH
310 JMP I XOPEN
311
312 DMPREC, 0
313 JMS I (OCHAR
314 JMS I (OCHAR
315 TAD I (OUDWCT
316 TAD (200
317 SZA CLA
318 JMP .-4
319 JMP I DMPREC
320
321 FINISH, JMS I (OCLOSE
322 CIF 0
323 JMS I ODVH
324 4210
325 7000
326 CTLWRI, 0
327 JMP OUTERR
328 CDF CIF 0
329 JMP I (7605
330 FILENM, ZBLOCK 5
331 ODVH, 0
332
333 TOOBIG, ISZ ERRNO
334 ERROR, ISZ ERRNO
335 OUTERR, ISZ ERRNO
336 INERR, ISZ ERRNO
337 ERR, TAD ERRNO
338 TAD (ERR0
339 DCA EPCH
340 DCA ERRNO
341 TAD I EPCH
342 DCA ODVH
343 ERRLP, TAD I ODVH
344 RTR
345 RTR
346 RTR
347 JMS EPCH
348 TAD I ODVH
349 JMS EPCH
350 ISZ ODVH
351 JMP ERRLP
352 ERXIT, CDF CIF 0
353 JMP I .+1
354 7605
355
356 EPCH, 0
357 AND (77
358 SNA
359 JMP ERXIT
360 TAD (-40
361 SPA
362 TAD (100
363 TAD (240
364 6046
365 6041
366 JMP .-1
367 CLA
368 JMP I EPCH
369
370 ERRNO, 0
371 \f *3400
372 /ERROR MESSAGES
373 ERR0, HELP
374 INPER
375 OUPER
376 RELER
377 BIGER
378
379 HELP, TEXT /HELP!/ /THIS ERROR CANNOT OCCUR
380 INPER, TEXT /INPUT ERROR/
381 OUPER, TEXT /ERROR WHILE WRITING OUTPUT FILE/
382 RELER, TEXT /BAD FORMAT OR CHECKSUM - TRY AGAIN./
383 BIGER, TEXT /LIBRARY DIRECTORY OVERFLOW - TOUGH/
384 \f INBUF=0
385 INCTL=2400
386 OUBUF=6000
387 OUCTL=4200
388 INDEVH=6400
389 OUDEVH=7000
390 INRECS=12
391 MPARAM=7643
392 DCB=7760
393 INFLD=INCTL&70 /GET FIELD OF INPUT BUFFER
394 OUFLD=OUCTL&70 /DITTO OUTPUT BUFFER
395 *2000
396 IN7400, 7400
397 IOPEN, 0
398 DCA INXPTR
399 CLA CMA
400 DCA INCHCT /SET INCHCT TO FORCE A READ
401 ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE
402 RDF
403 TAD INCDIF
404 DCA .+1
405 INPTR, HLT /RESTORE CALLING FIELDS
406 JMP I IOPEN
407
408 ICHAR, 0
409 IN7600, 7600
410 RDF
411 TAD INCDIF
412 DCA INRTRN /SAVE CALLING FIELDS
413 INCHAR, CDF INFLD
414 ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH
415 ISZ INCHCT
416 INJMPP, JMP INJMP
417 TAD INEOF
418 SNA CLA /DID LAST READ YIELD END-OF-FILE?
419 JMP INGBUF /NO - DO ANOTHER
420 GETNEW, JMS INNEWF /OPEN A NEW INPUT FILE
421 JMP I (ERROR
422 INGBUF, TAD INCTR
423 CLL
424 TAD (INRECS
425 SNL
426 DCA INCTR /RESTORE INCTR IF IT HASN'T OVERFLOWED
427 SZL /IS THIS THE LAST READ?
428 ISZ INEOF /YES - SET END-OF-FILE FLAG
429 CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THE READ
430 RTR /FROM THE AMOUNT OF THE OVERFLOW
431 RTR /(IF ANY) AND THE STANDARD CONTROL WORD
432 TAD (INCTL+1
433 DCA INCTLW
434 INCDIF, CDF CIF 0
435 CDF 10
436 JMS I INHNDL /CALL THE DEVICE HANDLER
437 INCTLW, 0
438 INBUFP, INBUF
439 INREC, 0
440 JMP INERRX /SOME KIND OF HANDLER ERROR
441 INBREC, TAD INREC
442 TAD (INRECS
443 DCA INREC /UPDATE THE RECORD NUMBER
444 TAD INCTLW
445 AND IN7600
446 CLL RAL
447 TAD INCTLW
448 AND IN7600
449 CMA
450 DCA INCHCT /COMPUTE THE NEW CHARACTER COUNT
451 TAD INJMPP
452 DCA INJMP /RESET THE CHARACTER SWITCH
453 TAD INBUFP
454 DCA INPTR /AND THE WORD POINTER
455 JMP INCHAR /GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED
456 INERRX, ISZ INEOF /EITHER AN END-OF-FILE OR A BADDIE
457 SMA CLA /WHICH TYPE WAS IT?
458 JMP INBREC /END OF FILE - RESUME THY PROCESSING
459 JMP I (INERR
460 INJMP, HLT /THIS IS THE THREE - WAY CHARACTER SWITCH
461 JMP ICHAR1
462 JMP ICHAR2
463 ICHAR3, TAD INJMPP
464 DCA INJMP
465 TAD I INPTR
466 IN200, AND IN7400
467 CLL RTR
468 RTR /COMBINE THE HIGH-ORDER FOUR BITS OF
469 TAD INCTLW
470 RTR /THE TWO WORD TO FORM THE THIRD CHARACTER
471 RTR
472 ISZ INPTR
473 JMP INCOMN
474 ICHAR2, TAD I INPTR
475 AND IN7400
476 DCA INCTLW /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR
477 ISZ INPTR /BUMP THE WORD POINTER
478 ICHAR1, TAD I INPTR
479 INCOMN, AND (377
480 INRTRN, 0 /RESTORE CALLING FIELDS
481 JMP I ICHAR /AND RETURN
482 INXPTR, 0
483 INEOF, 1 /THESE PARAMETERS ARE SET UP SO THAT
484 /IOPEN IS UNNECESSARY.
485 INNEWF, -1
486 INCHCT=INNEWF
487 CDF 10
488 TAD (INDEVH+1
489 DCA INHNDL /INITIALIZE HANDLER ADDRESS
490 TAD I INXPTR
491 SNA /ANY MORE?
492 JMP I INNEWF /NO - OUT OF INPUT
493 JMS I IN200
494 1 /ASSIGN, FETCH HANDLER
495 INHNDL, 0
496 HLT /HUH?
497 TAD I INXPTR
498 AND (7760 /GET LENGTH PART OF WORD
499 SZA /LENGTH OF 0 MEANS LENGTH >=256
500 TAD (17 /ADD HIGH-ORDER BITS
501 CLL CML RTR
502 RTR
503 DCA INCTR /STORE LENGTH OF FILE
504 ISZ INXPTR
505 TAD I INXPTR
506 DCA INREC /STORE STARTING RECORD NUMBER OF FILE
507 ISZ INXPTR
508 DCA INEOF /ZERO END-OF-FILE FLAG
509 ISZ INNEWF
510 JMP I INNEWF
511 INCTR=IOPEN
512 \fPTP=20
513 *2200
514 OOPEN, 0
515 OU7600, 7600
516 RDF
517 TAD OUCDIF
518 DCA OORETN
519 JMS OUASGN
520 OUENTR, TAD I OU7600
521 JMS I (200
522 3 /ENTER OUTPUT FILE
523 OUBLK, FILENM+1
524 OUELEN, 0 /REPLACED WITH LENGTH OF HOLE
525 JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH
526 DCA OUCCNT
527 JMS I (OUSETP
528 OORETN, HLT /RESTORE CALLING FIELDS
529 JMP I OOPEN
530 OEFAIL, TAD I OU7600
531 AND (7760 /GET REQUESTED LENGTH
532 SNA CLA /WAS IT AN INDEFINITE REQUEST
533 JMP I (OUTERR
534 TAD I OU7600
535 AND (17 /MAKE THE REQUESTED LENGTH ZERO
536 DCA I OU7600
537 JMP OUENTR /TRY, TRY AGAIN
538 OUASGN, 0
539 TAD (OUDEVH+1
540 DCA OUHNDL
541 CDF 10
542 TAD I (FILENM
543 AND (17 /STRIP OFF ANY LENGTH INFO
544 SNA /IS THERE AN OUTPUT DEVICE?
545 JMP I (OUTERR
546 JMS I (200
547 1 /ASSIGN, FETCH HANDLER
548 OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY
549 HLT /HUH?
550 JMP I OUASGN
551 OUTDMP, 0
552 DCA OUCTLW /STORE THE CONTROL WORD
553 TAD OUCCNT
554 SNA
555 ISZ OUCTLW
556 TAD OUBLK
557 DCA OUREC /COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER
558 TAD OUCTLW
559 CLL RTL
560 RTL
561 RTL
562 AND (17 /COMPUTE THE NUMBER OF RECORDS
563 TAD OUCCNT /UPDATE THE NUMBER OF BLOCKS IN THE FILE
564 DCA OUCCNT
565 TAD OUCCNT
566 CLL CML
567 TAD OUELEN
568 SNL SZA CLA /DOES THE LENGTH EXCEED THE GIVEN LENGTH?
569 JMP I (OUTERR
570 OUCDIF, CDF CIF 0
571 CDF 10
572 JMS I OUHNDL
573 OUCTLW, 0
574 OUBUF
575 OUREC, 0
576 JMP I (OUTERR
577 JMP I OUTDMP
578 OCLOSE, 0
579 RDF
580 TAD OUCDIF
581 DCA OCRET
582 JMS I (OCHAR
583 JMS I (OCHAR
584 FILLLP, JMS I (OCHAR
585 JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE
586 SPA CLA
587 TAD (100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD
588 TAD (77 /BOUNDARY - OTHERWISE A HALF-RECORD
589 AND I (OUDWCT
590 SZA CLA /UP TO THE BOUNDARY YET?
591 JMP FILLLP /NO - FILL WITH ZEROS
592 TAD I (OUDWCT /GET DOUBLEWORD COUNT LEFT
593 TAD (OUCTL&3700
594 SNA /A FULL WRITE LEFT?
595 JMP NODUMP /YES - DON'T DO IT - THE ^Z IS ALREADY OUT
596 TAD (4000+OUFLD /PUT IN THE FIELD BITS AND THE WRITE BIT
597 JMS OUTDMP
598 NODUMP, JMS OUASGN /REASSIGN OUTPUT HANDLER
599 TAD I (FILENM
600 JMS I (200
601 4 /CLOSE THE OUTPUT FILE
602 OU7601, FILENM+1
603 OUCCNT, 0
604 JMP I (OUTERR
605 OCRET, HLT /RESTORE CALLING FIELDS
606 JMP I OCLOSE
607 \f *2400
608 OUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS
609 TAD (OUCTL&3700 /GET SIZE OF BUFFER IN DOUBLEWORDS
610 CIA /NEGATE IT
611 DCA OUDWCT
612 TAD (OUBUF
613 DCA OUPTR /INITIALIZE WORD POINTER
614 TAD OUJMPE
615 DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH
616 JMP I OUSETP
617
618 OCHAR, 0
619 AND (377
620 DCA OUTEMP
621 RDF
622 TAD (CDF CIF 0
623 DCA OUCRET
624 OUCHAR, CDF OUFLD /SET DATA FIELD TO BUFFER'S FIELD
625 ISZ OUJMP /BUMP THE CHARACTER SWITCH
626 OUJMP, HLT /THREE WAY CHARACTER SWITCH
627 JMP OCHAR1
628 JMP OCHAR2
629 OCHAR3, TAD OUTEMP
630 CLL RTL
631 RTL
632 AND (7400
633 TAD I OUPOLD
634 DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH
635 /ORDER 4 BITS OF THIRD CHAR
636 TAD OUTEMP
637 CLL RTR
638 RTR
639 RAR
640 AND (7400
641 TAD I OUPTR
642 DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS
643 TAD OUJMPE
644 DCA OUJMP /RESET SWITCH
645 ISZ OUPTR
646 ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS
647 JMP OUCOMN
648 TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE
649 JMS I (OUTDMP /DUMP THE BUFFER
650 JMS OUSETP /RE-INITIALIZE THE POINTERS
651 JMP OUCOMN
652 OCHAR2, TAD OUPTR
653 DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO
654 ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD
655 OCHAR1, TAD OUTEMP
656 DCA I OUPTR
657 OUCOMN,
658 OUCRET, HLT /RESTORE CALLING FIELDS
659 JMP I OCHAR
660 OUTEMP, 0
661 OUPOLD, 0
662 OUPTR, 0
663 OUJMPE, JMP OUJMP
664 OUDWCT, 0
665 OUTINH, 0
666
667 OTYPE, 0
668 RDF
669 TAD (CDF CIF 0
670 DCA OTRTN
671 CDF 10
672 TAD I (7600
673 AND (17
674 TAD (DCB-1
675 DCA OUTEMP
676 TAD I OUTEMP
677 OTRTN, HLT
678 JMP I OTYPE
679 CTCTST, 0
680 KRS
681 TAD (-203
682 SNA CLA /IS THE TELETYPE BUFFER A ^C
683 KSF /WITH THE TELETYPE FLAG ON?
684 JMP I CTCTST /NO
685 CDF CIF 0 /YES - GO TO MONITOR
686 JMP I (7605 /THROUGH THE "DON'T SAVE CORE" RETURN
687 $
688 \f