home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / comm / ems-1.0.lha / EMS / Rexx / ExtractFile.ems < prev    next >
Text File  |  1993-08-30  |  4KB  |  191 lines

  1. /* ExtractFile.ems */
  2. /*********************************/
  3. /* Updated by S. Wijman 29-08-93 */
  4. /*            2:2802/123@fidonet */
  5. /*********************************/
  6.  
  7. options results
  8. signal on error
  9. signal on syntax
  10.  
  11. parse arg area_name msg_num .
  12.  
  13. if( ~show( 'l', "ems_rexx.library" ) ) then
  14. do
  15.    if( ~addlib( "ems_rexx.library", 0, -30, 0 ) )then
  16.    do
  17.       say "Could not open ems_rexx.library"
  18.       exit 10
  19.    end
  20. end
  21.  
  22. cmd         = 'C:UUDecode'                          /* Full path to command UUDECODE */
  23. delete_name = EMS_Var_Local( 'SCRIPT_DELETE_NAME' )
  24. temp_dir    = EMS_Var_Local( 'TEMP_DIR' )
  25. temp_file   = temp_dir || 'UUext'
  26. cr          = '0a'x
  27.  
  28. /* Init of some variabiles */
  29. names.0 = 0
  30.  
  31. if datatype( msg_num, 'N' ) ~= 1 then call Usage
  32.  
  33.  
  34. call EMS_Item_Alloc(     'msg', area_name, 'MSG', msg_num )
  35. call EMS_Item_Lines_Get( 'msg', 'TEXT', 'lines'           )
  36. call EMS_Item_Free(      'msg'                            )
  37.  
  38. match = 0
  39.  
  40. do forever
  41.  
  42.    match = EMS_Search_In_Stem( 'lines', 'begin #?', match )
  43.  
  44.    if match = 0 then leave
  45.  
  46.    line = lines.match
  47.  
  48.    type = left( line, 9 )
  49.  
  50.    select
  51.       when type = 'begin 777' then mode = 1
  52.       when type = 'begin 644' then mode = 2
  53.       otherwise iterate
  54.    end
  55.  
  56.    name = right( line, length( line ) - 10 )
  57.  
  58.    parse var name name1 ':' name2
  59.    if name2 ~= '' then name = name2
  60.  
  61.    parse var name name1 '/' name2 .
  62.    if name2 ~= '' then name = name2
  63.  
  64.    num       = names.0 + 1
  65.    names.0   = num
  66.    names.num = name
  67.  
  68.    if exists(temp_dir || name ) then
  69.    do
  70.  
  71.       select = EMS_Do_Request( 'Found a UUENCODE HEADER'cr || cr'Original FileName :' name || cr || cr'A file with the same name exists'cr'in the' temp_dir 'directory.'cr"Should I rename it to '"name".EMS' ?", 'Yes|No' )
  72.  
  73.       if select = 'Yes' then
  74.       do
  75.  
  76.          name      = name'.EMS'
  77.          names.num = name
  78.  
  79.       end
  80.       else
  81.       do
  82.  
  83.          select = EMS_Do_Request( 'Should I deleted the existing file ?', 'Yes|No' )
  84.  
  85.          if select = 'No' then
  86.          do
  87.  
  88.             call EMS_Do_Request( 'Extracting UUENCODE files has been stopped.' )
  89.             call QuitScript
  90.  
  91.          end
  92.  
  93.          address command delete_name temp_dir || name
  94.  
  95.       end
  96.  
  97.    end
  98.  
  99.    if open( 'out', temp_file, 'W' ) ~= 1 then
  100.    do
  101.  
  102.       call EMS_Do_Request( "Can't open '" || temp_file || "' file for output." )
  103.       call QuitScript
  104.  
  105.    end
  106.  
  107.    call writeln( 'out', type temp_dir || name )
  108.  
  109.    last_empty = 0
  110.  
  111.    do forever
  112.  
  113.       match = match + 1
  114.       line  = lines.match
  115.  
  116.  
  117.       if left( line, 3 ) = 'end' then
  118.       do
  119.  
  120.          if last_empty = 0 then call writeln( 'out', ' ' )
  121.  
  122.          call writeln( 'out', 'end' )
  123.  
  124.          leave
  125.  
  126.       end
  127.  
  128.       line = translate( line, " ", "`" )
  129.  
  130.       if length( line ) = 0 | left( line, 1 ) = ' ' then
  131.       do
  132.  
  133.          if last_empty = 1 then iterate
  134.  
  135.          last_empty = 1
  136.  
  137.       end
  138.  
  139.       call writeln( 'out', line )
  140.  
  141.    end
  142.  
  143.    call close( 'out' )
  144.  
  145.    address command cmd         temp_file
  146.    address command delete_name temp_file '>nil:'
  147.  
  148. end
  149.  
  150. say
  151.  
  152. QuitScript:
  153.  
  154. if names.0 > 0 then
  155. do
  156.  
  157.    string = 'Check' temp_dir 'directory for the file(s):'cr
  158.  
  159.    do i = 1 to names.0
  160.  
  161.       string = string || cr || names.i
  162.  
  163.    end
  164.  
  165.    call EMS_Do_Request( string )
  166.  
  167. end
  168.  
  169. call EMS_FreeScriptData()
  170. exit 0
  171.  
  172. Usage:
  173.  
  174. say 'Usage: ExtractFile.ems <area name> <msg num>'
  175.  
  176. call EMS_FreeScriptData()
  177. exit 0
  178.  
  179.  
  180. error:
  181. syntax:
  182.  
  183. error_text = EMS_LastError()
  184.  
  185. if error_text = '' then error_text = rc ErrorText( rc )
  186.  
  187. say '| ***BREAK: error at' sigl error_text
  188.  
  189. call EMS_FreeScriptData()
  190. exit rc
  191.