home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / rexxuuxx.zip / 64DECODE.PLI < prev    next >
Text File  |  1997-05-11  |  3KB  |  83 lines

  1.  /*********************************************************************/
  2.  /* This program is freeware, distributed as is, without any warranty */
  3.  /* of its usefulness for any purpose. You may use it freely. You may */
  4.  /* also redistribute it, provided no charge is levied beyond the     */
  5.  /* price of its distribution medium. However, the author retains all */
  6.  /* intellectual property rights.                                     */
  7.  /*                                                                   */
  8.  /*                                                                   */
  9.  /*  Copyright (C) David W. Noon, 1995, 1997                          */
  10.  /*                                                                   */
  11.  /*********************************************************************/
  12.  
  13.  /*************************************************
  14.   *                                               *
  15.   * Program to decode BASE64 messages as per Unix *
  16.   *                                               *
  17.   * Author: David W. Noon                         *
  18.   *         December 1995                         *
  19.   *                                               *
  20.   *************************************************/
  21.  B64DECODE:
  22.  PROC(PARM) OPTIONS(MAIN NOEXECOPS REENTRANT) REORDER;
  23.  
  24.      DCL  PARM                          CHAR(521) VAR;
  25.  
  26.      %INCLUDE UUXXCODE;
  27.  
  28.      DCL  (i,l,p,pl,w)                  BIN FIXED(31,0) UNSIGNED,
  29.           Max_line_length               BIN FIXED(31,0) UNSIGNED
  30.                                         INIT(120),
  31.           Parm_ptr                      PTR,
  32.           (LENGTH,SEARCH,SUBSTR,TRIM,VERIFY) BUILTIN;
  33.  
  34.      i = VERIFY(PARM,' ');
  35.      l = SEARCH(PARM,' ',i+1);
  36.      p = VERIFY(PARM,' ',l+1);
  37.      IF i = 0 | l = 0 | p = 0 THEN
  38.           DISPLAY('Input & output path/filenames must be given.');
  39.      ELSE
  40.      DO;
  41.           pl = SEARCH(PARM,' ',p+1);
  42.           IF pl = 0 THEN
  43.                pl = LENGTH(PARM) - p + 1;
  44.           ELSE
  45.           DO;
  46.                w = VERIFY(PARM,' ',pl+1);
  47.                IF w ¬= 0 & w <= LENGTH(PARM) - 3 THEN
  48.                SELECT(SUBSTR(PARM,w,3));
  49.                     WHEN('/W:','/w:')
  50.                     DO;
  51.                          IF VERIFY(PARM,'0123456789',w+3) ¬= 0 THEN
  52.                          DO;
  53.                               DISPLAY('Width specification must be numeric.');
  54.                               STOP;
  55.                          END;
  56.                          GET STRING(SUBSTR(PARM,w+3)) LIST(Max_line_length);
  57.                     END;
  58.                     OTHERWISE
  59.                     DO;
  60.                          DISPLAY('Invalid width parameter. Should be /w:nnn');
  61.                          STOP;
  62.                     END;
  63.                END;
  64.                pl = pl - p;
  65.           END;
  66.  
  67.           Max_in = l - i;
  68.           ALLOC B64_Decode_struct SET(Parm_ptr);
  69.           Parm_ptr->B64_Decode_struct.Valid_rec_len = Max_line_length;
  70.           Parm_ptr->B64_Decode_struct.Output_filename = SUBSTR(PARM,p,pl);
  71.           Parm_ptr->B64_Decode_struct.Input_filename_list =
  72.                     SUBSTR(PARM,i,Max_in);
  73.  
  74.           FETCH BASE64_DECODE TITLE('UUXXCODE/BASE64_DECODE');
  75.           CALL BASE64_DECODE(Parm_ptr);
  76.           RELEASE BASE64_DECODE;
  77.  
  78.           FREE Parm_ptr->B64_Decode_struct;
  79.      END;
  80.  
  81.      RETURN;
  82.  END B64DECODE;
  83.