home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / nicol / sti_stak / stackdem.pas next >
Encoding:
Pascal/Delphi Source File  |  1990-08-22  |  3.2 KB  |  108 lines

  1. program STACKDEM;                           {example of how to use STI_STAK }
  2.  
  3. Uses
  4.    Crt, STI_STAK;                           {the stack unit                 }
  5.  
  6. Type
  7.    DataRec1 = string;                       {one kind of data record        }
  8.    DataRec2 = record                        {the second data record         }
  9.                 Symbol : string;
  10.                 Pos    : word;
  11.               end;
  12.  
  13. Var
  14.   Stack1,                                   {stack #1                       }
  15.   Stack2   : STI_StackPtr;                  {stack #2                       }
  16.   Data1    : DataRec1;                      {data #1                        }
  17.   Data2    : DataRec2;                      {data #2                        }
  18.  
  19. {---------------------------------------------------------------------------}
  20.  
  21. procedure DisplayStackError;                {display the current stack state}
  22.  
  23. begin
  24.   GotoXY(1,1);
  25.   ClrEol;
  26.   write('Memory = ',MaxAvail);
  27.   GotoXY(25,1);
  28.   Case STI_StackError of
  29.     STACK_ALL_OK    : writeln('No Problems');
  30.     STACK_OVERFLOW  : writeln('Stack Overflow');
  31.     STACK_UNDERFLOW : writeln('Stack Underflow');
  32.     STACK_NO_MEMORY : writeln('Not Enough Memory');
  33.   end;
  34. end;
  35.  
  36. {---------------------------------------------------------------------------}
  37.  
  38. procedure Push_and_Pop;                     {push a lot of data then pop it }
  39.  
  40. Var
  41.  Loop : word;
  42.  
  43. begin
  44.   for loop := 1 to 500 do
  45.     begin
  46.       str(loop,Data1);
  47.       str(loop,Data2.Symbol);
  48.       Data2.Symbol := 'Hello ' + Data2.Symbol;
  49.       Data2.Pos := loop;
  50.       STI_Push(Stack1,Data1,sizeof(Data1));
  51.       DisplayStackError;
  52.       STI_Push(Stack2,Data2,sizeof(Data2));
  53.       DisplayStackError;
  54.       GotoXY(1,10);
  55.       ClrEol;
  56.       writeln('Pushed : Stack #1 ',Data1,'  Stack #2 ',Data2.Symbol,'->',Data2.Pos);
  57.     end;
  58.   for loop := 1 to 500 do
  59.     begin
  60.       str(loop,Data1);
  61.       str(loop,Data2.Symbol);
  62.       Data2.Symbol := 'Hello ' + Data2.Symbol;
  63.       Data2.Pos := loop;
  64.       STI_Pop(Stack1,Data1,sizeof(Data1));
  65.       DisplayStackError;
  66.       STI_Pop(Stack2,Data2,sizeof(Data2));
  67.       DisplayStackError;
  68.       GotoXY(1,11);
  69.       ClrEol;
  70.       writeln('Popped : Stack #1 ',Data1,'-',Data1,'  Stack #2 ',Data2.Symbol,'->',Data2.Pos,'-',Stack2^.StackP);
  71.     end;
  72. end;
  73.  
  74. {---------------------------------------------------------------------------}
  75.  
  76. procedure TestStacks;                       {create, test and destry stacks }
  77.  
  78. begin
  79.   DisplayStackError;
  80.   write('Press return to continue : ');
  81.   ReadLn;
  82.   GotoXY(1,3);
  83.   Writeln('Creating stack number one');
  84.   STI_Create_Stack(Stack1,300);
  85.   DisplayStackError;
  86.   GotoXY(1,4);
  87.   Writeln('Creating stack number two');
  88.   STI_Create_Stack(Stack2,300);
  89.   DisplayStackError;
  90.   Push_and_Pop;
  91.   write('Press return to continue : ');
  92.   ReadLn;
  93.   GotoXY(40,3);
  94.   Writeln('Destroying stack number one');
  95.   STI_Destroy_Stack(Stack1);
  96.   DisplayStackError;
  97.   GotoXY(40,4);
  98.   Writeln('Destroying stack number two');
  99.   STI_Destroy_Stack(Stack2);
  100.   DisplayStackError;
  101. end;
  102.  
  103. {---------------------------------------------------------------------------}
  104.  
  105. begin                                       {main                           }
  106.   ClrScr;
  107.   TestStacks;
  108. end.