'*************************************************************************************************
'This section of macros was used at Lucent to manipulate the
'CAD files for the Takaya in-circuit test machine allowing for
'visual testing of parallel components that were not automatically
'performed during the import of the translated CAD file into the Takaya,  
'thus increasing test coverage.

Public componentcount As Integer
Public padscount As Integer
Public netscount As Integer
Public CA8Count As Integer
Public temp As Integer
Public temp1 As Integer
Public compchr As String
Public padnamechr As String
Public temp2 As Integer
Public count As Integer
Public neutralstart As Integer
Public neutralend As Integer
Public componentstart As Integer
Public componentend As Integer
Public netsstart As Integer
Public netsend As Integer
Public padsstart As Integer
Public padsend As Integer
Public referencepointX
Public referencepointY

    
Sub vision_and_powertoground_main()

'---------------------------------------------------------------------------------------------------
'
'   These are the setup parameters
'   Type these values in from the neutral file
'
'
neutralstart = 1
neutralend = 14496
componentstart = 9535
componentend = 13262
netsstart = 15
netsend = 7190
padsstart = 13288
padsend = 14395
referencepointX = 0.1285
referencepointY = 2.029
'
'
'
'---------------------------------------------------------------------------------------------------

yes = 1
no = 0

CA8Count = 1
   
For componentcount = componentstart To componentend
    compchr = Range("A" + CStr(componentcount)).Text
    If compchr = "COMP" Then
        If Range("E" + CStr(componentcount + 3)).Text = "1" Then
            If Mid(Range("B" + CStr(componentcount)).Text, 1, 1) = "C" Then
                If Mid(Range("B" + CStr(componentcount)).Text, 2, 1) = "O" Then
                    'Call Cover
                ElseIf Mid(Range("B" + CStr(componentcount)).Text, 2, 1) = "R" Then
                    'Call Diode
                Else
                    Call vision_and_powertoground_cap
                End If
            End If
        End If
    End If
                   
Next componentcount

End Sub

Sub vision_and_powertoground_cap()

'   find the text that represents the value
temp = Len(Range("B" + CStr(componentcount + 1)).Text)
tempchr = Range("B" + CStr(componentcount + 1)).Text
For i = 1 To temp
    tempchr1 = Mid(tempchr, i, 1)
    If tempchr1 = "," Then
        temp1 = i + 2
    End If
Next i
'   calculate the probe positions from the reference point
count = 1
While (componentcount + count) < (componentend + 1) And Range("A" + CStr(componentcount + count)).Text <> "COMP"
    If Range("A" + CStr(componentcount + count)).Text <> "COMP" Then
       count = count + 1
    End If
Wend
temp2 = Len(Range("B" + CStr(componentcount + count - 1)).Text)
tempchr1 = Val(Mid(Range("B" + CStr(componentcount + count - 1)).Text, temp2, 1))

calcpin1x = (Val(Range("C" + CStr(componentcount + count - 2)).Text) - referencepointX) * 1000 * 25.4
calcpin1y = (Val(Range("D" + CStr(componentcount + count - 2)).Text) - referencepointY) * 1000 * 25.4
calcpin2x = (Val(Range("C" + CStr(componentcount + count - 1)).Text) - referencepointX) * 1000 * 25.4
calcpin2y = (Val(Range("D" + CStr(componentcount + count - 1)).Text) - referencepointY) * 1000 * 25.4
Range("O" + CStr(CA8Count)).Formula = Range("B" + CStr(componentcount)).Text
Range("P" + CStr(CA8Count)).Formula = Mid(Range("B" + CStr(componentcount + 1)).Text, temp1, (temp - temp1 - 1))
Range("Q" + CStr(CA8Count)).Formula = Mid(Range("B" + CStr(componentcount + 1)).Text, temp1, (temp - temp1 - 1))
Range("R" + CStr(CA8Count)).Formula = "*"
Range("S" + CStr(CA8Count)).Formula = "*"
Range("T" + CStr(CA8Count)).Formula = CStr(Int(calcpin1x))
Range("U" + CStr(CA8Count)).Formula = CStr(Int(calcpin1y))
Range("V" + CStr(CA8Count)).Formula = CStr(Int(calcpin2x))
Range("W" + CStr(CA8Count)).Formula = CStr(Int(calcpin2y))
Range("X" + CStr(CA8Count)).Formula = Range("I" + CStr(componentcount + count - 2)).Text
Range("Y" + CStr(CA8Count)).Formula = Range("I" + CStr(componentcount + count - 1)).Text
CA8Count = CA8Count + 1

