*DECK NMI=UPC IDENT SETUPC ENTRY SETUPC,SETUPC2 USE /PACKING/ LINE BSS 18 LINEND VFD 6/76B,54/9L KBUF BSS 80 UPCSTAT BSS 1 UPCOUNT BSS 1 USE ** SETUPC * SET UP THE DATA LINE TO BE CRACKED FOR THE * PROCESS UPC * SETUPC EQ *+1S17 ENTRY FOR 8 WORD UPC SA1 LINEND BX6 X1 SA6 LINE+8 SET UP TERMINATOR SET1 SB1 1 SB7 KBUF SA5 LINE RJ =XUPC SA6 UPCSTAT SAVE STATUS SX7 B6-B1 SAVE SA7 UPCOUNT PARAMETER COUNT EQ SETUPC SETUPC2 EQ *+1S17 ENTRY FOR 16 WORD UPC SA1 SETUPC2 BX6 X1 RESET RETURN ADDRESS SA6 SETUPC EQ SET1 END IDENT UPC ENTRY UPC TITLE UPC - UNPACK CONTROL CARD UPC SPACE 4,10 BASE D * COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1994. UPC SPACE 4,10 *** UPC - UNPACK CONTROL CARD. * * G. R. MANSFIELD. 70/12/12. * P. C. TAM. 77/05/25. * * ******************************************************* * * THIS COMMON DECK IS PART OF THE COMMON COMMON DECKS * * * RESIDING ON THE COMPASS PROGRAM LIBRARY, AND BEING * * * MAINTAINED BY THE COMPASS PROJECT. ANY CHANGES * * * REQUIRED SHOULD BE DIRECTED TO THE COMPASS PROJECT * * * THROUGH THE PROPER PROCEDURE. * * ******************************************************* * * * UPC UNPACKS A CONTROL/DATA STREAM INTO * INDIVIDUAL PARAMETERS UPC SPACE 4,10 *** UPC UNPACKS A CONTROL CARD TO INDIVIDUAL PARAMETERS. * THE FOLLOWING CONDITIONS ARE NOTED. * (1.) IF (B7) IS NEGATIVE ON ENTRY, A BLANK AFTER THE KEYWORD * IS A SEPARATOR, OTHERWISE BLANKS ARE IGNORED. * (2.) THE SPECIAL (NON A/N) CHARACTERS CONSIDERED AS PARAMETER * SEPARATORS. * (3.) THE CHARACTER 76B IS CONSIDERED AS THE TERMINATION OF * THE CONTROL CARD. * (4.) CHARACTER WITH DISPLAY CODE VALUES 00B * IS ILLEGAL BEFORE THE TERMINATOR. * (5.) THE PARAMETER MUST CONTAIN 7 OR LESS CHARACTERS. * (6.) THE PARAMETERS ARE STORED LEFT JUSTIFIED WITH ZERO * FILL. * (7.) THE SEPARATOR CHARACTER WILL BE PLACED IN THE * LOWER 18 BITS OF THE PARAMETER UNLESS IT IS A *,* * IN WHICH CASE THE LOWER 18 BITS WILL BE ZERO * (8.) TWO SUCCESSIVE SEPARATORS OR A SEPARATOR FOLLOWED BY * A TERMINATOR RESULTS IN A PARAMETER OF ALL ZERO. * * ENTRY (X5) = FIRST WORD OF CONTROL CARD. * (A5) = ADDRESS OF FIRST WORD. * (B7) = ADDRESS FOR FIRST PARAMETER IF (B7) IS POSITIVE * COMPLEMENT OF ADDRESS FOR FIRST PARAMETER IF * (B7) IS NEGATIVE. * (B1) = 1. * * EXIT (X6) = 0 IF NO ERROR DURING UNPACK. * (B6) = PARAMETER COUNT. * * USES X - 0, 1, 2, 3, 4, 5, 6, 7. * B - 2, 3, 4, 5, 6. * A - 1, 2, 3, 5, 6, 7. * * CALLS NONE. UPC SUBR ENTRY/EXIT SB2 B7 PL B2,UPC1 IF (B7) IS NEGATIVE ON ENTRY SB2 -B7 IF NEGATIVE, RESET UPC1 SA6 B2 PRESET A6 FOR WRITE SA3 TERMCHR (X3) = MASK FOR TERMINATORS SB5 60 (B5) = CONSTANT 60 MX0 -6 (X0) = CHARACTER MASK BX6 X6-X6 CLEAR ASSEMBLY SB2 B5 CLEAR CHARACTER COUNT MX2 18 (X2) = EXCESS CHARACTER MASK MX4 1 (X4) = CHARACTER COUNTER SB6 B0 (B6) = ASSEMBLY INDEX EQ UPC3 ENTER LOOP UPC2 LX6 6 ADVANCE ASSEMBLY SB2 B2-6 BX6 X6+X7 UPC3 LX5 6 NEXT CHARACTER BX7 -X0*X5 NZ X7,UPC3A SX7 76B CHANGE 00B TO 76B (TERMINATOR) UPC3A SB3 X7-1R9 CHECK CHARACTER LX4 6 ADVANCE DISASSEMBLY PL X4,UPC4 * 00 CHARACTER IS ILLEGAL AND * IS ALPHANUMERIC. SA5 A5+B1 UPC4 ZR X7,UPC7 IF CHARACTER = 00 LT B3,B1,UPC2 IF ALPHA/NUMERIC * SB4 X7-66B CHARS. 66-77B ARE ILLEGAL * GE B4,UPC7 SB4 X7-1R* ZR B4,UPC2 IF CHARACTER = * * CHECK FOR BLANK AS SEPARATOR. SB4 X7-1R CHECK CHARACTER NZ B4,UPC5 NOT BLANK, MUST BE SEPARATOR PL B7,UPC3 (B7) POSITIVE, BLANK IGNORED NZ B6,UPC3 NOT JUST AFTER KEYWORD, BLANK IGNORED * CHECK FOR PARAMETER .GT. 7 CHARACTERS. UPC5 BX1 X2*X6 CHECK ASSEMBLY LX6 X6,B2 LEFT JUSTIFY ASSEMBLY NZ X1,UPC7 IF .GT. 7 CHARACTERS ASSEMBLED AX1 X3,B3 CHECK FOR TERMINATOR * EQ B4,B1,UPC6 IF SEPARATOR = *,* BX6 X6+X7 INSERT SEPARATOR UPC6 SA6 A6 SB2 B5 RESET ASSEMBLY BX6 X6-X6 LX1 59 SB6 B6+B1 SA6 A6+B1 CLEAR LAST + 1 PL X1,UPC3 LOOP IF NOT TERMINATOR SA2 A6-B1 CLEAR TERMINATOR MX3 42 BX7 X3*X2 SA7 A2 EQ UPCX RETURN UPC7 SX6 B1 RETURN ERROR SB6 B0 EQ UPCX RETURN TERMCHR VFD 60/400000000B WAS 4100B FOR .) NOW 76B UPC SPACE 4,10 BASE * END