home *** CD-ROM | disk | FTP | other *** search
- {$E+,I-,N+,R-,V- -80x87 emulation, no I/O errors, no range checks}
-
- PROGRAM NDX_Seek;
-
- USES NDX, dBASE;
-
- VAR
- N, N1: _NDX;
- D: DBFile;
- DBFrecP: CharPtr;
- Key: KeyStr;
- NKey: Double;
- Count, ec: INTEGER;
-
- CONST
- Done: Boolean = FALSE;
- Quick: Boolean = FALSE;
-
- Procedure DisplayRec (RecNo: LONGINT);
- BEGIN
- IF RecNo <> 0 THEN
- BEGIN
- DBFreadRec (RecNo, D, DBFrecP);
- DBFdispRec (RecNo, D, DBFrecP);
- Inc (Count);
- END;
- END;
-
- {$F+} PROCEDURE ProcessRec (Var N: _NDX; Var entry: NDXentry);
- BEGIN
- DisplayRec (Entry^.RecNo);
- END;
- {$F-}
-
- BEGIN
- NDXopen (N, 'Test.NDX');
- NDXopen (N1, 'NTEST.NDX');
- D := DBFopen ('Test.DBF');
- IF DBFreadHdr (D) <> 0 THEN
- BEGIN
- WriteLn(' Error reading DBF or DBF empty.');
- Halt(1);
- END;
- If Not DBFreadStru (D) THEN
- BEGIN
- WriteLn ('Error Reading DBF Field Information.');
- Halt (1);
- END;
-
- GetMem (DBFrecP, D^.RecLen);
-
- WHILE NOT Done DO
- BEGIN
- Count :=0;
- Write ('Enter key ("/h" for help): ');
- ReadLn(Key);
- IF Key = '/l' THEN
- NDXTraverse (N, ProcessRec)
- ELSE IF Key = '/ln' THEN
- NDXTraverse (n1, ProcessRec)
- ELSE IF Key = '/x' THEN
- Done := TRUE
- ELSE IF Key = '/exact on' THEN
- SetExact := TRUE
- ELSE IF Key = '/exact off' THEN
- SetExact := FALSE
- ELSE IF Key ='/quick on' THEN
- Quick := TRUE
- ELSE IF Key ='quick off' THEN
- Quick := FALSE
- ELSE IF Key = '/h' THEN
- BEGIN
- WriteLn ('Enter alphanumeric or numeric key or:');
- WriteLn (' /l -list all alphanumerically');
- WriteLn (' /ln -list all numericallly');
- WriteLn (' /x -Exit');
- WriteLn (' /exact on -match key exactly');
- WriteLn (' /exact off -match key to letters typed');
- WriteLn (' /quick on -match first record only');
- WriteLn (' /quick off -match first record only');
- END
- ELSE
- BEGIN
- Val (Key, NKey, ec);
- IF ec = 0 THEN
- IF Quick THEN
- DisplayRec (NDXseekN (N1, NKey))
- ELSE
- NDXseekAllN (N1, ProcessRec, NKEy)
- ELSE
- IF Quick THEN
- DisplayRec (NDXseek (N, Key));
- ELSE
- NDXseekAll (N, ProcessRec, Key);
- END;
-
- WriteLn ('=>Count=', Count,'; Quick=', quick,'Exact=',SetExact);
- END;
-
- NDXclose (N);
- NDXclose (N1);
- IF DBFclose (D) THEN
- END.
-