home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / MADTRB3.ZIP / TENKEY.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1985-11-30  |  2.8 KB  |  121 lines

  1. PROGRAM TenKey;
  2.  
  3. {  This program emulates a dedicated '10 key' calculator.  It allows  }
  4. {  you to add, subtract, divide, and multiply.  The program operates  }
  5. {  like a TI calculator; you must type a number, then operation,      }
  6. {  another number and the SPACE or EQUALS keys to get the result.     }
  7.  
  8. {                       123   +                                       }
  9. {                         1   =                                       }
  10. {                       124  ANSWER                                   }
  11.  
  12. {  Written for Turbo Pascal by Jeff Firestone. June 1984.             }
  13.  
  14. CONST
  15.   BS = #8;
  16.   CR = #13;
  17.  
  18. VAR
  19.   StackPtr, code, i, j : INTEGER;
  20.   edit : STRING[20];
  21.   value, oldvalue : REAL;
  22.   Key, Operator : CHAR;
  23.  
  24. {-------------------------------------------------------------}
  25.  
  26. PROCEDURE Initialize;
  27. BEGIN
  28.   clrscr;
  29.   GOTOXY(25,15); WRITE('TEN KEY CALCULATOR PROGRAM');
  30.   GOTOXY(20,17); WRITE('Type the numbers first followed by +,-,/,*');
  31.   GOTOXY(30,18); WRITE('Use ESC to exit.');
  32.   value:= 0; oldvalue:= 0;
  33.   Edit:= ''; Operator:= ' ';
  34.   GOTOXY(1, 25); WRITE('0':14); CLREOL;
  35. END;
  36.  
  37. {-------------------------------------------------------------}
  38.  
  39. PROCEDURE PrintValue;
  40. BEGIN
  41.   GOTOXY(1, 25); WRITELN;
  42.   GOTOXY(1, 24);
  43.   WRITE(value:20:5);
  44.   IF Key IN ['+','-','*','/','='] THEN
  45.     WRITELN('   ', Key)
  46.   ELSE
  47.     IF Key = 'A' THEN WRITELN('  ANSWER');
  48.   edit:= '';
  49. END;
  50.  
  51. {-------------------------------------------------------------}
  52.  
  53. PROCEDURE DoMath;
  54. BEGIN
  55.   oldvalue:= value;
  56.   VAL(edit, value, code);
  57.   PrintValue;
  58.   CASE Operator OF
  59.     '+' : value:= oldvalue + value;
  60.     '-' : value:= oldvalue - value;
  61.     '*' : value:= oldvalue * value;
  62.     '/' : IF value <> 0 THEN value:= oldvalue / value;
  63.   END;
  64. END;
  65.  
  66. {-------------------------------------------------------------}
  67.  
  68. PROCEDURE BackSpace;
  69. BEGIN
  70.   IF (LENGTH(edit) > 0) THEN
  71.     edit:= COPY(edit, 1, (LENGTH(edit)-1));
  72. END;
  73.  
  74. {-------------------------------------------------------------}
  75.  
  76. PROCEDURE Equals;
  77. BEGIN
  78.   Key:= '=';
  79.   DoMath;
  80.   Key:= 'A';
  81.   PrintValue;
  82.   value:= 0; oldvalue:= 0; Operator:=' ';
  83.   WRITELN; WRITELN;
  84. END;
  85.  
  86. {-------------------------------------------------------------}
  87.  
  88. PROCEDURE MathFunc;
  89. BEGIN
  90.   DoMath;
  91.   Operator:= Key;
  92. END;
  93.  
  94. {-------------------------------------------------------------}
  95.  
  96. BEGIN
  97.   Initialize;
  98.   REPEAT
  99.     GOTOXY(14, 25);
  100.     READ(KBD, Key);
  101.     CASE Key OF
  102.       '+' : MathFunc;
  103.       '-' : MathFunc;
  104.       '/' : MathFunc;
  105.       '*' : MathFunc;
  106.       BS  : BackSpace;
  107.       '=' : Equals;
  108.       ' ' : Equals;
  109.     ELSE
  110.       IF (Key IN ['0'..'9','.']) AND ((LENGTH(edit) < 10)) THEN
  111.         Edit := Edit + key;
  112.     END;
  113.     GOTOXY(1,25);
  114.     IF edit = '' THEN
  115.       WRITE('0':14)
  116.     ELSE
  117.       WRITE(edit:14);
  118.     CLREOL;
  119.   UNTIL Key = #27;
  120. END.
  121.