Sign in

docs Examples

listmember

listmember

**free
dcl-pi *n;
  //parameters in CREATE FUNCTION (INPUT)
  INlib  char(10);
  inFile char(10);
  INmbr  char(10);
  //parameters in CREATE FUNCTION (OUTPUT)
  OUTname CHAR(10);
  OUTtype CHAR(10);
  OUTdatcrt Date;
  OUTdatchg Date;
  OUTtext char(50);
  // null values indicators (IN)
  INlib_i  int(5);
  INfile_i int(5);
  INmbr_i  int(5);
  // null values indicators (OUT)
  OUTname_i int(5);
  OUTtype_i int(5);
  OUTdatcrt_i int(5);
  OUTdatchg_i  int(5);
  OUTtext_i int(5);
  // parameters STYLE SQL
  SQLSTATE CHAR(5);
  qual_function varchar(571);
  name_function varchar(128);
  diag_msg varchar(80);
  call_type int(10);
end-pi;
// Create USer Space
dcl-s USRSPC    CHAR(20)  inz('LISTMBR   QTEMP');
dcl-pr QUSCRTUS  EXTPGM('QUSCRTUS');
  USname  CHAR(20)   CONST;
  USattribut CHAR(50) CONST;
  USsize   INt(10) CONST;
  UScontenu CHAR(1) CONST;
  USaut  CHAR(10)  CONST;
  UStext CHAR(50)   CONST;
  USreplace CHAR(10)  CONST;
  USerrcode  likeds(errcodeDS);
end-pr;
// Delete USer Space
dcl-pr QUSDLTUS  EXTPGM('QUSDLTUS');
  USname  CHAR(20)   CONST;
  USerrcode  likeds(errcodeDS);
end-pr;
// Retreive Pointer
dcl-pr QUSPTRUS  EXTPGM('QUSPTRUS');
  USname  CHAR(20)   CONST;
  ptr Pointer;
END-PR;

// API members list
dcl-pr QUSLMBR  EXTPGM('QUSLMBR');
  USname  CHAR(20)   CONST;
  Format    CHAR(8) CONST;
  ficlib  CHAR(20) CONST;
  Member  CHAR(10) CONST;
  OVRDBF  ind  CONST;
end-pr;

// various fields
Dcl-s ptr  Pointer;
dcl-s i Int(10);
// header
dcl-s ptrinfos  Pointer;
dcl-ds RTVINF  based(ptrinfos);
  offset  int(10);
  size   int(10);
  elem_count int(10);
  elem_len int(10);
end-ds;

// list
dcl-s ptrlist Pointer;
Dcl-ds member based(ptrlist) qualified;
  name CHAR(10);
  type CHAR(10);
  DatCrt CHAR(7);
  TimCrt  CHAR(6);
  DatChg  CHAR(7);
  TimChg CHAR(6);
  text CHAR(50);
End-DS;
Dcl-ds errcodeDS  qualified;
  sizeDS   INt(10) inz(%size(errcodeDS));
  sizeneeded Int(10);
  msgID CHAr(7);
  reserved CHAR(1);
  errdta  CHar(50);
End-ds;

// main code
if call_type < 0 ;
  // fisrt call
  SQLSTATE = '00000'  ;
  // create list
  QUSCRTUS(usrspc: *Blanks: 1024: x'00': '*USE':
           'Liste des membres': '*YES' : errcodeDS);
  Monitor;
    // list the source file members, accept OVRDBF
    QUSLMBR(usrspc: 'MBRL0200': INfile + INlib
            : INmbr: *ON);
  on-error;
    SQLSTATE = '38I00';
    diag_msg = 'unable to generate list';
    return;
  endmon;
  // retreive pointeur
  QUSPTRUS(usrspc : ptr);
  ptrinfos = ptr + 124;

  // first element
  ptrlist = ptr + offset;
  return;
  elseif    call_type = 0 ;
i+=1;
  if i<=elem_count;
  //  "normal" call , return One member
    OUTname = member.name;
    OUTtype = member.type;
    Monitor;
    OUTdatcrt = %date(member.datcrt : *CYMD0);
      on-error *all;
    OUTdatcrt_i = -1;
      Endmon;
    Monitor;
    OUTdatchg = %date(member.datchg : *CYMD0);
      on-error *all;
    OUTdatchg_i = -1;
      Endmon;
    OUTtext = member.text;

    if i<elem_count;
      //next element
      ptrlist = ptrlist + elem_len;
    endif;
    else;
  // End OF List
    SQLSTATE = '02000';
    *INLR = *on;
  endif;
  return;
  else;
// final call, cleanup
  QUSDLTUS(usrspc: errcodeDS) ;
  *inlr = *on;
endif;