home *** CD-ROM | disk | FTP | other *** search
/ New Horizons Shareware Collection / HORIZONS1.BIN / ANNOUNCE.CMD < prev    next >
OS/2 REXX Batch file  |  1994-12-27  |  11KB  |  296 lines

  1. /* ANNOUNCE.CMD - REXX program to generate a File Announcement
  2. with MPBeta for new files. Version 1.31
  3.  
  4. ver 1.1:  Found an error and in the process of cleaning it up, sped up the
  5. program's execution! Moved the file_desc stuff inside the loop.
  6.  
  7. ver 1.2:  Added format description routines, most borrowed from Craig
  8. Morrison (Thanks!)
  9.  
  10. ver 1.21: Added two lines to add back the space between upload counters:
  11. from ( 0) back to (  0). It was stripped out in formatting.
  12.  
  13. ver 1.3: New MPM_FileAreaSort() and MPM_SaveFilesBBS() functions
  14. incorporated. Thanks, Craig!!
  15.  
  16. ver 1.31: change in the way I call the areas. Attempt to clean up the code
  17.  
  18.   - 18 December, 1994 by Elliott Goodman, 1:102/1319 - 805-264-0200
  19. */
  20.  
  21. /* check whether RxFuncs are loaded. If not, load them. */       
  22.                                                                  
  23. if RxFuncQuery('SysLoadFuncs') then                              
  24. do                                                               
  25.         call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  26.         call SysLoadFuncs                                        
  27. end                                                              
  28.  
  29. /* Just to let the user know what's going on.... */
  30.  
  31. say 'Searching thru file areas for new files to announce.'
  32. say 'Please wait....';
  33. say ' ';
  34.  
  35.  
  36. /* create a tracking file */
  37. report = 'd:\lora\file\mpbeta\1anounce.txt'
  38.  
  39. /* delete old tracking file, if present */
  40. call SysFileDelete(report)
  41.  
  42. m_txt = 'Report of ANNOUNCE.CMD activity'
  43. call lineout report, m_txt
  44. m_txt = date('U')
  45. call lineout report, m_txt
  46. m_txt = ''
  47. call lineout report, m_txt
  48.  
  49. /* get today's date, create an index from it */
  50. day_index = SPECIFIED_DATE_IN_DAYS( DATE('U') )                        
  51.  
  52. /* set some defaults */
  53.  
  54. nfile.0 = 0
  55. files.0 = 0                /* will increment */
  56. file_index = 0
  57.  
  58. lmargin = 16         /* how far from the left margin the ED Marker should be */
  59. llength = 45                 /* this is how long each line segment should be */
  60. EDMarker = '>'        /* Set EDMarker to your extended description character */
  61.                                                                                
  62. spaces = SubStr(Copies(' ', 80), 1, lmargin)||EDMarker||' '                    
  63.  
  64. /* set up the array elements of FILES which will be used by
  65. MPM_AnnounceFiles() at the end of all this processing.
  66. See TANN.CMD included with MPBeta for details.   */
  67.  
  68. files.msgpath = 'D:\LORA\MSG\USERS'
  69. files.msgtype = 'SQUISH'
  70. files.msgflag = 'CRASH'
  71. files.to = 'ALL'
  72. files.toaddr = '1:102/1316.0'
  73. files.header = 'New files online at Miles Enterprises BBS'
  74. files.from = 'Elliott Goodman'
  75. files.fromaddr = '1:102/1319.0'
  76. files.footer = '- Elliott'
  77.  
  78. /* your origin info */
  79. files.origin = 'Miles Enterprises * 805-264-0200 *'
  80.  
  81. /* my first 99 areas are on the CD so I start with 99 (and increment it
  82. immediately.) This saves time since the CD is slow. */
  83. mpmarea = 99
  84.  
  85. rc = MPM_QueryAreaList('arealist')         
  86. do impm = mpmarea to arealist.0                     
  87.  
  88.    mpmarea = MPM_QueryArea(mpmarea)    /* look at next area */
  89.    if mpmarea = 'ERROR' then do
  90.       leave                /* this will bail us out */
  91.       end                /* if an error occurs */
  92.  
  93. /* get drive/subdir of next file area */
  94.    area_path = MPM_QueryAreaInfo(mpmarea, '1')
  95.  
  96. /* notify user of our progress */
  97.    say area_path ;
  98.  
  99. /* use SysFileTree here to check for new files */
  100.    call SysFileTree area_path, stuff, 'F'
  101.  
  102. /* reset before each file area */
  103.    found_new = 0
  104.    nfile.0 = 0
  105.  
  106. /* assume at least one file in the file area */
  107.    do i = 1 to stuff.0        /* cycle thru files in one area */
  108.  
  109. /* get info on each file in the area */
  110.    parse var stuff.i,
  111.          file_date,
  112.          file_time,
  113.          file_size,
  114.          file_attr,
  115.          file_name
  116.  
  117. /* remove trailing space */
  118.    file_name = strip( file_name )
  119.  
  120. /* remove drive/subdir info from filename */
  121.    parse var file_name (area_path) file_name
  122.  
  123. /* convert to caps, just in case */
  124.    file_name = translate( file_name )
  125.  
  126. /* get extention. We don't want to announce FILES.BBS or FILES.BAK! */
  127.    parse var file_name junk '.' extn
  128.  
  129.    if extn = 'BAK' then do
  130.       iterate
  131.       end
  132.  
  133.    if extn = 'BBS' then do
  134.       iterate
  135.       end
  136.  
  137. /* test if next file is dated today, hence NEW */
  138.    file_test = SPECIFIED_DATE_IN_DAYS( file_date )
  139.    if file_test = day_index then do
  140.  
  141. /* here's where the ver. 1.1 code makes it's major changes. Store the
  142. files that are new and do them all at once for each area */
  143.       found_new = 1
  144.       nfile.0 = nfile.0 + 1
  145.       t_index = nfile.0
  146.       nfile.t_index = file_name
  147.       end /* if file_test = day_index */
  148.  
  149.    end /* do i = 1 to stuff.0 */
  150.  
  151. /* now, if we found one or more new files in this area... */
  152.    if found_new = 1 then do
  153.  
  154. /* we have to open the files.bbs file so we can get the
  155. description */
  156.       retval = MPM_OpenArea(mpmarea)
  157.  
  158. /* this just gives the system time to open the file */
  159.       Call SysSleep 3
  160.  
  161. /* ....cycle thru the new files for this area */
  162.       do k = 1 to nfile.0
  163.  
  164. /* continue storing elements in FILES */
  165.          file_index = file_index + 1
  166.          files.0 = files.0 + 1
  167.          files.file_index.path = area_path
  168.          files.file_index.file = nfile.k
  169.  
  170.          text = MPM_QueryFileInfo(mpmarea, nfile.k, '3')
  171.  
  172. /* just in case no description was Tic'd... */
  173.          if text = 'ERROR' then do
  174.             text = '   No Description!'
  175.             end
  176.  
  177. /* here's where we format the file description!   */
  178.  
  179. /* Translate all CRs, LFs and Extended Description Markers into spaces */
  180.          ntext = Translate(text, '   ', x2c('0d')||x2c('0a')||EDMarker)                 
  181.          
  182.          text = GetOneLine(llength, ntext)                    
  183.          ntext = Space(DelWord(ntext, 1, Words(text)), 1)     
  184.          Do While Length(ntext) \= 0                          
  185.             wText = GetOneLine(llength, ntext)               
  186.             text = text||x2c('0d')||x2c('0a')||spaces||wText 
  187.             ntext = Space(DelWord(ntext, 1, Words(wText)), 1)
  188.             End
  189.  
  190. /* the following two lines replace the extra space between
  191. parentesis that was removed: (  0) */
  192.          text = overlay(' ',text,1,1)
  193.          text = '('||text            
  194.  
  195.          retval = MPM_SetFileInfo(mpmarea, nfile.k, '2', text)
  196.  
  197.          text = Space(Translate(text, ' ', '>'), 1)
  198.          files.file_index.desc = text
  199.          end /* do k to nfile.0 */
  200.  
  201. /* New Sort Function!!! New Save files.bbs function! */
  202.  
  203.    retval = MPM_FileAreaSort(mpmarea, 'Name', 'Asc', 'All') 
  204.    retval = MPM_SaveFilesBBS(mpmarea)                       
  205.  
  206. /* close the files.bbs file to avoid problems */
  207.       retval = MPM_CloseArea(mpmarea)
  208.       end /* if  found = 1 */
  209.  
  210.    end /* do impm */
  211.  
  212. /* if no new files: exit */
  213. if files.0 = 0 then do
  214.    m_txt = 'No new files found'
  215.    call lineout report, m_txt
  216.    exit
  217.    end
  218.  
  219. /* there are new files. Save the info so we can play
  220. with the descriptions when we wake up <g> */
  221.  
  222. m_txt = 'List of New Files'
  223. call lineout report, m_txt
  224. m_txt = ' '
  225. call lineout report, m_txt
  226.  
  227. do j = 1 to files.0
  228.    m_txt = 'File Path = ' files.j.path
  229.    call lineout report, m_txt
  230.    m_txt = 'File Name = ' files.j.file
  231.    call lineout report, m_txt
  232.    m_txt = 'File Description = ' files.j.desc
  233.    call lineout report, m_txt
  234.    m_txt = ' '
  235.    call lineout report, m_txt
  236.    end  
  237.  
  238. /* actually make the announcement */
  239. retval = MPM_AnnounceFiles('files')
  240.  
  241. m_txt = files.0 'new files announced!'
  242. call lineout report, m_txt
  243.  
  244. /* close the report file */
  245. call lineout report
  246.  
  247. /* and we're done */
  248. exit
  249.  
  250. /*------------------------------------------------*/                 
  251. /* Convert calendar date to consistent date index                  */
  252. /*------------------------------------------------*/                 
  253. SPECIFIED_DATE_IN_DAYS:                                              
  254.    Procedure                                                         
  255.                                                                      
  256. parse arg,                                                           
  257.    mm '/',                                                           
  258.    dd '/',                                                           
  259.    yy                                                                
  260.                                                                      
  261. days_by_month = '31 28 31 30 31 30 31 31 30 31 30 31'                
  262. current_number_of_days = (yy * 365) + dd                             
  263. do m = 1 while m < mm                                                
  264.    current_number_of_days = current_number_of_days +,                
  265.       WORD( days_by_month, m )                                       
  266. end                                                                  
  267. return current_number_of_days                                        
  268.  
  269. /*   This subroutine and all format description routines written by
  270.       Craig Morrison, author of MaxFilePM.
  271.     GetOneLine takes a variable length string and returns a blank delimited   
  272.     string that is a substring of inText and is no longer than llen           
  273.     characters.                                                               
  274.                                                                               
  275.     A single word that is longer than llen is simply truncated at llen when it
  276.     would be the only word in a line segment and not wrappable. Its cheesy and
  277.     cheap, but hey, it works.. ;-)                                            
  278. */                                                                            
  279.  
  280. GetOneLine:                                        
  281.                                                    
  282.     Parse Arg llen, inText                         
  283.                                                    
  284.     cText = ''                                     
  285.     Do While Length(cText' 'Word(inText, 1)) < llen
  286.         cText = cText' 'Word(inText, 1)            
  287.         inText = DelWord(inText, 1, 1)             
  288.         If inText = '' Then Leave                  
  289.     End                                            
  290.                                                    
  291.     if cText = '' Then Do                          
  292.         cText = Left(inText, llen)                 
  293.     End                                            
  294.                                                    
  295. Return Space(cText, 1)                             
  296.