× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: Re: MI programmers list? Interested?
  • From: leif@xxxxxxxxxxxxx
  • Date: Sun, 7 Nov 1999 07:56:44 -0600


----- Original Message -----
From: <James_Turnbull@kaz.com.au>
To: <MIDRANGE-L@midrange.com>
Sent: Saturday, November 06, 1999 9:48 PM
Subject: Re: MI programmers list? Interested?


> I have always been interested in learning about the dark arts, MI that is.
> Count me in also.  Do we have anyone on the list with MI experience?  For
that
> matter is there an MI compiler and how do MI objects work?

Every AS/400 has an MI-compiler built in.
All you need is a program to pass your source text to it.
The following RPG program will generate (when run)
such a wrapper program:

     /*================================================================
      * This program creates MI compiler CRTMI in *CURLIB.            =
      * Source statements for the MI compiler are found in array MI.  =
      *================================================================
     E                    MI      1 171 80
     I            DS
     I                                    B   1   40#SRCLN
     I I            'CRTMI     QGPL'          5  24 #PGMLB
     I                                       25  74 #TEXT
     I I            'QMISRC    QGPL'         75  94 #SRCFL
     I I            'CRTMI'                  95 104 #MBR
     I                                      105 117 #CHGDT
     I                                      105 105 #CENT
     I                                      106 107 #YY
     I                                      108 111 #MMDD
     I                                      112 117 #HMS
     I                                      118 137 #PRTFL
     I                                    B 138 1410#STRPG
     I                                      142 151 #AUT
     I                                      152 327 #OP
     I                                    B 328 3310#NOOPT
     C                     CALL 'QPRCRTPG'
     C                     PARM           MI
     C                     PARM 13680     #SRCLN
     C                     PARM           #PGMLB
     C                     PARM 'MI Comp' #TEXT
     C                     PARM           #SRCFL
     C                     PARM           #MBR
     C                     PARM           #CHGDT
     C                     PARM ' '       #PRTFL
     C                     PARM 0         #STRPG
     C                     PARM '*USE'    #AUT
     C                     PARM ' '       #OP
     C                     PARM 0         #NOOPT
     C                     MOVE *ON       *INLR
**                                                             */
DCL SPCPTR .MBR PARM;
DCL SPCPTR .FIL PARM;
DCL SPCPTR .DET PARM;
DCL OL *ENTRY (.MBR, .FIL, .DET) PARM EXT MIN(1);
DCL DD MBR CHAR(10) BAS(.MBR);
DCL DD FIL CHAR(10) BAS(.FIL);
DCL DD DET CHAR(10) BAS(.DET);

DCL SPC PCO  BASPCO;
    DCL SPCPTR .PCO DIR;

DCL SPC SEPT BAS(.PCO);
    DCL SPCPTR .SEPT(2000) DIR;

DCL SPCPTR .UFCB INIT(UFCB);
DCL DD UFCB CHAR(214) BDRY(16);
    DCL SPCPTR .ODP           DEF(UFCB) POS(  1);
    DCL SPCPTR .INBUF         DEF(UFCB) POS( 17);
    DCL SPCPTR .OUTBUF        DEF(UFCB) POS( 33);
    DCL SPCPTR .OPEN-FEEDBACK DEF(UFCB) POS( 49);
    DCL SPCPTR .IO-FEEDBACK   DEF(UFCB) POS( 65);
    DCL SPCPTR .NEXT-UFCB     DEF(UFCB) POS( 81);

    DCL DD *         CHAR(32) DEF(UFCB) POS( 97);
    DCL DD FILE      CHAR(10) DEF(UFCB) POS(129) INIT("QMISRC");
    DCL DD LIB-ID    BIN ( 2) DEF(UFCB) POS(139) INIT(-75);
    DCL DD LIBRARY   CHAR(10) DEF(UFCB) POS(141) INIT("*LIBL");
    DCL DD MBR-ID    BIN ( 2) DEF(UFCB) POS(151) INIT( 73);
    DCL DD MEMBER    CHAR(10) DEF(UFCB) POS(153);

    DCL DD ODP-DEVICE-NAME    CHAR(10) DEF(UFCB) POS(163);
    DCL DD ODP-DEVICE-INDEX   BIN ( 2) DEF(UFCB) POS(173);

    DCL DD FLAGS-PERM-80      CHAR( 1) DEF(UFCB) POS(175) INIT(X'80');
    DCL DD FLAGS-GET-20       CHAR( 1) DEF(UFCB) POS(176) INIT(X'20');
    DCL DD REL-VERSION        CHAR( 4) DEF(UFCB) POS(177) INIT("0100");
    DCL DD INVOC-MARK-COUNT   BIN ( 4) DEF(UFCB) POS(181);
    DCL DD MORE-FLAGS         CHAR( 1) DEF(UFCB) POS(185) INIT(X'00');
    DCL DD *                  CHAR(23) DEF(UFCB) POS(186);

    DCL DD RECORD-PARAM       BIN ( 2) DEF(UFCB) POS(209) INIT(1);
    DCL DD RECORD-LENGTH      BIN ( 2) DEF(UFCB) POS(211) INIT(92);

    DCL DD NO-MORE-PARAMS     BIN ( 2) DEF(UFCB) POS(213) INIT(32767);

