home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / PNL Libraries / Assembly / TranslateISO.p < prev    next >
Encoding:
Text File  |  1995-10-23  |  3.4 KB  |  171 lines  |  [TEXT/CWIE]

  1. unit TranslateISO;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types;
  7.  
  8.     procedure StartupTranslateISO;
  9.     function NetToMac (p: ptr; len: longint): longint;
  10.     function MacToNet (p: ptr; len: longint): longint;
  11.  
  12. implementation
  13.  
  14.     uses
  15.         Resources, Errors,Toolutils, MyStartup;
  16.  
  17.     type
  18.         tablArray = packed array[0..255] of byte;
  19.         tablArrayPtr = ^tablArray;
  20.         
  21.     var
  22.         tabl:Handle; { NOTE: NetToMac lf->cr }
  23.     
  24. {$IFC GENERATINGPOWERPC}
  25.     function NetToMac (p: ptr; len: longint): longint;
  26.         var
  27.             src,dst:Ptr;
  28.             tp:tablArrayPtr;
  29.             b:integer;
  30.     begin
  31.         tp:=tablArrayPtr(tabl^);
  32.         src:=p;
  33.         dst:=p;
  34.         while len>0 do begin
  35.             b:=BAND(src^,$FF);
  36.             if b <> 13 then begin
  37.                 dst^:=tp^[b];     { maps lf -> cr }
  38.                 inc(longint(dst));
  39.             end;
  40.             inc(longint(src));
  41.             len:=len-1;
  42.         end;
  43.         NetToMac:=longint(dst)-longint(p);
  44.     end;
  45.  
  46.     function MacToNet (p: ptr; len: longint): longint;
  47.         var
  48.             src,dst:Ptr;
  49.             tp:tablArrayPtr;
  50.             b:integer;
  51.             i:longint;
  52.             destlen:longint;
  53.     begin
  54.         tp:=tablArrayPtr(longint(tabl^)+256);
  55.         destlen:=len;
  56.         src:=p;
  57. { first find the final length of the block }
  58.         i:=len;
  59.         while i>0 do begin
  60.             if src^=13 then begin
  61.                 inc(destlen);
  62.             end;
  63.             inc(longint(src));
  64.             i:=i-1;
  65.         end;
  66.         dst := Ptr(longint(p) + destlen);
  67.         src := Ptr(longint(p) + len);
  68.         i:=len;
  69.         while i>0 do begin
  70.             dec(longint(src));
  71.             b := BAND(src^, $FF);
  72.             if b = 13 then begin
  73.                 dec(longint(dst));
  74.                 dst^ := 10;
  75.             end;
  76.             dec(longint(dst));
  77.             dst^ := tp^[b];
  78.             i:=i-1;
  79.         end;
  80.         MacToNet:=destlen;
  81.     end;
  82.     
  83. {$ELSEC}
  84.  
  85.     function NetToMacTabl (tabl:Handle; p: ptr; len: longint): longint; external;
  86.     function MacToNetTabl (tabl:Handle; p: ptr; len: longint): longint; external;
  87.  
  88.     function NetToMac (p: ptr; len: longint): longint;
  89.     begin
  90.         NetToMac := NetToMacTabl(tabl, p, len);
  91.     end;
  92.     
  93.     function MacToNet (p: ptr; len: longint): longint;
  94.     begin
  95.         MacToNet := MacToNetTabl(tabl, p, len);
  96.     end;
  97.     
  98. {$ENDC}
  99.  
  100.     function InitTranslateISO(var msg: integer):OSStatus;
  101.         var
  102.             err:OSErr;
  103.             tp:tablArrayPtr;
  104.     begin
  105.         msg := msg; { Unused }
  106.         tabl:=Get1Resource('taBL',128);
  107.         if tabl<>nil then begin
  108.             DetachResource(tabl);
  109.             MoveHHi(tabl);
  110.             HLock(tabl); { Must be locked, since these routines can be called at interupt time }
  111.             tp:=tablArrayPtr(tabl^); { NetToMac map lf -> cr }
  112.             tp^[10] := 13;
  113.             err:=noErr;
  114.         end else begin
  115.             err:=resNotFound;
  116.         end;
  117.         InitTranslateISO:=err;
  118.     end;
  119.     
  120.     procedure StartupTranslateISO;
  121.     begin
  122.         SetStartup(InitTranslateISO, nil, 0, nil);
  123.     end;
  124.     
  125. end.
  126.  
  127.     procedure TestSpeeds;
  128.         function NS (n: longint): Str255;
  129.             var
  130.                 s: Str255;
  131.         begin
  132.             NumToString(n, s);
  133.             NS := s;
  134.         end;
  135.  
  136.         var
  137.             data:Handle;
  138.             s:Str255;
  139.             i:integer;
  140.             t,t1,t2,t3,t4:longint;
  141.             size:longint;
  142.             len1,len2,len3,len4:longint;
  143.             junk:OSErr;
  144.     begin
  145.         s:=concat('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',chr(13));
  146.         data:=NewHandle(0);
  147.         for i:=1 to 1000 do begin
  148.             junk:=PtrAndHand(@s[1],data,length(s));
  149.         end;
  150.         size:=GetHandleSize(data);
  151.         SetHandleSize(data,size*2);
  152.         t:=TickCount;
  153.         len1:=MacToNet(data^,size);
  154.         t1:=TickCount-t;
  155.         t:=TickCount;
  156.         len2:=NetToMac(data^,len1);
  157.         t2:=TickCount-t;
  158.         t:=TickCount;
  159.         len3:=PPCMacToNet(data^,len2);
  160.         t3:=TickCount-t;
  161.         t:=TickCount;
  162.         len4:=PPCNetToMac(data^,len3);
  163.         t4:=TickCount-t;
  164.         DebugStr(concat(NS(size),',',NS(len1),',',NS(len2),',',NS(len3),',',NS(len4),',',NS(t1),',',NS(t2),',',NS(t3),',',NS(t4)));
  165.         DisposeHandle(data);
  166.     end;
  167.     
  168.     { Result was:
  169.         61000,62000,61000,62000,61000,8,7,12,8
  170.     }
  171.