TITLE 'CSVQUERY' R0 EQU 0 GENERAL REGISTER 0 R1 EQU 1 GENERAL REGISTER 1 R2 EQU 2 GENERAL REGISTER 2 R3 EQU 3 GENERAL REGISTER 3 R4 EQU 4 GENERAL REGISTER 4 R5 EQU 5 GENERAL REGISTER 5 R6 EQU 6 GENERAL REGISTER 6 R7 EQU 7 GENERAL REGISTER 7 R8 EQU 8 GENERAL REGISTER 8 R9 EQU 9 GENERAL REGISTER 9 R10 EQU 10 GENERAL REGISTER 10 R11 EQU 11 GENERAL REGISTER 11 R12 EQU 12 GENERAL REGISTER 12 R13 EQU 13 GENERAL REGISTER 13 R14 EQU 14 GENERAL REGISTER 14 R15 EQU 15 GENERAL REGISTER 15 SPACE 2 CSVQUERY CSECT SAVE (14,12),,* SAVE CALLER REGISTERS LR R14,R13 SAVE CALLER SAVE AREA CNOP 0,4 BAL R13,BEGIN-CSVQUERY(R15) BRANCH OVER SAVE AREA USING SAVEAREA,R13 SAVEAREA DS 18F SAVE AREA LINE1 DC C'NAME=' NAME DC CL8' ' DC C' MAJOR=' MAJOR DC CL8' ' DC C' PROVIDER=' PID DC CL4' ' LLINE1 EQU *-LINE1 LINE2 DC C'EPA=' EPAX DC CL8' ' DC C' LENGTH=' SIZEX DC CL8' ' DC C' FLAGS=' FLAG DC CL6' ' LLINE2 EQU *-LINE2 EPA DS F SIZE DS F ATTR1 DS X ATTR2 DS X ATTR3 DS X DC X'00' UNPKWK DS XL5'00' HEXWK DS CL9 ADDR DS F'0' BEGIN ST R14,4(R13) CHAIN SAVE AREAS ST R13,8(R14) L R15,0(,R1) GET PARM LH R3,0(R15) GET LENGTH LTR R3,R3 BZ RETURNC SLR R4,R4 CLEAR A WORK REGISTER SLR R5,R5 AND ANOTHER CH R3,=H'8' TOO BIG? BNH DOPARM LA R3,8 SET GOOD ENUFF DOPARM IC R4,2(R15) GET A CHARACTER N R4,=F'15' LOSE THE ZONE CLI 2(R15),C'0' NUMERIC BNL MVPSTC CLI 2(R15),C'F' ALPHA BH STPARM AH R4,=H'9' 1 GOES TO 10 ETC MVPSTC SLL R5,4 SHIFT BY NIBBLE ALR R5,R4 MOVE IN ANOTHER LA R15,1(,R15) GET NEXT BYTE BCT R3,DOPARM STPARM ST R5,ADDR LOAD UP ARGUMENT CSVQUERY INADDR=ADDR,SEARCH=JPALPA, OUTLENGTH=SIZE,OUTEPNM=NAME,OUTEPA=EPA,OUTMJNM=MAJOR, OUTATTR1=ATTR1,OUTATTR2=ATTR2,OUTATTR3=ATTR3,OUTPID=PID LTR R4,R15 BNZ RETURN TPUT LINE1,LLINE1 LA R2,EPA BAL R5,F2X MVC EPAX,HEXWK LA R2,SIZE BAL R5,F2X MVC SIZEX,HEXWK LA R2,ATTR1 BAL R5,F2X MVC FLAG,HEXWK TPUT LINE2,LLINE2 B RETURN F2X MVC UNPKWK(4),0(R2) COPY TO WORK AREA UNPK HEXWK,UNPKWK UNPACK IT SLR R8,R8 CLEAR FOR WORK LA R7,7 LOOP COUNTER F2XCLI LA R6,HEXWK(R7) GET NEXT CHARACTER CLI 0(R6),C'9' IS IT OK? BNH F2XNXT IC R8,0(,R6) PICK IT UP SH R8,=H'57' MAKE IT A-F STC R8,0(,R6) PUT IT BACK F2XNXT BCT R7,F2XCLI GO BACK BR R5 DROP R13 RETURN LR R15,R4 RETURNC L R13,4(R13) RESTORE ORIGINAL SAVE AREA L R14,12(R13) RESTORE CALLER REGISTERS LM R0,R12,20(R13) RESTORE CALLER REGISTERS BR R14 RETURN TO CALLER LTORG END CSVQUERY