home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9302 / pastrick / fileasm.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-02-23  |  1.7 KB  |  90 lines

  1. (* ****************************************************** *)
  2. (*                    FILEASM.PAS                         *)
  3. (*            (c) 1993 Peter Hoffmann & DMV               *)
  4. (* ****************************************************** *)
  5. PROGRAM Find;
  6.  
  7. CONST
  8.   tBufSize = 64000;
  9.  
  10. TYPE
  11.   pBuf = ^TBuf;
  12.   tBuf = ARRAY [1..tBufSize] OF BYTE;
  13.  
  14. VAR
  15.   Buf    : pBuf;
  16.   F      : File;
  17.   C      : WORD;
  18.   Ok     : BOOLEAN;
  19.   P1, P2 : LongInt;
  20.   S      : STRING;
  21.  
  22.   FUNCTION FAsm(Puffer : pBuf; C : WORD; S : STRING) : WORD;
  23.   ASSEMBLER;
  24.   ASM
  25.     PUSH  DS
  26.     CLD
  27.     MOV   CX,C
  28.     JCXZ  @4
  29.     LDS   SI,S
  30.     LES   DI,Puffer
  31.     LODSB
  32.     MOV   BX,SI
  33.     XOR   AH,AH
  34.     CMP   AL,0
  35.     JE    @4
  36.     DEC   AL
  37.     MOV   DX,AX
  38.   @1:
  39.     MOV   SI,BX
  40.     LODSB
  41.     REPNE SCASB
  42.     JNE   @4
  43.     CMP   DX,0
  44.     JE    @3
  45.     PUSH  DI
  46.     PUSH  CX
  47.     MOV   CX,DX
  48.    @2:
  49.     REPE  CMPSB
  50.     POP   CX
  51.     POP   DI
  52.     JNE   @1
  53.   @3:
  54.     MOV   AX,C
  55.     SUB   AX,CX
  56.     JMP   @5
  57.   @4:
  58.     XOR   AX,AX
  59.   @5:
  60.     POP   DS
  61.   END;
  62.  
  63. BEGIN
  64.   Write('* ');
  65.   S := ParamStr(1);
  66.   Assign(F, ParamStr(2));
  67.   Reset(F, 1);
  68.   Ok := FALSE;
  69.   P1 := 0;  P2 := 0;
  70.   New(Buf);
  71.   IF Buf <> NIL THEN BEGIN
  72.     WHILE NOT Ok AND (P2 = 0) DO BEGIN
  73.       Seek(F, P1);
  74.       BlockRead(F, Buf^, tBufSize, C);
  75.       IF C <> tBufSize THEN
  76.         Ok := TRUE
  77.       ELSE
  78.         C := tBufSize - Byte(S[0]);
  79.       P2 := FAsm(Buf, C, S);
  80.       IF P2 > 0 THEN P2 := P2 + P1;
  81.       Inc(P1, C);
  82.     END;
  83.     Dispose(Buf);  Buf := NIL;
  84.   END;
  85.   Close(F);
  86.   WriteLn(P2, ' *');
  87. End.
  88. (* ****************************************************** *)
  89. (*               Ende von FILEASM.PAS                     *)
  90.