VISUAL BASIC 6.0 (5.0) SOURCE CODE (BOOLCALC.FRM) :
VERSION 5.00
Begin VB.Form frmBoolCalc
Caption = " BOOLEAN CALCULATOR v1.0"
ClientHeight = 2400
ClientLeft = 60
ClientTop = 345
ClientWidth = 6600
KeyPreview = -1 'True
LinkTopic = "Form1"
ScaleHeight = 2400
ScaleWidth = 6600
StartUpPosition = 1 'CenterOwner
Begin VB.Frame Frame6
Caption = "Result"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 615
Left = 4920
TabIndex = 21
Top = 1560
Width = 1455
Begin VB.Label Label6
BackColor = &H00FFFFFF&
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 120
TabIndex = 22
Top = 240
Width = 1095
End
End
Begin VB.Frame Frame5
Caption = "Expression"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1335
Left = 2040
TabIndex = 19
Top = 120
Width = 4335
Begin VB.TextBox Text1
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 240
TabIndex = 0
Top = 360
Width = 3855
End
Begin VB.Label Label5
Caption = "F1= Calculate, F10= Info, ESC= End"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 240
TabIndex = 20
Top = 840
Width = 3855
End
End
Begin VB.Frame Frame4
BorderStyle = 0 'None
Height = 495
Left = 0
TabIndex = 17
Top = 1560
Width = 1935
Begin VB.OptionButton Option7
Caption = "1"
Height = 375
Left = 720
TabIndex = 9
Top = 120
Value = -1 'True
Width = 375
End
Begin VB.OptionButton Option8
Caption = "0"
Height = 375
Left = 1200
TabIndex = 10
Top = 120
Width = 495
End
Begin VB.Label Label4
Caption = "D ="
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 240
TabIndex = 18
Top = 120
Width = 375
End
End
Begin VB.Frame Frame3
BorderStyle = 0 'None
Height = 495
Left = 0
TabIndex = 15
Top = 1080
Width = 1935
Begin VB.OptionButton Option5
Caption = "1"
Height = 375
Left = 720
TabIndex = 7
Top = 120
Value = -1 'True
Width = 375
End
Begin VB.OptionButton Option6
Caption = "0"
Height = 375
Left = 1200
TabIndex = 8
Top = 120
Width = 495
End
Begin VB.Label Label3
Caption = "C ="
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 240
TabIndex = 16
Top = 120
Width = 375
End
End
Begin VB.Frame Frame2
BorderStyle = 0 'None
Height = 495
Left = 0
TabIndex = 13
Top = 600
Width = 1935
Begin VB.OptionButton Option3
Caption = "1"
Height = 375
Left = 720
TabIndex = 5
Top = 120
Value = -1 'True
Width = 375
End
Begin VB.OptionButton Option4
Caption = "0"
Height = 375
Left = 1200
TabIndex = 6
Top = 120
Width = 495
End
Begin VB.Label Label2
Caption = "B ="
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 240
TabIndex = 14
Top = 120
Width = 375
End
End
Begin VB.Frame Frame1
BorderStyle = 0 'None
Height = 495
Left = 0
TabIndex = 11
Top = 120
Width = 1935
Begin VB.OptionButton Option2
Caption = "0"
Height = 375
Left = 1200
TabIndex = 4
Top = 120
Width = 495
End
Begin VB.OptionButton Option1
Caption = "1"
Height = 375
Left = 720
TabIndex = 3
Top = 120
Value = -1 'True
Width = 375
End
Begin VB.Label Label1
Caption = "A ="
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 162
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 240
TabIndex = 12
Top = 120
Width = 495
End
End
Begin VB.CommandButton Command2
Caption = "END"
Height = 375
Left = 3600
TabIndex = 2
Top = 1800
Width = 1095
End
Begin VB.CommandButton Command1
Caption = "CALCULATE"
Height = 375
Left = 2040
TabIndex = 1
Top = 1800
Width = 1335
End
End
Attribute VB_Name = "frmBoolCalc"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim x As Integer
Dim Hata As Integer
Dim Parantez1 As Integer
Dim Parantez2 As Integer
Dim Karakter1 As Integer
Dim Karakter2 As Integer
Dim ExpLenght As Integer
Dim A, B, C, D, NA, NB, NC, ND As Integer
Dim Expression As String
Dim Expression1 As String
Dim Expression2 As String
Private Sub Parser()
RemoveSpaces:
ExpLenght = Len(Expression)
Karakter1 = InStr(Expression, " ")
If Karakter1 > 0 Then
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1)
Else
Expression1 = ""
End If
If Karakter1 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter1)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
Text1.Text = Expression
GoTo RemoveSpaces
End If
Call ConvertExpression
ParseParantez:
Parantez1 = InStr(Expression, "(")
If Parantez1 > 0 Then
Parantez2 = InStr(Parantez1, Expression, ")")
If Parantez2 = 0 Or Parantez2 < Parantez1 + 2 Then
Beep
MsgBox ("Syntax error in the Boolean Expression !"), 48, " BOOLEAN CALCULATOR"
Hata = True
Exit Sub
End If
Expression1 = Mid$(Expression, Parantez1 + 1, Parantez2 - Parantez1 - 1)
x = CalcExpression(Expression1)
If Hata = True Then Exit Sub
If Parantez1 > 1 Then
Expression1 = Left$(Expression, Parantez1 - 1) + Trim$(x)
Else
Expression1 = Trim$(x)
End If
If Parantez2 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Parantez2)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
ExpLenght = Len(Expression)
GoTo ParseParantez
End If
End Sub
Private Sub ConvertExpression()
ParseKarakterNA:
Karakter1 = InStr(Expression, "A'")
If Karakter1 > 0 Then
Karakter2 = Karakter1 + 1
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(NA)
Else
Expression1 = Trim$(NA)
End If
If Karakter2 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter2)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
ExpLenght = Len(Expression)
GoTo ParseKarakterNA
End If
ParseKarakterNB:
Karakter1 = InStr(Expression, "B'")
If Karakter1 > 0 Then
Karakter2 = Karakter1 + 1
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(NB)
Else
Expression1 = Trim$(NB)
End If
If Karakter2 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter2)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
ExpLenght = Len(Expression)
GoTo ParseKarakterNB
End If
ParseKarakterNC:
Karakter1 = InStr(Expression, "C'")
If Karakter1 > 0 Then
Karakter2 = Karakter1 + 1
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(NC)
Else
Expression1 = Trim$(NC)
End If
If Karakter2 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter2)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
ExpLenght = Len(Expression)
GoTo ParseKarakterNC
End If
ParseKarakterND:
Karakter1 = InStr(Expression, "D'")
If Karakter1 > 0 Then
Karakter2 = Karakter1 + 1
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(ND)
Else
Expression1 = Trim$(ND)
End If
If Karakter2 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter2)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
ExpLenght = Len(Expression)
GoTo ParseKarakterND
End If
ParseKarakterA:
Karakter1 = InStr(Expression, "A")
If Karakter1 > 0 Then
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(A)
Else
Expression1 = Trim$(A)
End If
If Karakter1 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter1)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
GoTo ParseKarakterA
End If
ParseKarakterB:
Karakter1 = InStr(Expression, "B")
If Karakter1 > 0 Then
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(B)
Else
Expression1 = Trim$(B)
End If
If Karakter1 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter1)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
GoTo ParseKarakterB
End If
ParseKarakterC:
Karakter1 = InStr(Expression, "C")
If Karakter1 > 0 Then
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(C)
Else
Expression1 = Trim$(C)
End If
If Karakter1 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter1)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
GoTo ParseKarakterC
End If
ParseKarakterD:
Karakter1 = InStr(Expression, "D")
If Karakter1 > 0 Then
If Karakter1 > 1 Then
Expression1 = Left$(Expression, Karakter1 - 1) + Trim$(D)
Else
Expression1 = Trim$(D)
End If
If Karakter1 < ExpLenght Then
Expression2 = Right$(Expression, ExpLenght - Karakter1)
Else
Expression2 = ""
End If
Expression = Expression1 + Expression2
GoTo ParseKarakterD
End If
Label5.Caption = Expression
End Sub
Private Function CalcExpression(EqStr As String) As Integer
Dim R As Integer
Dim L As Integer
Dim Y As Integer
Dim S1 As Integer
Dim S2 As Integer
Dim ARTI As Integer
Dim K As String * 1
Dim Kprev As String * 1
Dim Str1 As String
Dim Str2 As String
Parse10:
L = Len(EqStr)
S1 = InStr(EqStr, "10")
If S1 > 0 Then
S2 = S1 + 1
If S1 > 1 Then
Str1 = Left$(EqStr, S1 - 1) + "0"
Else
Str1 = "0"
End If
If S1 < L Then
Str2 = Right$(EqStr, L - S2)
Else
Str2 = ""
End If
EqStr = Str1 + Str2
GoTo Parse10
End If
Parse11:
S1 = InStr(EqStr, "11")
If S1 > 0 Then
S2 = S1 + 1
If S1 > 1 Then
Str1 = Left$(EqStr, S1 - 1) + "1"
Else
Str1 = "1"
End If
If S1 < L Then
Str2 = Right$(EqStr, L - S2)
Else
Str2 = ""
End If
EqStr = Str1 + Str2
GoTo Parse10
End If
Parse00:
S1 = InStr(EqStr, "00")
If S1 > 0 Then
S2 = S1 + 1
If S1 > 1 Then
Str1 = Left$(EqStr, S1 - 1) + "0"
Else
Str1 = "0"
End If
If S1 < L Then
Str2 = Right$(EqStr, L - S2)
Else
Str2 = ""
End If
EqStr = Str1 + Str2
GoTo Parse10
End If
Parse01:
S1 = InStr(EqStr, "01")
If S1 > 0 Then
S2 = S1 + 1
If S1 > 1 Then
Str1 = Left$(EqStr, S1 - 1) + "0"
Else
Str1 = "0"
End If
If S1 < L Then
Str2 = Right$(EqStr, L - S2)
Else
Str2 = ""
End If
EqStr = Str1 + Str2
GoTo Parse10
End If
For Y = 1 To L
K = Mid$(EqStr, Y, 1)
If K <> "1" And K <> "0" And K <> "+" Then
SyntaxError:
Beep
MsgBox ("Syntax error in the Boolean Expression !"), 48, " BOOLEAN CALCULATOR"
Hata = True
Exit Function
Else
If K = "+" Then
If Y <= 1 or (Kprev <> "1" And Kprev <> "0") Then
GoTo SyntaxError
Else
Str1 = Left$(EqStr, Y - 1)
R = R + Val(Str1)
If Y < L Then
Str2 = Right$(EqStr, L - Y)
R = R + Val(Str2)
End If
End If
ARTI = True
End If
End If
Kprev = K
Next Y
If ARTI = False Then
For Y = 1 To L
K = Mid$(EqStr, Y, 1)
If K = "0" Then
R = 0
Exit For
Else
If K = "1" Then R = 1
End If
Next Y
End If
If R > 0 Then
CalcExpression = 1
Else
CalcExpression = 0
End If
End Function
Private Sub Command1_Click()
Label6.Caption = ""
Label5.Caption = ""
Expression = Trim$(Text1.Text)
If Expression = "" Then
Beep
Text1.SetFocus
Exit Sub
End If
If Option1.Value = True Then
A = 1
NA = 0
Else
A = 0
NA = 1
End If
If Option3.Value = True Then
B = 1
NB = 0
Else
B = 0
NB = 1
End If
If Option5.Value = True Then
C = 1
NC = 0
Else
C = 0
NC = 1
End If
If Option7.Value = True Then
D = 1
ND = 0
Else
D = 0
ND = 1
End If
Hata = False
Call Parser
x = CalcExpression(Expression)
If Hata = False Then
Beep
If x > 0 Then
Label6.Caption = "True"
Else
Label6.Caption = "False"
End If
End If
Text1.SetFocus
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = &H70 Then
Command1_Click
Else
If KeyCode = &H79 Then
Beep
MsgBox ("This program is a simple BOOLEAN EXPRESSION CALCULATOR." + Chr$(13) + Chr$(13) + "EXPRESSION ELEMENTS:" + Chr$(13) + "A, B, C, D are inputs (variables)" + Chr$(13) + "A', B', C', D' are inverses of A,B,C,D" + Chr$(13) + "+ is OR operand" + Chr$(13) + Chr$(34) + "(" + Chr$(34) + " and " + Chr$(34) + ")" + Chr$(34) + " are valid parenthesis characters" + Chr$(13) + Chr$(13) + "EXAMPLE:" + Chr$(13) + "A'+BC'D(A+C')+AB(C'+D') is a valid expression" + Chr$(13) + Chr$(13) + "NOTE:" + Chr$(13) + "Invalid expression characters cause a SYNTAX ERROR message."), 0, " © Erdogan Tan [ September 23, 2001 ]"
End If
End If
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then End
End Sub
Private Sub Option1_Click()
Text1.SetFocus
End Sub
Private Sub Option2_Click()
Text1.SetFocus
End Sub
Private Sub Option3_Click()
Text1.SetFocus
End Sub
Private Sub Option4_Click()
Text1.SetFocus
End Sub
Private Sub Option5_Click()
Text1.SetFocus
End Sub
Private Sub Option6_Click()
Text1.SetFocus
End Sub
Private Sub Option7_Click()
Text1.SetFocus
End Sub
Private Sub Option8_Click()
Text1.SetFocus
End Sub
Last Update: 28/10/2001