aboutsummaryrefslogtreecommitdiffstats
path: root/EE3102/Libraries/LM741
diff options
context:
space:
mode:
authorMatt Strapp <strap012@umn.edu>2021-03-02 15:35:34 -0600
committerMatt Strapp <strap012@umn.edu>2021-03-02 15:35:34 -0600
commit464993cca3931161a623e6579f2bc08b3de9f8eb (patch)
tree7660adea8b26f11425644818e2f0822bd384249a /EE3102/Libraries/LM741
parentDelete emnpty libs (diff)
downloadee3102-464993cca3931161a623e6579f2bc08b3de9f8eb.tar
ee3102-464993cca3931161a623e6579f2bc08b3de9f8eb.tar.gz
ee3102-464993cca3931161a623e6579f2bc08b3de9f8eb.tar.bz2
ee3102-464993cca3931161a623e6579f2bc08b3de9f8eb.tar.lz
ee3102-464993cca3931161a623e6579f2bc08b3de9f8eb.tar.xz
ee3102-464993cca3931161a623e6579f2bc08b3de9f8eb.tar.zst
ee3102-464993cca3931161a623e6579f2bc08b3de9f8eb.zip
Add libraries
Diffstat (limited to 'EE3102/Libraries/LM741')
-rw-r--r--EE3102/Libraries/LM741/2021-02-27_19-47-13.txt69
-rw-r--r--EE3102/Libraries/LM741/UL_Form.dfm49
-rw-r--r--EE3102/Libraries/LM741/UL_Form.pas14
-rw-r--r--EE3102/Libraries/LM741/UL_Import.PrjScr945
-rw-r--r--EE3102/Libraries/LM741/UL_Import.pas1081
5 files changed, 2158 insertions, 0 deletions
diff --git a/EE3102/Libraries/LM741/2021-02-27_19-47-13.txt b/EE3102/Libraries/LM741/2021-02-27_19-47-13.txt
new file mode 100644
index 0000000..bad7540
--- /dev/null
+++ b/EE3102/Libraries/LM741/2021-02-27_19-47-13.txt
@@ -0,0 +1,69 @@
+# Created by Ultra Librarian Gold 8.3.286 Copyright © 1999-2018
+# Frank Frank, Accelerated Designs
+
+StartFootprints
+EndFootprints
+
+StartComponents
+
+Component (Name "LM741CN/NOPB") (PartCount 1) (DesPrefix "U?")
+Pin (Location 400, 0) (Rotation 0) (PinType Passive) (Length 200) (Width 0) (Designator Visible "1") (Name Hidden "BAL1") (PinSwap 0) (PartSwap 0) (PinSeq 1) (Part 1)
+Pin (Location 400, -400) (Rotation 0) (PinType Passive) (Length 200) (Width 0) (Designator Visible "8") (Name Hidden "BAL2") (PinSwap 0) (PartSwap 0) (PinSeq 2) (Part 1)
+Pin (Location 0, -300) (Rotation 180) (PinType Input) (Length 200) (Width 0) (Designator Visible "3") (Name Hidden "IN+") (PinSwap 0) (PartSwap 0) (PinSeq 3) (Part 1)
+Pin (Location 0, -100) (Rotation 180) (PinType Input) (Length 200) (Width 0) (Designator Visible "2") (Name Hidden "IN-") (PinSwap 0) (PartSwap 0) (PinSeq 4) (Part 1)
+Pin (Location 400, -200) (Rotation 0) (PinType Output) (Length 200) (Width 0) (Designator Visible "6") (Name Hidden "OUT") (PinSwap 0) (PartSwap 0) (PinSeq 5) (Part 1)
+Pin (Location 200, 0) (Rotation 90) (PinType Power) (Length 200) (Width 0) (Designator Visible "7") (Name Hidden "V+") (PinSwap 0) (PartSwap 0) (PinSeq 6) (Part 1)
+Pin (Location 200, -400) (Rotation 270) (PinType Power) (Length 200) (Width 0) (Designator Visible "4") (Name Hidden "V-") (PinSwap 0) (PartSwap 0) (PinSeq 7) (Part 1)
+Line (Width 10) (Start 0, 0) (End 400, -200) (Part 1)
+Line (Width 10) (Start 0, -400) (End 400, -200) (Part 1)
+Line (Width 10) (Start 0, 0) (End 0, -400) (Part 1)
+Line (Width 10) (Start 40, -100) (End 100, -100) (Part 1)
+Line (Width 10) (Start 40, -300) (End 100, -300) (Part 1)
+Line (Width 10) (Start 70, -270) (End 70, -330) (Part 1)
+Line (Width 10) (Start 200, 0) (End 200, -100) (Part 1)
+Line (Width 10) (Start 200, -300) (End 200, -400) (Part 1)
+Line (Width 10) (Start 300, -150) (End 400, 0) (Part 1)
+Line (Width 10) (Start 300, -250) (End 400, -400) (Part 1)
+Line (Width 10) (Start 0, -400) (End 400, -200) (Part 1)
+Line (Width 10) (Start 40, -100) (End 100, -100) (Part 1)
+Line (Width 10) (Start 40, -300) (End 100, -300) (Part 1)
+Line (Width 10) (Start 70, -270) (End 70, -330) (Part 1)
+Line (Width 10) (Start 200, 0) (End 200, -100) (Part 1)
+Line (Width 10) (Start 200, -300) (End 200, -400) (Part 1)
+Line (Width 10) (Start 0, -400) (End 400, -200) (Part 1)
+Line (Width 10) (Start 40, -100) (End 100, -100) (Part 1)
+Line (Width 10) (Start 40, -300) (End 100, -300) (Part 1)
+Line (Width 10) (Start 70, -270) (End 70, -330) (Part 1)
+Line (Width 10) (Start 200, 0) (End 200, -100) (Part 1)
+Line (Width 10) (Start 200, -300) (End 200, -400) (Part 1)
+Text (Location 150, -200) (Height 100) (Rotation 0) (Justification BottomLeft) (Value "V+") (Part 1)
+Text (Location 150, -300) (Height 100) (Rotation 0) (Justification BottomLeft) (Value "V-") (Part 1)
+Parameter (Name "Copyright") (Location 0, 0) (Height 50) (Rotation 0) (Justification Center) (Value "Copyright (C) 2018 Accelerated Designs. All rights reserved") (Part 1)
+Parameter (Name "RefDes") (Location 620, 10) (Height 100) (Rotation 0) (Justification BottomLeft) (Value "") (Part 1)
+Parameter (Name "Type") (Location 620, -90) (Height 100) (Rotation 0) (Justification BottomLeft) (Value "") (Part 1)
+Parameter (Name "SymbolVersion") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "2008-07-09") (Part 1)
+Parameter (Name "PartNumber") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "LM741CN") (Part 1)
+Parameter (Name "Characteristics") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "LM741CNGeneralPurposeOpAmp") (Part 1)
+Parameter (Name "CompType") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "OpAmpIC") (Part 1)
+Parameter (Name "TaMin_C") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "00") (Part 1)
+Parameter (Name "TaMax_C") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "700") (Part 1)
+Parameter (Name "PackageDescription") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "8LeadPlasticDIP") (Part 1)
+Parameter (Name "PackageReference") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "N08E_L") (Part 1)
+Parameter (Name "RoHS") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "O") (Part 1)
+Parameter (Name "Sim") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "NoteBalancepinsnotmodeled") (Part 1)
+Parameter (Name "ComponentLink1DescBC") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "LM741Datasheet") (Part 1)
+Parameter (Name "ComponentLink1URL") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "http//wwwnationalcom/ds/LM/LM741pdf") (Part 1)
+Parameter (Name "ComponentLink2DescA4") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "LM741WebPage") (Part 1)
+Parameter (Name "ComponentLink2URL") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "http//wwwnationalcom/pf/LM/LM741html") (Part 1)
+Parameter (Name "ComponentLink3DescAC") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "N08EPackageWebPage") (Part 1)
+Parameter (Name "ComponentLink3URL") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "http//wwwnationalcom/packaging/folders/n08ehtml") (Part 1)
+Parameter (Name "Manufacturer") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "NationalSemiconductor") (Part 1)
+Parameter (Name "Version") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "B1608") (Part 1)
+Parameter (Name "LatestRevisionDate") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "2009-03-16") (Part 1)
+Parameter (Name "LatestRevisionNote") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "MassUpdate") (Part 1)
+Parameter (Name "Publisher") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "NationalSemiconductor") (Part 1)
+Parameter (Name "Published") (Location 0, 0) (Height 80) (Rotation 0) (Justification BottomLeft) (Value "2009-03-16") (Part 1)
+Description (Value "No Description Available") (Part 1)
+Footprint (Name "N08E_L")
+EndComponent
+EndComponents
diff --git a/EE3102/Libraries/LM741/UL_Form.dfm b/EE3102/Libraries/LM741/UL_Form.dfm
new file mode 100644
index 0000000..2d57e92
--- /dev/null
+++ b/EE3102/Libraries/LM741/UL_Form.dfm
@@ -0,0 +1,49 @@
+object UL_Form: TUL_Form
+ Left = 0
+ Top = 0
+ BorderStyle = bsDialog
+ Caption = 'UL Import'
+ ClientHeight = 80
+ ClientWidth = 473
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ PixelsPerInch = 96
+ TextHeight = 13
+ object TxtFile: TEdit
+ Left = 80
+ Top = 8
+ Width = 384
+ Height = 21
+ TabOrder = 0
+ end
+ object BtnFile: TButton
+ Left = 8
+ Top = 8
+ Width = 64
+ Height = 24
+ Caption = 'File...'
+ TabOrder = 1
+ OnClick = BtnFileClick
+ end
+ object BtnImport: TButton
+ Left = 188
+ Top = 40
+ Width = 96
+ Height = 32
+ Caption = 'Start Import'
+ TabOrder = 2
+ OnClick = BtnImportClick
+ end
+ object OpenDlg: TOpenDialog
+ DefaultExt = '.txt'
+ Filter = 'UL Altium Output (*.txt)|*.txt'
+ Left = 8
+ Top = 40
+ end
+end
diff --git a/EE3102/Libraries/LM741/UL_Form.pas b/EE3102/Libraries/LM741/UL_Form.pas
new file mode 100644
index 0000000..a79f13c
--- /dev/null
+++ b/EE3102/Libraries/LM741/UL_Form.pas
@@ -0,0 +1,14 @@
+
+procedure TUL_Form.BtnFileClick(Sender: TObject);
+begin
+ If OpenDlg.Execute Then Begin
+ TxtFile.Text := OpenDlg.FileName;
+ End;
+end;
+
+procedure TUL_Form.BtnImportClick(Sender: TObject);
+begin
+ ImportAscIIData(TxtFile.Text);
+ Close;
+end;
+
diff --git a/EE3102/Libraries/LM741/UL_Import.PrjScr b/EE3102/Libraries/LM741/UL_Import.PrjScr
new file mode 100644
index 0000000..1238b5d
--- /dev/null
+++ b/EE3102/Libraries/LM741/UL_Import.PrjScr
@@ -0,0 +1,945 @@
+[Design]
+Version=1.0
+HierarchyMode=0
+ChannelRoomNamingStyle=0
+ReleasesFolder=
+ReleaseVaultGUID=
+ReleaseVaultName=
+ChannelDesignatorFormatString=$Component_$RoomName
+ChannelRoomLevelSeperator=_
+OpenOutputs=1
+ArchiveProject=0
+TimestampOutput=0
+SeparateFolders=0
+TemplateLocationPath=
+PinSwapBy_Netlabel=1
+PinSwapBy_Pin=1
+AllowPortNetNames=0
+AllowSheetEntryNetNames=1
+AppendSheetNumberToLocalNets=0
+NetlistSinglePinNets=0
+DefaultConfiguration=Default - All Constraints
+UserID=0xFFFFFFFF
+DefaultPcbProtel=1
+DefaultPcbPcad=0
+ReorderDocumentsOnCompile=1
+NameNetsHierarchically=0
+PowerPortNamesTakePriority=0
+PushECOToAnnotationFile=1
+DItemRevisionGUID=
+ReportSuppressedErrorsInMessages=0
+FSMCodingStyle=eFMSDropDownList_OneProcess
+FSMEncodingStyle=eFMSDropDownList_OneHot
+OutputPath=
+LogFolderPath=
+ManagedProjectGUID=
+
+[Preferences]
+PrefsVaultGUID=
+PrefsRevisionGUID=
+
+[Document1]
+DocumentPath=UL_Import.pas
+AnnotationEnabled=1
+AnnotateStartValue=1
+AnnotationIndexControlEnabled=0
+AnnotateSuffix=
+AnnotateScope=All
+AnnotateOrder=-1
+DoLibraryUpdate=1
+DoDatabaseUpdate=1
+ClassGenCCAutoEnabled=1
+ClassGenCCAutoRoomEnabled=1
+ClassGenNCAutoScope=None
+DItemRevisionGUID=
+GenerateClassCluster=0
+DocumentUniqueId=
+
+[Document2]
+DocumentPath=UL_Form.pas
+AnnotationEnabled=1
+AnnotateStartValue=1
+AnnotationIndexControlEnabled=0
+AnnotateSuffix=
+AnnotateScope=All
+AnnotateOrder=-1
+DoLibraryUpdate=1
+DoDatabaseUpdate=1
+ClassGenCCAutoEnabled=1
+ClassGenCCAutoRoomEnabled=1
+ClassGenNCAutoScope=None
+DItemRevisionGUID=
+GenerateClassCluster=0
+DocumentUniqueId=
+
+[Generic_ScriptingSystem]
+StartProcName=UL_Form.pas>
+
+[OutputGroup1]
+Name=Netlist Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=PCADNetlist
+OutputName1=PCAD Netlist
+OutputDocumentPath1=
+OutputVariantName1=
+OutputDefault1=0
+OutputType2=SIMetrixNetlist
+OutputName2=SIMetrix
+OutputDocumentPath2=
+OutputVariantName2=
+OutputDefault2=0
+OutputType3=SIMPLISNetlist
+OutputName3=SIMPLIS
+OutputDocumentPath3=
+OutputVariantName3=
+OutputDefault3=0
+OutputType4=Verilog
+OutputName4=Verilog File
+OutputDocumentPath4=
+OutputVariantName4=
+OutputDefault4=0
+OutputType5=VHDL
+OutputName5=VHDL File
+OutputDocumentPath5=
+OutputVariantName5=
+OutputDefault5=0
+OutputType6=XSpiceNetlist
+OutputName6=XSpice Netlist
+OutputDocumentPath6=
+OutputVariantName6=
+OutputDefault6=0
+
+[OutputGroup2]
+Name=Simulator Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=AdvSimNetlist
+OutputName1=Mixed Sim
+OutputDocumentPath1=
+OutputVariantName1=
+OutputDefault1=0
+OutputType2=SIMetrixSimulation
+OutputName2=SIMetrix
+OutputDocumentPath2=
+OutputVariantName2=
+OutputDefault2=0
+OutputType3=SIMPLISSimulation
+OutputName3=SIMPLIS
+OutputDocumentPath3=
+OutputVariantName3=
+OutputDefault3=0
+
+[OutputGroup3]
+Name=Documentation Outputs
+Description=
+TargetPrinter=Virtual Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=Composite
+OutputName1=Composite Drawing
+OutputDocumentPath1=
+OutputVariantName1=
+OutputDefault1=0
+PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType2=Logic Analyser Print
+OutputName2=Logic Analyser Prints
+OutputDocumentPath2=
+OutputVariantName2=
+OutputDefault2=0
+PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType3=OpenBus Print
+OutputName3=OpenBus Prints
+OutputDocumentPath3=
+OutputVariantName3=
+OutputDefault3=0
+PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType4=PCB 3D Print
+OutputName4=PCB 3D Prints
+OutputDocumentPath4=
+OutputVariantName4=[No Variations]
+OutputDefault4=0
+PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType5=PCB Print
+OutputName5=PCB Prints
+OutputDocumentPath5=
+OutputVariantName5=
+OutputDefault5=0
+PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType6=Schematic Print
+OutputName6=Schematic Prints
+OutputDocumentPath6=
+OutputVariantName6=
+OutputDefault6=0
+PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType7=SimView Print
+OutputName7=SimView Prints
+OutputDocumentPath7=
+OutputVariantName7=
+OutputDefault7=0
+PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType8=Wave Print
+OutputName8=Wave Prints
+OutputDocumentPath8=
+OutputVariantName8=
+OutputDefault8=0
+PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType9=WaveSim Print
+OutputName9=WaveSim Prints
+OutputDocumentPath9=
+OutputVariantName9=
+OutputDefault9=0
+PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType10=Assembler Source Print
+OutputName10=Assembler Source Prints
+OutputDocumentPath10=
+OutputVariantName10=
+OutputDefault10=0
+PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType11=C Source Print
+OutputName11=C Source Prints
+OutputDocumentPath11=
+OutputVariantName11=
+OutputDefault11=0
+PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType12=C/C++ Header Print
+OutputName12=C/C++ Header Prints
+OutputDocumentPath12=
+OutputVariantName12=
+OutputDefault12=0
+PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType13=C++ Source Print
+OutputName13=C++ Source Prints
+OutputDocumentPath13=
+OutputVariantName13=
+OutputDefault13=0
+PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType14=FSM Print
+OutputName14=FSM Prints
+OutputDocumentPath14=
+OutputVariantName14=
+OutputDefault14=0
+PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType15=PCB 3D Video
+OutputName15=PCB 3D Video
+OutputDocumentPath15=
+OutputVariantName15=[No Variations]
+OutputDefault15=0
+PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType16=PCBLIB Print
+OutputName16=PCBLIB Prints
+OutputDocumentPath16=
+OutputVariantName16=
+OutputDefault16=0
+PageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType17=PDF3D
+OutputName17=PDF3D
+OutputDocumentPath17=
+OutputVariantName17=[No Variations]
+OutputDefault17=0
+PageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType18=Report Print
+OutputName18=Report Prints
+OutputDocumentPath18=
+OutputVariantName18=
+OutputDefault18=0
+PageOptions18=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType19=VHDL Print
+OutputName19=VHDL Prints
+OutputDocumentPath19=
+OutputVariantName19=
+OutputDefault19=0
+PageOptions19=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+
+[OutputGroup4]
+Name=Assembly Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=Assembly
+OutputName1=Assembly Drawings
+OutputDocumentPath1=
+OutputVariantName1=[No Variations]
+OutputDefault1=0
+PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType2=Pick Place
+OutputName2=Generates pick and place files
+OutputDocumentPath2=
+OutputVariantName2=[No Variations]
+OutputDefault2=0
+OutputType3=Test Points For Assembly
+OutputName3=Test Point Report
+OutputDocumentPath3=
+OutputVariantName3=[No Variations]
+OutputDefault3=0
+
+[OutputGroup5]
+Name=Fabrication Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=CompositeDrill
+OutputName1=Composite Drill Drawing
+OutputDocumentPath1=
+OutputVariantName1=
+OutputDefault1=0
+PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType2=Drill
+OutputName2=Drill Drawing/Guides
+OutputDocumentPath2=
+OutputVariantName2=
+OutputDefault2=0
+PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType3=Final
+OutputName3=Final Artwork Prints
+OutputDocumentPath3=
+OutputVariantName3=[No Variations]
+OutputDefault3=0
+PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType4=Gerber
+OutputName4=Gerber Files
+OutputDocumentPath4=
+OutputVariantName4=[No Variations]
+OutputDefault4=0
+OutputType5=Mask
+OutputName5=Solder/Paste Mask Prints
+OutputDocumentPath5=
+OutputVariantName5=
+OutputDefault5=0
+PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType6=NC Drill
+OutputName6=NC Drill Files
+OutputDocumentPath6=
+OutputVariantName6=
+OutputDefault6=0
+OutputType7=ODB
+OutputName7=ODB++ Files
+OutputDocumentPath7=
+OutputVariantName7=[No Variations]
+OutputDefault7=0
+OutputType8=Plane
+OutputName8=Power-Plane Prints
+OutputDocumentPath8=
+OutputVariantName8=
+OutputDefault8=0
+PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType9=Test Points
+OutputName9=Test Point Report
+OutputDocumentPath9=
+OutputVariantName9=
+OutputDefault9=0
+OutputType10=Board Stack Report
+OutputName10=Report Board Stack
+OutputDocumentPath10=
+OutputVariantName10=
+OutputDefault10=0
+PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType11=Gerber X2
+OutputName11=Gerber X2 Files
+OutputDocumentPath11=
+OutputVariantName11=
+OutputDefault11=0
+OutputType12=IPC2581
+OutputName12=IPC-2581 Files
+OutputDocumentPath12=
+OutputVariantName12=
+OutputDefault12=0
+
+[OutputGroup6]
+Name=Report Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=BOM_PartType
+OutputName1=Bill of Materials
+OutputDocumentPath1=
+OutputVariantName1=[No Variations]
+OutputDefault1=0
+PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType2=ComponentCrossReference
+OutputName2=Component Cross Reference Report
+OutputDocumentPath2=
+OutputVariantName2=[No Variations]
+OutputDefault2=0
+OutputType3=ReportHierarchy
+OutputName3=Report Project Hierarchy
+OutputDocumentPath3=
+OutputVariantName3=[No Variations]
+OutputDefault3=0
+OutputType4=SimpleBOM
+OutputName4=Simple BOM
+OutputDocumentPath4=
+OutputVariantName4=[No Variations]
+OutputDefault4=0
+OutputType5=SinglePinNetReporter
+OutputName5=Report Single Pin Nets
+OutputDocumentPath5=
+OutputVariantName5=[No Variations]
+OutputDefault5=0
+OutputType6=Script
+OutputName6=Script Output
+OutputDocumentPath6=
+OutputVariantName6=[No Variations]
+OutputDefault6=0
+
+[OutputGroup7]
+Name=Other Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=Text Print
+OutputName1=Text Print
+OutputDocumentPath1=
+OutputVariantName1=
+OutputDefault1=0
+PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType2=Text Print
+OutputName2=Text Print
+OutputDocumentPath2=
+OutputVariantName2=
+OutputDefault2=0
+PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType3=Text Print
+OutputName3=Text Print
+OutputDocumentPath3=
+OutputVariantName3=
+OutputDefault3=0
+PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType4=Text Print
+OutputName4=Text Print
+OutputDocumentPath4=
+OutputVariantName4=
+OutputDefault4=0
+PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType5=Text Print
+OutputName5=Text Print
+OutputDocumentPath5=
+OutputVariantName5=
+OutputDefault5=0
+PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType6=Text Print
+OutputName6=Text Print
+OutputDocumentPath6=
+OutputVariantName6=
+OutputDefault6=0
+PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType7=Text Print
+OutputName7=Text Print
+OutputDocumentPath7=
+OutputVariantName7=
+OutputDefault7=0
+PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType8=Text Print
+OutputName8=Text Print
+OutputDocumentPath8=
+OutputVariantName8=
+OutputDefault8=0
+PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType9=Text Print
+OutputName9=Text Print
+OutputDocumentPath9=
+OutputVariantName9=
+OutputDefault9=0
+PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType10=Text Print
+OutputName10=Text Print
+OutputDocumentPath10=
+OutputVariantName10=
+OutputDefault10=0
+PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType11=Text Print
+OutputName11=Text Print
+OutputDocumentPath11=
+OutputVariantName11=
+OutputDefault11=0
+PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType12=Text Print
+OutputName12=Text Print
+OutputDocumentPath12=
+OutputVariantName12=
+OutputDefault12=0
+PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType13=Text Print
+OutputName13=Text Print
+OutputDocumentPath13=
+OutputVariantName13=
+OutputDefault13=0
+PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType14=Text Print
+OutputName14=Text Print
+OutputDocumentPath14=
+OutputVariantName14=
+OutputDefault14=0
+PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType15=Text Print
+OutputName15=Text Print
+OutputDocumentPath15=
+OutputVariantName15=
+OutputDefault15=0
+PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType16=Text Print
+OutputName16=Text Print
+OutputDocumentPath16=
+OutputVariantName16=
+OutputDefault16=0
+PageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType17=Text Print
+OutputName17=Text Print
+OutputDocumentPath17=
+OutputVariantName17=
+OutputDefault17=0
+PageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType18=Text Print
+OutputName18=Text Print
+OutputDocumentPath18=
+OutputVariantName18=
+OutputDefault18=0
+PageOptions18=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType19=Text Print
+OutputName19=Text Print
+OutputDocumentPath19=
+OutputVariantName19=
+OutputDefault19=0
+PageOptions19=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType20=Text Print
+OutputName20=Text Print
+OutputDocumentPath20=
+OutputVariantName20=
+OutputDefault20=0
+PageOptions20=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType21=Text Print
+OutputName21=Text Print
+OutputDocumentPath21=
+OutputVariantName21=
+OutputDefault21=0
+PageOptions21=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType22=Text Print
+OutputName22=Text Print
+OutputDocumentPath22=
+OutputVariantName22=
+OutputDefault22=0
+PageOptions22=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType23=Text Print
+OutputName23=Text Print
+OutputDocumentPath23=
+OutputVariantName23=
+OutputDefault23=0
+PageOptions23=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType24=Text Print
+OutputName24=Text Print
+OutputDocumentPath24=
+OutputVariantName24=
+OutputDefault24=0
+PageOptions24=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType25=Text Print
+OutputName25=Text Print
+OutputDocumentPath25=
+OutputVariantName25=
+OutputDefault25=0
+PageOptions25=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType26=Text Print
+OutputName26=Text Print
+OutputDocumentPath26=
+OutputVariantName26=
+OutputDefault26=0
+PageOptions26=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType27=Text Print
+OutputName27=Text Print
+OutputDocumentPath27=
+OutputVariantName27=
+OutputDefault27=0
+PageOptions27=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType28=Text Print
+OutputName28=Text Print
+OutputDocumentPath28=
+OutputVariantName28=
+OutputDefault28=0
+PageOptions28=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType29=Text Print
+OutputName29=Text Print
+OutputDocumentPath29=
+OutputVariantName29=
+OutputDefault29=0
+PageOptions29=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+
+[OutputGroup8]
+Name=Validation Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=Design Rules Check
+OutputName1=Design Rules Check
+OutputDocumentPath1=
+OutputVariantName1=
+OutputDefault1=0
+PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType2=Electrical Rules Check
+OutputName2=Electrical Rules Check
+OutputDocumentPath2=
+OutputVariantName2=
+OutputDefault2=0
+PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+OutputType3=Component states check
+OutputName3=Vault's components states check
+OutputDocumentPath3=
+OutputVariantName3=
+OutputDefault3=0
+OutputType4=Configuration compliance
+OutputName4=Environment configuration compliance check
+OutputDocumentPath4=
+OutputVariantName4=
+OutputDefault4=0
+OutputType5=Differences Report
+OutputName5=Differences Report
+OutputDocumentPath5=
+OutputVariantName5=
+OutputDefault5=0
+PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1
+OutputType6=Footprint Comparison Report
+OutputName6=Footprint Comparison Report
+OutputDocumentPath6=
+OutputVariantName6=
+OutputDefault6=0
+
+[OutputGroup9]
+Name=Export Outputs
+Description=
+TargetPrinter=Canon MX920 series Printer
+PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
+OutputType1=AutoCAD dwg/dxf PCB
+OutputName1=AutoCAD dwg/dxf File PCB
+OutputDocumentPath1=
+OutputVariantName1=
+OutputDefault1=0
+OutputType2=AutoCAD dwg/dxf Schematic
+OutputName2=AutoCAD dwg/dxf File Schematic
+OutputDocumentPath2=
+OutputVariantName2=
+OutputDefault2=0
+OutputType3=ExportIDF
+OutputName3=Export IDF
+OutputDocumentPath3=
+OutputVariantName3=
+OutputDefault3=0
+OutputType4=ExportSTEP
+OutputName4=Export STEP
+OutputDocumentPath4=
+OutputVariantName4=[No Variations]
+OutputDefault4=0
+
+[Modification Levels]
+Type1=1
+Type2=1
+Type3=1
+Type4=1
+Type5=1
+Type6=1
+Type7=1
+Type8=1
+Type9=1
+Type10=1
+Type11=1
+Type12=1
+Type13=1
+Type14=1
+Type15=1
+Type16=1
+Type17=1
+Type18=1
+Type19=1
+Type20=1
+Type21=1
+Type22=1
+Type23=1
+Type24=1
+Type25=1
+Type26=1
+Type27=1
+Type28=1
+Type29=1
+Type30=1
+Type31=1
+Type32=1
+Type33=1
+Type34=1
+Type35=1
+Type36=1
+Type37=1
+Type38=1
+Type39=1
+Type40=1
+Type41=1
+Type42=1
+Type43=1
+Type44=1
+Type45=1
+Type46=1
+Type47=1
+Type48=1
+Type49=1
+Type50=1
+Type51=1
+Type52=1
+Type53=1
+Type54=1
+Type55=1
+Type56=1
+Type57=1
+Type58=1
+Type59=1
+Type60=1
+Type61=1
+Type62=1
+Type63=1
+Type64=1
+Type65=1
+Type66=1
+Type67=1
+Type68=1
+Type69=1
+Type70=1
+Type71=1
+Type72=1
+Type73=1
+Type74=1
+Type75=1
+Type76=1
+Type77=1
+Type78=1
+Type79=1
+Type80=1
+
+[Difference Levels]
+Type1=1
+Type2=1
+Type3=1
+Type4=1
+Type5=1
+Type6=1
+Type7=1
+Type8=1
+Type9=1
+Type10=1
+Type11=1
+Type12=1
+Type13=1
+Type14=1
+Type15=1
+Type16=1
+Type17=1
+Type18=1
+Type19=1
+Type20=1
+Type21=1
+Type22=1
+Type23=1
+Type24=1
+Type25=1
+Type26=1
+Type27=1
+Type28=1
+Type29=1
+Type30=1
+Type31=1
+Type32=1
+Type33=1
+Type34=1
+Type35=1
+Type36=1
+Type37=1
+Type38=1
+Type39=1
+Type40=1
+Type41=1
+Type42=1
+Type43=1
+Type44=0
+Type45=1
+
+[Electrical Rules Check]
+Type1=1
+Type2=1
+Type3=2
+Type4=1
+Type5=2
+Type6=2
+Type7=1
+Type8=1
+Type9=1
+Type10=1
+Type11=2
+Type12=2
+Type13=2
+Type14=1
+Type15=1
+Type16=1
+Type17=1
+Type18=1
+Type19=1
+Type20=1
+Type21=1
+Type22=1
+Type23=1
+Type24=1
+Type25=2
+Type26=2
+Type27=2
+Type28=1
+Type29=1
+Type30=1
+Type31=1
+Type32=2
+Type33=2
+Type34=2
+Type35=1
+Type36=2
+Type37=1
+Type38=2
+Type39=2
+Type40=2
+Type41=0
+Type42=2
+Type43=1
+Type44=1
+Type45=2
+Type46=1
+Type47=2
+Type48=2
+Type49=1
+Type50=2
+Type51=1
+Type52=1
+Type53=1
+Type54=1
+Type55=1
+Type56=2
+Type57=1
+Type58=1
+Type59=0
+Type60=1
+Type61=2
+Type62=2
+Type63=1
+Type64=0
+Type65=2
+Type66=3
+Type67=2
+Type68=2
+Type69=1
+Type70=2
+Type71=2
+Type72=2
+Type73=2
+Type74=1
+Type75=2
+Type76=1
+Type77=1
+Type78=1
+Type79=1
+Type80=2
+Type81=3
+Type82=3
+Type83=3
+Type84=3
+Type85=3
+Type86=2
+Type87=2
+Type88=2
+Type89=1
+Type90=1
+Type91=3
+Type92=3
+Type93=2
+Type94=2
+Type95=2
+Type96=2
+Type97=2
+Type98=0
+Type99=1
+Type100=2
+Type101=1
+Type102=2
+Type103=2
+Type104=1
+Type105=2
+Type106=2
+Type107=2
+Type108=2
+Type109=1
+Type110=1
+Type111=1
+
+[ERC Connection Matrix]
+L1=NNNNNNNNNNNWNNNWW
+L2=NNWNNNNWWWNWNWNWN
+L3=NWEENEEEENEWNEEWN
+L4=NNENNNWEENNWNENWN
+L5=NNNNNNNNNNNNNNNNN
+L6=NNENNNNEENNWNENWN
+L7=NNEWNNWEENNWNENWN
+L8=NWEENEENEEENNEENN
+L9=NWEENEEEENEWNEEWW
+L10=NWNNNNNENNEWNNEWN
+L11=NNENNNNEEENWNENWN
+L12=WWWWNWWNWWWNWWWNN
+L13=NNNNNNNNNNNWNNNWW
+L14=NWEENEEEENEWNEEWW
+L15=NNENNNNEEENWNENWW
+L16=WWWWNWWNWWWNWWWNW
+L17=WNNNNNNNWNNNWWWWN
+
+[Annotate]
+SortOrder=3
+SortLocation=0
+MatchParameter1=Comment
+MatchStrictly1=1
+MatchParameter2=Library Reference
+MatchStrictly2=1
+PhysicalNamingFormat=$Component_$RoomName
+GlobalIndexSortOrder=3
+GlobalIndexSortLocation=0
+
+[PrjClassGen]
+CompClassManualEnabled=0
+CompClassManualRoomEnabled=0
+NetClassAutoBusEnabled=1
+NetClassAutoCompEnabled=0
+NetClassAutoNamedHarnessEnabled=0
+NetClassManualEnabled=0
+NetClassSeparateForBusSections=0
+
+[LibraryUpdateOptions]
+SelectedOnly=0
+UpdateVariants=1
+PartTypes=0
+FullReplace=1
+UpdateDesignatorLock=1
+UpdatePartIDLock=1
+PreserveParameterLocations=1
+PreserveParameterVisibility=1
+DoGraphics=1
+DoParameters=1
+DoModels=1
+AddParameters=0
+RemoveParameters=0
+AddModels=1
+RemoveModels=1
+UpdateCurrentModels=1
+
+[DatabaseUpdateOptions]
+SelectedOnly=0
+UpdateVariants=1
+PartTypes=0
+
+[Comparison Options]
+ComparisonOptions0=Kind=Net|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
+ComparisonOptions1=Kind=Net Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
+ComparisonOptions2=Kind=Component Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
+ComparisonOptions3=Kind=Rule|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
+ComparisonOptions4=Kind=Differential Pair|MinPercent=50|MinMatch=1|ShowMatch=0|Confirm=0|UseName=0|InclAllRules=0
+ComparisonOptions5=Kind=Code Memory|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
+
+[SmartPDF]
+PageOptions=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter
+
diff --git a/EE3102/Libraries/LM741/UL_Import.pas b/EE3102/Libraries/LM741/UL_Import.pas
new file mode 100644
index 0000000..fd9b912
--- /dev/null
+++ b/EE3102/Libraries/LM741/UL_Import.pas
@@ -0,0 +1,1081 @@
+
+const ForceSchFontID = 1;
+
+var
+ BrokenSCHFontManager : Integer; // for Alitum 19's broken SCH FontManager
+
+{==============================================================================}
+{==== String Utility Routines ===============================================}
+{==============================================================================}
+
+Function CheckLeft(BaseStr: String, Srch: String): Boolean;
+Var
+ i : Integer;
+Begin
+ Result := False;
+ i := Length(Srch);
+ If Length(BaseStr) < i Then Exit;
+ If Copy(BaseStr, 1, i) = Srch Then Result := True;
+End;
+
+Function LeftOf(BaseStr: String, Srch: String): String;
+Var
+ i : Integer;
+Begin
+ i := Pos(Srch, BaseStr);
+ If i > 0 Then Begin
+ Result := Copy(BaseStr, 1, i - 1);
+ End Else Begin
+ Result := BaseStr;
+ End;
+End;
+
+Function LeftOfLast(BaseStr: String, Srch: String): String;
+Var
+ i, ls : Integer;
+ lft, rgt : String;
+Begin
+ rgt := BaseStr;
+ i := Pos(Srch, rgt);
+ lft := '';
+ If i > 0 Then Begin
+ ls := Length(Srch);
+ While i > 0 Do Begin
+ lft := lft + Copy(rgt, 1, i - 1);
+ rgt := Copy(rgt, i + ls, Length(rgt) - i + ls);
+ i := Pos(Srch, rgt);
+ If i > 0 then Begin
+ lft := lft + Srch;
+ End;
+ End;
+ Result := lft;
+ End Else Begin
+ Result := BaseStr;
+ End;
+End;
+
+Function RightOf(BaseStr: String, Srch: String): String;
+Var
+ i, ls : Integer;
+Begin
+ i := Pos(Srch, BaseStr);
+ If i > 0 Then Begin
+ ls := Length(Srch);
+ Result := Copy(BaseStr, i + ls, Length(BaseStr) - i + ls);
+ End Else Begin
+ Result := '';
+ End;
+End;
+
+Procedure StrChop(BaseStr: String, Srch: String, Out LeftSide: String, Out RightSide: String);
+Var
+ i, ls : Integer;
+Begin
+ i := Pos(Srch, BaseStr);
+ If i <= 0 Then Begin
+ LeftSide := BaseStr;
+ RightSide := '';
+ End Else Begin
+ ls := Length(Srch);
+ LeftSide := Copy(BaseStr, 1, i - 1);
+ RightSide := Copy(BaseStr, i + ls, Length(BaseStr) - i + ls);
+ End;
+End;
+
+Function GetBetween(BaseStr: String, StartStr: String, EndStr: String): String;
+Begin
+ Result := Leftof(RightOf(BaseStr, StartStr), EndStr);
+End;
+
+Function GetFileLocation(FilePath: String): String;
+Var
+ i : Integer;
+ filename : String;
+Begin
+ filename := RightOf(FilePath, '\');
+ i := Pos('\', filename);
+ While i > 0 Do Begin
+ filename := RightOf(filename, '\');
+ i := Pos('\', filename);
+ End;
+ Result := LeftOf(Filepath, filename);
+End;
+
+{==============================================================================}
+{==== Footprint Routines ====================================================}
+{==============================================================================}
+
+Function LayerFromString(LName: String): TLayer;
+Begin
+ Case LName Of
+ 'NoLayer': Result := eNoLayer;
+ 'TopLayer': Result := eTopLayer;
+ 'MidLayer1': Result := eMidLayer1;
+ 'MidLayer2': Result := eMidLayer2;
+ 'MidLayer3': Result := eMidLayer3;
+ 'MidLayer4': Result := eMidLayer4;
+ 'MidLayer5': Result := eMidLayer5;
+ 'MidLayer6': Result := eMidLayer6;
+ 'MidLayer7': Result := eMidLayer7;
+ 'MidLayer8': Result := eMidLayer8;
+ 'MidLayer9': Result := eMidLayer9;
+ 'MidLayer10': Result := eMidLayer10;
+ 'MidLayer11': Result := eMidLayer11;
+ 'MidLayer12': Result := eMidLayer12;
+ 'MidLayer13': Result := eMidLayer13;
+ 'MidLayer14': Result := eMidLayer14;
+ 'MidLayer15': Result := eMidLayer15;
+ 'MidLayer16': Result := eMidLayer16;
+ 'MidLayer17': Result := eMidLayer17;
+ 'MidLayer18': Result := eMidLayer18;
+ 'MidLayer19': Result := eMidLayer19;
+ 'MidLayer20': Result := eMidLayer20;
+ 'MidLayer21': Result := eMidLayer21;
+ 'MidLayer22': Result := eMidLayer22;
+ 'MidLayer23': Result := eMidLayer23;
+ 'MidLayer24': Result := eMidLayer24;
+ 'MidLayer25': Result := eMidLayer25;
+ 'MidLayer26': Result := eMidLayer26;
+ 'MidLayer27': Result := eMidLayer27;
+ 'MidLayer28': Result := eMidLayer28;
+ 'MidLayer29': Result := eMidLayer29;
+ 'MidLayer30': Result := eMidLayer30;
+ 'BottomLayer': Result := eBottomLayer;
+ 'TopOverlay': Result := eTopOverlay;
+ 'BottomOverlay': Result := eBottomOverlay;
+ 'TopPaste': Result := eTopPaste;
+ 'BottomPaste': Result := eBottomPaste;
+ 'TopSolder': Result := eTopSolder;
+ 'BottomSolder': Result := eBottomSolder;
+ 'InternalPlane1': Result := eInternalPlane1;
+ 'InternalPlane2': Result := eInternalPlane2;
+ 'InternalPlane3': Result := eInternalPlane3;
+ 'InternalPlane4': Result := eInternalPlane4;
+ 'InternalPlane5': Result := eInternalPlane5;
+ 'InternalPlane6': Result := eInternalPlane6;
+ 'InternalPlane7': Result := eInternalPlane7;
+ 'InternalPlane8': Result := eInternalPlane8;
+ 'InternalPlane9': Result := eInternalPlane9;
+ 'InternalPlane10': Result := eInternalPlane10;
+ 'InternalPlane11': Result := eInternalPlane11;
+ 'InternalPlane12': Result := eInternalPlane12;
+ 'InternalPlane13': Result := eInternalPlane13;
+ 'InternalPlane14': Result := eInternalPlane14;
+ 'InternalPlane15': Result := eInternalPlane15;
+ 'InternalPlane16': Result := eInternalPlane16;
+ 'DrillGuide': Result := eDrillGuide;
+ 'KeepOutLayer': Result := eKeepOutLayer;
+ 'Mechanical1': Result := eMechanical1;
+ 'Mechanical2': Result := eMechanical2;
+ 'Mechanical3': Result := eMechanical3;
+ 'Mechanical4': Result := eMechanical4;
+ 'Mechanical5': Result := eMechanical5;
+ 'Mechanical6': Result := eMechanical6;
+ 'Mechanical7': Result := eMechanical7;
+ 'Mechanical8': Result := eMechanical8;
+ 'Mechanical9': Result := eMechanical9;
+ 'Mechanical10': Result := eMechanical10;
+ 'Mechanical11': Result := eMechanical11;
+ 'Mechanical12': Result := eMechanical12;
+ 'Mechanical13': Result := eMechanical13;
+ 'Mechanical14': Result := eMechanical14;
+ 'Mechanical15': Result := eMechanical15;
+ 'Mechanical16': Result := eMechanical16;
+ 'DrillDrawing': Result := eDrillDrawing;
+ 'MultiLayer': Result := eMultiLayer;
+ 'ConnectLayer': Result := eConnectLayer;
+ 'BackGroundLayer': Result := eBackGroundLayer;
+ 'DRCErrorLayer': Result := eDRCErrorLayer;
+ 'HighlightLayer': Result := eHighlightLayer;
+ 'GridColor1': Result := eGridColor1;
+ 'GridColor10': Result := eGridColor10;
+ 'PadHoleLayer': Result := ePadHoleLayer;
+ 'ViaHoleLayer': Result := eViaHoleLayer;
+ Else
+ Result := eNoLayer;
+ End;
+End;
+
+
+Procedure FP_AddStep(fp: IPCB_LibComponent, Data: String, InFileName: String);
+Var
+ STEPFileName : String;
+ STEPmodel : IPCB_ComponentBody;
+ Model : IPCB_Model;
+Begin
+ STEPFileName := GetFileLocation(InFileName) + '\' + GetBetween(Data, '(Name ', ')');
+ STEPmodel := PcbServer.PCBObjectFactory(eComponentBodyObject,eNoDimension,eCreate_Default);
+ Model := STEPmodel.ModelFactory_FromFilename(STEPFileName, false);
+ STEPmodel.SetState_FromModel;
+ // Model.SetState(0,0,0,0);
+ STEPmodel.Model := Model;
+ fp.AddPCBObject(STEPmodel);
+ //PCBServer.SendMessageToRobots(fp.I_ObjectAddress, c_Broadcast, PCBM_BoardRegisteration, arc.I_ObjectAddress);
+End;
+
+Procedure FP_AddLine(fp: IPCB_Component, Data: String);
+Var
+ lin : IPCB_track;
+ s1, s2 : String;
+Begin
+ lin := PCBServer.PCBObjectFactory(eTrackObject, eNoDimension, eCreate_Default);
+ If lin = Nil Then Exit;
+ StrChop(GetBetween(Data, '(Start ', ')'), ',', s1, s2);
+ lin.X1 := MilsToCoord(Evaluate(s1));
+ lin.Y1 := MilsToCoord(Evaluate(s2));
+ StrChop(GetBetween(Data, '(End ', ')'), ',', s1, s2);
+ lin.X2 := MilsToCoord(Evaluate(s1));
+ lin.Y2 := MilsToCoord(Evaluate(s2));
+ lin.Layer := LayerFromString(GetBetween(Data, '(Layer ', ')'));
+ lin.Width := MilsToCoord(Evaluate(GetBetween(Data, '(Width ', ')')));
+ fp.AddPCBObject(lin);
+ PCBServer.SendMessageToRobots(fp.I_ObjectAddress, c_Broadcast, PCBM_BoardRegisteration, lin.I_ObjectAddress);
+End;
+
+Procedure FP_AddArc(fp: IPCB_Component, Data: String);
+Var
+ arc : IPCB_Arc;
+ s1, s2 : String;
+Begin
+ arc := PCBServer.PCBObjectFactory(eArcObject, eNoDimension, eCreate_Default);
+ If arc = Nil Then Exit;
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ arc.XCenter := MilsToCoord(Evaluate(s1));
+ arc.YCenter := MilsToCoord(Evaluate(s2));
+ arc.Radius := MilsToCoord(Evaluate(GetBetween(Data, '(Radius ', ')')));
+ arc.LineWidth := MilsToCoord(Evaluate(GetBetween(Data, '(Width ', ')')));
+ arc.StartAngle := Evaluate(GetBetween(Data, '(StartAngle ', ')'));
+ arc.EndAngle := Evaluate(GetBetween(Data, '(EndAngle ', ')'));
+ arc.Layer := LayerFromString(GetBetween(Data, '(Layer ', ')'));;
+ fp.AddPCBObject(arc);
+ PCBServer.SendMessageToRobots(fp.I_ObjectAddress, c_Broadcast, PCBM_BoardRegisteration, arc.I_ObjectAddress);
+End;
+
+Procedure FP_AddPoly(fp: IPCB_Component, Data: String, InFile: TextFile);
+Var
+ pol : IPCB_Region;
+ cont : IPCB_Contour;
+ pc: Integer;
+ s1, s2, inp, tag : String;
+Begin
+ pol := PCBServer.PCBObjectFactory(eRegionObject, eNoDimension,eCreate_Default);
+ If pol = Nil Then Exit;
+ cont := pol.MainContour.Replicate();
+ pol.Layer := LayerFromString(GetBetween(Data, '(Layer ', ')'));
+ cont.Count := Evaluate(GetBetween(Data, '(PointCount ', ')'));
+ pc := 0;
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+ inp := Trim(inp);
+ StrChop(inp, ' ', tag, inp);
+ tag := Trim(tag);
+ Case tag Of
+ 'Point': Begin
+ pc := pc + 1;
+ StrChop(GetBetween(inp, '(', ')'), ',', s1, s2);
+ cont.X[pc] := MilsToCoord(Evaluate(s1));
+ cont.Y[pc] := MilsToCoord(Evaluate(s2));
+ End;
+ 'EndPolygon': Break;
+ Else Begin
+ ShowMessage('Keyword Error: ' + tag);
+ End;
+ End;
+ End;
+ pol.SetOutlineContour(cont);
+ If GetBetween(Data, '(Type ', ')') = 'KeepOut' Then Begin
+ pol.IsKeepout := True;
+ End;
+ fp.AddPCBObject(pol);
+ PCBServer.SendMessageToRobots(fp.I_ObjectAddress, c_Broadcast, PCBM_BoardRegisteration, pol.I_ObjectAddress);
+End;
+
+Procedure FP_AddText(fp: IPCB_Component, Data: STring);
+Var
+ txt : IPCB_Text;
+ s1, s2 : String;
+Begin
+ txt := PCBServer.PCBObjectFactory(eTextObject, eNoDimension, eCreate_Default);
+ If txt = Nil Then Exit;
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ txt.XLocation := MilsToCoord(Evaluate(s1));
+ txt.YLocation := MilsToCoord(Evaluate(s2));
+ txt.Layer := LayerFromString(GetBetween(Data, '(Layer ', ')'));
+ txt.Size := MilsToCoord(Evaluate(GetBetween(Data, '(Height ', ')')));
+ txt.Width := MilsToCoord(Evaluate(GetBetween(Data, '(Width ', ')')));
+ If GetBetween(Data, '(Mirrored ', ')') = 'True' Then Begin
+ txt.MirrorFlag := True;
+ End;
+ txt.Rotation := Evaluate(GetBetween(Data, '(Rotation ', ')'));
+ txt.Text := GetBetween(Data, '(Value "', '")');
+ // Justification? NOTE: TODO:
+ fp.AddPCBObject(txt);
+ PCBServer.SendMessageToRobots(fp.I_ObjectAddress, c_Broadcast, PCBM_BoardRegisteration, txt.I_ObjectAddress);
+End;
+
+Procedure FP_AddPad(fp: IPCB_Component, Data: String, InFile: TextFile);
+Var
+ s1, s2, inp, tag, lay : String;
+ pad : IPCB_Pad;
+ padsh : TShape;
+ cache : TPadCache;
+Begin
+ pad := PcbServer.PCBObjectFactory(ePadObject, eNoDimension, eCreate_Default);
+ pad.Name := GetBetween(Data, '(Name "', '")');
+// pad.Layer := LayerFromString(GetBetween(Data, '(Layer ', ')'));
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ pad.X := MilsToCoord(Evaluate(s1));
+ pad.Y := MilsToCoord(Evaluate(s2));
+ pad.Rotation := Evaluate(GetBetween(Data, '(Rotation ', ')')); // 2010-07-06 gbn
+// pad.Mode := ePadMode_LocalStack; // ePadMode_Simple, ePadMode_ExternalStack
+ s1 := GetBetween(Data, '(ExpandPaste ', ')');
+ s2 := GetBetween(Data, '(ExpandMask ', ')');
+ If s1 <> '' || s2 <> '' Then Begin
+ cache := pad.Cache;
+ If s1 <> '' Then Begin
+ cache.PasteMaskExpansionValid := eCacheManual;
+ cache.PasteMaskExpansion := MilsToCoord(Evaluate(s1));
+ End;
+ If s2 <> '' Then Begin
+ cache.SolderMaskExpansionValid := eCacheManual;
+ cache.SolderMaskExpansion := MilsToCoord(Evaluate(s2));
+ End;
+ pad.Cache := cache;
+ End;
+ If GetBetween(Data, '(Surface ', ')') = 'True' Then Begin
+ pad.Mode := ePadMode_Simple;
+ pad.Layer := eTopLayer;
+ End Else Begin
+ pad.Mode := ePadMode_LocalStack;
+ End;
+ pad.Moveable := False;
+ pad.HoleType := eRoundHole; // eSquareHole, eSlotHole
+ pad.HoleSize := MilsToCoord(Evaluate(GetBetween(Data, '(HoleSize ', ')')));
+ //2020-11-18 JRR Start; Let's set the Plated value, if present
+ If GetBetween(Data, '(Plated ', ')') <> '' Then Begin
+ pad.Plated := (GetBetween(Data, '(Plated ', ')')='True');
+ End;
+ //2020-11-18 JRR End
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+ inp := Trim(inp);
+ StrChop(inp, ' ', tag, inp);
+ tag := Trim(tag);
+ Case tag Of
+ 'PadShape': Begin
+ padsh := eNoShape;
+ StrChop(GetBetween(inp, '(Size ', ')'), ',', s1, s2);
+ Case GetBetween(inp, '(Shape ', ')') Of
+ 'NoShape': padsh := eNoShape;
+ 'Rounded': padsh := eRounded;
+ 'Rectangular': padsh := eRectangular;
+ 'Octagonal': padsh := eOctagonal;
+ 'CircleShape': padsh := eCircleShape;
+ 'ArcShape': padsh := eArcShape;
+ 'Terminator': padsh := eTerminator;
+ 'RoundedRectangle': padsh := eRoundedRectangular;
+ 'RotatedRectangle': padsh := eRotatedRectShape;
+ Else padsh := eNoShape;
+ End;
+ lay := GetBetween(inp, '(Layer ', ')');
+ If CheckLeft(lay, 'Top') Then Begin
+ pad.TopShape := padsh;
+ pad.TopXSize := MilsToCoord(Evaluate(s1));
+ pad.TopYSize := MilsToCoord(Evaluate(s2));
+ End Else If CheckLeft(lay, 'Mid') Then Begin
+ pad.MidShape := padsh;
+ pad.MidXSize := MilsToCoord(Evaluate(s1));
+ pad.MidYSize := MilsToCoord(Evaluate(s2));
+ End Else If CheckLeft(lay, 'Bot') Then Begin
+ pad.BotShape := padsh;
+ pad.BotXSize := MilsToCoord(Evaluate(s1));
+ pad.BotYSize := MilsToCoord(Evaluate(s2));
+ End;
+ End;
+ 'EndPad': Begin
+ Break;
+ End;
+ Else Begin
+ ShowMessage('Keyword Error: ' + tag);
+ End;
+ End;
+ End;
+ fp.AddPCBObject(pad);
+ PCBServer.SendMessageToRobots(fp.I_ObjectAddress, c_Broadcast, PCBM_BoardRegisteration, pad.I_ObjectAddress);
+End;
+
+Procedure ImportFootprints(InFile: TextFile, Lib: IPCB_Library, Errors: TStringList, InFileName : String);
+Var
+ inp, tag, s, t : String;
+ fp : IPCB_Component;
+Begin
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+ inp := Trim(inp);
+
+ StrChop(inp, ' ', tag, inp);
+ tag := Trim(tag);
+ Case tag Of
+ 'Footprint': Begin
+ // create a footprint reference
+ fp := PCBServer.CreatePCBLibComp();
+ If fp = Nil Then Begin
+ Errors.Add('Error creating footprint.');
+ Break;
+ End;
+ // add data to it
+ fp.Name := GetBetween(inp, '(Name "', '")');
+ // assign it to library
+ Lib.RegisterComponent(fp);
+ PCBServer.PreProcess();
+ // add data to it
+ fp.BeginModify();
+ // set height
+ t := GetBetween(inp, '(Height ', ')');
+ If t <> '' Then Begin
+ fp.Height := MilsToCoord(Evaluate(t));
+ End;
+
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+ inp := Trim(inp);
+ If CheckLeft(inp, '#') Then Continue;
+
+ StrChop(inp, ' ', tag, inp);
+ tag := Trim(tag);
+ Case tag Of
+ 'Pad': Begin
+ FP_AddPad(fp, inp, InFile);
+ End;
+ 'Line': Begin
+ FP_AddLine(fp, inp);
+ End;
+ 'Arc': Begin
+ FP_AddArc(fp, inp);
+ End;
+ 'Polygon': Begin
+ FP_AddPoly(fp, inp, InFile);
+ End;
+ 'Text': Begin
+ FP_AddText(fp, inp);
+ End;
+ 'Step': Begin
+ FP_AddStep(fp, inp, InFileName);
+ End;
+ 'EndFootprint': Begin
+ //ShowMessage('EndFootprint');
+ Break;
+ End;
+ '': Continue;
+ Else Begin
+ ShowMessage('Keyword Error: ' + tag);
+ Break;
+ End;
+ End;
+ End; // while not eof()
+ fp.EndModify();
+ PCBServer.PostProcess();
+ // done with footprint
+ End;
+ 'EndFootprints': Begin
+ //ShowMessage('EndFootprint');
+ Break;
+ End;
+ '': Continue;
+ Else Begin
+ ShowMessage('Keyword Error: ' + tag);
+ Break;
+ End;
+ End; // case tag
+ End; // while not eof()
+ PCBServer.PostProcess();
+End;
+
+{==============================================================================}
+{==== Symbol Routines =======================================================}
+{==============================================================================}
+
+Function TextJustificationFromString(Value: String): TTextJustification;
+Begin
+ Case Value Of
+ 'BottomLeft': Result := eJustify_BottomLeft;
+ 'BottomCenter': Result := eJustify_BottomCenter;
+ 'BottomRight': Result := eJustify_BottomRight;
+ 'CenterLeft': Result := eJustify_CenterLeft;
+ 'Center': Result := eJustify_Center;
+ 'CenterRight': Result := eJustify_CenterRight;
+ 'TopLeft': Result := eJustify_TopLeft;
+ 'TopCenter': Result := eJustify_TopCenter;
+ 'TopRight': Result := eJustify_TopRight;
+ Else Result := eJustify_Center;
+ End;
+End;
+
+Function SY_GetFont(Height: Double, Angle: TRotationBy90): TFontID;
+Var
+ sz : Integer;
+Begin
+ // 2012-11-07 gbn start
+ { sz := Round(Height / 10);
+ According to this page's bugs 4604 and 5552, Altium 10.890.23450 may have this fixed.
+ http://wiki.altium.com/pages/viewpage.action?pageId=34210039
+ }
+ sz := (Height * 0.1);
+ // 2012-11-07 gbn end
+
+ // 2019-01-16 gbn start, this should hopefully be temporary until Altium fixes their FontManager
+ If BrokenSCHFontManager > 0 Then Begin
+ Result := ForceSchFontID;
+ Exit;
+ End;
+ // 2019-01-16 gbn
+
+ Result := SchServer.FontManager.GetFontID(sz, Angle, False, False, False, False, 'Courier New');
+End;
+
+Function SY_GetAngle(Angle : String): TRotationBy90;
+Begin
+ Case Angle Of
+ '90': Result := eRotate90;
+ '180': Result := eRotate180;
+ '270': Result := eRotate270;
+ Else Result := eRotate0;
+ End;
+End;
+
+Procedure SY_AddLine(sy: ISch_Component, Data: String);
+Var
+ lin : ISch_Line;
+ s1, s2 ,s3: String;
+Begin
+ lin := SchServer.SchObjectFactory(eLine, eCreate_Default);
+ If lin = Nil Then Exit;
+ StrChop(GetBetween(Data, '(Start ', ')'), ',', s1, s2);
+ lin.Location := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ StrChop(GetBetween(Data, '(End ', ')'), ',', s1, s2);
+ lin.Corner := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ GetBetween(Data, 'Width ', ')');
+ If s3 < 10 Then Begin
+ lin.LineWidth := eSmall;
+ End;
+ If s3 > 10 Then Begin
+ lin.LineWidth := eMedium;
+ End;
+ If s3 > 12 Then Begin
+ lin.LineWidth := eLarge;
+ End;
+ lin.LineStyle := eLineStyleSolid;
+ lin.Color := $000000; // NOTE: TODO:
+ lin.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+ lin.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.AddSchObject(lin);
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, lin.I_ObjectAddress);
+End;
+
+Procedure SY_AddRect(sy: ISch_Component, Data: String);
+Var
+ rect : ISch_Rectangle;
+ s1, s2 ,s3: String;
+Begin
+ rect := SchServer.SchObjectFactory(eRectangle, eCreate_Default);
+ If rect = Nil Then Exit;
+ StrChop(GetBetween(Data, '(Start ', ')'), ',', s1, s2);
+ rect.Location := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ StrChop(GetBetween(Data, '(End ', ')'), ',', s1, s2);
+ rect.Corner := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ GetBetween(Data, 'Width ', ')');
+ s3 := GetBetween(Data, '(Width ', ')');
+ If s3 < 10 Then Begin
+ rect.LineWidth := eSmall;
+ End;
+ If s3 > 10 Then Begin
+ rect.LineWidth := eMedium;
+ End;
+ If s3 > 12 Then Begin
+ rect.LineWidth := eLarge;
+ End;
+ rect.Transparent := True;
+ rect.Color := $000000; // NOTE: TODO:
+ rect.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+ rect.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.AddSchObject(rect);
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, rect.I_ObjectAddress);
+End;
+
+Procedure SY_AddArc(sy: ISch_Component, Data: String);
+Var
+ arc : ISch_Arc;
+ s1, s2, s3 : String;
+Begin
+ arc := SchServer.SchObjectFactory(eArc, eCreate_Default);
+ If arc = Nil Then Exit;
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ arc.Location := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ arc.Radius := MilsToCoord(Evaluate(GetBetween(Data, '(Radius ', ')')));
+ s3 := GetBetween(Data, '(Width ', ')');
+ If s3 < 10 Then Begin
+ arc.LineWidth := eSmall;
+ End;
+ If s3 > 10 Then Begin
+ arc.LineWidth := eMedium;
+ End;
+ If s3 > 12 Then Begin
+ arc.LineWidth := eLarge;
+ End;
+ arc.Color := $000000; // NOTE: TODO:
+ arc.StartAngle := Evaluate(GetBetween(Data, '(StartAngle ', ')'));
+ arc.EndAngle := Evaluate(GetBetween(Data, '(EndAngle ', ')'));
+ arc.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+ arc.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.AddSchObject(arc);
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, arc.I_ObjectAddress);
+End;
+
+Procedure SY_AddPoly(sy: ISch_Component, Data: String, InFile: TextFile);
+Var
+ pol : ISch_Polygon;
+ pc: Integer;
+ s1, s2, inp, tag : String;
+Begin
+ pol := SchServer.SchObjectFactory(ePolygon, eCreate_Default);
+ If pol = Nil Then Exit;
+
+ pol.VerticesCount := Evaluate(GetBetween(Data, '(PointCount ', ')'));
+ pc := 0;
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+ inp := Trim(inp);
+ StrChop(inp, ' ', tag, inp);
+ tag := Trim(tag);
+ Case tag Of
+ 'Point': Begin
+ pc := pc + 1;
+ StrChop(GetBetween(inp, '(', ')'), ',', s1, s2);
+ pol.Vertex[pc] := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ End;
+ 'EndPolygon': Break;
+ Else Begin
+ ShowMessage('Keyword Error: ' + tag);
+ End;
+ End;
+ End;
+ pol.LineWidth := eZeroSize; // NOTE: TODO:
+ pol.Color := $000000; // NOTE: TODO:
+ pol.IsSolid := True;
+ pol.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+ pol.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.AddSchObject(pol);
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, pol.I_ObjectAddress);
+End;
+
+Procedure SY_AddText(sy: ISch_Component, Data: String);
+Var
+ txt : ISch_Label;
+ s1, s2 : String;
+Begin
+ txt := SchServer.SchObjectFactory(eLabel, eCreate_Default);
+ If txt = Nil Then Exit;
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ txt.Location := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ If GetBetween(Data, '(Mirrored ', ')') = 'True' Then Begin
+ txt.IsMirrored := True;
+ End;
+ txt.Orientation := SY_GetAngle(GetBetween(Data, '(Rotation ', ')'));
+ txt.FontID := SY_GetFont(Evaluate(GetBetween(Data, 'Height ', ')')), txt.Orientation);
+ txt.Justification := TextJustificationFromString(GetBetween(Data, '(Justification ', ')'));
+ txt.Color := $000000; // NOTE: TODO:
+ txt.Text := GetBetween(Data, '(Value "', '")');
+ txt.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+ txt.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.AddSchObject(txt);
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, txt.I_ObjectAddress);
+End;
+
+Procedure SY_AddParam(sy: ISch_Component, Data: String);
+Var
+ prm : ISch_Parameter;
+ s1, s2: String;
+Begin
+ prm := SchServer.SchObjectFactory(eParameter, eCreate_Default);
+ If prm = Nil Then Exit;
+ prm.IsHidden := True;
+ If GetBetween(Data, '(Name ', '"') = 'Visible' Then Begin
+ prm.IsHidden := False;
+ End;
+ prm.Name := GetBetween(Data, '(Name "', '")');
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ prm.Location := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ If GetBetween(Data, '(Mirrored ', ')') = 'True' Then Begin
+ prm.IsMirrored := True;
+ End;
+ prm.Orientation := SY_GetAngle(GetBetween(Data, '(Rotation ', ')'));
+ prm.FontID := SY_GetFont(Evaluate(GetBetween(Data, 'Height ', ')')), prm.Orientation);
+ prm.Justification := TextJustificationFromString(GetBetween(Data, '(Justification ', ')'));
+ prm.Color := $000000; // NOTE: TODO:
+ prm.Text := GetBetween(Data, '(Value "', '")');
+ prm.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+ prm.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.AddSchObject(prm);
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, prm.I_ObjectAddress);
+End;
+
+Procedure SY_AddComment(sy: ISch_Component, Data: String);
+Var
+ prm : ISch_Parameter;
+ s1, s2: String;
+Begin
+ prm := SchServer.SchObjectFactory(eParameter, eCreate_Default);
+ If prm = Nil Then Exit;
+ prm.IsHidden := True;
+ If GetBetween(Data, '(Name ', '"') = 'Visible' Then Begin
+ prm.IsHidden := False;
+ End;
+ prm.Name := GetBetween(Data, '(Name "', '")');
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ prm.Location := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ If GetBetween(Data, '(Mirrored ', ')') = 'True' Then Begin
+ prm.IsMirrored := True;
+ End;
+ prm.Orientation := SY_GetAngle(GetBetween(Data, '(Rotation ', ')'));
+ prm.FontID := SY_GetFont(Evaluate(GetBetween(Data, 'Height ', ')')), prm.Orientation);
+ prm.Justification := TextJustificationFromString(GetBetween(Data, '(Justification ', ')'));
+ prm.Color := $000000; // NOTE: TODO:
+ prm.Text := GetBetween(Data, '(Value "', '")');
+ prm.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+ prm.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.Comment := prm; // crashes, as of Altium 16.0.5
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, prm.I_ObjectAddress);
+End;
+
+Procedure SY_AddPin(sy: ISch_Component, Data: String);
+Var
+ pin : ISch_Pin;
+ s1, s2 : String;
+Begin
+ pin := SchServer.SchObjectFactory(ePin, eCreate_Default);
+ If pin = Nil Then Exit;
+
+ // Define the pin parameters.
+ StrChop(GetBetween(Data, '(Location ', ')'), ',', s1, s2);
+ pin.Location := Point(MilsToCoord(Evaluate(s1)), MilsToCoord(Evaluate(s2)));
+ pin.Color := $000000; // NOTE: TODO:
+ pin.Orientation := SY_GetAngle(GetBetween(Data, '(Rotation ', ')'));
+ Case GetBetween(Data, '(PinType ', ')') Of
+ 'IO': pin.Electrical := eElectricIO;
+ 'Input': pin.Electrical := eElectricInput;
+ 'Output': pin.Electrical := eElectricOutput;
+ 'Passive': pin.Electrical := eElectricPassive;
+ 'OpenCollector': pin.Electrical := eElectricOpenCollector;
+ 'OpenEmitter': pin.Electrical := eElectricOpenEmitter;
+ 'HiZ': pin.Electrical := eElectricHiZ;
+ 'Power': pin.Electrical := eElectricPower;
+ Else pin.Electrical := eElectricPassive;
+ End;
+ pin.PinLength := MilsToCoord(Evaluate(GetBetween(Data, '(Length ', ')')));
+ pin.SwapId_Pin := GetBetween(Data, '(PinSwap ', ')');
+ pin.SwapId_Part := GetBetween(Data, '(PartSwap ', ')');
+ pin.SwapId_PartPin := GetBetween(Data, '(PinSeq ', ')');
+ s1 := GetBetween(Data, '(Designator ', '")');
+ pin.ShowDesignator := CheckLeft(s1, 'Visible');
+ pin.Designator := RightOf(s1, '"');
+ s1 := GetBetween(Data, '(Name ', '")');
+ pin.ShowName := CheckLeft(s1, 'Visible');
+ pin.Name := RightOf(s1, '"');
+ pin.OwnerPartId := Evaluate(GetBetween(Data, '(Part ', ')'));
+
+ pin.OwnerPartDisplayMode := sy.DisplayMode;
+ sy.AddSchObject(pin);
+ SchServer.RobotManager.SendMessage(sy.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, pin.I_ObjectAddress);
+End;
+
+Procedure ImportComponents(InFile: TextFile, Lib: ISch_Document, Errors: TStringList);
+Var
+ inp, tag, s, t : String;
+ sy : ISch_Component;
+ simp : ISch_Implementation;
+Begin
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+
+ StrChop(inp, ' ', tag, inp);
+ tag := Trim(tag);
+ Case tag Of
+ 'Component': Begin
+ // create a component reference
+ sy := SchServer.SchObjectFactory(eSchComponent, eCreate_Default);
+ If sy = Nil Then Begin
+ Errors.Add('Error creating component.');
+ Break;
+ End;
+ // Set up parameters for the library component.
+ SchServer.ProcessControl.PreProcess(Lib, '');
+ // Define the LibReference and add the component to the library.
+ sy.LibReference := GetBetween(inp, '(Name "', '")');
+ sy.Designator.Text := GetBetween(inp, '(DesPrefix "', '")');
+ sy.ComponentDescription := 'Imported';
+ sy.PartCount := Evaluate(GetBetween(inp, '(PartCount ', ')'));
+ sy.CurrentPartId := 1;
+
+ // add data to it
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+ StrChop(inp, ' ', tag, inp);
+ Case tag Of
+ 'Description': Begin
+ //sy.SourceDescription := GetBetween(inp, '(Value "', '")'); ' SourceDescription doesnt exist (as of 16.0.5)
+ sy.ComponentDescription := GetBetween(inp, '(Value "', '")');
+ End;
+ 'Comment': Begin
+ //sy.Comment.UnderlyingString := GetBetween(inp, '(Value "', '")'); ' Comment.UnderlyingString doesnt exist (as of 16.0.5)
+ //sy.Comment.DisplayString := GetBetween(inp, '(Value "', '")'); // crashes
+ //SY_AddComment(sy, inp); // crashes (see function)
+ sy.Comment.text :=getbetween(inp, '(Value "', '")');
+ End;
+ 'Parameter': Begin
+ SY_AddParam(sy, inp);
+ End;
+ 'Pin': Begin
+ SY_AddPin(sy, inp);
+ End;
+ 'Line': Begin
+ SY_AddLine(sy, inp);
+ End;
+ 'Rectangle': Begin
+ SY_AddRect(sy, inp);
+ End;
+ 'Arc': Begin
+ SY_AddArc(sy, inp);
+ End;
+ 'Polygon': Begin
+ SY_AddPoly(sy, inp, InFile);
+ End;
+ 'Text': Begin
+ SY_AddText(sy, inp);
+ End;
+ 'Footprint': Begin
+ simp := sy.AddSchImplementation();
+ simp.ModelName := GetBetween(inp, '(Name "', '")');
+ simp.ModelType := cDocKind_PcbLib;
+ simp.AddDataFileLink(simp.ModelName, '', cDocKind_PcbLib);
+ simp.MapAsString := GetBetween(inp, '(Map "', '")');
+ End;
+ 'EndComponent': Begin
+ Lib.AddSchComponent(sy);
+ // Send a system notification that a new component has been added to the library.
+ SchServer.RobotManager.SendMessage(Lib.I_ObjectAddress, c_BroadCast, SCHM_PrimitiveRegistration, sy.I_ObjectAddress);
+ Lib.CurrentSchComponent := sy;
+ Break;
+ End;
+ '': Continue;
+ Else Begin
+ ShowMessage('Keyword Error: ' + tag);
+ Break;
+ End;
+ End;
+ End; // while not eof()
+ // done with component
+ SchServer.ProcessControl.PostProcess(Lib, '');
+ End;
+ 'EndComponents': Begin
+ Break;
+ End;
+ '': Continue;
+ Else Begin
+ ShowMessage('Keyword Error: ' + tag);
+ Break;
+ End;
+ End; // case tag
+ End; // while not eof()
+End;
+
+{==============================================================================}
+{==== Main Routines =========================================================}
+{==============================================================================}
+
+Function InitLibDocs(BasePath: String,
+ Out Proj : IProject,
+ Out ProjDoc : IServerDocument,
+ Out PcbLibDoc : IServerDocument,
+ Out SchLibDoc : IServerDocument,
+ Out pLib : IPCB_Library,
+ Out sLib : ISch_Document): Boolean;
+Var
+ WorkSpace : IWorkSpace;
+Begin
+ Result := False;
+ WorkSpace := GetWorkSpace;
+ If WorkSpace = Nil Then Begin
+ ShowMessage('Nil WorkSpace');
+ Exit;
+ End;
+ // Integrated library, and the project it creates
+ ProjDoc := Client.OpenNewDocument(cDocKind_IntegratedLibrary, 'UL_Imported_Lib', 'UL_Imported_Lib', False);
+ If ProjDoc = Nil Then Begin
+ ShowMessage('Nil ProjDoc');
+ Exit;
+ End;
+ If Not ProjDoc.DoSafeChangeFileNameAndSave(BasePath + '.LibPkg', cDocKind_IntegratedLibrary) Then Begin
+ ShowMessage('ProjDoc Save failed');
+ Exit;
+ End;
+ Proj := WorkSpace.DM_GetProjectFromPath(BasePath + '.LibPkg');
+ If Proj = Nil Then Begin
+ ShowMessage('Nil Proj');
+ Exit;
+ End;
+ // Footprint library
+ PcbLibDoc := Client.OpenNewDocument(cDocKind_PcbLib, 'UL_Footprints', 'UL_Footprints', False);
+ If PcbLibDoc = Nil Then Begin
+ ShowMessage('Nil PcbLibDoc');
+ Exit;
+ End;
+ If Not PcbLibDoc.DoSafeChangeFileNameAndSave(BasePath + '.PcbLib', cDocKind_PcbLib) Then Begin
+ ShowMessage('PcbLibDoc Save failed');
+ Exit;
+ End;
+ Proj.DM_AddSourceDocument(BasePath + '.PcbLib');
+ pLib := PCBServer.GetPCBLibraryByPath(BasePath + '.PcbLib');
+ If pLib = Nil Then Begin
+ ShowMessage('Nil pLib');
+ Exit;
+ End;
+ // Symbol Library
+ SchLibDoc := Client.OpenNewDocument(cDocKind_SchLib, 'UL_Components', 'UL_Components', False);
+ If SchLibDoc = Nil Then Begin
+ ShowMessage('Nil SchLibDoc');
+ Exit;
+ End;
+ If Not SchLibDoc.DoSafeChangeFileNameAndSave(BasePath + '.SchLib', cDocKind_SchLib) Then Begin
+ ShowMessage('SchLibDoc Save failed');
+ Exit;
+ End;
+ Proj.DM_AddSourceDocument(BasePath + '.SchLib');
+ sLib := SchServer.GetSchDocumentByPath(BasePath + '.SchLib');
+ If sLib = Nil Then Begin
+ ShowMessage('Nil sLib');
+ Exit;
+ End;
+ // Done
+ Result := True;
+End;
+
+Procedure ImportAscIIData(InFileName : String);
+Var
+ WorkSpace : IWorkSpace;
+ dProj : IProject;
+
+ Proj : IProject;
+ ProjDoc : IServerDocument;
+ PcbLibDoc : IServerDocument;
+ SchLibDoc : IServerDocument;
+ pLib : IPCB_Library;
+ sLib : ISch_Document;
+
+ DefFP : IPCB_Component; // default initial blank footprint
+ DefSY : ISch_Component; // default initial blank symbol
+
+ SavePath: String;
+
+ InFile : TextFile;
+ Errors : TStringList;
+ inp, tag : String;
+Begin
+
+ // 2019-01-16 gbn start, try to detect Altium 19, so we can kludge around its broken SCH FontMangaer
+ If '19.0' < GetCurrentProductBuild Then Begin
+ ShowMessage('NOTE: This version of Altium has issues with the Schematic FontManger''s scripting interface.' +
+ ' All symbol texts and parameters will use the FontID specified by the ForceSchFontID integer at the top of UL_Import.pas.');
+ BrokenSCHFontManager := 1;
+ End;
+ // 2019-01-16 gbn end
+
+ //SavePath := LeftOf(InFileName, '.'); // 2019-10-02 gbn
+ SavePath := LeftOfLast(InFileName, '.');
+ Errors := TStringList.Create();
+
+ WorkSpace := GetWorkSpace;
+ If WorkSpace = Nil Then Begin
+ ShowMessage('Nil WorkSpace');
+ Exit;
+ End;
+ dProj := WorkSpace.DM_FocusedProject();
+
+ // create integerated library documents
+ If InitLibDocs(SavePath, Proj, ProjDoc, PcbLibDoc, SchLibDoc, pLib, sLib) = False Then Begin
+ ShowMessage('Error initializing library');
+ Exit;
+ End;
+ Proj.DM_SetAsCurrentProject();
+
+ // get the original blank footprint for later deletion when we are done
+ DefFP := pLib.CurrentComponent;
+ // get the original blank symbol for later deletion when we are done
+ DefSy := sLib.CurrentSchComponent;
+
+ // start importing data
+ AssignFile(InFile, InFileName);
+ Reset(InFile);
+
+ While Not EOF(InFile) Do Begin
+ ReadLn(InFile, inp);
+ If VarIsNull(inp) Then Continue;
+
+ StrChop(inp, ' ', tag, inp);
+ tag := Trim(tag);
+ Case tag Of
+ 'StartFootprints': Begin
+ ImportFootprints(InFile, pLib, Errors, InFileName);
+ End;
+ 'StartComponents': Begin
+ ImportComponents(InFile, sLib, Errors);
+ End;
+ '': Continue;
+ End;
+ End;
+ CloseFile(InFile);
+
+ // delete the original default blank footprint
+ If Not VarIsNull(DefFP) Then Begin
+ pLib.DeRegisterComponent(DefFP);
+ pLib.RemoveComponent(DefFP);
+ End Else Begin
+ ShowMessage('DefFP was Nil');
+ End;
+ // delete the original default blank symbol
+ // NOTE: TODO: looks broken; does nothing noticable
+ If Not VarIsNull(DefSY) Then Begin
+ //ShowMessage('trying to delete DefSym "' + DefSy.LibReference + '"');
+ sLib.UnRegisterSchObjectFromContainer(DefSY);
+ sLib.RemoveSchObject(DefSy);
+ //DefSY.Container.RemoveSchObject(DefSy);
+ End Else Begin
+ ShowMessage('DefSym was Nil');
+ End;
+
+ // update views?
+ pLib.Board.ViewManager_FullUpdate();
+ // Refresh symbol library.
+ sLib.GraphicallyInvalidate();
+
+ // save files again
+ ProjDoc.DoFileSave(cDocKind_IntegratedLibrary);
+ PcbLibDoc.DoFileSave(cDocKind_PcbLib);
+ SchLibDoc.DoFileSave(cDocKind_SchLib);
+
+ //2021-01-19 JRR Start; commenting out the below section since the autoit routine does not catch the message box frrom the script
+ //// set the original project back to its focus
+ //If dProj <> Nil Then Begin
+ // dProj.DM_SetAsCurrentProject();
+ //End;
+
+ //ShowMessage('Done with "' + SavePath + '"');
+ //2021-01-19 JRR End
+End;
+