User Tools

Site Tools


check_object_lock

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

check_object_lock [2019/03/18 10:45] (current)
mihael created
Line 1: Line 1:
 +====== Check Object Lock ======
 +
 +<sxh>
 +**FREE
 +
 +ctl-opt dftactgrp(*no) actgrp(*caller) bnddir('​MYBNDDIR'​);​
 +
 +
 +/include '/​usr/​local/​include/​llist/​llist_h.rpgle'​
 +/include '/​usr/​local/​include/​llist/​lutil_h.rpgle'​
 +/include '/​usr/​local/​include/​libc_h.rpgle'​
 +/include '/​usr/​local/​include/​system_h.rpgle'​
 +/include '/​usr/​local/​include/​userspace_h.rpgle'​
 +
 +dcl-pr system_listObjectLocks extpgm('​QWCLOBJL'​);​
 +  qualUsName char(20) const;
 +  format char(8) const;
 +  qualObjName char(20) const;
 +  objectType char(10) const;
 +  memberName char(10) const;
 +  errorCode likeds(qusec_t);​
 +end-pr;
 +
 +dcl-ds object_t qualified template;
 +  name char(10);
 +  library char(10);
 +  type char(10);
 +end-ds;
 +
 +dcl-pi *n;
 +  file char(10) const;
 +end-pi;
 +
 +if (%addr(file) <> *null and file <> *blank);
 +  main();
 +else;
 +  dsply 'no file passed';​
 +endif;
 +
 +*inlr = *on;
 +
 +
 +dcl-proc main;
 +  dcl-s abnormallyEnded ind;
 +  dcl-s objects pointer;
 +  dcl-s value char(50);
 +  dcl-ds object likeds(object_t) based(entry);​
 +  dcl-s lockCount int(10);
 +
 +  objects = lutil_listObjects('​*ALL'​ : file : '​*FILE'​);​
 +
 +  entry = list_iterate(objects);​
 +  dow (entry <> *null);
 +    value = %str(entry);​
 +
 +    if (isLocked(object));​
 +      dsply %trimr(object + ' is locked'​);​
 +      lockCount += 1;
 +    endif;
 +
 +
 +    entry = list_iterate(objects);​
 +  enddo;
 +
 +  if (lockCount = 0);
 +    dsply 'Alle Objekte sind nicht gesperrt.';​
 +  endif;
 +
 +  on-exit abnormallyEnded;​
 +    if (objects <> *null);
 +      list_dispose(objects);​
 +    endif;
 +end-proc;
 +
 +
 +dcl-proc isLocked;
 +  dcl-pi *n ind;
 +    object likeds(object_t) const;
 +  end-pi;
 +
 +  dcl-s abnormallyEnded ind;
 +  dcl-s usName char(10);
 +  dcl-s usLib char(10) inz('​QTEMP'​);​
 +  dcl-ds errorCode likeds(qusec_t);​
 +  dcl-ds userspaceHeader qualified based(usPtr);​
 +    userArea ​      ​char(64);​
 +    headerSize ​    ​int(10);​
 +    releaseLevel ​  ​char(4);​
 +    formatName ​    ​char(8);​
 +    apiUsed ​       char(10);
 +    dateCreated ​   char(13);
 +    infoStatus ​    ​char(1);​
 +    usSizeUsed ​    ​int(10);​
 +    offsetInput ​   int(10);
 +    sizeInput ​     int(10);
 +    offsetHeader ​  ​int(10);​
 +    headerSecSiz ​  ​int(10);​
 +    offsetList ​    ​int(10);​
 +    listSecSize ​   int(10);
 +    nmbrEntries ​   int(10);
 +    entrySize ​     int(10);
 +    entryCCSID ​    ​int(10);​
 +    regionID ​      ​char(2);​
 +    langID ​        ​char(3);​
 +    subListInd ​    ​char(1);​
 +    us_gen_reser ​  ​char(42);​
 +  end-ds;
 +
 +  clear errorCode;
 +  usName = %subst(%str(tmpnam(*omit)) : 7);
 +
 +  userspace_create(usName + usLib : ''​ : 64000 : x'​00'​ : '​*ALL'​ : 'Test object lock'​);​
 +
 +  clear errorCode;
 +  system_listObjectLocks(usName + usLib : '​OBJL0100'​ :
 +      object.name + object.library : '​*FILE'​ : '​*NONE'​ : errorCode);
 +
 +  userspace_retrievePointer(usName + usLib : usPtr);
 +
 +  return userspaceHeader.nmbrEntries > 0;
 +
 +  on-exit abnormallyEnded;​
 +    userspace_delete(usName + usLib : errorCode);
 +end-proc;
 +</​sxh>​
 +
 +
 +
 +{{tag>​devel ibm rpg}}
  
check_object_lock.txt ยท Last modified: 2019/03/18 10:45 by mihael