End Sub

Sub CA8_bga_negative_conversion()

    begin1 = 1
    end1 = 1425
   
    For i = begin1 To end1
        tempchr1 = Range("F" + CStr(i)).Text
        templen1 = Len(tempchr1)
        tempchr2 = Range("H" + CStr(i)).Text
        templen2 = Len(tempchr2)
        If Mid(tempchr1, 1, 1) = "-" Then
            Range("F" + CStr(i)).Formula = Mid(tempchr1, 2, templen1 - 1)
        Else
            Range("F" + CStr(i)).Formula = "-" + tempchr1
        End If
        If Mid(tempchr2, 1, 1) = "-" Then
            Range("H" + CStr(i)).Formula = Mid(tempchr2, 2, templen2 - 1)
        Else
            Range("H" + CStr(i)).Formula = "-" + tempchr2
        End If
    Next i
End Sub

Sub CA8_vision_to_cap_removal()

    begin1 = 1
    end1 = 2255
   
    For i = begin1 To end1
        Range("K" + CStr(i)).Formula = CStr(i)
    Next i
   
    For i = begin1 To end1
        If Range("C" + CStr(i)).Text = "Parts-Image." Then
            tempchr = Range("A" + CStr(i)).Text
            For j = begin1 To end1
                If Range("A" + CStr(j)).Text = tempchr And Range("C" + CStr(j)).Text <> "Parts-Image." Then
                    Range("A" + CStr(j)).Formula = ""
                    Range("B" + CStr(j)).Formula = ""
                    Range("C" + CStr(j)).Formula = ""
                    Range("D" + CStr(j)).Formula = ""
                    Range("E" + CStr(j)).Formula = ""
                    Range("F" + CStr(j)).Formula = ""
                    Range("G" + CStr(j)).Formula = ""
                    Range("H" + CStr(j)).Formula = ""
                    Range("I" + CStr(j)).Formula = ""
                    Range("K" + CStr(j)).Formula = ""
                End If
            Next j
        End If
    Next i

End Sub

Sub CA8_Test_Point_Replacement()

    CA8NTP_begin = 1
    CA8NTP_end = 1679
   
    CA8TP_begin = 3545
    CA8TP_end = 4163
   
    For i = CA8TP_begin To CA8TP_end
        For j = CA8NTP_begin To CA8NTP_end
            If (Range("C" + CStr(i)).Text = Range("C" + CStr(j)).Text And Range("B" + CStr(i)).Text = Range("B" + CStr(j)).Text) Then
                Range("F" + CStr(j)).Formula = Range("F" + CStr(i)).Formula
                Range("G" + CStr(j)).Formula = Range("G" + CStr(i)).Formula
                Range("H" + CStr(j)).Formula = Range("H" + CStr(i)).Formula
                Range("I" + CStr(j)).Formula = Range("I" + CStr(i)).Formula
                CA8NTP_begin = j
                j = CA8NTP_end
            End If
        Next j
    Next i

End Sub

'*************************************************************************************************

Sub Number_Generator()

    begin1 = 1
    end1 = 2255
   
    For i = begin1 To end1
        Range("K" + CStr(i)).Formula = CStr(i)
    Next i
   
End Sub

'*************************************************************************************************

Sub Address_Separator()

    begin1 = 101
    end1 = 136
    begin2 = 11
   
    For i = begin1 To end1 Step 5
        Range("A" + CStr(begin2)).Formula = Range("A" + CStr(i)).Text
        Range("B" + CStr(begin2)).Formula = Range("A" + CStr(i + 1)).Text
        Range("C" + CStr(begin2)).Formula = Range("A" + CStr(i + 2)).Text
        Range("D" + CStr(begin2)).Formula = Range("A" + CStr(i + 3)).Text
        Range("A" + CStr(begin2 + 1)).Formula = Range("C" + CStr(i)).Text
        Range("B" + CStr(begin2 + 1)).Formula = Range("C" + CStr(i + 1)).Text
        Range("C" + CStr(begin2 + 1)).Formula = Range("C" + CStr(i + 2)).Text
        Range("D" + CStr(begin2 + 1)).Formula = Range("C" + CStr(i + 3)).Text
        Range("A" + CStr(begin2 + 2)).Formula = Range("E" + CStr(i)).Text
        Range("B" + CStr(begin2 + 2)).Formula = Range("E" + CStr(i + 1)).Text
        Range("C" + CStr(begin2 + 2)).Formula = Range("E" + CStr(i + 2)).Text
        Range("D" + CStr(begin2 + 2)).Formula = Range("E" + CStr(i + 3)).Text
        begin2 = begin2 + 3
    Next i
   
