|
You might tell Gene this is for Binary images only. Leif Svalgaard wrote: > From: Leif Svalgaard <leif@leif.org> > > From: <Gene_Gaunt@ReviewWorks.com> > > > Does anyone have an MI example of CCITT group 4 decompression? > > Yes, I wrote one for Harry Williams. > > you, of course, need a program to test the decompressor (DCMP) with. > Below is one: > > > > here is my test: > > > 1) ftp a tiff image to AS/400: > > > put 112.tif tif112 > > > 2) uncompress: > > > call pgm(dcmptiff) parm(lsvalgaard tif112) > > > 3)ftp result down to PC > > > get outtiff u112.tif > > > > > > go look at image u112.tif, e.g. with Windows explorer. > > > The u112.tif should look just like 112.tif. > > /* DECOMPRESS TIFF FILE WITH T6 */ > /* LEIF SVALGAARD, 2002/02/04 */ > > DCL SPCPTR .PARM1 PARM; > DCL DD PARM-LIB CHAR(10) BAS(.PARM1); > > DCL SPCPTR .PARM2 PARM; > DCL DD PARM-TIFF CHAR(10) BAS(.PARM2); > > DCL SPCPTR .PARM3 PARM; > DCL DD PARM-DEBUG CHAR(10) BAS(.PARM3); > > DCL OL PARMS(.PARM1, .PARM2, .PARM3) EXT PARM MIN(2); > DCL DD NBR-OF-PARMS BIN(2); > > DCL SPCPTR .CONTROL INIT(CONTROL); > DCL DD CONTROL CHAR(64); > DCL DD ROW-WIDTH BIN(2) DEF(CONTROL) POS( 1); > DCL DD NBR-OF-ROWS BIN(2) DEF(CONTROL) POS( 3); > DCL DD FIRST-TIME CHAR(1) DEF(CONTROL) POS( 5); > DCL DD DEBUG-ON CHAR(1) DEF(CONTROL) POS( 6); > DCL DD DEBUG-LIB CHAR(10) DEF(CONTROL) POS( 7); > DCL DD DEBUG-FILE CHAR(10) DEF(CONTROL) POS(17); > DCL DD DEBUG-MBR CHAR(10) DEF(CONTROL) POS(27); > > DCL SPCPTR .SOURCE; > > DCL DD FILE-BLOCK BIN(2); > DCL SPCPTR .FILE INIT(FILE); > DCL DD FILE CHAR(256000) BDRY(16); > DCL DD BLOCK(500) CHAR(512) DEF(FILE) POS(1); > > DCL SPCPTR .RESULT INIT(RESULT); > DCL DD RESULT CHAR(300) BDRY(16); > > DCL OL DCMP(.CONTROL, .SOURCE, .RESULT) ARG; > DCL SYSPTR .DCMP; > DCL DD RESOLVE CHAR(34); > DCL DD RESOLVE-TYPE CHAR(2) DEF(RESOLVE) POS( 1); > DCL DD RESOLVE-NAME CHAR(30) DEF(RESOLVE) POS( 3); > DCL DD RESOLVE-AUTH CHAR(2) DEF(RESOLVE) POS(33); > > DCL SPCPTR .ODP; > DCL SPC ODP BAS(.ODP); > DCL DD ODP.DCB BIN(4) DEF(ODP) POS(17); > > DCL SPCPTR .DCB; > DCL SPC DCB BAS(.DCB); > DCL DD DCB-GET BIN(2) DEF (DCB) POS(25); > DCL DD DCB-PUT BIN(2) DEF (DCB) POS(33); > > DCL SPCPTR .NULL; > DCL SPCPTR ..SEPT BASPCO; > DCL SYSPTR .SEPT(6440) BAS(..SEPT); > > DCL CON CLOSE-ENTRY BIN(2) INIT(11); > DCL CON OPEN-ENTRY BIN(2) INIT(12); > > DCL SPCPTR .IFCB INIT(IFCB); > DCL DD IFCB CHAR(214) BDRY(16); > DCL SPCPTR .IFCB-ODP DEF(IFCB) POS( 1); > DCL SPCPTR .IFCB-INBUF DEF(IFCB) POS( 17); > DCL DD IFCB-FILE CHAR(10) DEF(IFCB) POS(129); > DCL DD IFCB-LIB-ID BIN(2) DEF(IFCB) POS(139) INIT(72); > DCL DD IFCB-LIBRARY CHAR(10) DEF(IFCB) POS(141); > DCL DD IFCB-MBR-ID BIN(2) DEF(IFCB) POS(151) INIT(73); > DCL DD IFCB-MEMBER CHAR(10) DEF(IFCB) POS(153); > DCL DD IFCB-FLAGS-1 CHAR(1) DEF(IFCB) POS(175) INIT(X'80'); > DCL DD IFCB-FLAGS-2 CHAR(1) DEF(IFCB) POS(176) INIT(X'20'); > DCL DD IFCB-RECORD-ID BIN (2) DEF(IFCB) POS(209) INIT(1); > DCL DD IFCB-RECORD-LENGTH BIN (2) DEF(IFCB) POS(211) INIT(512); > DCL DD IFCB-NO-MORE-PARMS BIN (2) DEF(IFCB) POS(213) INIT(32767); > > DCL OL OPEN-I(.IFCB); > DCL OL CLOSE-I(.IFCB); > > DCL DD GET-ENTRY BIN(2); > DCL DD INBUF CHAR(512) BAS(.IFCB-INBUF); > DCL DD GET-OPTION BIN(4) INIT(H'03000001'); > DCL SPCPTR .GET-OPTION INIT(GET-OPTION); > DCL OL GET-OPERATION(.IFCB, .GET-OPTION, .NULL); > > DCL EXCM * EXCID(H'5001') BP(HAVE-DATA) CV("CPF") IMD; > > DCL DD TIFF-HEADER CHAR(8) DEF(FILE) POS(1); > DCL DD TIFF-BYTE-ORDER CHAR(2) DEF(TIFF-HEADER) POS(1); > DCL DD TIFF-VERSION BIN(2) DEF(TIFF-HEADER) POS(3); > DCL DD TIFF-IFD-OFFSET BIN(4) DEF(TIFF-HEADER) POS(5); > > DCL SPCPTR .BIN; > DCL DD ENTRY-NBR BIN(2); > DCL SPCPTR .IFD; > DCL DD IFD CHAR(602) BAS(.IFD); > DCL DD IFD-NBR-OF-ENTRIES BIN(2) DEF(IFD) POS(1); > DCL DD IFD-ENTRY(50) CHAR(12) DEF(IFD) POS(3); > > DCL DD NBR-OF-ENTRIES BIN(2); > DCL SPCPTR .THE-ENTRY; > DCL DD THE-ENTRY CHAR(12) BAS(.THE-ENTRY); > DCL DD ENTRY-TAG BIN(2) DEF(THE-ENTRY) POS(1); > DCL DD ENTRY-TYPE BIN(2) DEF(THE-ENTRY) POS(3); > DCL DD ENTRY-COUNT BIN(4) DEF(THE-ENTRY) POS(5); > DCL DD ENTRY-VALUE BIN(4) DEF(THE-ENTRY) POS(9); > > DCL DD THE-TAG BIN(2); > DCL DD THE-TYPE BIN(2); > DCL DD THE-COUNT BIN(4); > DCL DD THE-VALUE BIN(4); > > ENTRY * (PARMS) EXT; > STPLLEN NBR-OF-PARMS; > > RESOLVE-TO-DECOMPRESSOR: > CPYBLA RESOLVE-TYPE, X'0201'; > CPYBLAP RESOLVE-NAME, "DCMP", " "; > CPYBLA RESOLVE-AUTH, X'0000'; > RSLVSP .DCMP, RESOLVE, *, *; > > OPEN-INPUT-FILE: > CPYBLA IFCB-LIBRARY, PARM-LIB; > CPYBLA IFCB-FILE, PARM-TIFF; > CPYBLA IFCB-MEMBER, PARM-TIFF; > CALLX .SEPT(OPEN-ENTRY), OPEN-I, *; > > CPYBWP .ODP, .IFCB-ODP; > ADDSPP .DCB, .ODP, ODP.DCB; > CPYNV GET-ENTRY, DCB-GET; > > CPYBWP .NULL, *; > CPYNV FILE-BLOCK, 1; > GET-INPUT-DATA: > CALLX .SEPT(GET-ENTRY), GET-OPERATION, *; > CPYBLA BLOCK(FILE-BLOCK), INBUF; > ADDN(SB) FILE-BLOCK, 1/POS(GET-INPUT-DATA); > > HAVE-DATA: > CALLX .SEPT(CLOSE-ENTRY), CLOSE-I, *; > > FIND-DIRECTORY: > SETSPP .BIN, TIFF-IFD-OFFSET; > CALLI ENDIAN-4, *, .ENDIAN; > ADDSPP .IFD, .FILE, BIN4; > > SETSPP .BIN, IFD-NBR-OF-ENTRIES; > CALLI ENDIAN-2, *, .ENDIAN; > CPYNV NBR-OF-ENTRIES, BIN2; > > CPYNV ENTRY-NBR, 0; > PARSE-ENTRY: > ADDN(S) ENTRY-NBR, 1; > SETSPP .THE-ENTRY, IFD-ENTRY(ENTRY-NBR); > > GET-TAG: > SETSPP .BIN, ENTRY-TAG; > CALLI ENDIAN-2, *, .ENDIAN; > CPYNV THE-TAG, BIN2; > > GET-TYPE: > SETSPP .BIN, ENTRY-TYPE; > CALLI ENDIAN-2, *, .ENDIAN; > CPYNV THE-TYPE, BIN2; > > GET-COUNT: > SETSPP .BIN, ENTRY-COUNT; > CALLI ENDIAN-4, *, .ENDIAN; > CPYNV THE-COUNT, BIN4; > > GET-VALUE: > SETSPP .BIN, ENTRY-VALUE; > CMPNV(B) THE-TYPE, 3/NEQ(=+3); > CALLI ENDIAN-2, *, .ENDIAN; /* SHORT INT */ > CPYNV(B) THE-VALUE, BIN2/NNEG(=+3);: > CALLI ENDIAN-4, *, .ENDIAN; /* ALL OTHERS */ > CPYNV THE-VALUE, BIN4;: > > PERFORM-ACTION-FOR-TAG: > CMPNV(B) THE-TAG, H'0100'/NEQ(=+2); > CPYNV(B) ROW-WIDTH, THE-VALUE/POS(NEXT-ENTRY);: > > CMPNV(B) THE-TAG, H'0101'/NEQ(=+2); > CPYNV(B) NBR-OF-ROWS, THE-VALUE/POS(NEXT-ENTRY);: > > CMPNV(B) THE-TAG, H'0103'/NEQ(=+2); > CMPNV(B) THE-VALUE, 4/NEQ(INVALID-FILE);: > > CMPNV(B) THE-TAG, H'0111'/NEQ(=+2); > ADDSPP .SOURCE, .FILE, THE-VALUE;: > > CMPNV(B) THE-TAG, H'0116'/NEQ(=+2); > CMPNV(B) NBR-OF-ROWS, THE-VALUE/NEQ(INVALID-FILE);: > > CMPNV(B) THE-TAG, H'0117'/NEQ(=+2); > CMPNV(B) THE-COUNT, 1/NEQ(INVALID-FILE);: > > CMPNV(B) THE-TAG, H'011A'/NEQ(=+4); > CALLI GET-RATIONAL, *, .RATIONAL; > CPYNV X-NUMERATOR, NUMERATOR; > CPYNV(B) X-DENOMINATOR, DENOMINATOR/POS(NEXT-ENTRY);: > > CMPNV(B) THE-TAG, H'011B'/NEQ(=+4); > CALLI GET-RATIONAL, *, .RATIONAL; > CPYNV Y-NUMERATOR, NUMERATOR; > CPYNV(B) Y-DENOMINATOR, DENOMINATOR/POS(NEXT-ENTRY);: > > CMPNV(B) THE-TAG, H'0128'/NEQ(=+2); > CPYNV(B) UNITS, THE-VALUE/POS(NEXT-ENTRY);: > > NEXT-ENTRY: > CMPNV(B) ENTRY-NBR, NBR-OF-ENTRIES/LO(PARSE-ENTRY); > > SETUP-DECOMPRESSOR: > CPYBREP TIME-USED, X'00'; > CPYBLA FIRST-TIME, "Y"; > CPYBLA DEBUG-ON, "N"; > > CMPNV(B) NBR-OF-PARMS, 3/NEQ(SETUP-OUTPUT); > CPYBLA DEBUG-ON, "Y"; > CPYBLA DEBUG-LIB, PARM-LIB; > CPYBLA DEBUG-FILE, PARM-DEBUG; > CPYBLA DEBUG-MBR, PARM-DEBUG;: > > SETUP-OUTPUT: > CALLI PREPARE-OUTPUT, *, .OUTPUT; > CPYNV ROOM-LEFT, 256; > SUBN(B) TO, 513, ROOM-LEFT/POS(DECOMPRESS-A-ROW); > > GET-AVAILABLE: > ADDN AVAILABLE, BYTE-WIDTH, 1; > SUBN(S) AVAILABLE, FROM; > CPYNV(B) TO-MOVE, AVAILABLE/ZER(DECOMPRESS-A-ROW); > CMPNV(B) TO-MOVE, ROOM-LEFT/NHI(=+2); > CPYNV TO-MOVE, ROOM-LEFT;: > MOVE-BYTES: > CPYBLA OUT-BLOCK(TO:TO-MOVE), RESULT(FROM:TO-MOVE); > ADDN(S) FROM, TO-MOVE; > ADDN(S) TO, TO-MOVE; > > COMPUTE-ROOM-LEFT: > SUBN(B) ROOM-LEFT, 513, TO/POS(GET-AVAILABLE); > CALLX .SEPT(PUT-ENTRY), PUT-OPERATION, *; > CPYBREP OUTBUF, X'00'; > CPYNV(B) TO, 1/POS(COMPUTE-ROOM-LEFT); > > DECOMPRESS-A-ROW: > MATPRATR .PROCESS-ATTR, *, X'21'; > CPYBLA START-TIME, MAT-CPU-USED; > > CALLX .DCMP, DCMP, *; > CALLI UPDATE-TIME-USED, *, .UPDATE; > CPYNV FROM, 1; > CMPBLA(B) FIRST-TIME, "E"/NEQ(GET-AVAILABLE); > > DONE: > CALLX .SEPT(PUT-ENTRY), PUT-OPERATION, *; > > CLOSE-OUTPUT-FILE: > CALLX .SEPT(CLOSE-ENTRY), CLOSE-O, *; > > INVALID-FILE: > SHOW-TIME-USED: > MULT TIMESTAMP, TIME-USED-HI, TWO**32; > ADDN(S) TIMESTAMP, TIME-USED-LO; > DIV(R) MILLISECONDS, TIMESTAMP, 4096000; > CPYBLAP MSG-TEXT, "Milliseconds:", " "; > EDIT MSG-TEXT(16:9), MILLISECONDS, ZZZZZZZZ9; > CALLX .SEPT(4268), QMHSNDM, *; > RTX *; > > DCL DD BIN4-CHARS CHAR(4) BDRY(4); > DCL DD BIN4 BIN(4) DEF(BIN4-CHARS) POS(1); > > DCL DD BIN2-CHARS CHAR(2) BDRY(2); > DCL DD BIN2 BIN(2) DEF(BIN2-CHARS) POS(1); > > DCL DD BIN-ORIGINAL CHAR(4) BAS(.BIN); > DCL INSPTR .ENDIAN; > > ENTRY ENDIAN-4 INT; > CMPBLA(B) TIFF-BYTE-ORDER, X'4949'/EQ(INTEL-4); > CMPBLA(B) TIFF-BYTE-ORDER, X'4D4D'/NEQ(INVALID-FILE); > CPYBLA BIN4-CHARS, BIN-ORIGINAL; /* MOTOROLA */ > B .ENDIAN; > > INTEL-4: > CPYBLA BIN4-CHARS(1:1), BIN-ORIGINAL(4:1); > CPYBLA BIN4-CHARS(2:1), BIN-ORIGINAL(3:1); > CPYBLA BIN4-CHARS(3:1), BIN-ORIGINAL(2:1); > CPYBLA BIN4-CHARS(4:1), BIN-ORIGINAL(1:1); > B .ENDIAN; > > ENTRY ENDIAN-2 INT; > CMPBLA(B) TIFF-BYTE-ORDER, X'4949'/EQ(INTEL-2); > CMPBLA(B) TIFF-BYTE-ORDER, X'4D4D'/NEQ(INVALID-FILE); > CPYBLA BIN2-CHARS, BIN-ORIGINAL; /* MOTOROLA */ > B .ENDIAN; > > INTEL-2: > CPYBLA BIN2-CHARS(1:1), BIN-ORIGINAL(2:1); > CPYBLA BIN2-CHARS(2:1), BIN-ORIGINAL(1:1); > B .ENDIAN; > > DCL DD NUMERATOR BIN(4); > DCL DD DENOMINATOR BIN(4); > DCL INSPTR .RATIONAL; > ENTRY GET-RATIONAL INT; > ADDSPP .BIN, .FILE, THE-VALUE; > CALLI ENDIAN-4, *, .ENDIAN; > CPYNV NUMERATOR, BIN4; > > ADDSPP .BIN, .BIN, 4; > CALLI ENDIAN-4, *, .ENDIAN; > CPYNV(B) DENOMINATOR, BIN4/POS(.RATIONAL); > > DCL DD RESOLUTIONS CHAR(16); > DCL DD X-NUMERATOR BIN(4) DEF(RESOLUTIONS) POS( 1); > DCL DD X-DENOMINATOR BIN(4) DEF(RESOLUTIONS) POS( 5); > DCL DD Y-NUMERATOR BIN(4) DEF(RESOLUTIONS) POS( 9); > DCL DD Y-DENOMINATOR BIN(4) DEF(RESOLUTIONS) POS(13); > > DCL DD OUT-ENTRY CHAR(12) BDRY(8); > DCL DD OUT-ENTRY-BIN2 BIN(2) DEF(OUT-ENTRY) POS(9); > DCL DD OUT-ENTRY-BIN4 BIN(4) DEF(OUT-ENTRY) POS(9); > > DCL DD BYTE-WIDTH BIN(4); > DCL DD UNITS BIN(2); > > DCL DD ROOM-LEFT BIN(2); > DCL DD AVAILABLE BIN(2); > DCL DD TO-MOVE BIN(2); > DCL DD FROM BIN(2); > DCL DD TO BIN(2); > > DCL INSPTR .OUTPUT; > ENTRY PREPARE-OUTPUT INT; > OPEN-OUTPUT-FILE: > CPYBLA OFCB-LIBRARY, PARM-LIB; > CPYBLAP OFCB-FILE, "OUTTIFF", " "; > CPYBLA OFCB-MEMBER, OFCB-FILE; > CALLX .SEPT(OPEN-ENTRY), OPEN-O, *; > > CPYBWP .ODP, .OFCB-ODP; > ADDSPP .DCB, .ODP, ODP.DCB; > CPYNV PUT-ENTRY, DCB-PUT; > > INITIALIZE-OUTPUT-HEADER: > CPYBREP OUT-BLOCK, X'00'; > CPYBLA OUT-BYTE-ORDER, X'4D4D'; /* MM = MOTOROLA */ > CPYNV OUT-VERSION, 42; > CPYNV OUT-IFD-OFFSET, 8; > > CPYBLA OUT-IFD-ENTRY( 1), X'00FE00040000000100000000'; > > CPYBLA OUT-ENTRY, X'010000030000000100000000'; > CPYBRA OUT-ENTRY-BIN2, ROW-WIDTH ; > CPYBLA OUT-IFD-ENTRY( 2), OUT-ENTRY; > > CPYBLA OUT-ENTRY, X'010100030000000100000000'; > CPYBRA OUT-ENTRY-BIN2, NBR-OF-ROWS ; > CPYBLA OUT-IFD-ENTRY( 3), OUT-ENTRY; > > CPYBLA OUT-IFD-ENTRY( 4), X'010200030000000100010000'; > CPYBLA OUT-IFD-ENTRY( 5), X'010300030000000100010000'; > CPYBLA OUT-IFD-ENTRY( 6), X'010600030000000100000000'; > CPYBLA OUT-IFD-ENTRY( 7), X'011100040000000100000100'; > CPYBLA OUT-IFD-ENTRY( 8), X'011500030000000100010000'; > > CPYBLA OUT-ENTRY, X'011600030000000100000000'; > CPYBRA OUT-ENTRY-BIN2, NBR-OF-ROWS ; > CPYBLA OUT-IFD-ENTRY( 9), OUT-ENTRY; > > CPYBLA OUT-ENTRY, X'011700040000000100000000'; > ADDN BIN4, ROW-WIDTH, 7; > CPYBTRLS BYTE-WIDTH, BIN4, 3; > MULT OUT-ENTRY-BIN4, NBR-OF-ROWS, BYTE-WIDTH; > CPYBLA OUT-IFD-ENTRY(10), OUT-ENTRY; > > CPYBLA OUT-IFD-ENTRY(11), X'011A000500000001000000E0'; > CPYBLA OUT-IFD-ENTRY(12), X'011B000500000001000000E4'; > CPYBLA OUT-RESOLUTIONS, RESOLUTIONS; > > CPYBLA OUT-ENTRY, X'012800030000000100000000'; > CPYBRA OUT-ENTRY-BIN2, UNITS ; > CPYBLA OUT-IFD-ENTRY(13), OUT-ENTRY; > > CPYBLA OUT-IFD-ENTRY(14), X'013B000200000001000000F0'; > CPYNV OUT-IFD-ENTRIES, 14; > CPYBLA OUT-ARTIST, X'4C656966205376616C67616172640000'; > B .OUTPUT; /* L e i f S v a l g a a r d <0>*/ > > DCL SPCPTR .OFCB INIT(OFCB); > DCL DD OFCB CHAR(217) BDRY(16); > DCL SPCPTR .OFCB-ODP DEF(OFCB) POS( 1); > DCL SPCPTR .OFCB-OUTBUF DEF(OFCB) POS( 33); > DCL DD OFCB-FILE CHAR(10) DEF(OFCB) POS(129); > DCL DD OFCB-LIB-ID BIN(2) DEF(OFCB) POS(139) INIT(72); > DCL DD OFCB-LIBRARY CHAR(10) DEF(OFCB) POS(141); > DCL DD OFCB-MBR-ID BIN(2) DEF(OFCB) POS(151) INIT(73); > DCL DD OFCB-MEMBER CHAR(10) DEF(OFCB) POS(153); > DCL DD OFCB-FLAGS-1 CHAR(1) DEF(OFCB) POS(175) INIT(X'80'); > DCL DD OFCB-FLAGS-2 CHAR(1) DEF(OFCB) POS(176) INIT(X'10'); > DCL DD OFCB-RECORD-ID BIN (2) DEF(OFCB) POS(209) INIT(1); > DCL DD OFCB-RECORD-LENGTH BIN (2) DEF(OFCB) POS(211) INIT(512); > DCL DD OFCB-CLEAR-ID BIN (2) DEF(OFCB) POS(213) INIT(8); > DCL DD OFCB-CLEAR-YES CHAR(1) DEF(OFCB) POS(215) INIT(X'80'); > DCL DD OFCB-NO-MORE-PARMS BIN (2) DEF(OFCB) POS(216) INIT(32767); > > DCL OL OPEN-O (.OFCB) ARG; > DCL OL CLOSE-O(.OFCB) ARG; > > DCL DD PUT-ENTRY BIN(2); > DCL DD OUTBUF CHAR(512) BAS(.OFCB-OUTBUF); > DCL DD OUT-BLOCK CHAR(512) DEF(OUTBUF) POS(1); > DCL DD OUT-BYTE-ORDER CHAR(2) DEF(OUT-BLOCK) POS(1); > DCL DD OUT-VERSION BIN(2) DEF(OUT-BLOCK) POS(3); > DCL DD OUT-IFD-OFFSET BIN(4) DEF(OUT-BLOCK) POS(5); > DCL DD OUT-IFD-ENTRIES BIN(2) DEF(OUT-BLOCK) POS(9); > DCL DD OUT-IFD-ENTRY(14) CHAR(12) DEF(OUT-BLOCK) POS(11); > DCL DD OUT-RESOLUTIONS CHAR(16) DEF(OUT-BLOCK) POS(H'E1'); > DCL DD OUT-ARTIST CHAR(16) DEF(OUT-BLOCK) POS(H'F1'); > > DCL DD PUT-OPTION BIN(4) INIT(H'10000005'); > DCL SPCPTR .PUT-OPTION INIT(PUT-OPTION); > DCL OL PUT-OPERATION(.OFCB, .PUT-OPTION, .NULL); > > DCL SPCPTR .PROCESS-ATTR INIT(PROCESS-ATTR); > DCL DD PROCESS-ATTR CHAR(20) BDRY(16); > DCL DD MAT-MAX-SIZE BIN(4) DEF(PROCESS-ATTR) POS( 1) INIT(20); > DCL DD MAT-ACT-SIZE BIN(4) DEF(PROCESS-ATTR) POS( 5); > DCL DD MAT-CPU-USED CHAR(8) DEF(PROCESS-ATTR) POS(13); > > DCL DD TIMESTAMP PKD(21,0); > DCL DD TIMESTAMP-HI PKD(11,0); > DCL DD TIMESTAMP-LO PKD(11,0); > DCL DD TWO**32 PKD(11,0) INIT(P'4294967296'); > DCL DD MILLISECONDS PKD(09,0); > > DCL DD START-TIME CHAR(8); > DCL DD TIME-USED CHAR(8); > DCL DD TIME-USED-HI BIN(4) UNSGND DEF(TIME-USED) POS(1); > DCL DD TIME-USED-LO BIN(4) UNSGND DEF(TIME-USED) POS(5); > > DCL INSPTR .UPDATE; > ENTRY UPDATE-TIME-USED INT; > MATPRATR .PROCESS-ATTR, *, X'21'; > ADDLC(S) TIME-USED, MAT-CPU-USED; > SUBLC(S) TIME-USED, START-TIME; > B .UPDATE; > > DCL DD ZZZZZZZZ9 CHAR(13) INIT(X'B140AEAEB2B2B2B2B2B2B2B2AA'); > > DCL SPCPTR .MSG-ID INIT(MSG-ID); > DCL DD MSG-ID CHAR (7) INIT(" "); > > DCL SPCPTR .MSG-FILE INIT(MSG-FILE); > DCL DD MSG-FILE CHAR(20) INIT(" "); > > DCL SPCPTR .MSG-TEXT INIT(MSG-TEXT); > DCL DD MSG-TEXT CHAR(70); > > DCL SPCPTR .MSG-SIZE INIT(MSG-SIZE); > DCL DD MSG-SIZE BIN( 4) INIT(70); > > DCL SPCPTR .MSG-TYPE INIT(MSG-TYPE); > DCL DD MSG-TYPE CHAR(10) INIT("*INFO"); > > DCL SPCPTR .MSG-QS INIT(MSG-QS); > DCL DD MSG-QS CHAR(20) INIT("*REQUESTER"); > > DCL SPCPTR .MSG-QSN INIT(MSG-QSN); > DCL DD MSG-QSN BIN( 4) INIT(1); > > DCL SPCPTR .REPLY-Q INIT(REPLY-Q); > DCL DD REPLY-Q CHAR(20) INIT(" "); > > DCL SPCPTR .MSG-KEY INIT(MSG-KEY); > DCL DD MSG-KEY CHAR( 4); > > DCL SPCPTR .ERR-CODE INIT(ERR-CODE); > DCL DD ERR-CODE BIN( 4) INIT(0); > > DCL OL QMHSNDM (.MSG-ID, .MSG-FILE, .MSG-TEXT, .MSG-SIZE, > .MSG-TYPE, .MSG-QS, .MSG-QSN, .REPLY-Q, > .MSG-KEY, .ERR-CODE) ARG; > > _______________________________________________ > This is the MI Programming on the AS400 / iSeries (MI400) mailing list > To post a message email: MI400@midrange.com > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/cgi-bin/listinfo/mi400 > or email: MI400-request@midrange.com > Before posting, please take a moment to review the archives > at http://archive.midrange.com/mi400.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.