home *** CD-ROM | disk | FTP | other *** search
- (* ****************************************************** *)
- (* FILEASM.PAS *)
- (* (c) 1993 Peter Hoffmann & DMV *)
- (* ****************************************************** *)
- PROGRAM Find;
-
- CONST
- tBufSize = 64000;
-
- TYPE
- pBuf = ^TBuf;
- tBuf = ARRAY [1..tBufSize] OF BYTE;
-
- VAR
- Buf : pBuf;
- F : File;
- C : WORD;
- Ok : BOOLEAN;
- P1, P2 : LongInt;
- S : STRING;
-
- FUNCTION FAsm(Puffer : pBuf; C : WORD; S : STRING) : WORD;
- ASSEMBLER;
- ASM
- PUSH DS
- CLD
- MOV CX,C
- JCXZ @4
- LDS SI,S
- LES DI,Puffer
- LODSB
- MOV BX,SI
- XOR AH,AH
- CMP AL,0
- JE @4
- DEC AL
- MOV DX,AX
- @1:
- MOV SI,BX
- LODSB
- REPNE SCASB
- JNE @4
- CMP DX,0
- JE @3
- PUSH DI
- PUSH CX
- MOV CX,DX
- @2:
- REPE CMPSB
- POP CX
- POP DI
- JNE @1
- @3:
- MOV AX,C
- SUB AX,CX
- JMP @5
- @4:
- XOR AX,AX
- @5:
- POP DS
- END;
-
- BEGIN
- Write('* ');
- S := ParamStr(1);
- Assign(F, ParamStr(2));
- Reset(F, 1);
- Ok := FALSE;
- P1 := 0; P2 := 0;
- New(Buf);
- IF Buf <> NIL THEN BEGIN
- WHILE NOT Ok AND (P2 = 0) DO BEGIN
- Seek(F, P1);
- BlockRead(F, Buf^, tBufSize, C);
- IF C <> tBufSize THEN
- Ok := TRUE
- ELSE
- C := tBufSize - Byte(S[0]);
- P2 := FAsm(Buf, C, S);
- IF P2 > 0 THEN P2 := P2 + P1;
- Inc(P1, C);
- END;
- Dispose(Buf); Buf := NIL;
- END;
- Close(F);
- WriteLn(P2, ' *');
- End.
- (* ****************************************************** *)
- (* Ende von FILEASM.PAS *)