End Sub

'*************************************************************************************************

Sub City_State_Zip_Separator()

begin1 = 2
end1 = 61

For i = begin1 To end1
    tempchr1 = Range("E" + CStr(i)).Text
    templen1 = Len(tempchr1)
For j = 1 To templen1
tempchr2 = Mid(tempchr1, j, 1)
If tempchr2 = "," Then comma = j
Next j
citychr = Mid(tempchr1, 1, comma - 1)
If Mid(tempchr1, templen1, 1) <> " " Then
        zipend = templen1
        zipbegin = templen1 - 4
ElseIf Mid(tempchr1, templen1 - 1, 1) <> " " Then
        zipend = templen1 - 1
        zipbegin = templen1 - 1 - 4
ElseIf Mid(tempchr1, templen1 - 2, 1) <> " " Then
        zipend = templen1 - 2
        zipbegin = templen1 - 2 - 4
End If
zipchr = Mid(tempchr1, zipbegin, 5)
statechr = Mid(tempchr1, comma + 2, (zipbegin - 2) - (comma + 2))
Range("E" + CStr(i)).Formula = citychr
Range("F" + CStr(i)).Formula = statechr
Range("G" + CStr(i)).Formula = zipchr
Next i
End Sub

'*************************************************************************************************

Sub DegreeFtoDegreeC()

    begin1 = -5
    end1 = 25
   
    Range("A1").Formula = "F or C"
    Range("B1").Formula = "Degrees F"
    Range("C1").Formula = "Degrees C"
   
    Columns("B:C").Select
    Selection.NumberFormat = "0.0"

    For i = begin1 To end1
        Range("A" + CStr(i + 7)).Formula = CStr(i * 10)
        Range("B" + CStr(i + 7)).Formula = "=round(A" + CStr(i + 7) + "*9/5+32,1)"
        Range("C" + CStr(i + 7)).Formula = "=round((A" + CStr(i + 7) + "-32)*5/9,1)"
       
    Next i
   
End Sub

'*************************************************************************************************

Sub Character_Removal()

'   This program removes (") from a number

    begin1 = 1
    end1 = 255
   
    For i = begin1 To end1
        temp$ = Range("D" + CStr(i)).Text
        tempstr = Right(temp$, 1)
        templen = Len(Range("D" + CStr(i)))
        If tempstr = Chr(34) Then Range("D" + CStr(i)).Formula = Mid(Range("D" + CStr(i)).Formula, 1, templen - 1)
    Next i
   
End Sub

'*************************************************************************************************

Sub Circle_Generator()

    begin1 = 0
    end1 = 359
  
    Range("A1").Formula = "radius="
    Range("A2").Formula = "xorigin="
    Range("A3").Formula = "yorigin="
    Range("B1").Formula = 2
    Range("B2").Formula = 1
    Range("B3").Formula = 1
    Range("A4").Formula = "Degrees"
    Range("B4").Formula = "x"
    Range("C4").Formula = "y"

    Columns("B:C").Select
    Selection.NumberFormat = "0.0000"
    Range("B1:B3").Select
    Selection.NumberFormat = "0"

    For i = begin1 To end1
        Range("A" + CStr(i + 5)).Formula = CStr(i)
        Range("B" + CStr(i + 5)).Formula = "=round((COS(A" + CStr(i + 5) + "*PI()/180)*B1)+B2,4)"
        Range("C" + CStr(i + 5)).Formula = "=round((SIN(A" + CStr(i + 5) + "*PI()/180)*B1)+B3,4)"
    Next i
  
End Sub

