home *** CD-ROM | disk | FTP | other *** search
- /* Encodes a file in Base64. */
- /* */
- /* Written by James L. Dean */
- char_set='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- CALL CHAROUT,'Input? '
- input_file_name=LINEIN()
- CALL CHAROUT,'Output? '
- output_file_name=LINEIN()
- SAY 'Writing "'output_file_name'".'
- CALL RxFuncAdd 'SysFileDelete','RexxUtil','SysFileDelete'
- i=SysFileDelete(output_file_name)
- input_eof=0
- col_num=1
- DO WHILE (input_eof = 0)
- num_octets=0
- triple=0
- DO octet_num=1 TO 3
- IF input_eof = 0 THEN
- DO
- octet=CHARIN(input_file_name)
- IF LENGTH(octet) = 0 THEN
- input_eof=-1
- END
- IF input_eof = 0 THEN
- DO
- triple=256*triple+C2D(octet)
- num_octets=num_octets+1
- END
- ELSE
- triple=256*triple
- END
- num_sextets=(8*num_octets)%6
- IF 6*num_sextets < 8*num_octets THEN
- num_sextets=num_sextets+1
- IF num_sextets > 0 THEN
- DO
- sextet_num=1
- DO WHILE(sextet_num <= 4)
- quotient=triple%64
- stack.sextet_num=triple-64*quotient
- sextet_num=sextet_num+1
- triple=quotient
- END
- DO WHILE(num_sextets >= 1)
- sextet_num=sextet_num-1
- rc=CHAROUT(output_file_name,SUBSTR(char_set,1+stack.sextet_num,1))
- col_num=col_num+1
- IF col_num > 76 THEN
- DO
- rc=CHAROUT(output_file_name,D2C(13))
- rc=CHAROUT(output_file_name,D2C(10))
- col_num=1
- END
- num_sextets=num_sextets-1
- END
- DO WHILE(sextet_num > 1)
- rc=CHAROUT(output_file_name,'=')
- col_num=col_num+1
- IF col_num > 76 THEN
- DO
- rc=CHAROUT(output_file_name,D2C(13))
- rc=CHAROUT(output_file_name,D2C(10))
- col_num=1
- END
- sextet_num=sextet_num-1
- END
- END
- END
- IF col_num > 1 THEN
- DO
- rc=CHAROUT(output_file_name,D2C(13))
- rc=CHAROUT(output_file_name,D2C(10))
- END
-