home *** CD-ROM | disk | FTP | other *** search
- program STACKDEM; {example of how to use STI_STAK }
-
- Uses
- Crt, STI_STAK; {the stack unit }
-
- Type
- DataRec1 = string; {one kind of data record }
- DataRec2 = record {the second data record }
- Symbol : string;
- Pos : word;
- end;
-
- Var
- Stack1, {stack #1 }
- Stack2 : STI_StackPtr; {stack #2 }
- Data1 : DataRec1; {data #1 }
- Data2 : DataRec2; {data #2 }
-
- {---------------------------------------------------------------------------}
-
- procedure DisplayStackError; {display the current stack state}
-
- begin
- GotoXY(1,1);
- ClrEol;
- write('Memory = ',MaxAvail);
- GotoXY(25,1);
- Case STI_StackError of
- STACK_ALL_OK : writeln('No Problems');
- STACK_OVERFLOW : writeln('Stack Overflow');
- STACK_UNDERFLOW : writeln('Stack Underflow');
- STACK_NO_MEMORY : writeln('Not Enough Memory');
- end;
- end;
-
- {---------------------------------------------------------------------------}
-
- procedure Push_and_Pop; {push a lot of data then pop it }
-
- Var
- Loop : word;
-
- begin
- for loop := 1 to 500 do
- begin
- str(loop,Data1);
- str(loop,Data2.Symbol);
- Data2.Symbol := 'Hello ' + Data2.Symbol;
- Data2.Pos := loop;
- STI_Push(Stack1,Data1,sizeof(Data1));
- DisplayStackError;
- STI_Push(Stack2,Data2,sizeof(Data2));
- DisplayStackError;
- GotoXY(1,10);
- ClrEol;
- writeln('Pushed : Stack #1 ',Data1,' Stack #2 ',Data2.Symbol,'->',Data2.Pos);
- end;
- for loop := 1 to 500 do
- begin
- str(loop,Data1);
- str(loop,Data2.Symbol);
- Data2.Symbol := 'Hello ' + Data2.Symbol;
- Data2.Pos := loop;
- STI_Pop(Stack1,Data1,sizeof(Data1));
- DisplayStackError;
- STI_Pop(Stack2,Data2,sizeof(Data2));
- DisplayStackError;
- GotoXY(1,11);
- ClrEol;
- writeln('Popped : Stack #1 ',Data1,'-',Data1,' Stack #2 ',Data2.Symbol,'->',Data2.Pos,'-',Stack2^.StackP);
- end;
- end;
-
- {---------------------------------------------------------------------------}
-
- procedure TestStacks; {create, test and destry stacks }
-
- begin
- DisplayStackError;
- write('Press return to continue : ');
- ReadLn;
- GotoXY(1,3);
- Writeln('Creating stack number one');
- STI_Create_Stack(Stack1,300);
- DisplayStackError;
- GotoXY(1,4);
- Writeln('Creating stack number two');
- STI_Create_Stack(Stack2,300);
- DisplayStackError;
- Push_and_Pop;
- write('Press return to continue : ');
- ReadLn;
- GotoXY(40,3);
- Writeln('Destroying stack number one');
- STI_Destroy_Stack(Stack1);
- DisplayStackError;
- GotoXY(40,4);
- Writeln('Destroying stack number two');
- STI_Destroy_Stack(Stack2);
- DisplayStackError;
- end;
-
- {---------------------------------------------------------------------------}
-
- begin {main }
- ClrScr;
- TestStacks;
- end.