'*************************************************************************************************
'
'This section of macros was used to generate Gcode from data listed on a custom
'spreadsheet so that a series of 5 aluminum boxes per run could be milled on a
'custom built prototype milling machine.
'
Sub Gcode_Generator_Speaker_Face()

    begin1 = 122
    end1 = 126
   
    Count = 1000
   
    For i = begin1 To end1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.25 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.45"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z0"
        Count = Count + 1
    Next i

End Sub

Sub Gcode_Generator_Front_Face_Rev1()

    begin1 = 4
    end1 = 8
    begin2 = 10
    end2 = 14
    begin3 = 16
    end3 = 20
    begin4 = 22
    end4 = 26
    begin5 = 28
    end5 = 32
    Count = 1000
   
    For i = begin1 To end1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text + " Z-0.05"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-1.5"
        Count = Count + 4
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin2)).Text + " Y" + Range("I" + CStr(begin2)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin2)).Text + " Y" + Range("I" + CStr(begin2)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(begin2)).Text + " Y" + Range("O" + CStr(begin2)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(begin2)).Text + " Y" + Range("Q" + CStr(begin2)).Text + " R" + Range("M" + CStr(begin2)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(begin2)).Text + " Y" + Range("S" + CStr(begin2)).Text + " R" + Range("M" + CStr(begin2)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(begin2)).Text + " Y" + Range("U" + CStr(begin2)).Text + " R" + Range("M" + CStr(begin2)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(begin2)).Text + " Y" + Range("W" + CStr(begin2)).Text + " R" + Range("M" + CStr(begin2)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin2)).Text + " Y" + Range("I" + CStr(begin2)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"


    For i = (begin2 + 1) To end2
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-1.5"
        Count = Count + 4
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin3)).Text + " Y" + Range("I" + CStr(begin3)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin3)).Text + " Y" + Range("I" + CStr(begin3)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(begin3)).Text + " Y" + Range("O" + CStr(begin3)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(begin3)).Text + " Y" + Range("Q" + CStr(begin3)).Text + " R" + Range("M" + CStr(begin3)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(begin3)).Text + " Y" + Range("S" + CStr(begin3)).Text + " R" + Range("M" + CStr(begin3)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(begin3)).Text + " Y" + Range("U" + CStr(begin3)).Text + " R" + Range("M" + CStr(begin3)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(begin3)).Text + " Y" + Range("W" + CStr(begin3)).Text + " R" + Range("M" + CStr(begin3)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin3)).Text + " Y" + Range("I" + CStr(begin3)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"

    For i = (begin3 + 1) To end3
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-1.5"
        Count = Count + 4
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin4)).Text + " Y" + Range("I" + CStr(begin4)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin4)).Text + " Y" + Range("I" + CStr(begin4)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(begin4)).Text + " Y" + Range("O" + CStr(begin4)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(begin4)).Text + " Y" + Range("Q" + CStr(begin4)).Text + " R" + Range("M" + CStr(begin4)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(begin4)).Text + " Y" + Range("S" + CStr(begin4)).Text + " R" + Range("M" + CStr(begin4)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(begin4)).Text + " Y" + Range("U" + CStr(begin4)).Text + " R" + Range("M" + CStr(begin4)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(begin4)).Text + " Y" + Range("W" + CStr(begin4)).Text + " R" + Range("M" + CStr(begin4)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin4)).Text + " Y" + Range("I" + CStr(begin4)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"

    For i = (begin4 + 1) To end4
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-1.5"
        Count = Count + 4
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin5)).Text + " Y" + Range("I" + CStr(begin5)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin5)).Text + " Y" + Range("I" + CStr(begin5)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(begin5)).Text + " Y" + Range("O" + CStr(begin5)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(begin5)).Text + " Y" + Range("Q" + CStr(begin5)).Text + " R" + Range("M" + CStr(begin5)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(begin5)).Text + " Y" + Range("S" + CStr(begin5)).Text + " R" + Range("M" + CStr(begin5)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(begin5)).Text + " Y" + Range("U" + CStr(begin5)).Text + " R" + Range("M" + CStr(begin5)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(begin5)).Text + " Y" + Range("W" + CStr(begin5)).Text + " R" + Range("M" + CStr(begin5)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(begin5)).Text + " Y" + Range("I" + CStr(begin5)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"

    For i = (begin5 + 1) To end5
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 Z.15 F2.0"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.2"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 Z-0.05"
        Count = Count + 1
       
    Next i
        Range("A" + CStr(i + Count)).Formula = "G0 Z-2.5"
        Count = Count + 1
        Range("A" + CStr(i + Count)).Formula = "G0 X0 Y2"
        Count = Count + 1

End Sub

Sub Gcode_Generator_Front_Face_022207()

    begin1 = 4
    end1 = 8
    begin2 = 10
    end2 = 14
    begin3 = 16
    end3 = 20
    begin4 = 22
    end4 = 26
    begin5 = 28
    end5 = 32
    Count = 1000
   
    Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
    Count = Count + 1
    Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.4"
    Count = Count + 1
    Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X0 Y0"
    Count = Count + 1
    Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
    Count = Count + 1
       
    For i = begin1 To end1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("N" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 Z.15 F1.1"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("AI" + CStr(i)).Text + " Y" + Range("AJ" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AK" + CStr(i)).Text + " Y" + Range("AL" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AM" + CStr(i)).Text + " Y" + Range("AN" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AO" + CStr(i)).Text + " Y" + Range("AP" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AQ" + CStr(i)).Text + " Y" + Range("AR" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05 F8.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.75"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1

    For i = (begin2) To end2
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("N" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 Z.15 F1.1"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("AI" + CStr(i)).Text + " Y" + Range("AJ" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AK" + CStr(i)).Text + " Y" + Range("AL" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AM" + CStr(i)).Text + " Y" + Range("AN" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AO" + CStr(i)).Text + " Y" + Range("AP" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AQ" + CStr(i)).Text + " Y" + Range("AR" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05 F8.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.75"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1

    For i = (begin3) To end3
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("N" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 Z.15 F1.1"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("AI" + CStr(i)).Text + " Y" + Range("AJ" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AK" + CStr(i)).Text + " Y" + Range("AL" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AM" + CStr(i)).Text + " Y" + Range("AN" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AO" + CStr(i)).Text + " Y" + Range("AP" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AQ" + CStr(i)).Text + " Y" + Range("AR" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05 F8.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.75"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1

    For i = (begin4) To end4
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("N" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 Z.15 F1.1"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("AI" + CStr(i)).Text + " Y" + Range("AJ" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AK" + CStr(i)).Text + " Y" + Range("AL" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AM" + CStr(i)).Text + " Y" + Range("AN" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AO" + CStr(i)).Text + " Y" + Range("AP" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AQ" + CStr(i)).Text + " Y" + Range("AR" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05 F8.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.75"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1

    For i = (begin5) To end5
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("N" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 Z.15 F1.1"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z.35"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("N" + CStr(i)).Text + " Y" + Range("O" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("P" + CStr(i)).Text + " Y" + Range("Q" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("R" + CStr(i)).Text + " Y" + Range("S" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("T" + CStr(i)).Text + " Y" + Range("U" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("V" + CStr(i)).Text + " Y" + Range("W" + CStr(i)).Text + " R" + Range("M" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G1 X" + Range("AI" + CStr(i)).Text + " Y" + Range("AJ" + CStr(i)).Text + " F1.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AK" + CStr(i)).Text + " Y" + Range("AL" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AM" + CStr(i)).Text + " Y" + Range("AN" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AO" + CStr(i)).Text + " Y" + Range("AP" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G3 X" + Range("AQ" + CStr(i)).Text + " Y" + Range("AR" + CStr(i)).Text + " R" + Range("AH" + CStr(i)).Text + " F10.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X" + Range("H" + CStr(i)).Text + " Y" + Range("I" + CStr(i)).Text
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.05 F8.0"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
    Next i
        Count = Count - 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 Z-0.75"
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " "
        Count = Count + 1
        Range("A" + CStr(Count)).Formula = "N" + CStr(Count - 1000) + " " + "G0 X0 Y2"
        Count = Count + 1

End Sub

'*************************************************************************************************

Sub Number_Generator()

    begin1 = 1
    end1 = 10
    Linenumber = 2
   
    For i = begin1 To end1
        Range("A" + CStr(Linenumber)).Formula = CStr(10 ^ (i - 1))
        Linenumber = Linenumber + 1
        For j = 2 To 9
            Range("A" + CStr(Linenumber)).Formula = CStr(10 ^ (i - 1) * j)
            Linenumber = Linenumber + 1
        Next j
    Next i
   
End Sub

'*************************************************************************************************
'
Sub Test_Generator()

' This is an algorithm used to place non-like cells next to each
' other for the purpose of creating random multiple choice selections.

' A VB program is used to test any age student with multiple
' choice questions asked from a question and answer format.
' It can be used for language arts, math, foreign language,
' history, basically anything that can be simplified to a
' question and answer format.  This program allows the student
' to choose whether the test is given in the order of the file it
' accesses or randomly.  A score is appended to a separate
' file that is time stamped so all can see the progress
' achieved over time.  The VB multiple choice test program is
' useful for a very wide ranging audience.

' At the bottom of this subroutine is a nice feature added that tests
' the accuracy of the data for no repeats.  The loop was setup
' initially to find some algorithm problems or typo's.  Once those
' were fixed I was able to loop 1000 times with no errors reported.
' Removing one of the comment symbols close to the bottom of this
' macro allows testing of the failure capture mechanism.

' This macro was used with the states and capitals test (50 questions).
' If you want to test the 1000 claim change the for loop below
' from         for j = 1 to 10  
' to             for j = 1 to 1000  
' or whatever number you want.

' Download the following preset file example.csv , open it in Execl, then
' load this macro "Sub Test_Generator()" into the Excel macro section.

' here is a jpg of what a completed run will look like
'
'  
Completed Run of Macro
'
    begin1 = 2
    end1 = 51

Range("I" + CStr(end1 + 2)) = 0
Range("H" + CStr(end1 + 3)) = "# of Loops"
Range("I" + CStr(end1 + 3)) = "# of Errors"

' j = 1 to 10  to  j = 1 to 1000  to test higher loop counts
For j = 1 To 10
 
    For i = begin1 To end1
 
        Range("E" + CStr(1)).Formula = "Choice 1"
        Range("F" + CStr(1)).Formula = "Choice 2"
        Range("G" + CStr(1)).Formula = "Choice 3"
        Range("H" + CStr(1)).Formula = "Choice 4"
 
        Range("E" + CStr(i)).Formula = ""
        Range("F" + CStr(i)).Formula = ""
        Range("G" + CStr(i)).Formula = ""
        Range("H" + CStr(i)).Formula = ""
        Range("I" + CStr(i)).Formula = ""
        Range("J" + CStr(i)).Formula = ""
        Range("K" + CStr(i)).Formula = ""

 
        answerholder = Int((4 * Rnd) + 1)
        Select Case answerholder
        Case 1
'            Range("E" + CStr(i)).Formula = 1
'            Range("F" + CStr(i)).Formula = 2
'            Range("G" + CStr(i)).Formula = 3
'            Range("H" + CStr(i)).Formula = 4
            Range("E" + CStr(i)).Formula = Range("D" + CStr(i))
            While Range("F" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i))) Then
                    Range("F" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("I" + CStr(i)).Formula = randomchoice
                Else: Range("F" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("G" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("F" + CStr(i))) Then
                    Range("G" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("J" + CStr(i)).Formula = randomchoice
                Else: Range("G" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("H" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("F" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("G" + CStr(i))) Then
                    Range("H" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("K" + CStr(i)).Formula = randomchoice
                Else: Range("H" + CStr(i)).Formula = ""
                End If
            Wend

        Case 2
'            Range("E" + CStr(i)).Formula = 1
'            Range("F" + CStr(i)).Formula = 2
'            Range("G" + CStr(i)).Formula = 3
'            Range("H" + CStr(i)).Formula = 4
            Range("F" + CStr(i)).Formula = Range("D" + CStr(i))
            While Range("E" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("F" + CStr(i))) Then
                    Range("E" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("I" + CStr(i)).Formula = randomchoice
                Else: Range("E" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("G" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("F" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i))) Then
                    Range("G" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("J" + CStr(i)).Formula = randomchoice
                Else: Range("G" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("H" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("F" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("G" + CStr(i))) Then
                    Range("H" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("K" + CStr(i)).Formula = randomchoice
                Else: Range("H" + CStr(i)).Formula = ""
                End If
            Wend

        Case 3
'            Range("E" + CStr(i)).Formula = 1
'            Range("F" + CStr(i)).Formula = 2
'            Range("G" + CStr(i)).Formula = 3
'            Range("H" + CStr(i)).Formula = 4
            Range("G" + CStr(i)).Formula = Range("D" + CStr(i))
            While Range("E" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("G" + CStr(i))) Then
                    Range("E" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("J" + CStr(i)).Formula = randomchoice
                Else: Range("E" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("F" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("G" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i))) Then
                    Range("F" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("I" + CStr(i)).Formula = randomchoice
                Else: Range("F" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("H" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("G" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("F" + CStr(i))) Then
                    Range("H" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("K" + CStr(i)).Formula = randomchoice
                Else: Range("H" + CStr(i)).Formula = ""
                End If
            Wend

        Case 4
'            Range("E" + CStr(i)).Formula = 1
'            Range("F" + CStr(i)).Formula = 2
'            Range("G" + CStr(i)).Formula = 3
'            Range("H" + CStr(i)).Formula = 4
            Range("H" + CStr(i)).Formula = Range("D" + CStr(i))
            While Range("E" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("H" + CStr(i))) Then
                    Range("E" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("J" + CStr(i)).Formula = randomchoice
                Else: Range("E" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("F" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("H" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i))) Then
                    Range("F" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("K" + CStr(i)).Formula = randomchoice
                Else: Range("F" + CStr(i)).Formula = ""
                End If
            Wend
            While Range("G" + CStr(i)) = ""
                randomchoice = Int(((end1-1) * Rnd) + 1) + 1
                If (Range("D" + CStr(randomchoice)) <> Range("H" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("E" + CStr(i)) And Range("D" + CStr(randomchoice)) <> Range("F" + CStr(i))) Then
                    Range("G" + CStr(i)).Formula = Range("D" + CStr(randomchoice))
'                    Range("I" + CStr(i)).Formula = randomchoice
                Else: Range("G" + CStr(i)).Formula = ""
                End If
            Wend

        End Select
    
    Next i

'    begin1 = 2
'    end1 = 51
'Remove the comments from any or all of the next two lines to test failure capture mechanism
'Range("E" + CStr(end1)) = Range("F" + CStr(end1))
'Range("G" + CStr(end1 - 2)) = Range("H" + CStr(end1 - 2))


Range("I" + CStr(end1 + 1)) = "=SUM(I" + CStr(begin1) + ":I" + CStr(end1) + ")"

For i = begin1 To end1
    Range("I" + CStr(i)) = "=SUM(J" + CStr(i) + ":O" + CStr(i) + ")"
    Range("J" + CStr(i)) = ""
    Range("K" + CStr(i)) = ""
    Range("L" + CStr(i)) = ""
    Range("M" + CStr(i)) = ""
    Range("N" + CStr(i)) = ""
    Range("O" + CStr(i)) = ""

Next i

For i = begin1 To end1
    If Range("E" + CStr(i)) = Range("F" + CStr(i)) Then
        Range("J" + CStr(i)) = 1
    Else
        Range("J" + CStr(i)) = 0
    End If
    If Range("E" + CStr(i)) = Range("G" + CStr(i)) Then
        Range("K" + CStr(i)) = 1
    Else
        Range("K" + CStr(i)) = 0
    End If
    If Range("E" + CStr(i)) = Range("H" + CStr(i)) Then
        Range("L" + CStr(i)) = 1
    Else
        Range("L" + CStr(i)) = 0
    End If
    If Range("F" + CStr(i)) = Range("G" + CStr(i)) Then
        Range("M" + CStr(i)) = 1
    Else
        Range("M" + CStr(i)) = 0
    End If
    If Range("F" + CStr(i)) = Range("H" + CStr(i)) Then
        Range("N" + CStr(i)) = 1
    Else
        Range("N" + CStr(i)) = 0
    End If
    If Range("G" + CStr(i)) = Range("H" + CStr(i)) Then
        Range("O" + CStr(i)) = 1
    Else
        Range("O" + CStr(i)) = 0
    End If


Next i

'    begin1 = 2
'    end1 = 51

Range("H" + CStr(end1 + 2)) = j
If Range("I" + CStr(end1 + 1)) > 0 Then Range("I" + CStr(end1 + 2)) = Range("I" + CStr(end1 + 2)) + Range("I" + CStr(end1 + 1))
'If Range("I" + CStr(end1 + 1)) > 0 Then Range("I" + CStr(end1 + 2)) = Range("I" + CStr(end1 + 2)) + 1

Next j

End Sub

******************   Basic Stamp 2 Program   ******************
' Molex_13456_and_123456_tries10.bs2
' This project uses a basic stamp 2 module, written 2-5-2011.
' Main function:  the program tests a 5 or 6 conductor looped around
' cable for continuity and position correctness in predefined Molex
' connections on each end.  The program
needs to see 10 consecutive passes on
' all 5 or 6 (individually for high and low)  before the pass
alarm (buzzer) is enabled. 
' A 3 position switch, an LED used to verify
program execution, I/O ports used with
' buffering circuits to capture
the loop around of each individual wire, and a buzzer
' were used.  
A watchdog circuit was added to reset the processor in the event
' of program runaway.  Some of the code below was borrowed from sample
' programs to help during general  timing parameters of the basic stamp,
' while the majority of the code is original.
' {$STAMP BS2}
' {$PBASIC 2.5}
tries             VAR     Word
counter           VAR     Word
pinvalue          VAR     Byte
#SELECT $STAMP
#CASE BS2, BS2E, BS2PE
Scale CON 500 ' to ms for 2 us per unit
#CASE BS2SX, BS2P, BS2PX
Scale CON 1250 ' to ms for 0.8 us per unit
#ENDSELECT
Flash CON 500 * Scale ' 25 milliseconds
Setup:
pinvalue=%000000
tries = 1
counter=1
LOW 0 ' Pin 1 LOW
LOW 1 ' Pin 2 LOW
LOW 2 ' Pin 3 LOW
LOW 3 ' Pin 4 LOW
LOW 4 ' Pin 5 LOW
LOW 5 ' Pin 6 high
HIGH 6 ' Speaker Off (same as greenoff)
'HIGH 7 ' LED Off
'PULSOUT 7,65535
Main:
pinvalue=%000000
counter=counter+1
IF counter=10 THEN GOTO flip
GOTO afterflip
flip:
TOGGLE 7
counter=1
afterflip:
check PIN 1
HIGH 0
IF IN10=0 AND IN11=1 AND IN12=1 AND IN13=1 AND IN14=1 AND IN15=1 THEN pinvalue=pinvalue | %100000
LOW 0
'check pin 2
HIGH 1
IF IN10=1 AND IN11=0 AND IN12=1 AND IN13=1 AND IN14=1 AND IN15=1 THEN pinvalue=pinvalue | %010000
LOW 1
'check pin 3
HIGH 2
IF IN10=1 AND IN11=1 AND IN12=0 AND IN13=1 AND IN14=1 AND IN15=1 THEN pinvalue=pinvalue | %001000
LOW 2
'check pin 4
HIGH 3
IF IN10=1 AND IN11=1 AND IN12=1 AND IN13=0 AND IN14=1 AND IN15=1 THEN pinvalue=pinvalue | %000100
LOW 3
'check pin 5
HIGH 4
IF IN10=1 AND IN11=1 AND IN12=1 AND IN13=1 AND IN14=0 AND IN15=1 THEN pinvalue=pinvalue | %000010
LOW 4
'check pin 6
HIGH 5
IF IN10=1 AND IN11=1 AND IN12=1 AND IN13=1 AND IN14=1 AND IN15=0 THEN pinvalue=pinvalue | %000001
LOW 5
GOTO switchcheck
increment:
tries=tries+1
IF tries>10 THEN GOTO greenon
GOTO main
GREENON:
LOW 6
GOTO Main
GREENOFF:
tries=1
pinvalue=%000000
LOW 0
LOW 1
LOW 2
LOW 3
LOW 4
LOW 5
HIGH 6
'HIGH 7
'PAUSE 1000
GOTO Main
switchcheck:
IF IN8=0 AND IN9=1 AND pinvalue=%111111 THEN GOTO increment
IF IN8=1 AND IN9=0  AND pinvalue=%101111 THEN GOTO increment
GOTO greenoff
END
******************   Basic Stamp 2 Program   ******************

'*************************************************************************************************

Note - other macros and VB programs have been written, but have not been included for web viewing.
1.  Used for route deliveries to greatly enhance accuracy while at the same time reducing stress (database maintained and macros used by user).  This has been in use since around the end of 2008.
2.  Uses GPS data and voice recognition (initial testing completed roughly in the mid to late 2008).

3.  Taps statistically into random number generation (statistical stage needs further development - 2010).
There are others over the years that were small in nature, but helped with production issues of the time.