Преглед на файлове

* Fixes and new examples from Sebastian Guenther

michael преди 26 години
родител
ревизия
62678390c1
променени са 6 файла, в които са добавени 131 реда и са изтрити 12 реда
  1. 9 10
      fcl/inc/base64.pp
  2. 6 2
      fcl/tests/Makefile
  3. 3 0
      fcl/tests/README
  4. 37 0
      fcl/tests/b64dec.pp
  5. 39 0
      fcl/tests/b64enc.pp
  6. 37 0
      fcl/tests/b64test2.pp

+ 9 - 10
fcl/inc/base64.pp

@@ -81,7 +81,7 @@ destructor TBase64EncodingStream.Destroy;
 var
   WriteBuf: array[0..3] of Char;
 begin
-  // Fill output to multiple of 3
+  // Fill output to multiple of 4
   case (TotalBytesProcessed mod 3) of
     1: begin
         WriteBuf[0] := EncodingTable[Buf[0] shr 2];
@@ -109,19 +109,18 @@ end;
 function TBase64EncodingStream.Write(const Buffer; Count: Longint): Longint;
 var
   ReadNow: LongInt;
-  p: PChar;
+  p: Pointer;
   WriteBuf: array[0..3] of Char;
 begin
   Inc(TotalBytesProcessed, Count);
   Result := Count;
 
-  p := PChar(Buffer);
+  p := @Buffer;
   while count > 0 do begin
     // Fetch data into the Buffer
     ReadNow := 3 - BufSize;
     if ReadNow > Count then break;    // Not enough data available
-
-    Move(p, Buf[BufSize], ReadNow);
+    Move(p^, Buf[BufSize], ReadNow);
     Inc(p, ReadNow);
     Dec(Count, ReadNow);
 
@@ -134,7 +133,7 @@ begin
     Inc(BytesWritten, 4);
     BufSize := 0;
   end;
-  Move(p, Buf[BufSize], count);
+  Move(p^, Buf[BufSize], count);
   Inc(BufSize, count);
 end;
 
@@ -173,7 +172,6 @@ begin
     if endbytes[0] = '=' then
       Dec(DataLen);
   end;
-  // WriteLn('DataLen = ', DataLen);
 end;
 
 function TBase64DecodingStream.Read(var Buffer; Count: Longint): Longint;
@@ -211,11 +209,9 @@ begin
 	  end;
 	end;
       end;
-      // WriteLn('ReadBuf: ', ReadBuf[0], ' ', ReadBuf[1], ' ', ReadBuf[2], ' ', ReadBuf[3]);
       Buf[0] := ReadBuf[0] shl 2 or ReadBuf[1] shr 4;
       Buf[1] := (ReadBuf[1] and 15) shl 4 or ReadBuf[2] shr 2;
       Buf[2] := (ReadBuf[2] and 3) shl 6 or ReadBuf[3];
-      // WriteLn('Gelesen: ', Buf[0], ' ', Buf[1], ' ', Buf[2]);
     end;
 
     p[0] := Chr(Buf[BufPos]);
@@ -250,7 +246,10 @@ end.
 
 {
   $Log$
-  Revision 1.1  1999-08-03 17:02:38  michael
+  Revision 1.2  1999-08-09 16:12:28  michael
+  * Fixes and new examples from Sebastian Guenther
+
+  Revision 1.1  1999/08/03 17:02:38  michael
   * Base64 en/de cdeing streams added
 
 }

+ 6 - 2
fcl/tests/Makefile

@@ -36,7 +36,8 @@ NEEDOPT=-S2
 
 UNITOBJECTS=
 EXEOBJECTS=stringl dparser fstream mstream list threads testrtf\
-           cfgtest testz testz2 xmldump htdump testcgi tidea b64test
+           cfgtest testz testz2 xmldump htdump testcgi tidea\
+           b64test b64test2 b64enc b64dec
 
 
 #####################################################################
@@ -113,7 +114,10 @@ endif
 
 #
 # $Log$
-# Revision 1.10  1999-08-03 17:02:36  michael
+# Revision 1.11  1999-08-09 16:12:26  michael
+# * Fixes and new examples from Sebastian Guenther
+#
+# Revision 1.10  1999/08/03 17:02:36  michael
 # * Base64 en/de cdeing streams added
 #
 # Revision 1.9  1999/07/25 14:30:39  michael

