星期二, 10月 31, 2023

2001-03-16 如何於 RPG IV 中直接取得系統資訊 ?



如何於 RPG IV 中直接取得系統資訊 ?

FILE : QRPGLESRC
Member: RTVOSVERR

     H DEBUG  OPTION(*SRCSTMT:*NODEBUGIO)
     H BNDDIR('QC2LE') DFTACTGRP(*NO) ACTGRP(*CALLER)
      * dbgview(*list)

     DsndMsg           pr
     D msgText                       80    const

     D matmatr         PR                  EXTPROC('matmatr')
     D   attributes                    *   VALUE
     D   attrLen                      5I 0 VALUE

      * Reference from QSYSINC/MIH(MATAMATR)
     D machineAttributes...
     D                 DS                  INZ
     D   MMTR_Template_Size...
     D                               10I 0
     D   MMTR_Bytes_Used...
     D                               10I 0
     D   MMTR_VPD                  4096

      * Reference from QSYSINC/MIH(MATAMATR)
      * typedef struct _MMTR_012C_T {        /* Vital Product Data */
     D VPDOffsets      DS                  INZ
     D  vRes1                         8
     D  vMemOff                      10i 0
     D  vPrcOff                      10i 0
     D  vColOff                      10i 0
     D  vCecOff                      10i 0
     D  vPnlOff                      10i 0
     D  vRes2                        12
     D  vMemInstalled                 5i 0
     D  vMemRequired                  5i 0
      * char              reserved3[12];                         @A3C */
      * _MEM_VPD_T        Mem_Array[16]; /* 1024 bytes memory info    */
      * _PROC_VPD_T      Proc_Array[16]; /* 1280 bytes processor info */
      * _COL_VPD_T       Col_Array[2]; /* 1=>reserved 2=>columis @A2C */
      * _CEC_VPD_T        CEC_Info;
      * _PANEL_VPD_T      Panel_Info;
      * } _MMTR_012C_T;

      * Reference from QSYSINC/MIH(MATAMATR)
      * typedef struct _CEC_VPD_T {        /* VPD Info */
     d cecVPD          DS                  INZ
     d  cCEC_read                     4
     d  cManufacturin                 4
     d  creserved1                    4
     d  cType                         4
     d  cModel                        4
     d  cPseudo_Model                 4
     d  cGroup_Id                     4
     d  creserved2                    4
     d  cSys_Type_Ext                 1
     d  cFeature_Code                 4
     d  cSerial_No                   10
     d  creserved3                    1
      * } _CEC_VPD_T;

      * typedef struct _PANEL_VPD_T {        /* panel info */
     d panelVPD        DS                  INZ
     d  preserved1                    2
     d  pPanel_Type                   4
     d  pModel                        3
     d  pPart                        12
     d  preserved2                    4
     d  pManufacturin                 4
     d  pROS_Part                    12
     d  pROS_Card                    10
     d  pROS_ID                       1
     d  pROS_Flag                     1
     d  pROS_Fix                      1
     d  pSerial_No                   10
      * } _PANEL_VPD_T;

     D $MMTR_SERIAL_   S              5I 0 INZ(4)

      * Reference from QSYSINC/MIH(MATAMATR)
     D $MMTR_VPD_      S              5i 0 INZ(x'012c')

     D prErrStruc      DS                  inz
     D  prErrSSize                   10i 0 inz(%len(prErrStruc))
     D  PrErrSUse                    10i 0
     D  prErrSmsgID                   7
     D  prErrSResrv                   1
     D  prErrSData                   80

     d prRcvr          s            128
     d prRcvrLen       s             10i 0 inz(%size(prRcvr))
     d prFormat        s              8    inz('PRDR0100')
     d prPrdInfo       s             27    inz('*OPSYS *CUR  0000*CODE    ')
     d prErr           s                   like(prErrStruc)
     d prRelease       s              6

      * /*-- get system info --*/
     C                   EVAL      MMTR_Template_Size = %SIZE(machineAttributes)
     C                   CALLP     matmatr( %ADDR(machineAttributes) :
     C                                      $MMTR_VPD_ )
      * /*-- get OS/400 version --*/
     c                   eval      VPDOffsets = %subst(MMTR_VPD:
     c                                                 1:
     c                                                 %len(VPDOffsets))
     c                   eval      cecVPD   = %subst(MMTR_VPD:
     c                                               vCecOff-7:
     c                                               %len(cecVPD))
     c                   eval      panelVPD = %subst(MMTR_VPD:
     c                                               vPnlOff-7:
     c                                               %len(panelVPD))

     C                   eval      prErr = prErrStruc
     c                   call      'QSZRTVPR'
     c                   parm                    prRcvr
     c                   parm                    prRcvrLen
     c                   parm                    prFormat
     c                   parm                    prPrdInfo
     c                   parm                    prErr
     C                   eval      prErrStruc = prErr
     C                   eval      prRelease  = %subst(prRcvr: 20: 6)
     c                   callp     sndMsg('Type '     + %trim(cType) +
     c                                    ' model '   + %trim(cModel) +
     c                                    ' prc grp ' + %trim(cGroup_ID) +
     c                                    ' fc '      + %trim(cFeature_Code) +
     c                                    ' serial '  + %trim(cSerial_No) +

     c                                    ' '         + %trim(
     c                                                    %editc(vMemInstalled :
     c                                                      'Z')) + ' meg' +
     c                                    ' rel '     + %trim(prRelease)
     c                                   )

     C                   eval      *InLr = *on
     C                   return

     PsndMsg           b
     DsndMsg           pi
     D inpText                       80    const

      * Send message API parameters
     D msgID           s              7    inz('CPF9898')
     D msgFil          s             20    inz('QCPFMSG   *LIBL     ')
     D msgData         s                   like(inpText)
     D msgDataLen      s             10i 0 inz(%size(msgData))
     D msgType         s             10    inz('*INFO')
     D msgStackEnt     s             10    inz('*')
     D msgStackCnt     s             10i 0 inz(3)
     D msgKey          s              4
     D msgErrStruc     s                   like(ErrStruc)

      * API error structure
     D errStruc        DS                  inz
     D  errSSize                     10i 0 inz(%len(errStruc))
     D  errSUse                      10i 0
     D  errSmsgID                     7
     D  errSResrv                     1
     D  errSData                     80

     C                   eval      msgData = inpText
     C                   eval      msgErrStruc = errStruc

     C                   Call      'QMHSNDPM'
     C                   Parm                    msgID
     C                   Parm                    msgFil
     C                   Parm                    msgData
     C                   Parm                    msgDataLen
     C                   Parm                    msgType
     C                   Parm                    msgStackEnt
     C                   Parm                    msgStackCnt
     C                   Parm                    msgKey
     C                   Parm                    msgErrStruc

     C                   Eval      errStruc = msgErrStruc

     PsndMsg           e

      

參考資訊

     ?* -----------------------------------------------------------------------------------*
     ?* The program perform retrieving OS Version information                              *
     ?* and use two system API as following:                                               *
     ?*                                                                                    *
     ?* 1.MI Library Reference : Materialize Machine Attributes (MATMATR)                  *
     ?*   http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/QBJADR00/1.63                *
     ?*   Data structure refered from QSYSINC/MIH(MATAMATR)                                *
     ?*                                                                                    *
     ?* 2.Retrieve Product Information (QSZRTVPR) API                                      *
     ?* http://publib.boulder.ibm.com/pubs/html/as400/v4r5m1/ic2924/info/apis/qszrtvpr.htm *
     ?*                                                                                    *
     ?*------------------------------------------------------------------------------------*

沒有留言: