home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 600-699 / ff634.lha / APIG / apig33.lzh / util3.rexx < prev    next >
OS/2 REXX Batch file  |  1992-01-25  |  5KB  |  163 lines

  1. /*  */
  2.  
  3. /* Example of using Utility Library functions 
  4.  
  5.     FILTERTAGCHANGES()
  6.     FILTERTAGITEMS()
  7.     REFRESHTAGITEMCLONES()
  8.     
  9. */
  10.  
  11.  x = addlib("apig.library",0,-30,0)
  12.  
  13.  call set_apig_globals()
  14.  
  15.  taglist  = ALLOCATETAGITEMS(20)    /* allocate twenty slots */
  16.  taglist2 = ALLOCATETAGITEMS(20)    /* allocate twenty slots */
  17.  
  18.  call SETTAGSLOT(taglist,0,'80080001'x,'n',100)
  19.  call SETTAGSLOT(taglist,1,'80080002'x,'n',200)
  20.  call SETTAGSLOT(taglist,2,'80080003'x,'n',300)
  21.  call SETTAGSLOT(taglist,3,'80080004'x,'n',400)
  22.  call SETTAGSLOT(taglist,4,'80080005'x,'n',500)
  23.  call SETTAGSLOT(taglist,5,'80080006'x,'n',600)
  24.  call SETTAGSLOT(taglist,6,'80080007'x,'n',700)
  25.  call SETTAGSLOT(taglist,7,'80080008'x,'n',800)
  26.  call SETTAGSLOT(taglist,8,'80080009'x,'n',900)
  27.  call SETTAGSLOT(taglist,9,'80080010'x,'n',1000)
  28.  call SETTAGSLOT(taglist,10,TAG_DONE,'n',0)
  29.  origtaglist  = CLONETAGITEMS(taglist)           /* used to REFRESH */
  30.  clonetaglist = CLONETAGITEMS(taglist)
  31.  
  32.  call SETTAGSLOT(taglist2,0,'80080001'x,'n',110) /* different data value */
  33.  call SETTAGSLOT(taglist2,1,'80080002'x,'n',200)
  34.  call SETTAGSLOT(taglist2,2,'80080003'x,'n',320) /* different data value */
  35.  call SETTAGSLOT(taglist2,3,'80080004'x,'n',400)
  36.  call SETTAGSLOT(taglist2,4,'80080005'x,'n',500)
  37.  call SETTAGSLOT(taglist2,5,'80080006'x,'n',600)
  38.  call SETTAGSLOT(taglist2,6,'80080007'x,'n',720) /* different data value */
  39.  call SETTAGSLOT(taglist2,7,'80080008'x,'n',800)
  40.  call SETTAGSLOT(taglist2,8,'80080009'x,'n',900)
  41.  call SETTAGSLOT(taglist2,9,'80080010'x,'n',1000)
  42.  call SETTAGSLOT(taglist2,10,TAG_DONE,'n',0)
  43.  clonelist2 = CLONETAGITEMS(taglist2)
  44.  
  45.  call show2taglist("   Changes",taglist2,"  Original",taglist)
  46.  
  47.  call FILTERTAGCHANGES(taglist2,taglist,0)  /* 0 - do not APPLY changes */
  48.  
  49.  say " After FILTERCHANGES "
  50.  call show2taglist("   Changes",taglist2,"  Original",taglist)
  51.  
  52.  
  53.  call FILTERTAGCHANGES(clonelist2,clonetaglist,1) /* 1 - APPLY changes */
  54.  
  55.  say " After FILTERCHANGES with changes APPLIED to Original "
  56.  call show2taglist("   Changes",clonelist2,"  Original",clonetaglist)
  57.  
  58.  
  59. /* REFRESHTAGITEMCLONES -- changes were applied to 'clonetaglist' */
  60.  
  61.  call REFRESHTAGITEMCLONES(clonetaglist,origtaglist) /* original values back */
  62.  
  63.  say "Refreshed List -- with old Original values "
  64.  call show2taglist("   ORIGINAL",origtaglist,"  REFRESHED",clonetaglist)
  65.  
  66.  
  67.  
  68. /* FILTERTAGITEMS */
  69.  
  70.  tagarray = ALLOCMEM(80,MEMF_CLEAR)   /* twenty array slots */
  71.  
  72.  orig2taglist  = CLONETAGITEMS(origtaglist)
  73.  
  74.  call SETVALUE(tagarray,0,4,'p','80080002'x) /* the ones to keep or */
  75.  call SETVALUE(tagarray,4,4,'p','80080003'x) /* not keep            */
  76.  call SETVALUE(tagarray,8,4,'p','80080007'x)
  77.  call SETVALUE(tagarray,12,4,'p','80080009'x)
  78.  call SETVALUE(tagarray,16,4,'p',TAG_DONE)
  79.  
  80.  say ""
  81.  call FILTERTAGITEMS(orig2taglist,tagarray,0)
  82.  say "Filtered with TAGFILTER_AND ... "
  83.  say " if tag in taglist AND in tagarry -- keep it"
  84.  say ""
  85.  call show2taglist("   ORIGINAL",origtaglist,"  FILTERED",orig2taglist)
  86.  
  87.  call REFRESHTAGITEMCLONES(orig2taglist,origtaglist)
  88.  say ""
  89.  call FILTERTAGITEMS(orig2taglist,tagarray,1)
  90.  say "Filtered with TAGFILTER_NOT ... "
  91.  say " if tag in taglist but NOT in tagarray -- keep it"
  92.  say ""
  93.  call show2taglist("   ORIGINAL",origtaglist,"  FILTERED",orig2taglist)
  94.  
  95.  
  96.  call FREETAGITEMS(taglist)
  97.  call FREETAGITEMS(clonetaglist)
  98.  call FREETAGITEMS(origtaglist)
  99.  call FREETAGITEMS(orig2taglist)
  100.  call FREETAGITEMS(clonelist2)
  101.  call FREETAGITEMS(taglist2)
  102.  call FREEMEM(tagarray,80)
  103.  
  104. exit
  105.  
  106. /* -------------------------------------- */
  107. show2taglist: procedure expose MEMF_CLEAR
  108. /* -------------------------------------- */
  109.  
  110. parse arg L1heading,list1,L2heading,list2
  111.  
  112.    tstate1 = ALLOCMEM(4,MEMF_CLEAR)   /* needed, since NEXTTAGITEM wants   */
  113.                                       /* it as doubly-indirected reference */
  114.  
  115.    tstate2 = ALLOCMEM(4,MEMF_CLEAR)  
  116.  
  117.    if list1 ~= null() then 
  118.       call export(tstate1,list1,4)     /* copy list1 pointer into tstate1 */
  119.  
  120.    if list2 ~= null() then 
  121.       call export(tstate2,list2,4)     /* copy list2 pointer into tstate2 */
  122.  
  123.    say copies(' ',8) L1heading copies(' ',25-length(L1heading)) L2heading
  124.  
  125.    do forever
  126.  
  127.       t1 = copies(' ',20)
  128.       if tag1 ~= null() then 
  129.          do
  130.             tag1 = NEXTTAGITEM(tstate1)
  131.             if tag1 ~= null() then
  132.                do
  133.                   tagval  = GETVALUE(tag1,0,4,'p')
  134.                   tagdata = GETVALUE(tag1,4,4,'n')
  135.                   t1 = '(' || c2x(tagval) || ':' || tagdata || ')'
  136.                end
  137.          end
  138.       
  139.       t2 = ''
  140.       if tag2 ~= null() then 
  141.          do
  142.             tag2 = NEXTTAGITEM(tstate2)
  143.             if tag2 ~= null() then
  144.                do
  145.                   tagval  = GETVALUE(tag2,0,4,'p')
  146.                   tagdata = GETVALUE(tag2,4,4,'n')
  147.                   t2 = copies(' ',25-length(t1))
  148.                   t2 = t2 || '(' || c2x(tagval) || ':' || tagdata || ')'
  149.                end
  150.          end
  151.       
  152.       if (tag1 = null()) & (tag2 = null()) then leave
  153.  
  154.       say copies(' ',8) t1 t2
  155.       
  156.    end
  157.  
  158.    say ""
  159.    call FREEMEM(tstate1,4)
  160.    call FREEMEM(tstate2,4)
  161.  
  162. return 1
  163.