home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / VISUAL_B / CODIGO_2 / RPN_CAL / RPNCALC.FRM (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1993-05-17  |  15.6 KB  |  545 lines

  1. VERSION 2.00
  2. Begin Form Calculator 
  3.    BackColor       =   &H00C0C000&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "RPN Calculator"
  6.    FontBold        =   -1  'True
  7.    FontItalic      =   0   'False
  8.    FontName        =   "System"
  9.    FontSize        =   9.75
  10.    FontStrikethru  =   0   'False
  11.    FontUnderline   =   0   'False
  12.    Height          =   4065
  13.    Icon            =   RPNCALC.FRX:0000
  14.    KeyPreview      =   -1  'True
  15.    Left            =   1110
  16.    LinkMode        =   1  'Source
  17.    LinkTopic       =   "Form1"
  18.    MaxButton       =   0   'False
  19.    ScaleHeight     =   3540
  20.    ScaleWidth      =   3690
  21.    Top             =   3390
  22.    Width           =   3810
  23.    Begin CommandButton Enter 
  24.       Caption         =   "Enter"
  25.       Default         =   -1  'True
  26.       Height          =   1095
  27.       Left            =   1920
  28.       TabIndex        =   1
  29.       Top             =   2400
  30.       Width           =   495
  31.    End
  32.    Begin CommandButton LastX 
  33.       Caption         =   "L"
  34.       Height          =   495
  35.       Left            =   3120
  36.       TabIndex        =   0
  37.       Top             =   1800
  38.       Width           =   495
  39.    End
  40.    Begin CheckBox FixDec 
  41.       Caption         =   "Check1"
  42.       Height          =   255
  43.       Left            =   240
  44.       TabIndex        =   2
  45.       TabStop         =   0   'False
  46.       Top             =   840
  47.       Width           =   255
  48.    End
  49.    Begin CommandButton Number 
  50.       Caption         =   "7"
  51.       Height          =   480
  52.       Index           =   7
  53.       Left            =   120
  54.       TabIndex        =   3
  55.       TabStop         =   0   'False
  56.       Top             =   1200
  57.       Width           =   480
  58.    End
  59.    Begin CommandButton Number 
  60.       Caption         =   "8"
  61.       Height          =   480
  62.       Index           =   8
  63.       Left            =   720
  64.       TabIndex        =   4
  65.       TabStop         =   0   'False
  66.       Top             =   1200
  67.       Width           =   480
  68.    End
  69.    Begin CommandButton Number 
  70.       Caption         =   "9"
  71.       Height          =   480
  72.       Index           =   9
  73.       Left            =   1320
  74.       TabIndex        =   5
  75.       TabStop         =   0   'False
  76.       Top             =   1200
  77.       Width           =   480
  78.    End
  79.    Begin CommandButton Number 
  80.       Caption         =   "4"
  81.       Height          =   480
  82.       Index           =   4
  83.       Left            =   120
  84.       TabIndex        =   6
  85.       TabStop         =   0   'False
  86.       Top             =   1800
  87.       Width           =   480
  88.    End
  89.    Begin CommandButton Number 
  90.       Caption         =   "5"
  91.       Height          =   480
  92.       Index           =   5
  93.       Left            =   720
  94.       TabIndex        =   7
  95.       TabStop         =   0   'False
  96.       Top             =   1800
  97.       Width           =   480
  98.    End
  99.    Begin CommandButton Number 
  100.       Caption         =   "6"
  101.       Height          =   480
  102.       Index           =   6
  103.       Left            =   1320
  104.       TabIndex        =   8
  105.       TabStop         =   0   'False
  106.       Top             =   1800
  107.       Width           =   480
  108.    End
  109.    Begin CommandButton Number 
  110.       Caption         =   "1"
  111.       Height          =   480
  112.       Index           =   1
  113.       Left            =   120
  114.       TabIndex        =   9
  115.       TabStop         =   0   'False
  116.       Top             =   2400
  117.       Width           =   480
  118.    End
  119.    Begin CommandButton Number 
  120.       Caption         =   "2"
  121.       Height          =   480
  122.       Index           =   2
  123.       Left            =   720
  124.       TabIndex        =   10
  125.       TabStop         =   0   'False
  126.       Top             =   2400
  127.       Width           =   480
  128.    End
  129.    Begin CommandButton Number 
  130.       Caption         =   "3"
  131.       Height          =   480
  132.       Index           =   3
  133.       Left            =   1320
  134.       TabIndex        =   11
  135.       TabStop         =   0   'False
  136.       Top             =   2400
  137.       Width           =   480
  138.    End
  139.    Begin CommandButton Number 
  140.       Caption         =   "0"
  141.       Height          =   480
  142.       Index           =   0
  143.       Left            =   120
  144.       TabIndex        =   12
  145.       TabStop         =   0   'False
  146.       Top             =   3000
  147.       Width           =   1080
  148.    End
  149.    Begin CommandButton Decimal 
  150.       Caption         =   "."
  151.       Height          =   480
  152.       Left            =   1320
  153.       TabIndex        =   13
  154.       TabStop         =   0   'False
  155.       Top             =   3000
  156.       Width           =   480
  157.    End
  158.    Begin Image Pi 
  159.       Height          =   480
  160.       Left            =   3120
  161.       Picture         =   RPNCALC.FRX:0302
  162.       Top             =   600
  163.       Width           =   480
  164.    End
  165.    Begin Image XSquare 
  166.       Height          =   480
  167.       Left            =   3120
  168.       Picture         =   RPNCALC.FRX:0604
  169.       Top             =   1200
  170.       Width           =   480
  171.    End
  172.    Begin Label LabelFix 
  173.       Alignment       =   2  'Center
  174.       BackColor       =   &H00C0C000&
  175.       Caption         =   "Fix 4"
  176.       FontBold        =   -1  'True
  177.       FontItalic      =   0   'False
  178.       FontName        =   "System"
  179.       FontSize        =   9.75
  180.       FontStrikethru  =   0   'False
  181.       FontUnderline   =   0   'False
  182.       Height          =   255
  183.       Left            =   105
  184.       TabIndex        =   14
  185.       Top             =   600
  186.       Width           =   510
  187.    End
  188.    Begin Image Change 
  189.       Height          =   480
  190.       Left            =   2520
  191.       Picture         =   RPNCALC.FRX:0906
  192.       Top             =   1800
  193.       Width           =   480
  194.    End
  195.    Begin Image SquareRoot 
  196.       Height          =   480
  197.       Left            =   2520
  198.       Picture         =   RPNCALC.FRX:0C08
  199.       Top             =   1200
  200.       Width           =   480
  201.    End
  202.    Begin Image Up 
  203.       Height          =   480
  204.       Left            =   3120
  205.       Picture         =   RPNCALC.FRX:0F0A
  206.       Top             =   2400
  207.       Width           =   480
  208.    End
  209.    Begin Image Down 
  210.       Height          =   480
  211.       Left            =   2520
  212.       Picture         =   RPNCALC.FRX:120C
  213.       Top             =   2400
  214.       Width           =   480
  215.    End
  216.    Begin Image Plus 
  217.       Height          =   480
  218.       Left            =   1920
  219.       Picture         =   RPNCALC.FRX:150E
  220.       Top             =   1200
  221.       Width           =   480
  222.    End
  223.    Begin Image Minus 
  224.       Height          =   480
  225.       Left            =   1920
  226.       Picture         =   RPNCALC.FRX:1810
  227.       Top             =   600
  228.       Width           =   480
  229.    End
  230.    Begin Image Devide 
  231.       Height          =   480
  232.       Left            =   720
  233.       Picture         =   RPNCALC.FRX:1B12
  234.       Top             =   600
  235.       Width           =   480
  236.    End
  237.    Begin Image Mult 
  238.       Height          =   480
  239.       Left            =   1320
  240.       Picture         =   RPNCALC.FRX:1E14
  241.       Top             =   600
  242.       Width           =   480
  243.    End
  244.    Begin Image SwapXY 
  245.       Height          =   480
  246.       Left            =   1920
  247.       Picture         =   RPNCALC.FRX:2116
  248.       Top             =   1800
  249.       Width           =   480
  250.    End
  251.    Begin Image xby1 
  252.       Height          =   480
  253.       Left            =   2520
  254.       Picture         =   RPNCALC.FRX:2418
  255.       Top             =   600
  256.       Width           =   480
  257.    End
  258.    Begin Image Backspace 
  259.       Height          =   480
  260.       Left            =   2520
  261.       Picture         =   RPNCALC.FRX:271A
  262.       Top             =   3000
  263.       Width           =   1080
  264.    End
  265.    Begin Label Readout 
  266.       Alignment       =   1  'Right Justify
  267.       BackColor       =   &H00FFFF80&
  268.       Caption         =   "0"
  269.       FontBold        =   0   'False
  270.       FontItalic      =   0   'False
  271.       FontName        =   "MS Sans Serif"
  272.       FontSize        =   13.5
  273.       FontStrikethru  =   0   'False
  274.       FontUnderline   =   0   'False
  275.       ForeColor       =   &H00000000&
  276.       Height          =   375
  277.       Index           =   0
  278.       Left            =   120
  279.       TabIndex        =   15
  280.       Top             =   120
  281.       Width           =   3495
  282.    End
  283. ' ------------------------------------------------------------------------
  284. '                       Public Domain
  285. '                       RPN Caculator
  286. ' ------------------------------------------------------------------------
  287. Option Explicit
  288. Dim Register(0 To 5)  As Variant       ' RPN Registers
  289.                     ' 0 = Last X
  290.                     ' 1 = x
  291.                     ' 2 = y
  292.                     ' 3 = z
  293.                     ' 4 = t
  294.                     ' 5 = temp storage
  295. Dim DecimalFlag As Integer              ' Decimal point present yet?
  296. Dim UserInput As String                 ' Numeric InPut String
  297. Dim UseStr As String                    ' Format Control String
  298. ' Event Functions ----------------------------------------------------------
  299. '----------------------------------------------------------------------------
  300. Sub BackSpace_Click ()
  301.     Call submit(Chr$(8))
  302. End Sub
  303. Sub Change_Click ()
  304.     Call submit(Chr$(241))
  305. End Sub
  306. ' Misc Functions ----------------------------------------------------------
  307. Sub CheckInput ()
  308.     If Len(UserInput) > 0 Then
  309.         Call PushUp
  310.         Register(1) = Val(UserInput)
  311.         Register(0) = Register(1)
  312.         UserInput = ""
  313.         DecimalFlag = False
  314.     End If
  315. End Sub
  316. Sub Decimal_Click ()
  317.     Call submit(".")
  318. End Sub
  319. Sub Devide_Click ()
  320.     Call submit("/")
  321. End Sub
  322. Sub Devide0 () ' Devide by zero error display
  323.     MsgBox "Attempted Devide by zero.", 48, "ERROR"
  324. End Sub
  325. Sub Down_Click ()
  326.     Call submit(Chr$(31))
  327. End Sub
  328. Sub Enter_Click ()
  329.     Call submit(Chr$(13))
  330. End Sub
  331. Sub FixDec_Click ()
  332.     If FixDec.Value = 1 Then
  333.     UseStr = "###,###,###.0000;\-###,###,###.0000;0.0000;0.0"
  334.     Else
  335.     UseStr = ""
  336.     End If
  337.     Call Ok
  338. End Sub
  339. Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)
  340.     KeyCode = 0
  341. End Sub
  342. Sub Form_KeyPress (KeyAscii As Integer)
  343.     ' Readout(6).Caption = KeyAscii
  344.     If KeyAscii = 27 Then End
  345.     If KeyAscii = 8 Then Call submit(Chr$(8))
  346.     Dim k As String * 1
  347.     k = UCase$(Chr$(KeyAscii))
  348.     If InStr("0123456789XSRLC.+-*/=", k) Then
  349.     Call submit(k)
  350.     End If
  351.     KeyAscii = 0
  352. End Sub
  353. Sub Form_KeyUp (KeyCode As Integer, Shift As Integer)
  354.     ' Readout(6).Caption = KeyCode
  355.     ' NOTE: Contrary to the documentation the next line is useless !
  356.     If KeyCode = 13 Then Call submit(Chr$(13))
  357.     If KeyCode = 33 Then Call submit(Chr$(30))
  358.     If KeyCode = 34 Then Call submit(Chr$(31))
  359. End Sub
  360. ' Initialization routine for the form.
  361. Sub Form_Load ()
  362.     Calculator.Caption = App.EXEName + ".EXE"
  363.     If Left$(Calculator.Caption, 3) <> "RPN" Then
  364.         Calculator.Caption = Calculator.Caption + "  RPN"
  365.     End If
  366.     ' Calculator.Height  =   5910
  367.     ' NOTE: Contrary to the documentation the next line is useless !
  368.     Calculator.KeyPreview = True
  369.     Dim i As Integer
  370.     For i = 0 To 5
  371.         Register(i) = 0
  372.     Next i
  373.     UserInput = "0"
  374.     Call CheckInput
  375. End Sub
  376. Sub LastX_Click ()
  377.     Call submit("L")
  378. End Sub
  379. Sub Minus_Click ()
  380.     Call submit("-")
  381. End Sub
  382. Sub Mult_Click ()
  383.     Call submit("*")
  384. End Sub
  385. Sub Number_Click (Index As Integer)
  386.     Call submit(Chr$(48 + Index))
  387. End Sub
  388. Sub Number_KeyUp (Index As Integer, KeyCode As Integer, Shift As Integer)
  389.     If KeyCode = 13 Then Call submit(Chr$(13))
  390. End Sub
  391. Sub Ok ()
  392.     If Len(UserInput) > 0 Then
  393.     Readout(0) = UserInput
  394.     Else
  395.     Readout(0) = Format$(Register(1), UseStr)
  396.     ' ReadOut(1) = Register(0)
  397.     ' ReadOut(2) = Register(1)
  398.     ' ReadOut(3) = Register(2)
  399.     ' ReadOut(4) = Register(3)
  400.     ' ReadOut(5) = Register(4)
  401.     End If
  402. End Sub
  403. Sub Pi_Click ()
  404.     Call submit("P")
  405. End Sub
  406. Sub Plus_Click ()
  407.     Call submit("+")
  408. End Sub
  409. ' Stack Functions ----------------------------------------------------------
  410. ' Push Registers down, T retains Value
  411. Sub PushDown ()
  412.     Register(1) = Register(2)
  413.     Register(2) = Register(3)
  414.     Register(3) = Register(4)
  415. End Sub
  416. ' Push Registers up, X retains value
  417. Sub PushUp ()
  418.     Register(4) = Register(3)
  419.     Register(3) = Register(2)
  420.     Register(2) = Register(1)
  421. End Sub
  422. ' Rotate Register x-t (1 to 4) down
  423. Sub RollDown ()
  424.     Register(5) = Register(1)      ' Save X register
  425.     Call PushDown
  426.     Register(4) = Register(5)
  427. End Sub
  428. ' Rotate Register x-t (1 to 4) up
  429. Sub RollUp ()
  430.     Register(5) = Register(4)      ' Save T register
  431.     Call PushUp
  432.     Register(1) = Register(5)
  433. End Sub
  434. Sub SquareRoot_Click ()
  435.     Call submit("R")
  436. End Sub
  437. ' Program Core ---------------------------------------------------------------
  438. ' All input is processed here. This Subroutine is used so that multiple
  439. ' events can be mapped to the same function:
  440. ' EXAMPLE: Image Enter_Click and KeyPress (Enter)
  441. ' It also allows for a future implimentation of *.RPN script files
  442. ' or the assingment userdefined functions.
  443. Sub submit (s As String)
  444.    Select Case s
  445.     Case "."                                ' Decimal Point
  446.         If Len(UserInput) > 0 Then
  447.             If DecimalFlag = False Then UserInput = UserInput + "."
  448.         Else
  449.             UserInput = "0."
  450.         End If
  451.         DecimalFlag = True
  452.     Case "0" To "9"
  453.         UserInput = UserInput + s
  454.     Case "*"                                ' Multiply Y by X
  455.         Call CheckInput
  456.         Register(0) = Register(1)
  457.         Register(2) = Register(2) * Register(1)
  458.         Call PushDown
  459.     Case "+"                                ' Add X to Y
  460.         Call CheckInput
  461.         Register(0) = Register(1)
  462.         Register(2) = Register(2) + Register(1)
  463.         Call PushDown
  464.     Case "-"                                ' Sub X from Y
  465.         Call CheckInput
  466.         Register(0) = Register(1)
  467.         Register(2) = Register(2) - Register(1)
  468.         Call PushDown
  469.     Case "/"                                ' Devide Y by X
  470.         Call CheckInput
  471.         If Abs(Register(1)) > 0 Then
  472.             Register(0) = Register(1)
  473.             Register(2) = Register(2) / Register(1)
  474.             Call PushDown
  475.         Else
  476.             Call Devide0
  477.         End If
  478.     Case "="                                ' Exchange X and Y
  479.         Call CheckInput
  480.         Register(5) = Register(1)      ' Save X register
  481.         Register(1) = Register(2)
  482.         Register(2) = Register(5)
  483.     Case "X"                                ' X = 1/X
  484.         Call CheckInput
  485.         If Abs(Register(1)) > 0 Then
  486.             Register(0) = Register(1)
  487.             Register(1) = 1 / Register(1)
  488.         Else
  489.             Call Devide0
  490.         End If
  491.     Case Chr$(241)                          ' Change Sign of X
  492.         Call CheckInput
  493.         Register(1) = -(Register(1))
  494.     Case Chr$(30)                           ' Roll Up
  495.         Call CheckInput
  496.         Call RollUp
  497.     Case Chr$(31)                           ' Roll Down
  498.         Call CheckInput
  499.         Call RollDown
  500.     Case "S"                                ' Square (X = X * X)
  501.         Call CheckInput
  502.         Register(1) = Register(1) * Register(1)
  503.     Case "R"                                ' SquareRoot
  504.         Call CheckInput
  505.         Register(1) = Sqr(Abs(Register(1)))
  506.     Case "P"                                ' Insert Value for Pi
  507.         Call CheckInput
  508.         UserInput = "3.141592654"
  509.         Call CheckInput
  510.     Case "L"                                ' Resstore last "X" value
  511.         Call CheckInput
  512.         UserInput = Register(0)
  513.         Call CheckInput
  514.     Case Chr$(8)                            ' BackSpace
  515.         If Len(UserInput) > 0 Then
  516.             If Right$(UserInput, 1) = "." Then DecimalFlag = False
  517.             UserInput = Left$(UserInput, Len(UserInput) - 1)
  518.         Else
  519.             UserInput = "0"
  520.             Call CheckInput
  521.         End If
  522.     Case Chr$(13)                           ' Enter Key
  523.         If Len(UserInput) = 0 Then
  524.             UserInput = Format$(Register(1))
  525.         End If
  526.         Call CheckInput
  527.     Case Else
  528.         ' do nothing
  529.    End Select
  530.    Call Ok
  531.    Calculator.Enter.SetFocus
  532. End Sub
  533. Sub SwapXY_Click ()
  534.     Call submit("=")
  535. End Sub
  536. Sub Up_Click ()
  537.     Call submit(Chr$(30))
  538. End Sub
  539. Sub Xby1_Click ()
  540.     Call submit("X")
  541. End Sub
  542. Sub XSquare_Click ()
  543.     Call submit("S")
  544. End Sub
  545.