home *** CD-ROM | disk | FTP | other *** search
- program Example2; { (C) 1991 John C. Leon last updated 10/19/91 }
-
- USES
- BTP;
-
- TYPE
- ExampleFields = record
- case integer of
- 1: (First : array[1..10] of char;
- Last : array[1..20] of char;
- KeyBuf : array[1..20] of char);
- 2: (DBuffer : array[1..30] of char);
- 3: (Position: array[1..2] of word);
- end;
- PExample = ^ExampleFile;
- ExampleFile = object(BFileExt)
- Fields: ExampleFields;
- function BT(OpCode, Key: integer): integer; virtual;
- function BTExt(OpCode, Key: integer): integer; virtual;
- function GetNumRecs:longint;
- function GetName: string;
- end;
-
-
- VAR
- Example : PExample;
- NumberRecords : longint;
- x : string;
- Value : TCharArray;
- Counter : integer;
-
- (* Define methods of ExampleFile *)
- (* ------------------------------------------------------------------------ *)
-
- function ExampleFile.BT(OpCode, Key:integer):integer;
- begin
- DBufferLen := Specs.RecLen;
- BT := Btrv(OpCode, PosBlk, Fields, DBufferLen, Fields.KeyBuf, Key);
- end;
-
- {Despite the use of two different functions, thanks to OOP, we are assured
- of using the precise position block, data buffer and key buffer required.}
- function ExampleFile.BTExt(OpCode, Key: integer): integer;
- begin
- BStatus := BFileExt.BTExt(OpCode, Key);
- BTExt := Btrv(OpCode, PosBlk, ExtDBuffer^.Entire, DBufferLen, Fields.KeyBuf,
- Key);
- end;
-
- function ExampleFile.GetNumRecs: longint;
- begin
- GetNumRecs := NumRecs;
- end;
-
- function ExampleFile.GetName: string;
- var
- First, Last : string;
- begin
- First := RTrim(Fields.First);
- Last := RTrim(Fields.Last);
- GetName := First + ' ' + Last;
- end;
-
-
- (* begin MAIN PROGRAM code *)
- (* ------------------------------------------------------------------------ *)
- BEGIN
-
- Example := new(PExample, Init('Example', ReadOnly));
- if Example^.NumRecs = 0 then
- begin
- writeln('Please run Example2.EXE at least once to put a record in file.');
- halt;
- end;
-
- with Example^ do
- begin
- Filter.MaxSkip := 50;
- Filter.NumLogicTerms := 2;
- Extractor.NumRecords := 5;
- Extractor.NumFields := 1;
- end;
-
- X := 'Leon';
- for Counter := 1 to length(X) do
- Value[Counter] := X[Counter];
- for Counter := (length(X)+1) to 255 do
- Value[Counter] := ' ';
-
- with Example^.FilterSpec^ do
- insert(new(PFilterSpec, InitV(BString, 20, 10, Equal, NextTermAnd, false, Value)));
-
- X := 'John';
- for Counter := 1 to length(X) do
- Value[Counter] := X[Counter];
- for Counter := (length(X)+1) to 255 do
- Value[Counter] := ' ';
-
- with Example^.FilterSpec^ do
- insert(new(PFilterSpec, InitV(BString, 10, 0, Equal, LastTerm, false, Value)));
-
- with Example^.ExtractorSpec^ do
- insert(new(PExtSpec, Init(Example^.Specs.RecLen, 0)));
-
- BStatus := Example^.BT(BGetFirst, Zero);
- writeln('Status of get first is ', BStatus);
-
- BStatus := Example^.BTExt(BGetNextExt, Zero);
- writeln('Status of ext get next is ', BStatus);
-
- writeln('Number of records with name ''John Leon'' is ',
- Example^.ExtDBuffer^.NumRecs);
-
- BStatus := Example^.Close;
- if BStatus = 0 then
- writeln('EXAMPLE closed successfully.')
- else
- writeln('Problem closing EXAMPLE. Status = ', BStatus);
-
-
- dispose(Example, Done);
-
- END.
-
-
-