/ / / / / / / / / / /COPYRIGHT (C) 1978,1979 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / /VERSION=1 / .TITLE CONC SUBROUTINE /THIS SERVICE ROUTINE SQUISHES THE RESULTANT MANIPULATED ASCII STRING /IGNORING ANY NULLS. CONC INSERTS A LINE FEED, CARRIAGE RETURN, AND /(IF AC ZERO WHEN CALLED) A SIMULATED TAB (SIX SPACES). CONC REPACKS /THE STRING INTO OS/8 3:2 FORMAT BACK INTO TQUES WHERE THE UNPACKED /STRING IS RESIDENT. THE RESULTANT PACKED STRING LENGTH IS RETURNED /IN THE AC. .ENTRY CON .RSECT CONC .EXTERNAL TQUES,EQUES,QUEPTR,PCK,TABLE1 /THIS SECOND ENTRY IS USED TO MOVE A BLOCK OF DATA,TYPICALLY CONSISTING /OF MORE THAN ONE LINE, FOR WHICH NO INSERTS ARE REQUIRED. NO SQUISH IS /PERFORMED, AND EACH ZERO FILL ENCOUNTERED IS REPLACED BY LF,CR, AND TAB. /THIS PROCESSING IS CONTINUED UNTIL THE ENTIRE BLOCK IS OUTPUTTED. .ENTRY CN .EXTERNAL DIRLOC,BUF,FET / /CALLING SEQUENCE: / / CDF .FLD / CIF CON / JMS I SUB / ARG1 / . / . / / . /SUB,CON / /WHERE: / ARG1-INITIAL UNPACKED LENGTH (OBTAINED VIA SIZ) / /MAXIMUM UNPACKED LENGTH IS 400(OCTAL) CHARACTERS. / / / / /CALLING SEQUENCE: / / AC NON-ZERO, INSERT CNTL-Z AT END OF DATA BLOCK / / CDF .FLD / CIF CN / JMS I SUB1 / . / . / / . /SUBN,CN / CON, 0 CLA TAD I CON CIA DCA CON1 /GET INITIAL UNPACKED LENGTH AND SAVE /AS LOOP COUNTER ISZ CON /BYPASS ARGUMENT TAD (CDF CIF) RDF DCA CON30 /SETUP FOR RETURN CDF TABLE1 JMS CMOVE /MOVE DATA TO SECOND HALF OF THE BUFFER TAD QUEPTR TAD (200 DCA 13 /POINT TO SOURCE BUFFER TAD QUEPTR DCA 14 /POINT TO TARGET BUFFER (SAME AS SOURCE) CON4, TAD I 13 SZA DCA I 14 ISZ CON1 JMP CON4 TAD QUEPTR CIA TAD 14 /CALCULATE LENGTH OF SQUISHED STRING JMS CON13 /GO CALCULATE RESULTANT LENGTH AND INSERT CONTROL WORDS JMP CON30 CON13, 0 CON14, TAD (-3 SPA JMP CON5 /CALCULATE NUMBER OF TRIPLETS ISZ CON6 JMP CON14 /CONTINUE TIL DONE CON5, TAD (3 SZA CLA /EVEN NUMBER OF TRIPLETS? ISZ CON6 /NO, ONE MORE WILL BE GENERATED TAD CON6 CLL RAL /TWO WORDS PER TRIPLET DCA CON2 /SAVE AS TEMP. NUMBER OF PACKED WORDS CON7, TAD (215 DCA I 14 /DELIMIT BY A CARRIAGE RETURN CDF .FLD CIF PCK /REPACK IN 0S8 FORMAT JMS I CON21 TQUES-1 /SOURCE BUFFER CON20, TQUES-1 /TARGET BUFFER CLA CDF TABLE1 TAD QUEPTR TAD CON2 DCA 14 /SET AUTOINDEX TO POINT TO END OF PACKED STRING TAD (-2 DCA CON1 /SET COUNTER TO CONCATENATE FOUR CONTROL WORDS CON23, TAD CON15 DCA I 14 ISZ CON23 ISZ CON1 JMP CON23 /CONTINE UNTIL RECORD TERMINATOR IS MOVED TAD CON22 DCA CON23 /INITIALIZE CALCULATED TAD DCA CON6 /INITIALIZE PACK PASS COUNTER TAD CON2 TAD (2 /RETURN WITH PACKED LENGTH IN AC JMP I CON13 CON30, 0 JMP I CON /RETURN CON21,PCK /LINK TO PACK8 ROUTINE CON2,0 /NUMBER OF PACKED WORDS CON6,0 /WORK AREA .ENABLE OS8 CON15, TEXT <215><212> /CR,LF CON22, TAD CON15 TABFG,0 /WHEN SET, NO SIMULATED TAB IS INSERTED CON1,0 /ARG1 STORAGE (NEGATIVE COUNTER) CMOVE, 0 CLA TAD (-200 DCA CON11 TAD QUEPTR DCA 13 TAD QUEPTR TAD (200 DCA 14 CON12, TAD I 13 DCA I 14 ISZ CON11 JMP CON12 JMP I CMOVE CON11,0 /NEGATIVE LOOP COUNTER CN, 0 SZA CLA ISZ CNTLZ /SET CNTL-Z FLAG IF AC IS NON-ZERO TAD (CDF CIF) RDF DCA CN20 /SETUP FOR RETURN JMP CEV40 /GO TO NEXT PAGE CN7, DCA CNTLZ /RESET PROGRAM FLAGS CN20, 0 JMP I CN Z2, TAD CNTLZ SZA CLA /CNTL-Z REQUIRED? IAC JMP LEN3 /SET AC =1 IF CNTL-Z REQUIRED CNTLZ,0 PAGE CEV40, CDF TABLE1 IAC TAD DIRLOC DCA 10 /POINT TO CURRENT RELATIVE PSEUDOADDRESS TAD I 10 DCA CN2 /GET AND SAVE IT TAD DIRLOC TAD (-2 DCA 10 /POINT TO PREVIOUS ADDRESS TAD I 10 CIA TAD CN2 DCA CN2 /SAVE LENGTH OF 3/2 PACKED RECORD TAD CN2 CLL RAR TAD CN2 /MULTIPLY BY 1.5 TO GET THE UNPACKED LENGTH CLL TAD (-170 SNA JMP CEVEN /EVEN NO. OF BLOCKS IF ZERO SNL JMP CDONE /LESS THAN ONE PAGE OF DATA LEFT TO MOVE CEVEN, CLA JMS CMOVE /MOVE PAGE TO SECOND HALF OF TQUES TAD QUEPTR TAD (200 DCA 13 CN4, TAD QUEPTR DCA 14 /POINT TO START OF SECOND AND FIRST HALF BLOCKS CEV41, TAD CEV3 CIA TAD 13 SMA CLA JMP CEV5 CEV2, TAD I 13 SNA JMP CEV1 DCA I 14 JMP CEV41 /CONTINUE UNTIL NULL OR PAGE END CEV1, CLA TAD QUEPTR CIA TAD 14 JMS CON13 DCA LEN LEN2, CDF .FLD CIF BUF JMS I LEN1 LEN, 0 /OUTPUT THE PACKED MESSAGE CDF TABLE1 CLA CN3, TAD I 13 SNA CLA /BYPASS ANY ADDITIONAL ZERO FILL CHARACTERS JMP CN3 STA TAD 13 DCA 13 /BACKUP TO FIRST NON-ZERO CHARACTER JMP CN4 /CONTINUE AFTER CONTROL WORD INSERTION CEV5, TAD QUEPTR CIA TAD 14 JMS CON13 TAD (-2 /IGNORE INSERTED CONTROL WORDS DCA CEV17 TAD DONFG SZA CLA JMP Z2 /IF CNTLZ REQUIRED, SET AC =1 LEN3, CDF .FLD CIF BUF JMS I LEN1 CEV17, 0 /OUTPUT BUFFER W/NO CONTROL WORDS (PARTIAL MESSAGE) CLA CDF TABLE1 TAD DONFG SZA CLA JMP CN21 /IF FINISHED, RETURN TAD (-3 TAD DIRLOC DCA DIRLOC /BACK UP TO CURRENT RECORD IAC TAD DIRLOC DCA 10 TAD 10 DCA 11 /11 AND 10 POINT TO CURRENT RELATIVE PSEUDOADDRESS TAD I 10 TAD (120 DCA I 11 /INCREMENT BY ONE PAGE IAC /AC EQUALS ONE. GET NEXT SEQUENTIAL RECORD CDF .FLD CIF FET JMS I CEV21 /GET NEXT PAGE INTO TQUES JMP CEV40 /CONTINUE CDONE, TAD (370 TAD QUEPTR DCA CEV43 /FORM NEW END OF BUFFER BASED ON REMAINING /WORDS TO OUTPUT TAD DONFG SZA CLA /CHECK IF LAST PASS ALREADY PROCESSED JMP CN21 TAD CEV44 DCA CEV41 /NO. LOAD CALCULATED TAD, SET LAST PASS FLAG AND /GO OUTPUT LAST BUFFER ISZ DONFG JMP CEVEN CN21, DCA DONFG TAD CEV45 DCA CEV41 /INITIALIZE CALCULATED TAD JMP CN7 CEV43,0 CEV44, TAD CEV43 CEV45, TAD CEV3 CEV3,EQUES-10 CEV21,FET CEV6,TQUES-1 CN2,0 LEN1,BUF DONFG,0