+ 3 - 0
fcl/tests/README

@@ -29,3 +29,6 @@ htdump.pp    htdump dumps XL IDL definition as ObjectPascal classes (MVC)
 testcgi.pp   test program for ezcgi class (MH)
 tidea.pp     test program for IDEA encryption/decryption streams (MVC)
 b64test.pp   test program for base64 encoding streams (SG)
+b64test2.pp  test program for base64 encoding streams (SG)
+b64enc.pp    base64-encodes StdIn to StdOut (SG)
+b64dec.pp    base64-decodes file given as 1st argument to StdOut (SG)

+ 37 - 0
fcl/tests/b64dec.pp

@@ -0,0 +1,37 @@
+// $Id$
+
+// base64-decodes a file (argument #1) and writes the output to StdOut
+// (c) 1999 Sebastian Guenther
+
+{$MODE objfpc}
+
+program b64dec;
+uses classes, base64, sysutils;
+var
+  b64decoder: TBase64DecodingStream;
+  InputStream: TStream;
+  IsEnd: Boolean;
+begin
+
+  InputStream := TFileStream.Create(ParamStr(1), fmOpenRead);
+
+  b64decoder := TBase64DecodingStream.Create(InputStream);
+
+  while not IsEnd do
+    try
+      Write(Chr(b64decoder.ReadByte));
+    except
+      on e: EStreamError do IsEnd := True;
+    end;
+
+  b64decoder.Free;
+  InputStream.Free;
+end.
+
+
+{
+  $Log$
+  Revision 1.1  1999-08-09 16:12:26  michael
+  * Fixes and new examples from Sebastian Guenther
+
+}

+ 39 - 0
fcl/tests/b64enc.pp

@@ -0,0 +1,39 @@
+// $Id$
+
+// base64-encodes data from StdIn and writes the output to StdOut
+// (c) 1999 Sebastian Guenther
+
+{$MODE objfpc}
+
+program b64enc;
+uses classes, base64, sysutils;
+var
+  b64encoder: TBase64EncodingStream;
+  InputStream, OutputStream: TStream;
+  IsEnd: Boolean;
+begin
+
+  InputStream := THandleStream.Create(StdInputHandle);
+  OutputStream := THandleStream.Create(StdOutputHandle);
+
+  b64encoder := TBase64EncodingStream.Create(OutputStream);
+
+  while not IsEnd do
+    try
+      b64encoder.WriteByte(InputStream.ReadByte);
+    except
+      on e: EStreamError do IsEnd := True;
+    end;
+
+  b64encoder.Free;
+  InputStream.Free;
+  OutputStream.Free;
+end.
+
+
+{
+  $Log$
+  Revision 1.1  1999-08-09 16:12:26  michael
+  * Fixes and new examples from Sebastian Guenther
+
+}

+ 37 - 0
fcl/tests/b64test2.pp

@@ -0,0 +1,37 @@
+{$MODE objfpc}
+
+program b64test;
+uses classes, base64, sysutils;
+var
+  b64encoder: TBase64EncodingStream;
+  b64decoder: TBase64DecodingStream;
+  BaseStream: TStream;
+  i, j: Integer;
+  buf: array[1..23] of Char;
+begin
+  BaseStream := TMemoryStream.Create;
+
+  WriteLn('Encoded Size / Decoded Size / Data:');
+
+  for i := 1 to 22 do begin
+    BaseStream.Position := 0;
+
+    b64encoder := TBase64EncodingStream.Create(BaseStream);
+    for j := 1 to i do
+      buf[j] := Chr(i - j + 65);
+    b64encoder.Write(buf, i);
+    Write(b64encoder.Size: 2, ' ');
+    b64encoder.Free;
+
+    BaseStream.Position := 0;
+
+    b64decoder := TBase64DecodingStream.Create(BaseStream);
+    Write(b64decoder.Size: 2, ' ');
+    b64decoder.Read(buf, i);
+    buf[i + 1] := #0;
+    WriteLn(buf);
+    b64decoder.Free;
+  end;
+
+  BaseStream.Free;
+end.