Contributor: BOB SWART 
{
From: BOB SWART
Subj: UUDECODE.PAS
Here is my version of UUDECODE.PAS (also fully compatible):
}
{$IFDEF VER70}
{$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S+,T-,V-,X-}
{$ELSE}
{$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S+,V-,X-}
{$ENDIF}
{$M 8192,0,0}
{
 UUDeCode 3.0
 Borland Pascal (Objects) 7.0.
 Copr. (c) 9-29-1993 DwarFools & Consultancy drs. Robert E. Swart
 P.O. box 799
 5702 NP Helmond
 The Netherlands
 Code size: 4832 bytes
 Data size: 1330 bytes
 .EXE size: 3337 bytes
 ----------------------------------------------------------------
 This program uudecodes files.
}
Const
 SP = Byte(' ');
 Type
 TTriplet = Array[0..2] of Byte;
 TKwartet = Array[0..3] of Byte;
var f: Text;
 g: File of Byte;
 FileName: String[12];
 Buffer: String;
 Kwartets: record
 lengte: Byte;
 aantal: Byte;
 kwart: Array[1..64] of TKwartet;
 end absolute Buffer;
 Trip: TTriplet;
 i: Integer;
 FUNCTION UpperStr(S : STRING) : STRING;
 VAR sLen : BYTE ABSOLUTE S;
 I : BYTE;
 BEGIN
 FOR I := 1 TO sLEN DO S := UpCase(S[i]);
 UpperStr := S;
 END;
 procedure Kwartet2Triplet(Kwartet: TKwartet; var Triplet: TTriplet);
 begin
 Triplet[0] := ((Kwartet[0] - SP) SHL 2) +
 (((Kwartet[1] - SP) AND 30ドル) SHR 4);
 Triplet[1] := (((Kwartet[1] - SP) AND 0ドルF) SHL 4) +
 (((Kwartet[2] - SP) AND 3ドルC) SHR 2);
 Triplet[2] := (((Kwartet[2] - SP) AND 03ドル) SHL 6) +
 ((Kwartet[3] - SP) AND 3ドルF)
 end {Kwartet2Triplet};
begin
 writeln('UUDeCode 3.1 (c) 1993 DwarFools & Consultancy' +
 ', by drs. Robert E. Swart'#13#10);
 if ParamCount = 0 then
 begin
 writeln('Usage: UUDeCode infile [outfile]');
 Halt
 end;
 if UpperStr(ParamStr(1)) = UpperStr(ParamStr(2)) then
 begin
 writeln('Error: infile = outfile');
 Halt(1)
 end;
 Assign(f,ParamStr(1));
 FileMode := 40ドル;
 reset(f);
 if IOResult  0 then
 begin
 writeln('Error: could not open file ',ParamStr(1));
 Halt(2)
 end;
 repeat
 readln(f,Buffer) { skip }
 until eof(f) or (Copy(Buffer,1,5) = 'begin');
 if Buffer[11] = #32 then FileName := Copy(Buffer,12,12)
 else
 if Buffer[10] = #32 then FileName := Copy(Buffer,11,12)
 else FileName := ParamStr(2);
 {$IFDEF DEBUG}
 writeln(FileName);
 {$ENDIF}
 if UpperStr(ParamStr(1)) = UpperStr(FileName) then
 begin
 writeln('Error: input file = output file');
 Halt(1)
 end;
 Assign(g,FileName);
 if ParamCount> 1 then
 begin
 FileMode := 02ドル;
 reset(g);
 if IOResult = 0 then
 begin
 writeln('Error: file ',FileName,' already exists.');
 Halt(3)
 end
 end;
 rewrite(g);
 if IOResult  0 then
 begin
 writeln('Error: could not create file ',FileName);
 Halt(4)
 end;
 while (not eof(f)) and (Buffer  'end') do
 begin
 FillChar(Buffer,SizeOf(Buffer),#32);
 readln(f,Buffer);
 if Buffer  'end' then
 begin
 for i:=1 to (Kwartets.aantal-32) div 3 do
 begin
 Kwartet2Triplet(Kwartets.kwart[i],Trip);
 write(g,Trip[0],Trip[1],Trip[2])
 end;
 if ((Kwartets.aantal-32) mod 3)> 0 then
 begin
 Kwartet2Triplet(Kwartets.kwart[i+1],Trip);
 for i:=1 to ((Kwartets.aantal-32) mod 3) do write(g,Trip[i-1])
 end
 end
 end;
 close(f);
 close(g);
 if ParamCount> 1 then
 writeln('UUDeCoded file ',FileName,' created.');
 writeln
end.
 

AltStyle によって変換されたページ (->オリジナル) /