DCL SPC ODP BAS(.ODP);
    DCL DD *          CHAR(16) DIR;
    DCL DD DEV-OFFSET BIN ( 4) DIR;

DCL SPCPTR .DMDEV;
DCL SPC     DMDEV BAS(.DMDEV);
    DCL DD MAX-DEVICE      BIN ( 2) DIR;
    DCL DD NBR-DEVICES     BIN ( 2) DIR;
    DCL DD DEVICE-NAME     CHAR(10) DIR;
    DCL DD WORKAREA-OFFSET BIN ( 4) DIR;
    DCL DD WORKAREA-LENGTH BIN ( 4) DIR;
    DCL DD LUD-PTR-INDEX   BIN ( 2) DIR;
    DCL DD DM-GET          BIN ( 2) DIR;

DCL SPCPTR .GETOPT INIT(GETOPT);
DCL DD      GETOPT CHAR(4);
    DCL DD  GET-OPTION-BYTE CHAR(1) DEF(GETOPT) POS(1) INIT(X'03');
    DCL DD  GET-SHARE-BYTE  CHAR(1) DEF(GETOPT) POS(2) INIT(X'00');
    DCL DD  GET-DATA-BYTE   CHAR(1) DEF(GETOPT) POS(3) INIT(X'00');
    DCL DD  GET-DEVICE-BYTE CHAR(1) DEF(GETOPT) POS(4) INIT(X'01');

DCL SPCPTR .NULL;
DCL OL GET  (.UFCB, .GETOPT, .NULL);
DCL OL OPEN (.UFCB);
DCL OL CLOSE(.UFCB);

DCL SPC INBUF BAS(.INBUF);
    DCL DD INBUF-DATE CHAR(12) DEF(INBUF) POS( 1);
    DCL DD INBUF-LINE CHAR(80) DEF(INBUF) POS(13);

DCL SPCPTR .SOURCE;
DCL DD LINE(10000) CHAR(80) AUTO;
DCL DD LINE-NBR BIN(2);

DCL SPCPTR .SIZE INIT(SIZE);
DCL DD      SIZE BIN(4);

DCL SPCPTR .PGM INIT(PGM);
DCL DD      PGM CHAR(20);
    DCL DD PGM-NAME  CHAR(10) DEF(PGM) POS( 1);
    DCL DD PGM-LIB   CHAR(10) DEF(PGM) POS(11) INIT("*CURLIB");

DCL SPCPTR .PGM-TEXT INIT(PGM-TEXT);
DCL DD      PGM-TEXT CHAR(50) INIT(" ");

DCL SPCPTR .PGM-SRCF INIT(PGM-SRCF);
DCL DD      PGM-SRCF CHAR(20) INIT("*NONE");

DCL SPCPTR .PGM-SRCM INIT(PGM-SRCM);
DCL DD      PGM-SRCM CHAR(10) INIT(" ");

DCL SPCPTR .PGM-SRCD INIT(PGM-SRCD);
DCL DD      PGM-SRCD CHAR(13) INIT(" ");

