.TITLE .PCK / / 26 JUN 78 (002; PDH) DEBUG / 26 JUN 78 - PAUL HENDERSON / / ROUTINE TO PACK CHARACTERS, AS THEY ARE SUPPLIED, INTO 5/7 / ASCII. IF A LINE TERMINATOR (CR OR ALT MODE) IS ENCOUNTERED / THIS FACT IS NOTED IN THE INFORMATION RETURNED. / / *** NOTE *** THE ROUTINE MUST BE SET UP BY THE APPROPRIATE / CALL TO 'PCK.IN', OR DISASTER MAY BE PERPETRATED! / / CALLING SEQUENCES: / / 1) TO INITIALIZE - / / LAC (ADDRESS OF BUFFER TO RECEIVE PACKED CHARACTERS / JMS* PCK.IN / (RETURN) / / 2) TO PACK A CHARACTER - / / LAC CHARACTER / JMS* .PCK / (RETURN) / LINK = 1 IF TERMINATOR SINCE LAST SETUP / / AC = NUMBER OF WORDS PACKED / / MQ = NUMBER OF CHARACTERS PACKED INC=ISZ / INCREMENT A POSITIVE COUNTER IDX=ISZ / INDEX A POINTER SET=ISZ / SET A FLAG NON-ZERO .GLOBL PCK.IN PCK.IN XX DAC WPNT / SAVE LINE BUFFER ADDRESS IN WORKING POINTER LAC (..1 DAC SWING / SET UP PACKING ROUTINE DZM TERMIN / CLEAR 'LINE TERMINATOR PACKED' FLAG DZM CCOUNT / ZERO CHARACTER COUNTER DZM WCOUNT / AND WORD COUNTER JMP* PCK.IN WPNT;TERMIN;CCOUNT;WCOUNT .EJECT .GLOBL .PCK .PCK XX AND (177 / ENSURE 7 BITS ONLY SAD (15 SKP SAD (175 SET TERMIN / SET FLAG IF CR OR ALT MODE JMP* SWING / PACK THE CHARACTER SWING ..1 INC CCOUNT / INCREMENT CHARACTER COUNTER LAC TERMIN / IF WE HAVE PACKED A LINE TERMINATOR SZA!CLL / SET LINK STL LAC CCOUNT / EXIT WITH CHARACTER COUNT IN MQ LMQ LAC WCOUNT / WORD COUNT IN AC, AND JMP* .PCK / LINE TERMINATOR FLAG IN LINK. ..1 INC WCOUNT / INCREMENT WORD COUNTER ALSS 13 DAC* WPNT JMS SWING ..2 ALSS 4 XOR* WPNT DAC* WPNT JMS SWING ..3 CLQ!LRSS 3 XOR* WPNT DAC* WPNT IDX WPNT / INDEXTO NEXT WORD INC WCOUNT / COUNT THE WORD LACQ / RETRIEVE FINAL 3 BITS OF 3RD CHARACTER DAC* WPNT JMS SWING ..4 ALSS 10 XOR* WPNT DAC* WPNT JMS SWING ..5 CLL!RAL XOR* WPNT DAC* WPNT IDX WPNT / INDEX POINTER FOR NEXT PAIR, BUT JMS SWING / WORD COUNTER WILL BE INCREMENTED ONLY JMP ..1 / IF ANOTHER CHARACTER IS PACKED. .END