diff options
Diffstat (limited to '')
-rw-r--r-- | Modis/SDK/StrUtils.pas | 144 |
1 files changed, 72 insertions, 72 deletions
diff --git a/Modis/SDK/StrUtils.pas b/Modis/SDK/StrUtils.pas index 00cfbf08..a5735b8f 100644 --- a/Modis/SDK/StrUtils.pas +++ b/Modis/SDK/StrUtils.pas @@ -1,73 +1,73 @@ -unit StrUtils;
-
-interface
-
-{$I switches.inc}
-
-uses ModiSDK;
-
-//function StrToAChar(Str: String): AChar;
-function CreateStr(Str: PChar): PChar;
-procedure FreeStr(Str: PChar);
-
-implementation
-
-{function StrToAChar(Str: String): AChar;
-var
- L, I: Integer;
-begin
- L := Length(Str);
- For I := 0 to L-1 do
- AChar[I] := Str[I+1];
-
- For I := L to 254 do
- AChar[I] := #0;
-end; }
-
-function StrCopy(Dest, Source: PChar): PChar; assembler;
-asm
- PUSH EDI
- PUSH ESI
- MOV ESI,EAX
- MOV EDI,EDX
- MOV ECX,0FFFFFFFFH
- XOR AL,AL
- REPNE SCASB
- NOT ECX
- MOV EDI,ESI
- MOV ESI,EDX
- MOV EDX,ECX
- MOV EAX,EDI
- SHR ECX,2
- REP MOVSD
- MOV ECX,EDX
- AND ECX,3
- REP MOVSB
- POP ESI
- POP EDI
-end;
-
-function StrLen(Str: PChar): Cardinal; assembler;
-asm
- MOV EDX,EDI
- MOV EDI,EAX
- MOV ECX,0FFFFFFFFH
- XOR AL,AL
- REPNE SCASB
- MOV EAX,0FFFFFFFEH
- SUB EAX,ECX
- MOV EDI,EDX
-end;
-
-function CreateStr(Str: PChar): PChar;
-begin
- GetMem(Result, StrLen(Str) + 1);
- StrCopy(Result, Str);
-end;
-
-procedure FreeStr(Str: PChar);
-begin
- FreeMem(Str);
-end;
-
+unit StrUtils; + +interface + +{$I switches.inc} + +uses ModiSDK; + +//function StrToAChar(Str: String): AChar; +function CreateStr(Str: PChar): PChar; +procedure FreeStr(Str: PChar); + +implementation + +{function StrToAChar(Str: String): AChar; +var + L, I: Integer; +begin + L := Length(Str); + For I := 0 to L-1 do + AChar[I] := Str[I+1]; + + For I := L to 254 do + AChar[I] := #0; +end; } + +function StrCopy(Dest, Source: PChar): PChar; assembler; +asm + PUSH EDI + PUSH ESI + MOV ESI,EAX + MOV EDI,EDX + MOV ECX,0FFFFFFFFH + XOR AL,AL + REPNE SCASB + NOT ECX + MOV EDI,ESI + MOV ESI,EDX + MOV EDX,ECX + MOV EAX,EDI + SHR ECX,2 + REP MOVSD + MOV ECX,EDX + AND ECX,3 + REP MOVSB + POP ESI + POP EDI +end; + +function StrLen(Str: PChar): Cardinal; assembler; +asm + MOV EDX,EDI + MOV EDI,EAX + MOV ECX,0FFFFFFFFH + XOR AL,AL + REPNE SCASB + MOV EAX,0FFFFFFFEH + SUB EAX,ECX + MOV EDI,EDX +end; + +function CreateStr(Str: PChar): PChar; +begin + GetMem(Result, StrLen(Str) + 1); + StrCopy(Result, Str); +end; + +procedure FreeStr(Str: PChar); +begin + FreeMem(Str); +end; + end.
\ No newline at end of file |