home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / UUPC11X3.ZIP / MAILCHEK.CMD < prev    next >
OS/2 REXX Batch file  |  1992-11-10  |  6KB  |  188 lines

  1. /*--------------------------------------------------------------------*/
  2. /*    Program:    mailcheck         (92-10-12)                        */
  3. /*    Author:     Evan Champion                                       */
  4. /*    Address:    evanc@uuisis.isis.org                               */
  5. /*    Language:   Procedure Langauges/2 (OS/2 REXX) with              */
  6. /*                Visual REXX                                         */
  7. /*--------------------------------------------------------------------*/
  8.  
  9. /*--------------------------------------------------------------------*/
  10. /*    Requires Visual Rexx, available from IBM's OS/2 Internet        */
  11. /*    archive or CompuServ                                            */
  12. /*--------------------------------------------------------------------*/
  13.  
  14. /*--------------------------------------------------------------------*/
  15. /*   Change history                                                   */
  16. /*   09 Nov 92 ahd   Use UUPCSYSRC to locate the mail directory and   */
  17. /*                   mailbox extension                                */
  18. /*--------------------------------------------------------------------*/
  19.  
  20. /* setup VREXX */
  21. signal on novalue
  22. call RxFuncAdd 'VInit', 'VREXX', 'VINIT'
  23. initcode = VInit()
  24.  
  25. if initcode = 'ERROR' then call CLEANUP
  26.  
  27. signal on failure name CLEANUP
  28. signal on halt name CLEANUP
  29. signal on syntax name CLEANUP
  30.  
  31. /* say product info to the fullscreen */
  32.  
  33. say 'MailCheck [92-10-12]'
  34. say 'by Evan Champion (evanc@uuisis.isis.org)'
  35. say ' '
  36. say 'Enter Control-C to close'
  37.  
  38. /* load functions in RexxUtil */
  39.  
  40. call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  41. call SysLoadFuncs
  42.  
  43. y = 300 /* x and y values for printing text */
  44. x = 10  /* in the PM window */
  45. cycle = 30;                   /* Check for mail every ...      */
  46.  
  47. maildir = getuupc("maildir" );
  48. mailext = getuupc("mailext" );
  49.  
  50. empty  = 'WHITE' /* window background colour */
  51. full   = 'BLACK' /* window background colour */
  52. colour = empty;
  53. pos.left= 70 /* window positions, in percent of desktop */
  54. pos.bottom = 0
  55. pos.right = 100
  56. pos.top = 3
  57.  
  58. title = 'Mailcheck [92-11-10]' /* title w/version number */
  59.  
  60. mailcheckID = VOpenWindow(title, colour, 'pos')
  61. info.   = '';                 /* Flag we have no mailbox info  */
  62.  
  63. do forever /* start checking */
  64.    return = SysFileTree(maildir || '\*.' || mailext, 'found.', 'F')
  65.    if return = 2 then
  66.       call CLEANUP            /* if there isn't enough memory */
  67.    if found.0 = 0 then
  68.    do;
  69.       if colour = full then
  70.       do;
  71.          call vforecolor mailcheckID,full;
  72.          call vbackcolor mailcheckID,empty;
  73.          colour = empty;
  74.       end;
  75.       call SAYINFO            /* if there are no files */
  76.       call SysSleep Cycle;
  77.       drop counts.
  78.       info. = '';
  79.    end;
  80.    else do;
  81.       pause = cycle % found.0
  82.       if pause < 2 then
  83.          pause = 2;
  84.       if colour = empty then
  85.       do;
  86.          call vforecolor mailcheckID,empty;
  87.          call vbackcolor mailcheckID,full;
  88.          colour = full
  89.       end;
  90.       do i = 1 to found.0
  91.            parse var found.i mmddyy hhmmss bytes attr fname;
  92.            parse value filespec( "name", fname ) with id'.';
  93.            if mmddyy = date('U') then
  94.               when = hhmmss
  95.            else
  96.               when = substr(mmddyy,1,5) hhmmss;
  97.            if info.id <> found.i then
  98.            do;
  99.               count.id = CountItems( strip(fname) );
  100.                               /* Only read file when truly needed */
  101.               info.id = found.i
  102.                               /* Remember that we read the file   */
  103.            end;
  104.            call SAYINFO id, when, bytes, count.id ;
  105.            call SysSleep pause;
  106.       end i /* do */
  107.    end;
  108. end /* do */
  109.  
  110. /*--------------------------------------------------------------------*/
  111. /*       g e t u u p c                                                */
  112. /*                                                                    */
  113. /*       Get UUPC/extended configuration variable                     */
  114. /*--------------------------------------------------------------------*/
  115.  
  116. getuupc:procedure;
  117. trace n
  118. parse upper arg keyword,answer;
  119.  
  120. uupcrc = value('UUPCSYSRC',,'OS2ENVIRONMENT');
  121. if  uupcrc == '' then
  122. do;
  123.    'UUPCSYSRC not set, cannot continue'
  124.    exit 44;
  125. end;
  126.  
  127. xrc = SysFileSearch( keyword || '=',uupcrc,'data.');
  128. if xrc \= 0 then
  129. do;
  130.    say 'SysFileSearch error' xrc 'searching' uupcrc 'for' keyword;
  131.    exit xrc;
  132. end;
  133.  
  134. do count = 1 to data.0
  135.    parse var data.count newkey'='string;
  136.  
  137.    if translate(newkey) = keyword then
  138.       answer = string;
  139. end;
  140. return translate(answer,'\','/');
  141.  
  142. SAYINFO:
  143. parse arg xwho, xwhen, xbytes, xitems
  144.    if xwho = '' then
  145.       output = 'No new mail' /* if there was no mail */
  146.    else
  147.       output = xwho || '  ' || xwhen '(' || xitems 'items,' ,
  148.                xbytes || ' bytes)' ;
  149.    call VClearWindow mailcheckID /* scroll through ID's with mail */
  150.    call VSay mailcheckID, x, y, output
  151.    return
  152.  
  153. CLEANUP:
  154.    call VExit /* cleanup and exit */
  155.    exit
  156.  
  157. /*--------------------------------------------------------------------*/
  158. /*       C o u n t I t e m s                                          */
  159. /*                                                                    */
  160. /*       Count number of items in a mailbox.                          */
  161. /*--------------------------------------------------------------------*/
  162.  
  163. CountItems:procedure
  164. parse arg mailbox
  165. sep = copies('01'x,19)
  166. xrc = SysFileSearch( sep ,mailbox,'data.');
  167. if xrc <> 0 then
  168. do;
  169.    say 'Internal error' xrc || ':' ,
  170.          mailbox 'has no UUPC/extended message breaks'
  171.    return 0;
  172. end;
  173. else
  174.    return data.0;
  175.  
  176. /*--------------------------------------------------------------------*/
  177. /*    n o v a l u e                                                   */
  178. /*                                                                    */
  179. /*    Trap for uninitialized variables                                */
  180. /*--------------------------------------------------------------------*/
  181.  
  182. novalue:
  183. trace n
  184. signal off novalue;           /* Avoid nasty recursion         */
  185. say 'Uninitialized variable in line' sigl || ':';
  186. say sourceline( sigl );
  187. signal Cleanup
  188.