1 /SAVECB.PA DEMONSTRATION PROGRAM TO INCREASE THE NUMBER OF SAVE ARGUMENTS
11 /COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION
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 DOCUMENT.
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.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
45 \f /SAVCB.PA INCREASES THE NUMBER OF SAVE ARGUMENTS JULY 1978
46 / MEMORY LOCATIONS UTILIZED
47 / 0000-1177 /PROGRAM CODE
48 / 1200-1377 /TTY INPUT BUFFER
49 / 1400-1577 /ORIGINAL CCB BUFFER
50 / 1600-1710 /ADJUSTED CCB BUFFER
51 / 1710-1777 /PROGRAM CODE
56 REDERR, JMS I [CRLF /ILLEGAL INPUT ERROR
61 LXR, 1177 /AUTO INDEX FOR INPUT STORAGE
69 TEMP, 0 /INPUT NUMBER STORAGE
70 TMP1, 0 /INPUT NUMBER STORAGE
71 DIGFLG, 0 /NUMBER PRESENT FLAG
72 TEMP1, 0 /INPUT FIELD STORAGE
73 TEMP2, 0 /INPUT ADDRESS STORAGE
76 DLID, 0 /DELIMITER STORAGE
77 FIRST1, 0 /STORAGE FOR SEGMENT FIELD INPUT
78 FIRST2, 0 /STORAGE FOR SEGMENT ADDRESS INPUT
79 CNT, 0 /SEGMENT COUNTER
80 FLD, 0 /USED IN CCB FIELD PRINTING
81 TMP, 0 /TEMPORARY STORAGE-TEXT PRINTING
82 TCB, 0 /PRMSG CALL I.D.
83 ORG, 0 /ORIGIN STORAGE
85 BUMP, -2 /USED AS TEST IN LOAD LOOP
91 CIF 10 /CALL COMMAND DECODER
94 2326 /SV. EXTENSION---ASSUMED INPUT
97 TAD I [7620 /STARTING BLOCK OF FILE
99 DCA STFLE /SET UP LOADING OF CCB BLOCK
100 LOAD, JMS I [7607 /LOAD CCB
103 STFLE, 0 /STARTING BLOCK OF FILE
105 TAD I XR /MOVE CCB UP TO 1600
109 JMS I (VERMSG /PRINT CCB WRITING INFO
110 CONT, JMS CRLF /INITIALIZE LINE
111 JMS IDCHAR /PRINT INPUT SIGNAL CHARACTER
112 REATTY, KSF /WAITING FOR FLAG TO DISAPPEAR
114 JMS I [CTCTST /...CTRL/C?
115 TAD [203 /NO-RE-INSTATE CHARACTER
116 JMS I [RBLFT /TEST FOR LINE FEED,RUBOUT
118 DCA TEMP /STORE CHARACTER
119 KCC /CLEAR KEYBOARD,AC
123 TAD [-215 /IS IT THE END OF THE LINE?
126 TAD [-63 /IS IT THE END OF INPUT(@)?
131 DCA I LXR /STORE AWAY CHARACTER
134 SNA CLA /TEST FOR LINE OVERFLOW
139 CRLF, 0 /CARRAIGE RETURN--LINE FEED ROUTINE
146 IDCHAR, 0 /PRINT A #, IT SIGNALS INPUT TIME
148 DCA RBFLG /INITIALIZE RUBOUT FLAG
149 DCA TEMP1 /INITIALIZE INPUT STORAGE WORD
156 TAD [1377 /ROUTINE TO TYPE OUT CCB INFO
158 TAD I CXR /ADJUST SEGMENT INFO
161 DCA CNT /NUMBER OF SEGS
164 RTRN1, TAD I CXR /GET CIF CDF OF STARTING FIELD
168 AND [104 /ISOLATE BANK BITS
169 CLL RTR /SWITCH THEM AROUND
176 TAD FLD /TIME TO TYPE FIELDS
183 JMS I [PWORD /PROCESS ORIGIN WORD
184 TAD [211 /PRINT ATAB TO SEPARATE HEADINGS
186 TYJSW, /SET TYCCB CALL FLAG
187 JMS I [PRMSG /PRINT JSW HEADING
190 JMS I [PWORD /PRINT JSW
195 TEXT /CORE SEGMENTS:/
198 JMP I [SEGSM2 /PROCESS SEGMENTS
201 ISZ PRMSG /GET MORE TEXT
203 PRMSG, 0 /ROUTINE TO PRINT TEXT
210 ISZ PRMSG /TYCCB RETURN
212 PRWD, 0 /ROUTINE TO ISOLATE AND PRINT TEXT CHARS
213 DCA TMP /SAVE PACKED SIX BIT CHARS
215 BSW /POSITION FIRST CHAR FOR PRINTING
217 TAD TMP /ISOLATE SECOND CHARACTER
220 PCHAR, 0 /ROUTINE FOR CONVERTING TEXT CHARS TO ASCII
221 AND [77 /ISOLATE SIX BITS
224 TAD [240 /CONVERSION TO ASCII
227 JMS TYPIT /PRINT CHARACTER
229 TYPIT, 0 /ROUTINE TO PRINT CHARACTERS
234 JMS CTCTST /TEST FOR CONTROL/C
237 CTCTST, 0 /SEE IF USER WANTS OUT, CTRL/C...
242 TAD [-203 /IS IT A CTRL/C?
244 CTLC, JMP I ERR / CTRL/C MEANS GETOUT...
247 TAD [-377 /IS IT A DELETE?
251 TAD [377-212 /IS IT A LINE FEED?
262 SSTADR, TAD TEMP1 /ADJUST FIELD
263 CLL RTR /TRANSFORM FOR CDF--"37" TO "174"
269 DCA I [1401 /STORE STARTING FIELD CDF CIF
271 DCA I [1402 /STORE AWAY STARTING ADDRESS
274 DCA I [1403 /STORE AWAY JSW
275 ENDTST, TAD LXR /TEST FOR END OF INPUT LINE
279 JMP TESTE /TEST FOR CR/LF OR @
281 DASH, TAD TEMP1 /ROUTINE TO PROCESS TRIPLET
284 SZA CLA /ARE THE FIELDS THE SAME?
285 JMP I [BARG /NO ERROR
293 SZL CLA /ISI UPPER LIMIT > LOWER LIMIT?
294 JMP I [BARG /NO ERROR
295 TAD [1403 /SET INDEX REGISTER
298 TAD I [1400 /INITIALIZE SEGMENT COUNTER
300 JMP I [FLDTST /PROCESS SEGMENT
301 TESTE, TAD TEMP /TEST FOR WHETHER END OF LINE OR INPUT
302 ENTST, TAD [-215 /WAS IT ACARRAIGE RETURN?
304 JMP I [NEXTLN /YES PREPARE FOR NEXT LINE
305 TAD [215-"@ /WAS IT EXIT TIME?
307 JMP I [WRCCB /EXIT ROUTINE
308 JMP REDERR /ILLEGAL INPUT
309 PWORD, 0 /ROUTINE TO PROCESS ORIGIN OR JSW WORDS
312 BSW /PROCESS HIGHER BIT FIRST
314 TAD ORG /NOW PROCESS LOWER BITS
317 SECT2, 0 /ROUTINE TO PRINT DOUBLE DIGIT
320 AND [70 /ISOLATE HIGHER DIGIT
326 AND [7 /ISOLATE LOWER DIGIT
333 GTNM, DCA DIGFLG /RESET DIGIT FLAG
334 DCA TEMP1 /CLEAR FIELD STORAGE
335 DCA TEMP2 /CLEAR ADDRESS STORAGE
336 GETNUM, TAD I CXR /ROUTINE TO ORGANIZE LINE INPUT
337 TAD [-270 /TEST FOR NUMBER
341 JMS NOTNUM /NO NUMBER
342 DCA TMP1 /STORE NUMBER
343 ISZ DIGFLG /SET NUMBER FLAG
344 JMS ROT /ORGANIZE ARGUMENT INTO TWO WORDS
345 JMS ROT /TEMP1 FOR THE FIELD
346 JMS ROT /TEMP2 FOR ADDRESS
348 TAD TMP1 /TAD IN NEW DIGIT
351 SDFLG, TAD CHARID /ADD DELIMITER
353 TAD TEMP2 /STORE PRESENT ADDRESS AWAY
356 TAD TEMP1 /STORE FIELD ALSO
361 ROT, 0 /ROUTINE TO ROTATE FIELD AND ADDRESS
362 TAD TEMP2 /ADDRESS REGISTER
363 CLL RAL /MOVE POTENTIAL FIELD BIT INTO LINK
364 DCA TEMP2 /NOW READY FOR NEW INPUT - TMP1
366 RAL /STORE FIELD BITS
371 TAD [260 /CONVERT TO ASCII
375 JMS ACORS /IF NO DIGIT,MUST BE A COMMAND
376 TAD DLID /PROCESS INPUT NUMBER
377 SNA /ZERO INDICATES FIRST NUMBER
378 JMP SDFLG /PREPARE FOR NEXT NUMBER
379 TAD [-"- /IS IT A DASH?
381 JMP I [DASH /PROCESS TRIPLET
382 TAD ["--", /IS IT A COMMA?
384 JMP SDFLG /GET SECOND NUMBER
385 TAD [",-"; /IS IT A SEMI-COLON?
387 JMP I [SSTADR /PROCESS START ADDRESS
388 TAD [";-"= /IS IT AN EQUALS
390 JMP I [SSBITS /PROCESS JSW
392 ACORS, 0 /TEST FOR ADD,SUB,OR CHANGE
394 TAD [-"T /IS IT A TYPE INST?
396 JMP I [TYCCB /IF SO PROCESS IT
397 TAD ["T-"A /IS IT AN ADDITION?
400 TAD ["A-"S /IS IT A DELETION?
402 JMP SDFLG /TEST FOR @ OR CR/LF
404 CEND, DCA CMND /STORE COMMAND FLAG
407 SAVE1, JMS I [CRLF /PROCESS END OF LINE
409 DCA CXR /POINT TOWARD START OF LINE
410 TAD LXR /WAS THEIR ANY INPUT?
413 SNA CLA /IF LXR EQUALS CXR, THERE WAS NONE
414 JMP I [TESTE /TEST FOR CR/LF OR @
415 DCA I LXR /SET DELIMITER
416 JMP I [GETNUM /GET INPUT
419 TAD CMND /WHAT IS THE COMMAND?
420 SZA CLA /IF NOT THE ADD COMMAND...
421 JMP I [BARG /THEN ERROR RETURN
422 TAD COUNT /IS IT TO BE ADDED ON THE END?
423 SZA CLA /IF COUNT IS ZERO, YES...
424 TAD [-2 /PUSH BACK INDEX TO SAVE LAST SEGMENT
427 TAD XR /ADDITION CODE
428 AND [77 /ISOLATE WHERE WE ARE IN THE CCB
429 TAD [1600 /REFERENCE SAME LOCATION IN ADD BUFFER
430 DCA NXR /STORE FOR MOVE
431 TAD FIRST2 /STORE INPUT'S ORIGIN
433 JMS I [SEGADJ /ADJUST SECOND WORD FOR CCB
436 DCA BUMP /SET ADD INDICATOR
437 JMP I [MOVE /MOVE CCB
438 STEST, STA /DELETION PROCESSOR
441 SZA CLA /IS A DELETION?
442 JMP I [BARG /IF NOT ERROR
443 TAD XR /SET BACK POINTER FOR DELETION
444 TAD [176 /ADD 200 TO REFERENCE 1600 BUFFER
446 IAC /SET DELETION PARAMETER
448 JMP I [MOVE /MOVE CCB
453 /ROUTINE TO PROCESS CCB SEGMENTS FOR TYPING
456 SEGS, TAD I CXR /GET FIRST SEGMENT
458 TAD I CXR /GET SECOND WORD OF SEGMENT
462 TAD TMP1 /TYPE ORIGIN OF SEGMENT
463 JMS I [PWORD /TYPE IT
464 TAD [255 /TYPE HYPHEN
466 JMS TFIELD /TYPE FIELD
468 TAD FLD /CALCULATE HIGHER LIMIT
469 AND [3700 /ISOLATE NUMBER OF PAGES
470 TAD [-100 /MINUS A PAGE TO BE REPLACED BY
472 TAD [177 /A PAGE FULL OF LOCATIONS
475 ISZ CNT /IS THAT ALL THE SEGS?
476 JMP .+5 /NO ... CONTINUE
479 DCA LXR /RESET INPUT POINTER
481 ISZ SEGCNT /IS THAT THE FOURTH SEGMENT?
482 JMP .+4 /NO...CONTINUE
491 FLDTST, ISZ COUNT /IS THAT ALL THE SEGS?
493 JMP I [ATEST /IF SO PROCESS COMMAND
494 TAD I XR /SEARCH FOR FIELD ETC. PAGE
495 DCA TMP /STORE SEGMENT ORIGIN
497 DCA FLD /STORE SEGMENT'S SECOND WORD
498 JMS TFIELD /ADJUST FIELD...
499 CIA /RETURNS WITH FIELD IN AC
500 TAD TEMP1 /IS IT THE SAME FIELD AS INPUT?
501 SPA /OR IS IT LESS THAN FIELD OF INPUT?
502 JMP FLDTST /NEITHER...
503 SZA CLA /IF IT IS LESS THAN INPUT'S FIELD
504 JMP I [ATEST /IT SHOULD BE AN ADD
505 TAD FIRST2 /TEST INPUT'S ORIGIN
506 CIA /IS IT LESS THAN OR EQUAL TO SEGMENT'S ORIGIN?
509 JMP I [STEST /IF EQUAL TEST FOR DELETION
511 JMP I [ATEST /IF LESS TEST FOR ADDITION
512 JMP FLDTST /OTHERWISE CHECK NEXT SEGMENT
513 TFIELD, 0 /ROUTINE TO TRANSFORM FIELDS FOR TYPING
517 SZL /ISOLATE BANK BIT "A"
520 SZL /ISOLATE BANK BIT "B"
523 SEGADJ, 0 /ROUTINE TO ORGANIZE CCB SEGMENT SECOND WORD
524 TAD FIRST2 /CALCULATE NUMBER OF PAGES
526 TAD TEMP2 /BY DIFFERENCING THE INPUT ADDRESSES
528 CLL RAR /AND HALVING INTO PAGES
529 DCA FIRST2 /STORE FOR CCB LOAD
531 TAD TEMP1 /ADD IN FIELD
532 JMS CCBFLD /RE-ORGANIZE IT FOR CCB
533 TAD FIRST2 /COMBINE FIELD AND PAGES FOR CCB SEGMENT
535 CCBFLD, 0 /ROUTINE TO CHANGE FIELD INTO CCB FORM
536 CLL RTR /STARTS WITH A '37' IN AC
538 SZL /TEST FOR B BANK BIT
541 SZL /TEST FOR A BANK BIT
545 RAR /RETURN WITH A '76' IN AC
547 MOVE, JMS MOVA /MOVE TIME
548 TAD BUMP /IF YES, RESET SEGMENT NUMBER
551 REMOVE, TAD [1403 /REPLACE ORIGINAL SEGS
553 TAD [1603 /WITH UPDATED ONES
556 DCA COUNT /SET COUNT TO THE NUMBER OF SEGS
560 TAD COUNT /WAS THE SEGMENT ADDED ON THE END?
562 JMP I MOVA /IF SO, RETURN
563 TAD I XR /MAKE THE MOVE
565 TAD I XR /BE SURE TO GET BOTH WORDS
567 ISZ COUNT /IS THAT ALL THE SEGMENTS?
568 JMP .-5 /IF NO, CONTINUE
570 NEXTLN, CLL CLA /ROUTINE TO ACCEPT NEW INPUT LINE
571 DCA DIGFLG /ZERO DIGIT FLAG
572 DCA DLID /CLEAR DELIMITER STORAGE
573 TAD [1177 /RESET INPUT POINTER
575 JMP I [CONT /CONTINUE INPUT CODE
578 /LOCATIONS 1600-1710 ARE USED AS THE CORE CONTROL BLOCK BUFFER
579 DELETE, /TTY DELETION COMMAND
582 TAD [-1177 /WAS THERE INPUT?
584 JMP RBSPCL /NO INPUT--PREPARE FOR SOME...
585 TAD ["\ /PRINT ERASE DELIMITER
586 ISZ RBFLG /TEST TO SEE IF THIS IS THE FIRST RUBOUT
588 CLA CMA /SET RUBOUT FLAG
592 DCA TX /PRINT ERASED CHARACTER
600 RBSPCL, ISZ RBFLG /HAVE ANY CHARACTERS BEEN ERASED?
601 JMP I [CONT /NO...PREPARE FOR INPUT
604 DCA DIGFLG /RESET DIGFLG
607 TAD [243 /TYPE I.D.(#) CHARACTER
625 TAD I [1400 /ACCES NUMBER OF SEGMENTS
626 CLL RAL /ADJUST EXTENDED MEM BIT
629 SPA CLA /ARE THERE MORE THAN 32?
639 TEXT / ATTENTION! THE NEW CCB WILL BE WRITTEN DIRECTLY ONTO /
642 TEXT /THE SPECIFIED INPUT FILE.(SEE SOURCE CODE)/
645 WRCCB, JMS I [SEGNO /DID WE EXCEED SEGMENT LIMIT?
646 JMS I [7607 /WRITE CCB