For nearly two years, Hank T. tried his best to avoid the CEE system. He even made an effort to not know what CEE stood for (though he was pretty sure it was Customer something Engagement). But alas, the inevitable happened and he was finally tasked with fixing a bug in CEE.
Years ago, the CEE system was created by a developer who lived by The One Rule: there are no rules, not even The One Rule. And not surprisingly, his code showed for it. To investigate the bug he was assigned to fix -- Customer Versions aren't sorting properly -- Hank dove in to CustomerClass.vb, one of the thousands of VisualBasic.NET code files that made up the application.
Public Function Is_Customer_Version(ByVal Customer_Version_p As CV) As Boolean
begin()
Return Customer_Version = Customer_Version_p
End Function 'Is_Customer_Version
Public ReadOnly Property Customer_Version() As CV
Get
begin()
Return My_Customer_Version.Customer_Version
End Get
End Property 'Customer_Version
'-- OBSOLETE, use (Is_)Customer_Version
Public ReadOnly Property CustomerVersion() As CV
Get
begin()
Return Customer_Version
End Get
End Property 'CustomerVersion
It didn't seem all that bad. The call to begin(), however, piqued his curiosity. Hank opened up the file that defined the method, syntax.vb:
Public Sub block()
End Sub
Public Sub begin()
End Sub
Public Sub end_block()
End Sub
Public Sub none()
End Sub
'---------------------------------------------------------------------
'---------------------------------------------------------------------
'-- Abort program
'---------------------------------------------------------------------
'---------------------------------------------------------------------
Public Sub exit_main()
begin()
End
End Sub
Public Function false_(ByVal ParameterName As String) As Boolean
begin()
Return False
End Function
Public Function true_(ByVal ParameterName As String) As Boolean
begin()
Return True
End Function
Public Function Boolean_Val(ByVal n As Integer) As Boolean
begin()
Return n <> 0
End Function
Public Function Array_Length(ByVal Length As Integer) As Integer
begin()
Return Length - 1
End Function 'Array_Length
Public Function abs(ByVal value As Long) As Long
begin()
Return Math.Abs(value)
End Function
Public Function abs(ByVal value As Integer) As Integer
begin()
Return Math.Abs(value)
End Function
Public Function abs(ByVal value As Single) As Single
begin()
Return Math.Abs(value)
End Function
Public Function abs(ByVal value As Double) As Double
begin()
Return Math.Abs(value)
End Function
Public Function abs(ByVal value As Decimal) As Decimal
begin()
Return Math.Abs(value)
End Function
Public Function remainder(ByVal a As Long, ByVal b As Long) As Long
begin()
Return a Mod b
End Function
Public Function remainder(ByVal a As Integer, ByVal b As Integer) As Integer
begin()
Return a Mod b
End Function
Public Function remainder(ByVal a As Single, ByVal b As Single) As Single
begin()
Return a Mod b
End Function
The insanity continued, redefining much of Math and the basic arithmetic operators. Further down in the file, Hank spotted the in_() set of methods...
Public Function in_(ByVal v As Long, ByVal p1 As Long) As Boolean
begin()
Return v = p1
End Function 'in_(1)
Public Function in_(ByVal v As Long, ByVal p1 As Long, ByVal p2 As Long) As Boolean
begin()
Return v = p1 OrElse v = p2
End Function 'in_(2)
Public Function in_(ByVal v As Long, ByVal p1 As Long, ByVal p2 As Long, _
ByVal p3 As Long) As Boolean
begin()
Return v = p1 OrElse v = p2 OrElse v = p3
End Function 'in_(3)
Public Function in_(ByVal v As Long, ByVal p1 As Long, ByVal p2 As Long, _
ByVal p3 As Long, ByVal p4 As Long) As Boolean
begin()
Return v = p1 OrElse v = p2 OrElse v = p3 OrElse v = p4
End Function 'in_(4)
-- snip --
Public Function in_(ByVal v As Long, ByVal p1 As Long, ByVal p2 As Long, _
ByVal p3 As Long, ByVal p4 As Long, ByVal p5 As Long, _
...
ByVal p18 As Long, ByVal p19 As Long, ByVal p20 As Long _
) As Boolean
begin()
Return v = p1 OrElse v = p2 OrElse v = p3 ... OrElse v = p20
End Function 'in_(20)
More accurately, they were the Long set of _in() methods. There were twenty overloads each for String, Double, Char, and Decimal.
Although this was just the beginning of syntax.vb, Hank decided it best for his sanity to just fix the bug. Though he suspected that the ECC system was yet another tentacle of the great Codethulhu, he knew that, by the time he'd verify that, he would already be insane.