home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / base64.zip / DEBASE64.CMD < prev    next >
OS/2 REXX Batch file  |  1994-07-05  |  2KB  |  72 lines

  1. /* Decodes a Base64 file.                            */
  2. /*                                                   */
  3. /* Written by James L. Dean                          */
  4. char_set='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
  5. DO n=0 to 127
  6.   t.n=-1
  7. END
  8. DO n=0 to 63
  9.   i=C2D(SUBSTR(char_set,n+1,1))
  10.   t.i=n
  11. END
  12. CALL CHAROUT,'Input? '
  13. input_file_name=LINEIN()
  14. CALL CHAROUT,'Output? '
  15. output_file_name=LINEIN()
  16. SAY 'Writing "'output_file_name'".'
  17. CALL RxFuncAdd 'SysFileDelete','RexxUtil','SysFileDelete'
  18. i=SysFileDelete(output_file_name)
  19. input_line=''
  20. input_line_index=81
  21. input_eof=0
  22. DO WHILE (input_eof = 0)
  23.   sextet_num=1
  24.   num_bits=0
  25.   DO WHILE(sextet_num <= 4)
  26.     DO WHILE((input_eof = 0) & (input_line_index > LENGTH(input_line)))
  27.       IF LINES(input_file_name) = 0 THEN
  28.         input_eof=-1
  29.       ELSE
  30.         DO
  31.           input_line=LINEIN(input_file_name)
  32.           input_line_index=1
  33.         END
  34.     END
  35.     IF input_eof = 0 THEN
  36.       DO
  37.         i=C2D(SUBSTR(input_line,input_line_index,1))
  38.         input_line_index=input_line_index+1
  39.         t1=t.i
  40.         IF t1 >= 0 THEN
  41.           DO
  42.             sextet.sextet_num=t1
  43.             num_bits=num_bits+6
  44.             sextet_num=sextet_num+1
  45.           END
  46.       END
  47.     ELSE
  48.       DO
  49.         sextet.sextet_num=0
  50.         sextet_num=sextet_num+1
  51.       END
  52.   END
  53.   IF num_bits >= 8 THEN
  54.     DO
  55.       t1=sextet.1
  56.       t2=sextet.2
  57.       CALL CHAROUT output_file_name,D2C(4*t1+t2%16)
  58.       num_bits=num_bits-8
  59.     END
  60.   IF num_bits >= 8 THEN
  61.     DO
  62.       t1=sextet.3
  63.       CALL CHAROUT output_file_name,D2C(16*(t2//16)+(t1%4))
  64.       num_bits=num_bits-8
  65.     END
  66.   IF num_bits >= 8 THEN
  67.     DO
  68.       t2=sextet.4
  69.       CALL CHAROUT output_file_name,D2C(64*(t1//4)+t2)
  70.     END
  71. END
  72.