* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "If it's squinky, then you know it's BrilligWare!" * * * * * * * * Source available at www.brilligware.com * * * * Brillig Enterprises (aka Chris Pando) (c)2006 * * * * * * * * This work is licensed under a Creative Commons * * * * Attribution-NonCommercial-ShareAlike License: * * * * http://creativecommons.org/licenses/by-nc-sa/2.0/legalcode * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Load Array With Stack Entries * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * hactgrp(*caller) dftactgrp(*no) bnddir('QC2LE') * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... procedure interfaces ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * entry procedures * d cp0210r pr d cp0210r pi * * external procedures (from the C run-time library) * d memcpy pr ExtProc('memcpy') d * Value d * Value d 10i 0 Value * * external programs * d rcvStk pr ExtPgm('QWVRCSTK') d 32766a d 10i 0 d 8a d 56a d 8a d 256a * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... data structures ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * d jobID ds d 10a Inz('* ') d 10a d 6a d 16a d 2a Inz(x'0000') d 10i 0 Inz(2) d 8a Inz(x'0000000000000000') d errDS ds d errPrv 10u 0 Inz(%Size(errDS)) d errAvl 10u 0 d errMSGID 7a d 1a Inz(x'00') d errDta 240a d ds Based(hdr@) d detOSet 13 16b 0 d count 17 20b 0 d ds Based(det@) d csLen 1 4b 0 d csProcOSet 13 16b 0 d csProcLen 17 20b 0 d csProg 25 34a d proc ds Based(proc@) Qualified d procNameLen Like(csProcLen) d procName 1a d prog ds Qualified d progname 10a d proc@ * Inz(*Null) d @prog ds LikeDS(prog) Dim(100) d Inz(*LikeDS) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ... standalone variables ... * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * d rcvrVar s 32766a d rcvrVarLen s 10i 0 Inz(%Len(rcvrVar)) d fmt1 s 8a Inz('CSTK0100') d fmt2 s 8a Inz('JIDF0100') d $I s 3i 0 Inz(1) d hdr@ s * Inz(%Addr(rcvrVar)) d det@ s * d csProcLenLen s Like(csProcLen) Inz(%Len(csProcLen)) d debug s 1024a Based(debug@) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Mainline * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /free *InLR = *On; rcvStk( rcvrVar : rcvrVarLen : fmt1 : jobID : fmt2 : errDS ); det@ = hdr@ + detOSet; DoU ($I > count Or $I > 100); @prog($I).progName = csProg; If ( csProcOSet <> 0 ); proc@ = %Alloc(csProcLenLen + csProcLen); @prog($I).proc@ = proc@; proc.procNameLen = csProcLen; memcpy( %Addr(proc.procName) : det@ + csProcOset : csProcLen ); EndIf; $I = $I + 1; det@ = det@ + csLen; EndDo; Return; /end-free