DCL SPCPTR .PRTF-NAME INIT(PRTF-NAME);
DCL DD      PRTF-NAME CHAR(20);
    DCL DD PRTF-FILE CHAR(10) DEF(PRTF-NAME) POS( 1) INIT("QSYSPRT ");
    DCL DD PRTF-LIB  CHAR(10) DEF(PRTF-NAME) POS(11) INIT("*LIBL   ");

DCL SPCPTR .PRT-STRPAG INIT(PRT-STRPAG);
DCL DD      PRT-STRPAG BIN(4) INIT(1);

DCL SPCPTR .PGM-PUBAUT INIT(PGM-PUBAUT);
DCL DD      PGM-PUBAUT CHAR(10) INIT("*ALL");

DCL SPCPTR .PGM-OPTS INIT(PGM-OPTS);
DCL DD      PGM-OPTS(16) CHAR(11) INIT(
    *(1)(1)"*REPLACE   ", *(2)(1)"*NOCLRPSSA ", *(3)(1)"*NOCLRPASA ",
    *(4)(1)"*NOSUBSCR  ", *(5)(1)"*NOSUBSTR  ", *(6)(1)"*LIST      ",
    *(7)(1)"*ATR       ", *(8)(1)"*XREF      ");

DCL SPCPTR .NBR-OPTS INIT(NBR-OPTS);
DCL DD      NBR-OPTS BIN(4);

DCL OL QPRCRTPG (.SOURCE, .SIZE, .PGM,   .PGM-TEXT,  .PGM-SRCF,
                 .PGM-SRCM,   .PGM-SRCD, .PRTF-NAME, .PRT-STRPAG,
                 .PGM-PUBAUT, .PGM-OPTS, .NBR-OPTS) ARG;

DCL SYSPTR .QPRCRTPG INIT("QPRCRTPG", CTX("QSYS"), TYPE(PGM));

DCL DD NBR-PARMS BIN(2);
DCL EXCM * EXCID(H'5001') BP(EOF)   IMD;
/* DCL EXCM * EXCID(H'6301') BP(ERROR) IMD; */

/****************************************************************/

ENTRY * (*ENTRY) EXT;
    CPYNV        LINE-NBR, 1;
    CPYBWP      .NULL, *;
    STPLLEN      NBR-PARMS;
    CPYNV        NBR-OPTS,  6; /* YES: *LIST; NO: *ATR, *XREF */
    CMPNV(B)     NBR-PARMS, 3/NEQ(OPEN-SOURCE);
    CMPBLA(B)    DET, <10|*DETAIL   >/EQ(YES-DETAIL);
    CMPBLA(B)    DET, <10|*NOLIST   >/EQ(NO-LIST);
    B            OPEN-SOURCE;
YES-DETAIL: CPYNV(B) NBR-OPTS, 8/NNAN(OPEN-SOURCE);
NO-LIST:    CPYNV(B) NBR-OPTS, 5/NNAN(OPEN-SOURCE);

OPEN-SOURCE:
    CPYBLAP      FILE, "QMISRC", " ";
    CMPNV(B)     NBR-PARMS, 1 /EQ(SET-MEMBER);
    CPYBLA       FILE, FIL;
SET-MEMBER:
    CPYBLA       MEMBER, MBR;
    CPYBLA       PGM-NAME, MBR;
    CALLX       .SEPT(12), OPEN, *;
    ADDSPP      .DMDEV, .ODP, DEV-OFFSET;

NEXT-SOURCE-RECORD:
    CALLX       .SEPT(DM-GET), GET, *;
    CPYBLA       LINE(LINE-NBR), INBUF-LINE;
    ADDN(S)      LINE-NBR, 1;
    B            NEXT-SOURCE-RECORD;
EOF:
    CALLX       .SEPT(11), CLOSE, *;
    CPYBLAP      LINE(LINE-NBR), <23|/*'/*'/*"/*"*/; PEND;;;>, " ";
    MULT         SIZE, LINE-NBR, 80;
    SETSPP      .SOURCE, LINE;
    BRK "1";
    CALLX       .QPRCRTPG, QPRCRTPG, *;
    RTX          *;

ERROR:
    RTX          *;

PEND;


+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.