home *** CD-ROM | disk | FTP | other *** search
/ Chip 1995 March / CHIP3.mdf / programm / prog2 / answers / ch16_1.ada < prev    next >
Encoding:
Text File  |  1991-07-01  |  2.0 KB  |  87 lines

  1.                              -- Chapter 16 - Programming exercise 1
  2. package CharStak is
  3.  
  4. function Room_Left return INTEGER;       -- Room left on stack
  5.  
  6. procedure Push(In_Char : in CHARACTER);  -- In_Char is added to the
  7.                                          -- stack if there is room.
  8.  
  9. procedure Pop(Out_Char : out CHARACTER); -- Out_Char is removed from
  10.                                          -- stack and returned if a
  11.                                          -- character is on stack.
  12.                                          -- else a blank is returned
  13.  
  14. function Is_Empty return BOOLEAN;        -- TRUE if stack is empty
  15.  
  16. function Is_Full return BOOLEAN;         -- TRUE if stack is full
  17.  
  18. function Current_Stack_Size return INTEGER;
  19.  
  20. procedure Clear_Stack;                   -- Reset the stack to empty
  21.  
  22. end CharStak;
  23.  
  24.  
  25.  
  26.  
  27.  
  28. package body CharStak is
  29.  
  30. Maximum_Size : constant := 25;
  31. Stack_List : STRING(1..Maximum_Size); -- The stack itself, purposely
  32.                                       -- defined very small.
  33. Top_Of_Stack : INTEGER := 0;          -- This will always point to
  34.                                       -- the top entry on the stack.
  35.  
  36. function Room_Left return INTEGER is
  37. begin
  38.    return Maximum_Size - Top_Of_Stack;
  39. end Room_Left;
  40.  
  41.  
  42. procedure Push(In_Char : in CHARACTER) is
  43. begin
  44.    if not Is_Full then
  45.       Top_Of_Stack := Top_Of_Stack + 1;
  46.       Stack_List(Top_Of_Stack) := In_Char;
  47.    end if;
  48. end Push;
  49.  
  50.  
  51. procedure Pop(Out_Char : out CHARACTER) is
  52. begin
  53.    if Is_Empty then
  54.       Out_Char := ' ';
  55.    else
  56.       Out_Char := Stack_List(Top_Of_Stack);
  57.       Top_Of_Stack := Top_Of_Stack - 1;
  58.    end if;
  59. end Pop;
  60.  
  61.  
  62. function Is_Empty return BOOLEAN is
  63. begin
  64.    return Top_Of_Stack = 0;
  65. end Is_Empty;
  66.  
  67.  
  68. function Is_Full return BOOLEAN is
  69. begin
  70.    return Top_Of_Stack = Maximum_Size;
  71. end Is_Full;
  72.  
  73.  
  74. function Current_Stack_Size return INTEGER is
  75. begin
  76.    return Top_Of_Stack;
  77. end Current_Stack_Size;
  78.  
  79.  
  80. procedure Clear_Stack is
  81. begin
  82.    Top_Of_Stack := 0;
  83. end Clear_Stack;
  84.  
  85. end CharStak;
  86.  
  87.