dos_compilers/Borland Turbo Pascal v6/DOCDEMOS/TVGUID19.PAS
2024-07-02 07:11:05 -07:00

122 lines
2.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{************************************************}
{ }
{ Turbo Pascal 6.0 }
{ Demo program from the Turbo Vision Guide }
{ }
{ Copyright (c) 1990 by Borland International }
{ }
{************************************************}
{ Read a file and add each unique word to a sorted
string collection. Use the ForEach iterator method
to traverse the colection and print out each word.
}
program TVGUID19;
uses Objects, Memory;
const
FileToRead = 'TVGUID19.PAS';
{ ********************************** }
{ *********** Iterator *********** }
{ ********************************** }
{ Given the entire collection, use the ForEach
iterator to traverse and print all the words. }
procedure Print(C: PCollection);
{ Must be a local, far procedure. Receives one collection
element at a time--a pointer to a string--to print. }
procedure PrintWord(P : PString); far;
begin
Writeln(P^);
end;
begin { Print }
Writeln;
Writeln;
C^.ForEach(@PrintWord); { Call PrintWord }
end;
{ ********************************** }
{ ********** Globals ********* }
{ ********************************** }
{ Abort the program and give a message }
procedure Abort(Msg: String);
begin
Writeln;
Writeln(Msg);
Writeln('Program aborting');
Halt(1);
end;
{ Given an open text file, read it and return the next word }
function GetWord(var F : Text) : String;
var
S : String;
C : Char;
begin
S := '';
C := #0;
while not Eof(F) and not (UpCase(C) in ['A'..'Z']) do
Read(F, C);
if Eof(F) and (UpCase(C) in ['A'..'Z']) then
S := C
else
while (UpCase(C) in ['A'..'Z']) and not Eof(F) do
begin
S := S + C;
Read(F, C);
end;
GetWord := S;
end;
{ ********************************** }
{ ********** Main Program ********* }
{ ********************************** }
var
WordList: PCollection;
WordFile: Text;
WordFileName: string[80];
WordRead: String;
begin
{ Initialize collection to hold 10 elements first, then grow by 5's }
WordList := New(PStringCollection, Init(10, 5));
if LowMemory then Abort('Out of memory');
{ Open file of words }
if ParamCount = 1 then
WordFileName := ParamStr(1)
else
WordFileName := FileToRead;
Assign(WordFile, WordFileName);
{$I-}
Reset(WordFile);
{$I+}
if IOResult <> 0 then
Abort('Cannot find file "' + WordFileName + '"');
{ Read each word into the collection }
repeat
WordRead := GetWord(WordFile);
if WordRead <> '' then
WordList^.Insert(NewStr(WordRead));
if LowMemory then Abort('Out of memory');
until WordRead = '';
Close(WordFile);
{ Display collection contents }
Print(WordList);
{ Delete collection }
Dispose(WordList, Done);
end.