Auf vielfachen Wunsch sende ich allen TeX-Interessenten meine beiden Pascal-Programme HEXCODE und HEXDECODE, mit denen man beliebige Files so kodieren (und wieder rueckwandeln) kann, dass man sie ohne jede Code- und Record-Laenge-Probleme ueber Electronic Mail oder mit KERMIT o.ae. zwischen beliebigen Rechnern uebertragen kann. Hubert Partl, TU Wien. ---------- cut here ----------> program HEXCODE (infile, outfile, output); (* HEXCODE - Kodieren von ASCII-Zeichen. * * H.Partl TU Wien 1984-12-03 * * Dieses Programm dient dazu, ASCII-Files so umzukodieren, * dass eine Uebertragung ohne jede Ruecksicht auf * Record-Laenge, Kleinbuchstaben, Code, non-printable, Trailing Blanks * moeglich wird, also auch ueber beliebite E-Mail. * Das File kann beliebige ASCII-Zeichen (0..127) und * beliebig lange Records enthalten. * Alle Record-Enden am Eingabe-File werden wie CR,LF behandelt. * Das Ausgabe-File enthaelt zweistellige Hexadezimalzahlen * (also nur Ziffern und Grossbuchstaben) pro ASCII-Zeichen * und end-of-line nach je 2*40 Zeichen. * * Uebertragung eines Binaer-Files: * * - dieses Programm (HEXCODE) laufen lassen, * * - das von diesem Programm (HEXCODE) erzeugte File uebertragen, * * - am Empfaenger mit dem umgekehrten Programm HEXDECOD zurueck- * wandeln. * * Dieses Programm HEXDECOD muss aus allen Paaren von Hex-Ziffern * das entsprechende ASCII-Zeichen machen und alle anderen Zeichen * (Blanks, Binaernullen usw.) und Zeilenenden ignorieren. *) var ch: char; i: integer; hex: array [0..15] of char; CR, LF: char; infile,outfile: text; procedure READCH; begin read (infile, ch); end; (* readch *) procedure WRITEHEX (ch:char); begin write(outfile, hex[ ord(ch) div 16 ], hex[ ord(ch) mod 16 ]); i := i + 1; if i = 40 then begin writeln (outfile); i := 0; end; end; (* writehex *) begin hex[0] := '0'; hex[1] := '1'; hex[2] := '2'; hex[3] := '3'; hex[4] := '4'; hex[5] := '5'; hex[6] := '6'; hex[7] := '7'; hex[8] := '8'; hex[9] := '9'; hex[10] := 'A'; hex[11] := 'B'; hex[12] := 'C'; hex[13] := 'D'; hex[14] := 'E'; hex[15] := 'F'; CR := chr(13); LF := chr(10); reset (infile); rewrite (outfile); i := 0; while not eof(infile) do begin while not eoln(infile) do begin readch; writehex (ch); end; writehex (CR); writehex (LF); readln(infile); end; writeln(outfile); end. program HEXDCOD (input, output); (* HEXDCOD - inversion of HEXCODE. * * H.Partl 1985/01/09. *) const CR = 13; LF = 10; var i, ih, ich: integer; ch: char; icr: boolean; hex: array[0..255] of integer; begin for i:=0 to 255 do hex[i] := -1; for i:=0 to 9 do hex[ ord('0') +i ] := i; for i:=0 to 5 do hex[ ord('A') +i ] := i+10; ih := 1; icr := false; reset(input); rewrite(output); while not eof do begin read (ch); ich := hex[ ord(ch) ]; if ich>=0 then begin if ih=1 then begin i := ich; ih := 2; end else (* in=2 *) begin i := (i*16) + ich; ih := 1; if i=CR then icr:=true else if icr then begin if i=LF then writeln else write (chr(CR),chr(i)); icr := false; end else begin write (chr(i)); icr := false; end; end; end; if eoln then readln; end; end. <---------- cut here ----------