home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / libbasic / calc1.bas < prev    next >
BASIC Source File  |  1994-04-23  |  5KB  |  215 lines

  1.  
  2.  
  3.  
  4.     'CALC1.BAS - calculator
  5.     'Requires Liberty BASIC version 1.0 or better
  6.  
  7.     'no main window
  8.     nomainwin
  9.  
  10.     menu #calc, "&About Calc", "Calc &Info", [info]
  11.     button #calc, " 0 ", [button0], LL, 5, -12
  12.     button #calc, " . ", [buttonPoint], LL, 40, -12
  13.     button #calc, " = ", [buttonEquals], LL, 75, -12
  14.     button #calc, "CLR", [buttonClear], LL, 110, -12
  15.     button #calc, " 1 ", [button1], LL, 5, 16
  16.     button #calc, " 2 ", [button2], LL, 40, 16
  17.     button #calc, " 3 ", [button3], LL, 75, 16
  18.     button #calc, " / ", [buttonDivide], LL, 110, 16
  19.     button #calc, " 4 ", [button4], LL, 5, 44
  20.     button #calc, " 5 ", [button5], LL, 40, 44
  21.     button #calc, " 6 ", [button6], LL, 75, 44
  22.     button #calc, " X ", [buttonMultiply], LL, 110, 44
  23.     button #calc, " 7 ", [button7], LL, 5, 72
  24.     button #calc, " 8 ", [button8], LL, 40, 72
  25.     button #calc, " 9 ", [button9], LL, 75, 72
  26.     button #calc, " - ", [buttonSubtract], LL, 110, 72
  27.     button #calc, " + ", [buttonAdd], LL, 110, 100
  28.     WindowWidth = 150
  29.     WindowHeight = 280
  30.     open "Calculator" for graphics_nsb_nf as #calc
  31.     print #calc, "font helv 9 24"
  32.  
  33.     ' set display$ up as two spaces
  34.     display$ = "? "
  35.     ' set up a shortcut for printing the entry line only
  36.     blanks$ = "\" + chr$(13) + chr$(13) + chr$(13) + chr$(13) + " "
  37.  
  38.  
  39. [mainLoop]  ' wait for a button to be pressed
  40.  
  41.     input r$
  42.     goto [mainLoop]
  43.  
  44.  
  45. [display]  ' update the entire display
  46.  
  47.     buffer$ = chr$(13)
  48.     for i = 6 to 2 step -2
  49.         buffer$ = buffer$ + " " + word$(lines$, i - 1) + " " + word$(lines$, i) + "                 " + chr$(13)
  50.     next i
  51.     print #calc, "cls"
  52.     print #calc, "\" + buffer$ + "                   "
  53.     gosub [displayEntry]
  54.     print #calc, "flush"
  55.  
  56.   return
  57.  
  58.  
  59. [displayEntry]  ' display the current entry line only
  60.  
  61.     print #calc, "place 0 0"
  62.     print #calc, blanks$ + display$
  63.     print #calc, "flush"
  64.  
  65.   return
  66.  
  67.  
  68. [button0]  ' 0 was pressed
  69.  
  70.     display$ = display$ + "0"
  71.     gosub [displayEntry]
  72.     goto [mainLoop]
  73.  
  74. [button1]  ' 1 was pressed
  75.  
  76.     display$ = display$ + "1"
  77.     gosub [displayEntry]
  78.     goto [mainLoop]
  79.  
  80. [button2]  ' 2 was pressed
  81.  
  82.     display$ = display$ + "2"
  83.     gosub [displayEntry]
  84.     goto [mainLoop]
  85.  
  86. [button3]  ' 3 was pressed
  87.  
  88.     display$ = display$ + "3"
  89.     gosub [displayEntry]
  90.     goto [mainLoop]
  91.  
  92. [button4]  ' 4 was pressed
  93.  
  94.     display$ = display$ + "4"
  95.     gosub [displayEntry]
  96.     goto [mainLoop]
  97.  
  98. [button5]  ' 5 was pressed
  99.  
  100.     display$ = display$ + "5"
  101.     gosub [displayEntry]
  102.     goto [mainLoop]
  103.  
  104. [button6]  ' 6 was pressed
  105.  
  106.     display$ = display$ + "6"
  107.     gosub [displayEntry]
  108.     goto [mainLoop]
  109.  
  110. [button7]  ' 7 was pressed
  111.  
  112.     display$ = display$ + "7"
  113.     gosub [displayEntry]
  114.     goto [mainLoop]
  115.  
  116. [button8]  ' 8 was pressed
  117.  
  118.     display$ = display$ + "8"
  119.     gosub [displayEntry]
  120.     goto [mainLoop]
  121.  
  122. [button9]  ' 9 was pressed
  123.  
  124.     display$ = display$ + "9"
  125.     gosub [displayEntry]
  126.     goto [mainLoop]
  127.  
  128.  
  129. [buttonPoint]  ' the decimal point button was pressed
  130.  
  131.     ' only allow one decimal point per entry
  132.     if instr(display$, ".") > 0 then [mainLoop]
  133.  
  134.     display$ = display$ + "."
  135.     gosub [displayEntry]
  136.     goto [mainLoop]
  137.  
  138.  
  139. [buttonClear]  ' the CLR button was pressed, clear the entry
  140.  
  141.     display$ = "? "
  142.     gosub [display]
  143.     goto [mainLoop]
  144.  
  145.  
  146. [buttonAdd]  ' the + button was pressed
  147.  
  148.     if len(display$) = 2 then display$ = "+ " : gosub [displayEntry] : goto [mainLoop]
  149.     gosub [resolvePending]
  150.     display$ = "+ "
  151.     gosub [display]
  152.     goto [mainLoop]
  153.  
  154.  
  155. [buttonSubtract]  ' the - button was pressed
  156.  
  157.     if len(display$) = 2 then display$ = "- " : gosub [displayEntry] : goto [mainLoop]
  158.     gosub [resolvePending]
  159.     display$ = "- "
  160.     gosub [display]
  161.     goto [mainLoop]
  162.  
  163.  
  164. [buttonMultiply]  ' the X button was pressed
  165.  
  166.     if len(display$) = 2 then display$ = "X " : gosub [displayEntry] : goto [mainLoop]
  167.     gosub [resolvePending]
  168.     display$ = "X "
  169.     gosub [display]
  170.     goto [mainLoop]
  171.  
  172.  
  173. [buttonDivide]
  174.  
  175.     if len(display$) = 2 then display$ = "/ " : gosub [displayEntry] : goto [mainLoop]
  176.     gosub [resolvePending]
  177.     display$ = "/ "
  178.     gosub [display]
  179.     goto [mainLoop]
  180.  
  181.  
  182. [buttonEquals]  ' the = button was pressed
  183.  
  184.     if len(display$) = 2 then display$ = "= " : gosub [displayEntry] : goto [mainLoop]
  185.     gosub [resolvePending]
  186.     display$ = "? "
  187.     gosub [display]
  188.     goto [mainLoop]
  189.  
  190.  
  191. [resolvePending]
  192.  
  193.     'take the bottom-most two items and perform the appropriate
  194.     'operation (if any)
  195.  
  196.     first = val(word$(lines$, 2))
  197.     second = val(word$(display$, 2))
  198.     op$ = left$(display$, 1)
  199.  
  200.     lines$ = display$ + " " + lines$
  201.  
  202.     if op$ = "+" then lines$ = "= " + str$(first + second) + " " + lines$ : return
  203.     if op$ = "-" then lines$ = "= " + str$(first - second) + " " + lines$ : return
  204.     if op$ = "X" then lines$ = "= " + str$(first * second) + " " + lines$ : return
  205.     if op$ = "/" then lines$ = "= " + str$(first / second) + " " + lines$ : return
  206.     if op$ = "=" or op$ = "?" then lines$ = "= " + str$(second) + " " + lines$ : return
  207.  
  208.   return
  209.  
  210. [info]
  211.  
  212.     notice "About Calc"  + chr$(13) + "Calc, a Liberty BASIC Application"
  213.     goto [mainLoop]
  214.  
  215.