home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-10-23 | 3.4 KB | 171 lines | [TEXT/CWIE] |
- unit TranslateISO;
-
- interface
-
- uses
- Types;
-
- procedure StartupTranslateISO;
- function NetToMac (p: ptr; len: longint): longint;
- function MacToNet (p: ptr; len: longint): longint;
-
- implementation
-
- uses
- Resources, Errors,Toolutils, MyStartup;
-
- type
- tablArray = packed array[0..255] of byte;
- tablArrayPtr = ^tablArray;
-
- var
- tabl:Handle; { NOTE: NetToMac lf->cr }
-
- {$IFC GENERATINGPOWERPC}
- function NetToMac (p: ptr; len: longint): longint;
- var
- src,dst:Ptr;
- tp:tablArrayPtr;
- b:integer;
- begin
- tp:=tablArrayPtr(tabl^);
- src:=p;
- dst:=p;
- while len>0 do begin
- b:=BAND(src^,$FF);
- if b <> 13 then begin
- dst^:=tp^[b]; { maps lf -> cr }
- inc(longint(dst));
- end;
- inc(longint(src));
- len:=len-1;
- end;
- NetToMac:=longint(dst)-longint(p);
- end;
-
- function MacToNet (p: ptr; len: longint): longint;
- var
- src,dst:Ptr;
- tp:tablArrayPtr;
- b:integer;
- i:longint;
- destlen:longint;
- begin
- tp:=tablArrayPtr(longint(tabl^)+256);
- destlen:=len;
- src:=p;
- { first find the final length of the block }
- i:=len;
- while i>0 do begin
- if src^=13 then begin
- inc(destlen);
- end;
- inc(longint(src));
- i:=i-1;
- end;
- dst := Ptr(longint(p) + destlen);
- src := Ptr(longint(p) + len);
- i:=len;
- while i>0 do begin
- dec(longint(src));
- b := BAND(src^, $FF);
- if b = 13 then begin
- dec(longint(dst));
- dst^ := 10;
- end;
- dec(longint(dst));
- dst^ := tp^[b];
- i:=i-1;
- end;
- MacToNet:=destlen;
- end;
-
- {$ELSEC}
-
- function NetToMacTabl (tabl:Handle; p: ptr; len: longint): longint; external;
- function MacToNetTabl (tabl:Handle; p: ptr; len: longint): longint; external;
-
- function NetToMac (p: ptr; len: longint): longint;
- begin
- NetToMac := NetToMacTabl(tabl, p, len);
- end;
-
- function MacToNet (p: ptr; len: longint): longint;
- begin
- MacToNet := MacToNetTabl(tabl, p, len);
- end;
-
- {$ENDC}
-
- function InitTranslateISO(var msg: integer):OSStatus;
- var
- err:OSErr;
- tp:tablArrayPtr;
- begin
- msg := msg; { Unused }
- tabl:=Get1Resource('taBL',128);
- if tabl<>nil then begin
- DetachResource(tabl);
- MoveHHi(tabl);
- HLock(tabl); { Must be locked, since these routines can be called at interupt time }
- tp:=tablArrayPtr(tabl^); { NetToMac map lf -> cr }
- tp^[10] := 13;
- err:=noErr;
- end else begin
- err:=resNotFound;
- end;
- InitTranslateISO:=err;
- end;
-
- procedure StartupTranslateISO;
- begin
- SetStartup(InitTranslateISO, nil, 0, nil);
- end;
-
- end.
-
- procedure TestSpeeds;
- function NS (n: longint): Str255;
- var
- s: Str255;
- begin
- NumToString(n, s);
- NS := s;
- end;
-
- var
- data:Handle;
- s:Str255;
- i:integer;
- t,t1,t2,t3,t4:longint;
- size:longint;
- len1,len2,len3,len4:longint;
- junk:OSErr;
- begin
- s:=concat('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',chr(13));
- data:=NewHandle(0);
- for i:=1 to 1000 do begin
- junk:=PtrAndHand(@s[1],data,length(s));
- end;
- size:=GetHandleSize(data);
- SetHandleSize(data,size*2);
- t:=TickCount;
- len1:=MacToNet(data^,size);
- t1:=TickCount-t;
- t:=TickCount;
- len2:=NetToMac(data^,len1);
- t2:=TickCount-t;
- t:=TickCount;
- len3:=PPCMacToNet(data^,len2);
- t3:=TickCount-t;
- t:=TickCount;
- len4:=PPCNetToMac(data^,len3);
- t4:=TickCount-t;
- DebugStr(concat(NS(size),',',NS(len1),',',NS(len2),',',NS(len3),',',NS(len4),',',NS(t1),',',NS(t2),',',NS(t3),',',NS(t4)));
- DisposeHandle(data);
- end;
-
- { Result was:
- 61000,62000,61000,62000,61000,8,7,12,8
- }
-