kopia lustrzana https://github.com/njcrawford/EmbroideryReader
Porównaj commity
60 Commity
Autor | SHA1 | Data |
---|---|---|
Nathan Crawford | ee4fe73d20 | |
Nathan Crawford | 34fb797550 | |
Nathan Crawford | 742cb94527 | |
Nathan Crawford | f25708e604 | |
Nathan Crawford | 51bc553e73 | |
Nathan Crawford | afd3e80907 | |
Nathan Crawford | c16f3e7fb0 | |
Nathan Crawford | 36e1668305 | |
Nathan Crawford | b2e8809004 | |
Nathan Crawford | de3eca27c8 | |
Nathan Crawford | aeb8aaf6e4 | |
Nathan Crawford | 612b8d0a24 | |
Nathan Crawford | 1b33c47dda | |
Nathan Crawford | 34eb10023c | |
Nathan Crawford | 8471b3519c | |
Nathan Crawford | 2d59addb2d | |
Nathan Crawford | 9c44d3ecf6 | |
Nathan Crawford | 2d78fbc5b5 | |
Nathan Crawford | fe2e9a7446 | |
Nathan Crawford | 8798fcb80c | |
Nathan Crawford | 3c9ff412ba | |
Nathan Crawford | 5d42ec4c52 | |
Nathan Crawford | 9a7c4c19b4 | |
Nathan Crawford | 7c779615dc | |
Nathan Crawford | 06e3a79874 | |
Nathan Crawford | 5f92c297f4 | |
Nathan Crawford | 09d181c1af | |
Nathan Crawford | 8a141537a7 | |
Nathan Crawford | 01e04b0a61 | |
Nathan Crawford | 54f5523484 | |
Nathan Crawford | 37c0b98487 | |
Nathan Crawford | 89c706588a | |
Nathan Crawford | 9d2b208a52 | |
Nathan Crawford | 1c7f85d98e | |
Nathan Crawford | ea38b44295 | |
Nathan Crawford | 39cdbbda3f | |
Nathan Crawford | daa67cfcdd | |
Nathan Crawford | 71f69a0b3a | |
Nathan Crawford | 06632cc768 | |
Nathan Crawford | 3bc68def33 | |
Nathan Crawford | 07e700a48d | |
Nathan Crawford | 7b024e7f27 | |
Nathan Crawford | db7902970f | |
Nathan Crawford | b1905feca1 | |
Nathan Crawford | 3fda9e60b1 | |
Nathan Crawford | d2f64f0205 | |
Nathan Crawford | 725ab4e11e | |
Nathan Crawford | 5aef99f6e5 | |
Nathan Crawford | 02ed3d8794 | |
Nathan Crawford | fc04bef577 | |
Nathan Crawford | 97cc2d8935 | |
Nathan Crawford | d0c2eb485a | |
Nathan Crawford | 5cf44ec832 | |
Nathan Crawford | 246194c2aa | |
Nathan Crawford | d32bab0edb | |
Nathan Crawford | 9c1ec936a6 | |
Nathan Crawford | c793ee83d2 | |
Nathan Crawford | b490109711 | |
Nathan Crawford | d8d135ffe5 | |
Nathan Crawford | 0e26a1644f |
|
@ -110,3 +110,5 @@ UpgradeLog*.XML
|
|||
*.bak
|
||||
*.wixpdb
|
||||
*.wixobj
|
||||
Thumbs.db
|
||||
/.vs
|
||||
|
|
|
@ -1,834 +1,85 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
|
||||
<!-- ProductGuid should change whenever ProductVersion changes -->
|
||||
<?define ProductVersion="2.0.2" ?>
|
||||
<?define ProductGuid="989B68D3-5E1C-4DBE-85E9-6A1227DDB6D4" ?>
|
||||
|
||||
<Product Id="$(var.ProductGuid)" Codepage="65001" Language="1033" Manufacturer="NJCrawford Software" Name="Embroidery Reader" UpgradeCode="{CE1642E2-5EE0-454F-B7DF-5C9C92D6D40D}" Version="$(var.ProductVersion)">
|
||||
<Package Compressed="yes" InstallerVersion="200" Languages="1033" Manufacturer="Nathan Crawford" Platform="x86" />
|
||||
<Binary Id="MSVBDPCADLL" SourceFile="Binary\MSVBDPCADLL" />
|
||||
<Binary Id="VSDNETCFG" SourceFile="Binary\VSDNETCFG" />
|
||||
<Binary Id="DefBannerBitmap" SourceFile="Binary\DefBannerBitmap" />
|
||||
<Binary Id="UpFldrBtn" SourceFile="Binary\UpFldrBtn" />
|
||||
<Binary Id="NewFldrBtn" SourceFile="Binary\NewFldrBtn" />
|
||||
<Condition Message="Embroidery Reader 1.5 or earlier is installed. Please remove previous versions of Embroidery Reader and run the installer again.">OLD_INSTALL = null</Condition>
|
||||
<CustomAction Id="DIRCA_TARGETDIR" Property="TARGETDIR" Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" Execute="firstSequence" />
|
||||
<CustomAction Id="DIRCA_CheckFX" BinaryKey="MSVBDPCADLL" DllEntry="CheckFX" />
|
||||
<CustomAction Id="VSDCA_VsdLaunchConditions" BinaryKey="MSVBDPCADLL" DllEntry="VsdLaunchConditions" />
|
||||
<CustomAction Id="ERRCA_CANCELNEWERVERSION" Error="[VSDVERSIONMSG]" />
|
||||
<CustomAction Id="ERRCA_UIANDADVERTISED" Error="[VSDUIANDADVERTISED]" />
|
||||
<CustomAction Id="VSDCA_FolderForm_AllUsers" Property="FolderForm_AllUsers" Value="ALL" />
|
||||
<CustomAction Id="PreventDowngrading" Error="Newer version already installed." />
|
||||
<CustomTable Id="_VsdLaunchCondition">
|
||||
<Column Id="Condition" PrimaryKey="yes" Type="string" Width="255" Category="Condition" Description="Expression which must evaluate to TRUE in order for install to commence." Modularize="Condition" />
|
||||
<Column Id="Description" Type="string" Width="255" Localizable="yes" Category="Formatted" Description="Localizable text to display when condition fails and install must abort." Modularize="Property" />
|
||||
<Column Id="Url" Type="string" Width="0" Category="Text" Description="URL to navigate to when condition fails and install must abort." />
|
||||
<Row>
|
||||
<Data Column="Condition">VSDFXAvailable</Data>
|
||||
<Data Column="Description">[VSDNETURLMSG]</Data>
|
||||
<Data Column="Url">http://go.microsoft.com/fwlink/?LinkId=131000</Data>
|
||||
</Row>
|
||||
</CustomTable>
|
||||
<?define ProductVersion="2.2.4" ?>
|
||||
<?define ProductGuid="{39447850-C068-4C91-8142-AEA9630470C5}" ?>
|
||||
<Product Id="$(var.ProductGuid)" Name="Embroidery Reader" Language="1033" Version="$(var.ProductVersion)" Manufacturer="Nathan Crawford" UpgradeCode="CE1642E2-5EE0-454F-B7DF-5C9C92D6D40D">
|
||||
<Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" />
|
||||
<Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Component Id="EmbroideryReader" Guid="{49A5698C-169C-16FA-DEE3-71DED167556C}">
|
||||
<File Id="embroideryReader.exe" Name="embroideryReader.exe" DiskId="1" Source="..\embroideryReader\bin\Release\embroideryReader.exe" />
|
||||
<File DiskId="1" Id="embroideryReaderExeConfig" Name="embroideryReader.exe.config" Source="..\embroideryReader\bin\Release\embroideryReader.exe.config" />
|
||||
<ProgId Id="EmbroideryDesign" Description="Embroidery Design File" Icon="embroideryReader.exe" IconIndex="0" Advertise="yes">
|
||||
<Extension Id="pes" Advertise="yes">
|
||||
<Verb Id="open" Command="&Open" Argument=""%1"" Sequence="1" />
|
||||
</Extension>
|
||||
</ProgId>
|
||||
<Shortcut Id="EmbroideryReaderShortcut" Directory="ApplicationProgramsFolder" Name="Embroidery Reader" Icon="embroideryReader.exe" IconIndex="0" Show="normal" WorkingDirectory="TARGETDIR" Advertise="yes" />
|
||||
<File Id="PesFile.dll" Name="PesFile.dll" DiskId="1" Source="..\PesFile\bin\Release\PesFile.dll" />
|
||||
<File Id="IniFile.dll" Name="IniFile.dll" DiskId="1" Source="..\embroideryReader\IniFile.dll" />
|
||||
<RemoveFolder Id="RemoveStartMenuFolder" On="uninstall" Directory="ApplicationProgramsFolder" />
|
||||
</Component>
|
||||
<Directory Id="translations" Name="translations">
|
||||
<Component Id="TranslationInis" Guid="29712DD3-062D-4767-AB4F-8F390FF57BED">
|
||||
<File Id="EN_US.INI" Name="en-US.ini" Source="..\translations\en-US.ini" DiskId="1" />
|
||||
<File Id="IT_IT.INI" Name="it-IT.ini" Source="..\translations\it-IT.ini" DiskId="1" />
|
||||
<File Id="ZH_HANS.INI" Name="zh-Hans.ini" Source="..\translations\zh-Hans.ini" DiskId="1" />
|
||||
<File Id="ZH_HANT.INI" Name="zh-Hant.ini" Source="..\translations\zh-Hant.ini" DiskId="1" />
|
||||
</Component>
|
||||
<Directory Id="ProgramFilesFolder" Name="PFiles">
|
||||
<Directory Id="ROOTDIR" Name="NJCrawford Software">
|
||||
<Directory Id="PRODUCTDIR" Name="Embroidery Reader">
|
||||
<Component Id="RequiredFiles" DiskId="1" Guid="ad3defbe-e276-41ab-9d76-9ab9f2976ac2">
|
||||
<File Id="EMBROIDERYREADER.EXE" Name="embroideryReader.exe" Source="..\embroideryReader\bin\Release\embroideryReader.exe" KeyPath="yes">
|
||||
<Shortcut Id="ExeShortcut" Directory="ProgramMenuDir" Name="Embroidery Reader" Advertise="yes" Icon="StartMenuIcon.ico" />
|
||||
</File>
|
||||
<ProgId Id="EmbroideryDesign" Description="Embroidery Design File" Icon="StartMenuIcon.ico" Advertise="yes">
|
||||
<Extension Id="pes" Advertise="yes">
|
||||
<Verb Id="open" Command="&Open" Argument=""%1"" Sequence="1" />
|
||||
</Extension>
|
||||
</ProgId>
|
||||
<File Id="PESFILE.DLL" Name="PesFile.dll" Source="..\embroideryReader\bin\Release\PesFile.dll" />
|
||||
<File Id="INIFILE.DLL" Name="IniFile.dll" Source="..\embroideryReader\bin\Release\IniFile.dll" />
|
||||
<File Id="ERRORREPORTER.DLL" Name="ErrorReporter.dll" Source="..\embroideryReader\bin\Release\ErrorReporter.dll" />
|
||||
</Component>
|
||||
<Directory Id="TRANSLATIONS" Name="translations">
|
||||
<Component Id="Translations" DiskId="1" KeyPath="yes" Guid="4ac2c11d-b2c9-4557-a618-fa4bacf50889">
|
||||
<File Id="EN_US.INI" Name="en-US.ini" Source="..\translations\en-US.ini" />
|
||||
<File Id="IT_IT.INI" Name="it-IT.ini" Source="..\translations\it-IT.ini" />
|
||||
<File Id="ZH_HANS.INI" Name="zh-Hans.ini" Source="..\translations\zh-Hans.ini" />
|
||||
<File Id="ZH_HANT.INI" Name="zh-Hant.ini" Source="..\translations\zh-Hant.ini" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
<Directory Id="DesktopFolder" SourceName="User's Desktop" />
|
||||
<Directory Id="ProgramMenuFolder" SourceName="User's Programs Menu">
|
||||
<Directory Id="ApplicationProgramsFolder" Name="Embroidery Reader" />
|
||||
<Directory Id="ProgramMenuFolder">
|
||||
<Directory Id="ProgramMenuDir" Name="Embroidery Reader">
|
||||
<Component Id="StartMenuShortcuts" Guid="DDE4256E-E2D5-477F-A006-929245B20219">
|
||||
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
|
||||
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
<Feature Id="DefaultFeature" ConfigurableDirectory="TARGETDIR" Level="1">
|
||||
<ComponentRef Id="TranslationInis" />
|
||||
<ComponentRef Id="EmbroideryReader" Primary="yes" />
|
||||
<Feature Id="DefaultFeature" Title="Main Feature" Level="1">
|
||||
<ComponentRef Id="RequiredFiles" />
|
||||
<ComponentRef Id="Translations" />
|
||||
<ComponentRef Id="StartMenuShortcuts" />
|
||||
</Feature>
|
||||
<Icon Id="embroideryReader.exe" SourceFile="..\embroideryReader\bin\Release\embroideryReader.exe" />
|
||||
<Media Id="1" Cabinet="_48EE6673B80E6A8A16CFAB058CFEFA12" EmbedCab="yes" />
|
||||
<Property Id="VSDFrameworkVersion" Value="v4.0" />
|
||||
<Property Id="VSDFrameworkProfile" Value="Client" />
|
||||
<Property Id="VSDAllowLaterFrameworkVersions" Value="False" />
|
||||
<Property Id="ARPHELPLINK" Value="http://www.njcrawford.com/contact/" />
|
||||
<Property Id="ARPCONTACT" Value="Nathan Crawford" />
|
||||
<Property Id="ARPURLINFOABOUT" Value="http://www.njcrawford.com/programs/embroidery-reader/" />
|
||||
<UI />
|
||||
<UIRef Id="WixUI_InstallDir" />
|
||||
<Property Id="WIXUI_INSTALLDIR" Value="PRODUCTDIR" />
|
||||
<!-- Require .Net Framework 4.0 Client profile -->
|
||||
<PropertyRef Id="NETFRAMEWORK40CLIENT" />
|
||||
<Condition Message="This application requires .NET Framework X.Y.">Installed OR NETFRAMEWORK40CLIENT</Condition>
|
||||
<!-- Icon for start menu and file association -->
|
||||
<Icon Id="StartMenuIcon.ico" SourceFile="..\embroideryReader\icon.ico" />
|
||||
<!-- Allow upgrades from any older version with a Wix-based installer -->
|
||||
<MajorUpgrade DowngradeErrorMessage="Downgrades are not supported. If you would like to install this version, you must uninstall the newer version first." />
|
||||
<!-- Install for all users (or highest available level) by default -->
|
||||
<Property Id="ALLUSERS" Value="2" />
|
||||
<Property Id="ARPPRODUCTICON" Value="embroideryReader.exe" />
|
||||
<Property Id="NEWERPRODUCTFOUND" Secure="yes" />
|
||||
<Property Id="VSDNETURLMSG" Value="This setup requires the .NET Framework version [1]. Please install the .NET Framework and run this setup again. The .NET Framework can be obtained from the web. Would you like to do this now?" />
|
||||
<Property Id="VSDIISMSG" Value="This setup requires Internet Information Server 5.1 or higher and Windows XP or higher. This setup cannot be installed on Windows 2000. Please install Internet Information Server or a newer operating system and run this setup again." />
|
||||
<Property Id="VSDUIANDADVERTISED" Value="This advertised application will not be installed because it might be unsafe. Contact your administrator to change the installation user interface option of the package to basic." />
|
||||
<Property Id="VSDNETMSG" Value="This setup requires the .NET Framework version [1]. Please install the .NET Framework and run this setup again." />
|
||||
<Property Id="VSDINVALIDURLMSG" Value="The specified path '[2]' is unavailable. The Internet Information Server might not be running or the path exists and is redirected to another machine. Please check the status of this virtual directory in the Internet Services Manager." />
|
||||
<Property Id="VSDVERSIONMSG" Value="Unable to install because a newer version of this product is already installed." />
|
||||
<Property Id="FolderForm_AllUsers" Value="ME" />
|
||||
<Property Id="FolderForm_AllUsersVisible" Value="1" />
|
||||
<Property Id="MaintenanceForm_Action" Value="Repair" />
|
||||
<Property Id="AdminMaintenanceForm_Action" Value="Repair" />
|
||||
<Property Id="DefaultUIFont" Value="VsdDefaultUIFont.524F4245_5254_5341_4C45_534153783400" />
|
||||
<Property Id="ErrorDialog" Value="ErrorDialog" />
|
||||
<Property Id="SFF_UpFldrBtn" Value="UpFldrBtn" />
|
||||
<Property Id="SFF_NewFldrBtn" Value="NewFldrBtn" />
|
||||
<Property Id="WelcomeForm_NextArgs" Value="FolderForm" />
|
||||
<Property Id="FolderForm_PrevArgs" Value="WelcomeForm" />
|
||||
<Property Id="FolderForm_NextArgs" Value="ConfirmInstallForm" />
|
||||
<Property Id="ConfirmInstallForm_PrevArgs" Value="FolderForm" />
|
||||
<Property Id="AdminWelcomeForm_NextArgs" Value="AdminFolderForm" />
|
||||
<Property Id="AdminFolderForm_PrevArgs" Value="AdminWelcomeForm" />
|
||||
<Property Id="AdminFolderForm_NextArgs" Value="AdminConfirmInstallForm" />
|
||||
<Property Id="AdminConfirmInstallForm_PrevArgs" Value="AdminFolderForm" />
|
||||
<!-- Show help link in Programs and Features -->
|
||||
<Property Id="ARPHELPLINK" Value="http://www.njcrawford.com/contact/" />
|
||||
<!-- Show contact in Programs and Features -->
|
||||
<Property Id="ARPCONTACT" Value="http://www.njcrawford.com/contact/" />
|
||||
<!-- Show info/about URL in Programs and Features -->
|
||||
<Property Id="ARPURLINFOABOUT" Value="http://www.njcrawford.com/programs/embroidery-reader/" />
|
||||
<!-- Show icon in Programs and Features -->
|
||||
<Property Id="ARPPRODUCTICON" Value="StartMenuIcon.ico" />
|
||||
<!-- Search for pre-Wix installer versions -->
|
||||
<Property Id="OLD_INSTALL">
|
||||
<RegistrySearch Id="SearchForOldVersions" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Embroidery Reader" Name="DisplayName" Type="raw" />
|
||||
</Property>
|
||||
<UI>
|
||||
<RadioButtonGroup Property="AdminMaintenanceForm_Action">
|
||||
<RadioButton Height="17" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Repair [ProductName]" Value="Repair" Width="348" X="0" Y="0" />
|
||||
<RadioButton Height="17" Text="{\VSI_MS_Sans_Serif13.0_0_0}Re&move [ProductName]" Value="Remove" Width="348" X="0" Y="18" />
|
||||
</RadioButtonGroup>
|
||||
<RadioButtonGroup Property="FolderForm_AllUsers">
|
||||
<RadioButton Height="17" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Everyone" Value="ALL" Width="342" X="0" Y="0" />
|
||||
<RadioButton Height="17" Text="{\VSI_MS_Sans_Serif13.0_0_0}Just &me" Value="ME" Width="342" X="0" Y="18" />
|
||||
</RadioButtonGroup>
|
||||
<RadioButtonGroup Property="MaintenanceForm_Action">
|
||||
<RadioButton Height="17" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Repair [ProductName]" Value="Repair" Width="348" X="0" Y="0" />
|
||||
<RadioButton Height="17" Text="{\VSI_MS_Sans_Serif13.0_0_0}Re&move [ProductName]" Value="Remove" Width="348" X="0" Y="18" />
|
||||
</RadioButtonGroup>
|
||||
<TextStyle Id="VSI_MS_Sans_Serif13.0_0_0" FaceName="MS Sans Serif" Size="9" Red="0" Green="0" Blue="0" />
|
||||
<TextStyle Id="VSI_MS_Sans_Serif16.0_1_0" FaceName="MS Sans Serif" Size="12" Red="0" Green="0" Blue="0" Bold="yes" />
|
||||
<TextStyle Id="VSI_MS_Shell_Dlg13.0_0_0" FaceName="MS Shell Dlg" Size="9" Red="0" Green="0" Blue="0" />
|
||||
<TextStyle Id="VsdDefaultUIFont.524F4245_5254_5341_4C45_534153783400" FaceName="MS Sans Serif" Size="9" Red="0" Green="0" Blue="0" />
|
||||
<UIText Id="MenuLocal">Will be installed on local hard drive</UIText>
|
||||
<UIText Id="SelParentCostNegNeg">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
|
||||
<UIText Id="SelNetworkNetwork">This feature will remain to be run from the network</UIText>
|
||||
<UIText Id="SelNetworkLocal">This feature will change from run from network state to be installed on the local hard drive</UIText>
|
||||
<UIText Id="SelNetworkAdvertise">This feature will change from run from network state to set to be installed when required</UIText>
|
||||
<UIText Id="SelNetworkAbsent">This feature will be uninstalled completely, you won't be able to run it from the network</UIText>
|
||||
<UIText Id="SelAbsentAbsent">This feature will remain uninstalled</UIText>
|
||||
<UIText Id="ScriptInProgress">Gathering required information...</UIText>
|
||||
<UIText Id="MenuCD">Will be installed to run from CD</UIText>
|
||||
<UIText Id="SelChildCostNeg">This feature frees up [1] on your hard drive.</UIText>
|
||||
<UIText Id="SelCDLocal">This feature will change from run from CD state to be installed on the local hard drive</UIText>
|
||||
<UIText Id="MenuAbsent">Entire feature will be unavailable</UIText>
|
||||
<UIText Id="SelCDAdvertise">This feature will change from run from CD state to set to be installed when required</UIText>
|
||||
<UIText Id="MenuAllNetwork">Entire feature will be installed to run from network</UIText>
|
||||
<UIText Id="SelLocalNetwork">This feature will be removed from your local hard drive, but will be still available to run from the network</UIText>
|
||||
<UIText Id="SelAdvertiseNetwork">This feature will be available to run from the network</UIText>
|
||||
<UIText Id="MenuAllLocal">Entire feature will be installed on local hard drive</UIText>
|
||||
<UIText Id="SelAdvertiseLocal">This feature will be installed on your local hard drive</UIText>
|
||||
<UIText Id="MenuAllCD">Entire feature will be installed to run from CD</UIText>
|
||||
<UIText Id="SelCDAbsent">This feature will be uninstalled completely, you won't be able to run it from CD</UIText>
|
||||
<UIText Id="MenuAdvertise">Feature will be installed when required</UIText>
|
||||
<UIText Id="SelAdvertiseCD">This feature will be available to run from CD</UIText>
|
||||
<UIText Id="bytes">bytes</UIText>
|
||||
<UIText Id="SelAdvertiseAdvertise">Will be installed when required</UIText>
|
||||
<UIText Id="AbsentPath" />
|
||||
<UIText Id="MB">MB</UIText>
|
||||
<UIText Id="SelAdvertiseAbsent">This feature will become unavailable</UIText>
|
||||
<UIText Id="KB">KB</UIText>
|
||||
<UIText Id="GB">GB</UIText>
|
||||
<UIText Id="SelAbsentNetwork">This feature will be installed to run from the network</UIText>
|
||||
<UIText Id="SelAbsentCD">This feature will be installed to run from CD</UIText>
|
||||
<UIText Id="SelAbsentAdvertise">This feature will be set to be installed when required</UIText>
|
||||
<UIText Id="SelAbsentLocal">This feature will be installed on the local hard drive</UIText>
|
||||
<UIText Id="SelCDCD">This feature will remain to be run from CD</UIText>
|
||||
<UIText Id="NewFolder">Folder|New Folder</UIText>
|
||||
<UIText Id="MenuNetwork">Will be installed to run from network</UIText>
|
||||
<UIText Id="SelLocalCD">This feature will be removed from your local hard drive, but will be still available to run from CD</UIText>
|
||||
<UIText Id="SelLocalAbsent">This feature will be completely removed</UIText>
|
||||
<UIText Id="SelCostPending">Compiling cost for this feature...</UIText>
|
||||
<UIText Id="SelLocalLocal">This feature will remain on you local hard drive</UIText>
|
||||
<UIText Id="SelChildCostPos">This feature requires [1] on your hard drive.</UIText>
|
||||
<UIText Id="SelLocalAdvertise">This feature will be removed from your local hard drive, but will be set to be installed when required</UIText>
|
||||
<UIText Id="SelParentCostNegPos">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
|
||||
<UIText Id="SelParentCostPosNeg">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
|
||||
<UIText Id="SelParentCostPosPos">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
|
||||
<UIText Id="TimeRemaining">Time remaining: {[1] minutes }{[2] seconds}</UIText>
|
||||
<UIText Id="VolumeCostAvailable">Available</UIText>
|
||||
<UIText Id="VolumeCostDifference">Difference</UIText>
|
||||
<UIText Id="VolumeCostRequired">Required</UIText>
|
||||
<UIText Id="VolumeCostSize">Disk Size</UIText>
|
||||
<UIText Id="VolumeCostVolume">Volume</UIText>
|
||||
<Dialog Id="UserExitForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="CloseButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Close" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installation Interrupted" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyTextRemove" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer was interrupted before [ProductName] could be removed. You need to restart the installer to try again.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="BodyTextInstall" Type="Text" X="18" Y="63" Width="342" Height="24" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installation was interrupted before [ProductName] could be installed. You need to restart the installer to try again." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="FatalErrorForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="CloseButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Close" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installation Incomplete" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyTextRemove" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer was interrupted before [ProductName] could be installed. You need to restart the installer to try again.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
<Control Id="BodyTextInstall" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer was interrupted before [ProductName] could be removed. You need to restart the installer to try again.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="MaintenanceForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="FinishButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Finish" TabSkip="no" Default="yes">
|
||||
<Publish Property="REINSTALL" Value="ALL">MaintenanceForm_Action="Repair"</Publish>
|
||||
<Publish Event="Reinstall" Value="ALL">MaintenanceForm_Action="Repair"</Publish>
|
||||
<Publish Property="REMOVE" Value="ALL">MaintenanceForm_Action="Remove"</Publish>
|
||||
<Publish Event="Remove" Value="ALL">MaintenanceForm_Action="Remove"</Publish>
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="RepairRadioGroup" Type="RadioButtonGroup" X="18" Y="108" Width="348" Height="48" Property="MaintenanceForm_Action" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiRadioButtonGroup" TabSkip="no" />
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Welcome to the [ProductName] Setup Wizard" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyText" Type="Text" X="9" Y="63" Width="354" Height="42" Text="{\VSI_MS_Sans_Serif13.0_0_0}Select whether you want to repair or remove [ProductName]." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="ResumeForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="FinishButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Finish" TabSkip="no" Default="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Welcome to the [ProductName] Setup Wizard" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyText" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer will resume the installation of [ProductName] on your computer.

Click "Finish" to continue." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="AdminUserExitForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="CloseButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Close" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installation Interrupted" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyTextRemove" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer was interrupted before [ProductName] could be removed. You need to restart the installer to try again.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="BodyTextInstall" Type="Text" X="18" Y="63" Width="342" Height="24" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installation was interrupted before [ProductName] could be installed. You need to restart the installer to try again." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="AdminFatalErrorForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="CloseButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Close" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installation Incomplete" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyTextRemove" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer was interrupted before [ProductName] could be removed. You need to restart the installer to try again.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
<Control Id="BodyTextInstall" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer was interrupted before [ProductName] could be installed. You need to restart the installer to try again.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="AdminMaintenanceForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="FinishButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Finish" TabSkip="no" Default="yes">
|
||||
<Publish Property="REINSTALL" Value="ALL">AdminMaintenanceForm_Action="Repair"</Publish>
|
||||
<Publish Event="Reinstall" Value="ALL">AdminMaintenanceForm_Action="Repair"</Publish>
|
||||
<Publish Property="REMOVE" Value="ALL">AdminMaintenanceForm_Action="Remove"</Publish>
|
||||
<Publish Event="Remove" Value="ALL">AdminMaintenanceForm_Action="Remove"</Publish>
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="RepairRadioGroup" Type="RadioButtonGroup" X="18" Y="108" Width="348" Height="48" Property="AdminMaintenanceForm_Action" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiRadioButtonGroup" TabSkip="no" />
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Welcome to the [ProductName] Setup Wizard" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyText" Type="Text" X="9" Y="63" Width="354" Height="42" Text="{\VSI_MS_Sans_Serif13.0_0_0}Select whether you want to repair or remove [ProductName]." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="AdminResumeForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="FinishButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Finish" TabSkip="no" Default="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Welcome to the [ProductName] Setup Wizard" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyText" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer will resume the installation of [ProductName] on your computer.

Click "Finish" to continue." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="AdminProgressForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]" Modeless="yes">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="ProgressBar" Type="ProgressBar" X="18" Y="108" Width="336" Height="15" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiProgressBar" TabSkip="yes" Disabled="yes">
|
||||
<Subscribe Event="StopServices" Attribute="Progress" />
|
||||
<Subscribe Event="DeleteServices" Attribute="Progress" />
|
||||
<Subscribe Event="RemoveRegistryValues" Attribute="Progress" />
|
||||
<Subscribe Event="RemoveFiles" Attribute="Progress" />
|
||||
<Subscribe Event="MoveFiles" Attribute="Progress" />
|
||||
<Subscribe Event="InstallFiles" Attribute="Progress" />
|
||||
<Subscribe Event="WriteRegistryValues" Attribute="Progress" />
|
||||
<Subscribe Event="WriteIniValues" Attribute="Progress" />
|
||||
<Subscribe Event="StartServices" Attribute="Progress" />
|
||||
<Subscribe Event="InstallAdminPackage" Attribute="Progress" />
|
||||
<Subscribe Event="UnmoveFiles" Attribute="Progress" />
|
||||
<Subscribe Event="SetProgress" Attribute="Progress" />
|
||||
</Control>
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="ProgressLabel" Type="Text" X="18" Y="96" Width="336" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}Please wait..." TabSkip="yes" />
|
||||
<Control Id="InstalledBody" Type="Text" X="9" Y="63" Width="354" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}[ProductName] is being installed." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
<Control Id="RemovedBody" Type="Text" X="18" Y="63" Width="336" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}[ProductName] is being removed." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="RemoveBannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Removing [ProductName]" TabSkip="yes" Transparent="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="InstalledBannerText" Type="Text" X="9" Y="9" Width="255" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installing [ProductName]" TabSkip="yes" Transparent="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="Cancel" X="50" Y="50" Width="271" Height="78" Title="[ProductName]" NoMinimize="yes">
|
||||
<Control Id="NoButton" Type="PushButton" X="198" Y="48" Width="65" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}&No" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return" />
|
||||
</Control>
|
||||
<Control Id="YesButton" Type="PushButton" X="126" Y="48" Width="65" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Yes" TabSkip="no">
|
||||
<Publish Event="EndDialog" Value="Exit" />
|
||||
</Control>
|
||||
<Control Id="BodyText" Type="Text" X="6" Y="9" Width="258" Height="24" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installation is not yet complete. Are you sure you want to exit?" TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="WelcomeForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Default="yes">
|
||||
<Publish Event="EndDialog" Value="Return">WelcomeForm_NextArgs=""</Publish>
|
||||
<Publish Event="NewDialog" Value="[WelcomeForm_NextArgs]">WelcomeForm_NextArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no">
|
||||
<Condition Action="disable">WelcomeForm_PrevArgs=""</Condition>
|
||||
<Condition Action="enable">WelcomeForm_PrevArgs<>""</Condition>
|
||||
<Publish Event="NewDialog" Value="[WelcomeForm_PrevArgs]">WelcomeForm_PrevArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="CopyrightWarningText" Type="Text" X="9" Y="186" Width="354" Height="66" Text="{\VSI_MS_Sans_Serif13.0_0_0}WARNING: This computer program is protected by copyright law and international treaties. Unauthorized duplication or distribution of this program, or any portion of it, may result in severe civil or criminal penalties, and will be prosecuted to the maximum extent possible under the law." TabSkip="yes" NoPrefix="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Welcome to the [ProductName] Setup Wizard" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="WelcomeText" Type="Text" X="9" Y="63" Width="354" Height="114" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer will guide you through the steps required to install [ProductName] on your computer." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="FolderForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]" TrackDiskSpace="yes">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Default="yes">
|
||||
<Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
|
||||
<Publish Event="SpawnDialog" Value="DiskCost">OutOfDiskSpace=1</Publish>
|
||||
<Publish Event="EndDialog" Value="Return">FolderForm_NextArgs="" AND OutOfDiskSpace<>1</Publish>
|
||||
<Publish Event="NewDialog" Value="[FolderForm_NextArgs]">FolderForm_NextArgs<>"" AND OutOfDiskSpace<>1</Publish>
|
||||
<Publish Property="ALLUSERS" Value="2">FolderForm_AllUsers="ALL" AND VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1</Publish>
|
||||
<Publish Property="ALLUSERS">FolderForm_AllUsers="ME" AND VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1</Publish>
|
||||
<Publish Event="DoAction" Value="FindRelatedProducts">1</Publish>
|
||||
</Control>
|
||||
<Control Id="FolderLabel" Type="Text" X="18" Y="114" Width="348" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Folder:" TabSkip="no" />
|
||||
<Control Id="FolderEdit" Type="PathEdit" X="18" Y="126" Width="252" Height="18" Property="TARGETDIR" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiPathEdit" TabSkip="no" Sunken="yes" />
|
||||
<Control Id="BrowseButton" Type="PushButton" X="276" Y="126" Width="90" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}B&rowse..." TabSkip="no">
|
||||
<Publish Property="SelectFolderDialog_Property" Value="TARGETDIR">1</Publish>
|
||||
<Publish Event="SpawnDialog" Value="SelectFolderDialog">1</Publish>
|
||||
</Control>
|
||||
<Control Id="DiskCostButton" Type="PushButton" X="276" Y="150" Width="90" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Disk Cost..." TabSkip="no">
|
||||
<Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
|
||||
<Publish Event="SpawnDialog" Value="DiskCost">1</Publish>
|
||||
</Control>
|
||||
<Control Id="AllUsersRadioGroup" Type="RadioButtonGroup" X="24" Y="210" Width="342" Height="42" Property="FolderForm_AllUsers" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiRadioButtonGroup" TabSkip="no">
|
||||
<Condition Action="show">VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1</Condition>
|
||||
<Condition Action="hide">NOT (VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1)</Condition>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no">
|
||||
<Condition Action="disable">FolderForm_PrevArgs=""</Condition>
|
||||
<Condition Action="enable">FolderForm_PrevArgs<>""</Condition>
|
||||
<Publish Event="NewDialog" Value="[FolderForm_PrevArgs]">FolderForm_PrevArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Select Installation Folder" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="Body" Type="Text" X="9" Y="63" Width="354" Height="48" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer will install [ProductName] to the following folder.

To install in this folder, click "Next". To install to a different folder, enter it below or click "Browse"." TabSkip="yes" NoPrefix="yes" />
|
||||
<Control Id="AllUsersText" Type="Text" X="18" Y="186" Width="348" Height="24" Text="{\VSI_MS_Shell_Dlg13.0_0_0}Install [ProductName] for yourself, or for anyone who uses this computer:" TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1</Condition>
|
||||
<Condition Action="hide">NOT (VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1)</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="DiskCost" X="50" Y="50" Width="361" Height="192" Title="[ProductName] Disk Space" NoMinimize="yes" TrackDiskSpace="yes">
|
||||
<Control Id="OKButton" Type="PushButton" X="288" Y="165" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}OK" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return" />
|
||||
</Control>
|
||||
<Control Id="VolumeCostList1" Type="VolumeCostList" X="6" Y="39" Width="348" Height="114" Text="{\VSI_MS_Sans_Serif13.0_0_0}{116}{80}{80}{80}{80}" TabSkip="no" Sunken="yes" Removable="yes" Fixed="yes" Remote="yes" />
|
||||
<Control Id="AvailableBodyText" Type="Text" X="6" Y="9" Width="348" Height="24" Text="{\VSI_MS_Sans_Serif13.0_0_0}The list below includes the drives you can install [ProductName] to, along with each drive's available and required disk space." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">OutOfDiskSpace<>1</Condition>
|
||||
<Condition Action="hide">OutOfDiskSpace=1</Condition>
|
||||
</Control>
|
||||
<Control Id="RequiredBodyText" Type="Text" X="6" Y="9" Width="348" Height="24" Text="{\VSI_MS_Sans_Serif13.0_0_0}The amount of required disk space exceeds the amount of available disk space. The highlighted items indicate the drives with insufficient disk space." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">OutOfDiskSpace=1</Condition>
|
||||
<Condition Action="hide">OutOfDiskSpace<>1</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="SelectFolderDialog" X="50" Y="50" Width="313" Height="223" Title="Browse for Folder" NoMinimize="yes">
|
||||
<Control Id="OKButton" Type="PushButton" X="168" Y="198" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}OK" TabSkip="no" Default="yes">
|
||||
<Publish Event="SetTargetPath" Value="[SelectFolderDialog_Property]">1</Publish>
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="240" Y="198" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="Reset" Value="{}">1</Publish>
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="BrowseText" Type="Text" X="6" Y="9" Width="60" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Browse:" TabSkip="no" />
|
||||
<Control Id="FolderCombo" Type="DirectoryCombo" X="66" Y="6" Width="198" Height="120" Property="SelectFolderDialog_Property" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiDirectoryCombo" TabSkip="no" Indirect="yes" Removable="yes" Fixed="yes" Remote="yes" RAMDisk="yes" Floppy="yes" />
|
||||
<Control Id="FolderUpButton" Type="PushButton" X="270" Y="6" Width="18" Height="18" Text="[SFF_UpFldrBtn]" TabSkip="no" IconSize="16" FixedSize="yes" Icon="yes">
|
||||
<Publish Event="DirectoryListUp" Value="{}">1</Publish>
|
||||
</Control>
|
||||
<Control Id="NewFolderButton" Type="PushButton" X="288" Y="6" Width="18" Height="18" Text="[SFF_NewFldrBtn]" TabSkip="no" IconSize="16" FixedSize="yes" Icon="yes">
|
||||
<Publish Event="DirectoryListNew" Value="{}">1</Publish>
|
||||
</Control>
|
||||
<Control Id="FolderList" Type="DirectoryList" X="6" Y="30" Width="300" Height="129" Property="SelectFolderDialog_Property" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiDirectoryList" TabSkip="no" Sunken="yes" Indirect="yes" />
|
||||
<Control Id="FolderText" Type="Text" X="6" Y="171" Width="60" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Folder:" TabSkip="no" />
|
||||
<Control Id="FolderPathEdit" Type="PathEdit" X="66" Y="168" Width="240" Height="18" Property="SelectFolderDialog_Property" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiPathEdit" TabSkip="no" Sunken="yes" Indirect="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="ConfirmInstallForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Default="yes">
|
||||
<Publish Event="EndDialog" Value="Return">ConfirmInstallForm_NextArgs=""</Publish>
|
||||
<Publish Event="NewDialog" Value="[ConfirmInstallForm_NextArgs]">ConfirmInstallForm_NextArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no">
|
||||
<Condition Action="disable">ConfirmInstallForm_PrevArgs=""</Condition>
|
||||
<Condition Action="enable">ConfirmInstallForm_PrevArgs<>""</Condition>
|
||||
<Publish Event="NewDialog" Value="[ConfirmInstallForm_PrevArgs]">ConfirmInstallForm_PrevArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Confirm Installation" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyText1" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer is ready to install [ProductName] on your computer.

Click "Next" to start the installation." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="FinishedForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="CloseButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Close" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installation Complete" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyTextRemove" Type="Text" X="9" Y="63" Width="354" Height="138" Text="{\VSI_MS_Sans_Serif13.0_0_0}[ProductName] has been successfully removed.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="UpdateText" Type="Text" X="9" Y="216" Width="354" Height="36" Text="{\VSI_MS_Sans_Serif13.0_0_0}Please use Windows Update to check for any critical updates to the .NET Framework." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
<Control Id="BodyText" Type="Text" X="9" Y="63" Width="354" Height="138" Text="{\VSI_MS_Sans_Serif13.0_0_0}[ProductName] has been successfully installed.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="ProgressForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]" Modeless="yes">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="ProgressBar" Type="ProgressBar" X="18" Y="108" Width="336" Height="15" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiProgressBar" TabSkip="yes" Disabled="yes">
|
||||
<Subscribe Event="StopServices" Attribute="Progress" />
|
||||
<Subscribe Event="DeleteServices" Attribute="Progress" />
|
||||
<Subscribe Event="RemoveRegistryValues" Attribute="Progress" />
|
||||
<Subscribe Event="RemoveFiles" Attribute="Progress" />
|
||||
<Subscribe Event="MoveFiles" Attribute="Progress" />
|
||||
<Subscribe Event="InstallFiles" Attribute="Progress" />
|
||||
<Subscribe Event="WriteRegistryValues" Attribute="Progress" />
|
||||
<Subscribe Event="WriteIniValues" Attribute="Progress" />
|
||||
<Subscribe Event="StartServices" Attribute="Progress" />
|
||||
<Subscribe Event="InstallAdminPackage" Attribute="Progress" />
|
||||
<Subscribe Event="UnmoveFiles" Attribute="Progress" />
|
||||
<Subscribe Event="SetProgress" Attribute="Progress" />
|
||||
</Control>
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="ProgressLabel" Type="Text" X="18" Y="96" Width="336" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}Please wait..." TabSkip="yes" />
|
||||
<Control Id="InstalledBody" Type="Text" X="9" Y="63" Width="354" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}[ProductName] is being installed." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
<Control Id="RemovedBody" Type="Text" X="18" Y="63" Width="336" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}[ProductName] is being removed." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="RemoveBannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Removing [ProductName]" TabSkip="yes" Transparent="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="InstalledBannerText" Type="Text" X="9" Y="9" Width="255" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installing [ProductName]" TabSkip="yes" Transparent="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="AdminFinishedForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="CloseButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Close" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Return">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Installation Complete" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyText" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}[ProductName] has been successfully removed.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
<Control Id="BodyTextInstall" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}A network image of [ProductName] has been successfully created.

Click "Close" to exit." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="AdminFolderForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]" TrackDiskSpace="yes">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Default="yes">
|
||||
<Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
|
||||
<Publish Event="SpawnDialog" Value="DiskCost">OutOfDiskSpace=1</Publish>
|
||||
<Publish Event="EndDialog" Value="Return">AdminFolderForm_NextArgs="" AND OutOfDiskSpace<>1</Publish>
|
||||
<Publish Event="NewDialog" Value="[AdminFolderForm_NextArgs]">AdminFolderForm_NextArgs<>"" AND OutOfDiskSpace<>1</Publish>
|
||||
<Publish Property="ALLUSERS" Value="2">AdminFolderForm_AllUsers="ALL"</Publish>
|
||||
</Control>
|
||||
<Control Id="FolderLabel" Type="Text" X="18" Y="114" Width="348" Height="12" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Folder:" TabSkip="no" />
|
||||
<Control Id="FolderEdit" Type="PathEdit" X="18" Y="126" Width="258" Height="18" Property="TARGETDIR" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiPathEdit" TabSkip="no" Sunken="yes" />
|
||||
<Control Id="BrowseButton" Type="PushButton" X="282" Y="126" Width="84" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}B&rowse..." TabSkip="no">
|
||||
<Publish Property="SelectFolderDialog_Property" Value="TARGETDIR">1</Publish>
|
||||
<Publish Event="SpawnDialog" Value="SelectFolderDialog">1</Publish>
|
||||
</Control>
|
||||
<Control Id="DiskCostButton" Type="PushButton" X="282" Y="150" Width="84" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Disk Cost..." TabSkip="no">
|
||||
<Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
|
||||
<Publish Event="SpawnDialog" Value="DiskCost">1</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no">
|
||||
<Condition Action="disable">AdminFolderForm_PrevArgs=""</Condition>
|
||||
<Condition Action="enable">AdminFolderForm_PrevArgs<>""</Condition>
|
||||
<Publish Event="NewDialog" Value="[AdminFolderForm_PrevArgs]">AdminFolderForm_PrevArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Network Location" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="Body" Type="Text" X="9" Y="63" Width="354" Height="48" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer will create a network image at the following location.

To create an image in this folder, click "Next". To use a different folder, enter it below or click "Browse"." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="AdminConfirmInstallForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Default="yes">
|
||||
<Publish Event="EndDialog" Value="Return">AdminConfirmInstallForm_NextArgs=""</Publish>
|
||||
<Publish Event="NewDialog" Value="[AdminConfirmInstallForm_NextArgs]">AdminConfirmInstallForm_NextArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no">
|
||||
<Condition Action="disable">AdminConfirmInstallForm_PrevArgs=""</Condition>
|
||||
<Condition Action="enable">AdminConfirmInstallForm_PrevArgs<>""</Condition>
|
||||
<Publish Event="NewDialog" Value="[AdminConfirmInstallForm_PrevArgs]">AdminConfirmInstallForm_PrevArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Confirm Installation" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="BodyText1" Type="Text" X="9" Y="63" Width="354" Height="180" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer is ready to install [ProductName] on your computer.

Click "Next" to start the installation." TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="AdminWelcomeForm" X="50" Y="50" Width="373" Height="287" Title="[ProductName]">
|
||||
<Control Id="NextButton" Type="PushButton" X="300" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Next >" TabSkip="no" Default="yes">
|
||||
<Publish Event="EndDialog" Value="Return">AdminWelcomeForm_NextArgs=""</Publish>
|
||||
<Publish Event="NewDialog" Value="[AdminWelcomeForm_NextArgs]">AdminWelcomeForm_NextArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="CancelButton" Type="PushButton" X="156" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="SpawnDialog" Value="Cancel" />
|
||||
</Control>
|
||||
<Control Id="PreviousButton" Type="PushButton" X="228" Y="261" Width="66" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}< &Back" TabSkip="no">
|
||||
<Condition Action="disable">AdminWelcomeForm_PrevArgs=""</Condition>
|
||||
<Condition Action="enable">AdminWelcomeForm_PrevArgs<>""</Condition>
|
||||
<Publish Event="NewDialog" Value="[AdminWelcomeForm_PrevArgs]">AdminWelcomeForm_PrevArgs<>""</Publish>
|
||||
</Control>
|
||||
<Control Id="BannerBmp" Type="Bitmap" X="0" Y="0" Width="375" Height="52" Text="DefBannerBitmap" TabSkip="no" Disabled="yes" />
|
||||
<Control Id="Line1" Type="Line" X="0" Y="52" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="Line2" Type="Line" X="0" Y="252" Width="375" Height="6" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiHorizontalLine" TabSkip="yes" Disabled="yes" />
|
||||
<Control Id="CopyrightWarningText" Type="Text" X="9" Y="186" Width="354" Height="66" Text="{\VSI_MS_Sans_Serif13.0_0_0}WARNING: This computer program is protected by copyright law and international treaties. Unauthorized duplication or distribution of this program, or any portion of it, may result in severe civil or criminal penalties, and will be prosecuted to the maximum extent possible under the law." TabSkip="yes" NoPrefix="yes" />
|
||||
<Control Id="BannerText" Type="Text" X="9" Y="9" Width="306" Height="33" Text="{\VSI_MS_Sans_Serif16.0_1_0}Welcome to the [ProductName] Network Setup Wizard" TabSkip="yes" Transparent="yes" NoPrefix="yes" />
|
||||
<Control Id="WelcomeText" Type="Text" X="9" Y="63" Width="354" Height="114" Text="{\VSI_MS_Sans_Serif13.0_0_0}The installer will guide you through the steps required to install [ProductName] on your computer." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">Installed="" AND NOT RESUME</Condition>
|
||||
<Condition Action="hide">Installed<>"" OR RESUME</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="ErrorDialog" X="50" Y="50" Width="330" Height="101" Title="[ProductName]" ErrorDialog="yes">
|
||||
<Control Id="ErrorText" Type="Text" X="6" Y="9" Width="318" Height="48" Text="{\VSI_MS_Sans_Serif13.0_0_0}" TabSkip="no" Disabled="yes" NoPrefix="yes" />
|
||||
<Control Id="N" Type="PushButton" X="120" Y="72" Width="81" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}&No" TabSkip="yes">
|
||||
<Publish Event="EndDialog" Value="ErrorNo" />
|
||||
</Control>
|
||||
<Control Id="Y" Type="PushButton" X="240" Y="72" Width="81" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Yes" TabSkip="yes">
|
||||
<Publish Event="EndDialog" Value="ErrorYes" />
|
||||
</Control>
|
||||
<Control Id="A" Type="PushButton" X="0" Y="72" Width="81" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}E&xit Installation" TabSkip="yes">
|
||||
<Publish Event="EndDialog" Value="ErrorAbort" />
|
||||
</Control>
|
||||
<Control Id="C" Type="PushButton" X="42" Y="72" Width="81" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}Cancel" TabSkip="yes">
|
||||
<Publish Event="EndDialog" Value="ErrorCancel" />
|
||||
</Control>
|
||||
<Control Id="I" Type="PushButton" X="81" Y="72" Width="81" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}C&ontinue" TabSkip="yes">
|
||||
<Publish Event="EndDialog" Value="ErrorIgnore" />
|
||||
</Control>
|
||||
<Control Id="O" Type="PushButton" X="159" Y="72" Width="81" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}OK" TabSkip="yes">
|
||||
<Publish Event="EndDialog" Value="ErrorOk" />
|
||||
</Control>
|
||||
<Control Id="R" Type="PushButton" X="198" Y="72" Width="81" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Try Again" TabSkip="yes">
|
||||
<Publish Event="EndDialog" Value="ErrorRetry" />
|
||||
</Control>
|
||||
</Dialog>
|
||||
<Dialog Id="ConfirmRemoveDialog" X="50" Y="50" Width="271" Height="78" Title="Remove [ProductName]" NoMinimize="yes">
|
||||
<Control Id="NoButton" Type="PushButton" X="198" Y="48" Width="65" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}&No" TabSkip="no" Default="yes" Cancel="yes">
|
||||
<Publish Property="WelcomeForm_ConfirmRemove" Value="No" />
|
||||
<Publish Event="EndDialog" Value="Return" />
|
||||
</Control>
|
||||
<Control Id="YesButton" Type="PushButton" X="126" Y="48" Width="65" Height="21" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Yes" TabSkip="no">
|
||||
<Publish Property="WelcomeForm_ConfirmRemove" Value="Yes" />
|
||||
<Publish Event="EndDialog" Value="Return" />
|
||||
</Control>
|
||||
<Control Id="BodyText" Type="Text" X="6" Y="9" Width="258" Height="24" Text="{\VSI_MS_Sans_Serif13.0_0_0}You have chosen to remove [ProductName] from your computer. Are you sure you want to remove it?" TabSkip="yes" NoPrefix="yes" />
|
||||
</Dialog>
|
||||
<Dialog Id="FilesInUse" X="50" Y="50" Width="361" Height="177" Title="[ProductName] Files in Use" NoMinimize="yes">
|
||||
<Control Id="RetryButton" Type="PushButton" X="99" Y="150" Width="81" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Try Again" TabSkip="no" Default="yes">
|
||||
<Publish Event="EndDialog" Value="Retry" />
|
||||
</Control>
|
||||
<Control Id="ContinueButton" Type="PushButton" X="186" Y="150" Width="81" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}&Continue" TabSkip="no">
|
||||
<Publish Event="EndDialog" Value="Ignore" />
|
||||
</Control>
|
||||
<Control Id="ExitButton" Type="PushButton" X="273" Y="150" Width="81" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}E&xit Installation" TabSkip="no" Cancel="yes">
|
||||
<Publish Event="EndDialog" Value="Exit" />
|
||||
</Control>
|
||||
<Control Id="ListFilesInUse" Type="ListBox" X="6" Y="51" Width="348" Height="90" Property="FileInUseProcess" Text="{\VSI_MS_Sans_Serif13.0_0_0}MsiFilesInUse" TabSkip="no" Sunken="yes" Sorted="yes" />
|
||||
<Control Id="InstallBodyText" Type="Text" X="6" Y="9" Width="345" Height="36" Text="{\VSI_MS_Sans_Serif13.0_0_0}The following applications are using files which the installer must update. You can either close the applications and click "Try Again", or click "Continue" so that the installer continues the installation, and replaces these files when your system restarts." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE=""</Condition>
|
||||
<Condition Action="hide">REMOVE<>""</Condition>
|
||||
</Control>
|
||||
<Control Id="RemoveBodyText" Type="Text" X="6" Y="9" Width="345" Height="36" Text="{\VSI_MS_Sans_Serif13.0_0_0}The following applications are using files which the installer must remove. You can either close the applications and click "Try Again", or click "Continue" so that the installer continues the installation, and replaces these files when your system restarts." TabSkip="yes" NoPrefix="yes">
|
||||
<Condition Action="show">REMOVE<>""</Condition>
|
||||
<Condition Action="hide">REMOVE=""</Condition>
|
||||
</Control>
|
||||
</Dialog>
|
||||
</UI>
|
||||
<Upgrade Id="{CE1642E2-5EE0-454F-B7DF-5C9C92D6D40D}">
|
||||
<UpgradeVersion Minimum="$(var.ProductVersion)" Property="NEWERPRODUCTFOUND" OnlyDetect="yes" IncludeMinimum="no" />
|
||||
<UpgradeVersion Property="UPGRADEFOUND" IncludeMinimum="yes" Minimum="1.99.0" Maximum="$(var.ProductVersion)" MigrateFeatures="yes" IncludeMaximum="no" />
|
||||
</Upgrade>
|
||||
<InstallExecuteSequence>
|
||||
<Custom Action="DIRCA_CheckFX" Sequence="1" />
|
||||
<Custom Action="ERRCA_CANCELNEWERVERSION" Sequence="210">NEWERPRODUCTFOUND AND NOT Installed</Custom>
|
||||
<Custom Action="VSDCA_VsdLaunchConditions" Sequence="399">NOT Installed</Custom>
|
||||
<Custom Action="DIRCA_TARGETDIR" Sequence="750">TARGETDIR=""</Custom>
|
||||
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWERPRODUCTFOUND</Custom>
|
||||
<LaunchConditions Sequence="400">NOT Installed</LaunchConditions>
|
||||
<FindRelatedProducts Sequence="200" />
|
||||
<AppSearch Sequence="100" />
|
||||
<CCPSearch Sequence="500">NOT Installed</CCPSearch>
|
||||
<RMCCPSearch Sequence="600">NOT Installed</RMCCPSearch>
|
||||
<ValidateProductID Sequence="700" />
|
||||
<CostInitialize Sequence="800" />
|
||||
<FileCost Sequence="900" />
|
||||
<IsolateComponents Sequence="950">RedirectedDllSupport</IsolateComponents>
|
||||
<CostFinalize Sequence="1000" />
|
||||
<SetODBCFolders Sequence="1100">NOT Installed</SetODBCFolders>
|
||||
<InstallValidate Sequence="1400" />
|
||||
<InstallInitialize Sequence="1500" />
|
||||
<AllocateRegistrySpace Sequence="1550">NOT Installed</AllocateRegistrySpace>
|
||||
<ProcessComponents Sequence="1600" />
|
||||
<UnpublishComponents Sequence="1700" />
|
||||
<UnpublishFeatures Sequence="1800" />
|
||||
<StopServices Sequence="1900">VersionNT</StopServices>
|
||||
<DeleteServices Sequence="2000">VersionNT</DeleteServices>
|
||||
<UnregisterComPlus Sequence="2100" />
|
||||
<SelfUnregModules Sequence="2200" />
|
||||
<UnregisterTypeLibraries Sequence="2300" />
|
||||
<RemoveODBC Sequence="2400" />
|
||||
<UnregisterFonts Sequence="2500" />
|
||||
<RemoveRegistryValues Sequence="2600" />
|
||||
<UnregisterClassInfo Sequence="2700" />
|
||||
<UnregisterExtensionInfo Sequence="2800" />
|
||||
<UnregisterProgIdInfo Sequence="2900" />
|
||||
<UnregisterMIMEInfo Sequence="3000" />
|
||||
<RemoveIniValues Sequence="3100" />
|
||||
<RemoveShortcuts Sequence="3200" />
|
||||
<RemoveEnvironmentStrings Sequence="3300" />
|
||||
<RemoveDuplicateFiles Sequence="3400" />
|
||||
<RemoveFiles Sequence="3500" />
|
||||
<RemoveFolders Sequence="3600" />
|
||||
<CreateFolders Sequence="3700" />
|
||||
<MoveFiles Sequence="3800" />
|
||||
<InstallFiles Sequence="4000" />
|
||||
<DuplicateFiles Sequence="4210" />
|
||||
<PatchFiles Sequence="4090" />
|
||||
<BindImage Sequence="4300" />
|
||||
<CreateShortcuts Sequence="4500" />
|
||||
<RegisterClassInfo Sequence="4600" />
|
||||
<RegisterExtensionInfo Sequence="4700" />
|
||||
<RegisterProgIdInfo Sequence="4800" />
|
||||
<RegisterMIMEInfo Sequence="4900" />
|
||||
<WriteRegistryValues Sequence="5000" />
|
||||
<WriteIniValues Sequence="5100" />
|
||||
<WriteEnvironmentStrings Sequence="5200" />
|
||||
<RegisterFonts Sequence="5300" />
|
||||
<InstallODBC Sequence="5400" />
|
||||
<RegisterTypeLibraries Sequence="5500" />
|
||||
<SelfRegModules Sequence="5600" />
|
||||
<RegisterComPlus Sequence="5700" />
|
||||
<InstallServices Sequence="5800">VersionNT</InstallServices>
|
||||
<StartServices Sequence="5900">VersionNT</StartServices>
|
||||
<RegisterUser Sequence="6000" />
|
||||
<RegisterProduct Sequence="6100" />
|
||||
<PublishComponents Sequence="6200" />
|
||||
<PublishFeatures Sequence="6300" />
|
||||
<PublishProduct Sequence="6400" />
|
||||
<InstallFinalize Sequence="6600" />
|
||||
<RemoveExistingProducts Sequence="6550" />
|
||||
<InstallExecute Sequence="6500" />
|
||||
<MsiPublishAssemblies Sequence="6250" />
|
||||
<MsiUnpublishAssemblies Sequence="1650" />
|
||||
</InstallExecuteSequence>
|
||||
<InstallUISequence>
|
||||
<Custom Action="DIRCA_CheckFX" Sequence="1" />
|
||||
<Custom Action="ERRCA_UIANDADVERTISED" Sequence="5">ProductState=1</Custom>
|
||||
<Custom Action="VSDCA_VsdLaunchConditions" Sequence="399">NOT Installed</Custom>
|
||||
<Custom Action="DIRCA_TARGETDIR" Sequence="750">TARGETDIR=""</Custom>
|
||||
<Custom Action="VSDCA_FolderForm_AllUsers" Sequence="997">Installed="" AND NOT RESUME AND ALLUSERS=1</Custom>
|
||||
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWERPRODUCTFOUND</Custom>
|
||||
<Show Dialog="FatalErrorForm" OnExit="error">NOT HideFatalErrorForm</Show>
|
||||
<Show Dialog="UserExitForm" OnExit="cancel" />
|
||||
<Show Dialog="FinishedForm" OnExit="success" />
|
||||
<Show Dialog="ResumeForm" Sequence="998">Installed="" AND RESUME</Show>
|
||||
<Show Dialog="MaintenanceForm" Sequence="999">Installed<>""</Show>
|
||||
<Show Dialog="WelcomeForm" Sequence="1001">Installed="" AND NOT RESUME</Show>
|
||||
<Show Dialog="ProgressForm" Sequence="1299" />
|
||||
<LaunchConditions Sequence="400">NOT Installed</LaunchConditions>
|
||||
<AppSearch Sequence="100" />
|
||||
<CCPSearch Sequence="500">NOT Installed</CCPSearch>
|
||||
<RMCCPSearch Sequence="600">NOT Installed</RMCCPSearch>
|
||||
<ValidateProductID Sequence="700" />
|
||||
<CostInitialize Sequence="800" />
|
||||
<FileCost Sequence="900" />
|
||||
<IsolateComponents Sequence="950">RedirectedDllSupport</IsolateComponents>
|
||||
<CostFinalize Sequence="1000" />
|
||||
<ExecuteAction Sequence="1300" />
|
||||
</InstallUISequence>
|
||||
<AdminExecuteSequence>
|
||||
<Custom Action="DIRCA_TARGETDIR" Sequence="750">TARGETDIR=""</Custom>
|
||||
<CostInitialize Sequence="800" />
|
||||
<FileCost Sequence="900" />
|
||||
<CostFinalize Sequence="1000" />
|
||||
<InstallValidate Sequence="1400" />
|
||||
<InstallInitialize Sequence="1500" />
|
||||
<InstallAdminPackage Sequence="3900" />
|
||||
<InstallFiles Sequence="4000" />
|
||||
<InstallFinalize Sequence="6600" />
|
||||
</AdminExecuteSequence>
|
||||
<AdminUISequence>
|
||||
<Custom Action="DIRCA_TARGETDIR" Sequence="750">TARGETDIR=""</Custom>
|
||||
<Show Dialog="AdminFatalErrorForm" OnExit="error" />
|
||||
<Show Dialog="AdminUserExitForm" OnExit="cancel" />
|
||||
<Show Dialog="AdminFinishedForm" OnExit="success" />
|
||||
<Show Dialog="AdminResumeForm" Sequence="998">Installed="" AND RESUME</Show>
|
||||
<Show Dialog="AdminMaintenanceForm" Sequence="999">Installed<>""</Show>
|
||||
<Show Dialog="AdminWelcomeForm" Sequence="1001">Installed="" AND NOT RESUME</Show>
|
||||
<Show Dialog="AdminProgressForm" Sequence="1299" />
|
||||
<CostInitialize Sequence="800" />
|
||||
<FileCost Sequence="900" />
|
||||
<CostFinalize Sequence="1000" />
|
||||
<ExecuteAction Sequence="1300" />
|
||||
</AdminUISequence>
|
||||
<AdvertiseExecuteSequence>
|
||||
<CostInitialize Sequence="800" />
|
||||
<CostFinalize Sequence="1000" />
|
||||
<Custom Action="DIRCA_TARGETDIR" Sequence="750">TARGETDIR=""</Custom>
|
||||
<InstallValidate Sequence="1400" />
|
||||
<InstallInitialize Sequence="1500" />
|
||||
<CreateShortcuts Sequence="4500" />
|
||||
<RegisterClassInfo Sequence="4600" />
|
||||
<RegisterExtensionInfo Sequence="4700" />
|
||||
<RegisterMIMEInfo Sequence="4900" />
|
||||
<RegisterProgIdInfo Sequence="4800" />
|
||||
<PublishComponents Sequence="6200" />
|
||||
<PublishFeatures Sequence="6300" />
|
||||
<PublishProduct Sequence="6400" />
|
||||
<InstallFinalize Sequence="6600" />
|
||||
<MsiPublishAssemblies Sequence="6250" />
|
||||
</AdvertiseExecuteSequence>
|
||||
<Condition Message="Embroidery Reader 1.5 or earlier is installed. Please remove previous versions of Embroidery Reader and run the installer again.">OLD_INSTALL = null</Condition>
|
||||
<!-- It doesn't appear that PREVIOUSVERSIONSINSTALLED is needed with MajorUpgrade -->
|
||||
<!-- <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" /> -->
|
||||
<!-- Specify license file -->
|
||||
<WixVariable Id="WixUILicenseRtf" Value="..\docs\license.rtf" />
|
||||
<!-- Specify custom banner bitmap 493x58 -->
|
||||
<WixVariable Id="WixUIBannerBmp" Value="images\banner.bmp" />
|
||||
<!-- Specify custom dialog bitmap 493x312 -->
|
||||
<WixVariable Id="WixUIDialogBmp" Value="images\dialog.bmp" />
|
||||
</Product>
|
||||
</Wix>
|
|
@ -0,0 +1,26 @@
|
|||
Installer must:
|
||||
1. Install files into program files, in Embroidery Reader folder (or a user-selected folder)
|
||||
a. Program .exe and .dlls
|
||||
b. Translation .inis
|
||||
2. Install Start menu Folder
|
||||
a. Short cut to .exe
|
||||
b. Must install for all users
|
||||
3. Check for required .net version before installing
|
||||
a. Should also direct user to download page, if not installed
|
||||
4. Check for old non-Wix versions before installing
|
||||
a. Version 1.5.1 and older
|
||||
b. Would be nice if it would offer to uninstall old version as well
|
||||
5. Only allow upgrades
|
||||
a. If downgrade is required, uninstall current version and install older version
|
||||
b. Older Wix-based installers must be removed during upgrade (to maintain a single Programs and Features entry)
|
||||
6. Must have a respectable Programs and Features presence
|
||||
a. Correct program name
|
||||
b. Program icon
|
||||
c. Contact URL
|
||||
d. Support URL
|
||||
e. Help URL
|
||||
7. Must include correct license in installer
|
||||
8. Must install a file association
|
||||
a. Show icon for .pes files
|
||||
b. Open .pes file with double click
|
||||
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 112 KiB |
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 601 KiB |
Plik binarny nie jest wyświetlany.
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Embroidery Reader - an application to view .pes embroidery designs
|
||||
|
||||
Copyright (C) 2016 Nathan Crawford
|
||||
Copyright (C) 2019 Nathan Crawford
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
@ -22,11 +22,6 @@ A copy of the full GPL 2 license can be found in the docs directory.
|
|||
You can contact me at http://www.njcrawford.com/contact/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PesFile
|
||||
{
|
||||
public class PesColors
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Embroidery Reader - an application to view .pes embroidery designs
|
||||
|
||||
Copyright (C) 2016 Nathan Crawford
|
||||
Copyright (C) 2019 Nathan Crawford
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
@ -24,26 +24,28 @@ You can contact me at http://www.njcrawford.com/contact/.
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
|
||||
namespace PesFile
|
||||
{
|
||||
public enum statusEnum { NotOpen, IOError, ParseError, Ready };
|
||||
public class PECFormatException : Exception
|
||||
{
|
||||
public PECFormatException(string message) : base(message) { }
|
||||
}
|
||||
|
||||
public class PesFile
|
||||
{
|
||||
System.IO.BinaryReader fileIn;
|
||||
int imageWidth;
|
||||
int imageHeight;
|
||||
string _filename;
|
||||
private int imageWidth;
|
||||
private int imageHeight;
|
||||
private string _filename;
|
||||
private string designName;
|
||||
public List<StitchBlock> blocks = new List<StitchBlock>();
|
||||
public List<Tuple<int, int>> colorTable = new List<Tuple<int, int>>();
|
||||
private statusEnum readyStatus = statusEnum.NotOpen;
|
||||
Int64 startStitches = 0;
|
||||
string lastError = "";
|
||||
Point translateStart;
|
||||
UInt16 pesVersion;
|
||||
private byte[] colorList;
|
||||
private Point translateStart;
|
||||
private UInt16 pesVersion;
|
||||
// Native format appears to use 0.1mm steps, for 254 steps per inch
|
||||
public int NativeDPI = 254;
|
||||
|
||||
|
||||
// If set to true, this variable means we couldn't figure out some or
|
||||
|
@ -59,7 +61,7 @@ namespace PesFile
|
|||
|
||||
// Returns an Int16 representation of the 12 bit signed int contained in
|
||||
// high and low bytes
|
||||
private Int16 get12Bit2sComplement(byte high, byte low)
|
||||
private Int16 Get12Bit2sComplement(byte high, byte low)
|
||||
{
|
||||
Int32 retval;
|
||||
|
||||
|
@ -86,7 +88,7 @@ namespace PesFile
|
|||
|
||||
// Returns a signed byte representation of the 7 bit signed int contained
|
||||
// in b.
|
||||
private SByte get7Bit2sComplement(byte b)
|
||||
private SByte Get7Bit2sComplement(byte b)
|
||||
{
|
||||
SByte retval;
|
||||
|
||||
|
@ -112,201 +114,350 @@ namespace PesFile
|
|||
|
||||
private void OpenFile(string filename)
|
||||
{
|
||||
#if !DEBUG
|
||||
try
|
||||
_filename = filename;
|
||||
|
||||
// The using statements ensure fileIn is closed, no matter how the statement is exited.
|
||||
// Open the file in read-only mode, but allow read-write sharing. This prevents a case where opening
|
||||
// the file read-only with read sharing could fail because some other application already has it
|
||||
// open with read-write access even though it's not writing to the file. (I suspect some antivirus
|
||||
// programs may be doing this) Using this mode may allow reading half-written files, but I don't expect
|
||||
// that will be an issue with PES designs, since they're generally written once when downloaded and left
|
||||
// alone after that.
|
||||
using (FileStream fileStreamIn = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||
{
|
||||
#endif
|
||||
_filename = filename;
|
||||
fileIn = new System.IO.BinaryReader(System.IO.File.Open(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read));
|
||||
|
||||
string startFileSig = "";
|
||||
for (int i = 0; i < 4; i++) // 4 bytes
|
||||
using (BinaryReader fileIn = new BinaryReader(fileStreamIn))
|
||||
{
|
||||
startFileSig += fileIn.ReadChar();
|
||||
}
|
||||
if (startFileSig != "#PES")
|
||||
{
|
||||
// This is not a file that we can read
|
||||
readyStatus = statusEnum.ParseError;
|
||||
lastError = "Missing #PES at beginning of file";
|
||||
fileIn.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
// PES version
|
||||
string versionString = "";
|
||||
for (int i = 0; i < 4; i++) // 4 bytes
|
||||
{
|
||||
versionString += fileIn.ReadChar();
|
||||
}
|
||||
pesVersion = Convert.ToUInt16(versionString);
|
||||
|
||||
int pecstart = fileIn.ReadInt32();
|
||||
|
||||
// Read number of colors in this design
|
||||
fileIn.BaseStream.Position = pecstart + 48;
|
||||
int numColors = fileIn.ReadByte() +1;
|
||||
List<byte> colorList = new List<byte>();
|
||||
for (int x = 0; x < numColors; x++)
|
||||
{
|
||||
colorList.Add(fileIn.ReadByte());
|
||||
}
|
||||
|
||||
// Read stitch data
|
||||
fileIn.BaseStream.Position = pecstart + 532;
|
||||
bool thisPartIsDone = false;
|
||||
StitchBlock curBlock;
|
||||
int prevX = 0;
|
||||
int prevY = 0;
|
||||
int maxX = 0;
|
||||
int minX = 0;
|
||||
int maxY = 0;
|
||||
int minY = 0;
|
||||
int colorNum = -1;
|
||||
int colorIndex = 0;
|
||||
List<Stitch> tempStitches = new List<Stitch>();
|
||||
while (!thisPartIsDone)
|
||||
{
|
||||
byte val1;
|
||||
byte val2;
|
||||
val1 = fileIn.ReadByte();
|
||||
val2 = fileIn.ReadByte();
|
||||
if (val1 == 0xff && val2 == 0x00)
|
||||
string startFileSig = "";
|
||||
for (int i = 0; i < 4; i++) // 4 bytes
|
||||
{
|
||||
//end of stitches
|
||||
thisPartIsDone = true;
|
||||
|
||||
//add the last block
|
||||
curBlock = new StitchBlock();
|
||||
curBlock.stitches = new Stitch[tempStitches.Count];
|
||||
tempStitches.CopyTo(curBlock.stitches);
|
||||
curBlock.stitchesTotal = tempStitches.Count;
|
||||
colorNum++;
|
||||
colorIndex = colorList[colorNum];
|
||||
curBlock.colorIndex = colorIndex;
|
||||
curBlock.color = getColorFromIndex(colorIndex);
|
||||
blocks.Add(curBlock);
|
||||
// This needs to be read as a byte, since characters can be multiple bytes depending on encoding
|
||||
startFileSig += (char)fileIn.ReadByte();
|
||||
}
|
||||
else if (val1 == 0xfe && val2 == 0xb0)
|
||||
if (startFileSig != "#PES")
|
||||
{
|
||||
//color switch, start a new block
|
||||
|
||||
curBlock = new StitchBlock();
|
||||
curBlock.stitches = new Stitch[tempStitches.Count];
|
||||
tempStitches.CopyTo(curBlock.stitches);
|
||||
curBlock.stitchesTotal = tempStitches.Count;
|
||||
colorNum++;
|
||||
colorIndex = colorList[colorNum];
|
||||
curBlock.colorIndex = colorIndex;
|
||||
curBlock.color = getColorFromIndex(colorIndex);
|
||||
//read useless(?) byte
|
||||
// The value of this 'useless' byte seems to alternate
|
||||
// between 2 and 1 for every other block. The only
|
||||
// exception I've noted is the last block which appears
|
||||
// to always be 0.
|
||||
curBlock.unknownStartByte = fileIn.ReadByte();
|
||||
blocks.Add(curBlock);
|
||||
|
||||
tempStitches = new List<Stitch>();
|
||||
// This is not a file that we can read
|
||||
throw new PECFormatException("Missing #PES at beginning of file");
|
||||
}
|
||||
else
|
||||
|
||||
// PES version
|
||||
string versionString = "";
|
||||
for (int i = 0; i < 4; i++) // 4 bytes
|
||||
{
|
||||
int deltaX = 0;
|
||||
int deltaY = 0;
|
||||
if ((val1 & 0x80) == 0x80)
|
||||
// This needs to be read as a byte, since characters can be multiple bytes depending on encoding
|
||||
versionString += (char)fileIn.ReadByte();
|
||||
}
|
||||
if (!UInt16.TryParse(versionString, out pesVersion))
|
||||
{
|
||||
// This is not a file that we can read
|
||||
throw new PECFormatException("PES version is not the correct format");
|
||||
}
|
||||
|
||||
int pecstart = fileIn.ReadInt32();
|
||||
// Sanity check on PEC start position
|
||||
if (fileIn.BaseStream.Length < (pecstart + 512 + 20))
|
||||
{
|
||||
// This file is probably truncated
|
||||
throw new PECFormatException("File appears to be truncated (PEC section is beyond end of file)");
|
||||
}
|
||||
|
||||
// Jump to the PEC section
|
||||
fileIn.BaseStream.Position = pecstart;
|
||||
|
||||
// Read design name - always preceded by "LA:" as far as I can tell
|
||||
string pecIntro = "";
|
||||
pecIntro += (char)fileIn.ReadByte();
|
||||
pecIntro += (char)fileIn.ReadByte();
|
||||
pecIntro += (char)fileIn.ReadByte();
|
||||
if(pecIntro != "LA:")
|
||||
{
|
||||
throw new PECFormatException("Missing 'LA:' at beginning of PEC header");
|
||||
}
|
||||
designName = "";
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
designName += (char)fileIn.ReadByte();
|
||||
}
|
||||
|
||||
// This byte always seems to be 0x0d (13). Could mean a carriage return, or maybe
|
||||
// it indicates this section is 13 bytes long.
|
||||
byte afterName = fileIn.ReadByte();
|
||||
if(afterName != 0x0d)
|
||||
{
|
||||
throw new PECFormatException("Byte after design name has unexpected value: " + afterName);
|
||||
}
|
||||
|
||||
// Get rest of design name
|
||||
designName += " ";
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
designName += (char)fileIn.ReadByte();
|
||||
}
|
||||
designName = designName.Trim();
|
||||
|
||||
// 0xff
|
||||
byte blockStart1 = fileIn.ReadByte();
|
||||
// 0x00
|
||||
byte blockStart2 = fileIn.ReadByte();
|
||||
// 0x06
|
||||
byte blockType1 = fileIn.ReadByte();
|
||||
// 0x26
|
||||
byte blockType2 = fileIn.ReadByte();
|
||||
if(!(blockStart1 == 0xff && blockStart2 == 0x00 && blockType1 == 0x06 && blockType2 == 0x26))
|
||||
{
|
||||
throw new PECFormatException("Block start before color list is unexpected: " + blockStart1.ToString("x2") + " " + blockStart2.ToString("x2") + " " + blockType1.ToString("x2") + " " + blockType2.ToString("x2"));
|
||||
}
|
||||
|
||||
// 12 bytes of something, always observed to be 0x20
|
||||
byte[] something1 = fileIn.ReadBytes(12);
|
||||
|
||||
//fileIn.BaseStream.Position = pecstart + 48;
|
||||
// Read number of colors in this design, or perhaps the number of color changes.
|
||||
// It seems that different digitisers use different meanings for this field.
|
||||
int numColors = fileIn.ReadByte() + 1;
|
||||
// Read the remaining bytes as a color table
|
||||
// 512 - 48 - 1 = 463 bytes remaining
|
||||
colorList = fileIn.ReadBytes(463);
|
||||
|
||||
// 0x00
|
||||
byte anotherBlockStart1 = fileIn.ReadByte();
|
||||
// 0x00
|
||||
byte anotherBlockStart2 = fileIn.ReadByte();
|
||||
if(!(anotherBlockStart1 == 0x00 && anotherBlockStart2 == 0x00))
|
||||
{
|
||||
throw new PECFormatException("Block start after color list is unexpected: " + anotherBlockStart1.ToString("x2") + " " + anotherBlockStart2.ToString("x2"));
|
||||
}
|
||||
// 4 bytes of something
|
||||
byte[] something2 = fileIn.ReadBytes(4);
|
||||
|
||||
// 0xff
|
||||
byte yetAnotherBlockStart1 = fileIn.ReadByte();
|
||||
// 0xf0
|
||||
byte yetAnotherBlockStart2 = fileIn.ReadByte();
|
||||
if(!(yetAnotherBlockStart1 == 0xff && yetAnotherBlockStart2 == 0xf0))
|
||||
{
|
||||
throw new PECFormatException("Block start before stitch blocks begin is unexpected: " + yetAnotherBlockStart1.ToString("x2") + " " + yetAnotherBlockStart2.ToString("x2"));
|
||||
}
|
||||
// 12 bytes of something
|
||||
byte[] something3 = fileIn.ReadBytes(12);
|
||||
|
||||
// Read stitch data
|
||||
//fileIn.BaseStream.Position = pecstart + 512 + 20;
|
||||
bool thisPartIsDone = false;
|
||||
StitchBlock curBlock;
|
||||
int prevX = 0;
|
||||
int prevY = 0;
|
||||
int maxX = 0;
|
||||
int minX = 0;
|
||||
int maxY = 0;
|
||||
int minY = 0;
|
||||
int colorNum = 0;
|
||||
int colorIndex = 0;
|
||||
List<Stitch> tempStitches = new List<Stitch>();
|
||||
Stitch prevStitch = null;
|
||||
bool firstStitchOfBlock = true;
|
||||
while (!thisPartIsDone)
|
||||
{
|
||||
byte val1;
|
||||
byte val2;
|
||||
val1 = fileIn.ReadByte();
|
||||
val2 = fileIn.ReadByte();
|
||||
if (val1 == 0xff && val2 == 0x00)
|
||||
{
|
||||
// This is a 12-bit int. Allows for needle movement
|
||||
// of up to +2047 or -2048.
|
||||
deltaX = get12Bit2sComplement(val1, val2);
|
||||
//end of stitches
|
||||
thisPartIsDone = true;
|
||||
|
||||
// The X value used both bytes, so read next byte
|
||||
// for Y value.
|
||||
val1 = fileIn.ReadByte();
|
||||
//add the last block
|
||||
curBlock = new StitchBlock();
|
||||
curBlock.stitches = new Stitch[tempStitches.Count];
|
||||
tempStitches.CopyTo(curBlock.stitches);
|
||||
curBlock.stitchesTotal = tempStitches.Count;
|
||||
|
||||
if (colorNum >= colorList.Length)
|
||||
{
|
||||
throw new IndexOutOfRangeException("colorNum (" + colorNum + ") out of range (" + colorList.Length + ") in end of stitches block");
|
||||
}
|
||||
colorIndex = colorList[colorNum];
|
||||
|
||||
curBlock.colorIndex = colorIndex;
|
||||
curBlock.color = GetColorFromIndex(colorIndex);
|
||||
blocks.Add(curBlock);
|
||||
}
|
||||
else if (val1 == 0xfe && val2 == 0xb0)
|
||||
{
|
||||
//color switch, start a new block
|
||||
|
||||
curBlock = new StitchBlock();
|
||||
curBlock.stitches = new Stitch[tempStitches.Count];
|
||||
tempStitches.CopyTo(curBlock.stitches);
|
||||
curBlock.stitchesTotal = tempStitches.Count;
|
||||
|
||||
if (colorNum >= colorList.Length)
|
||||
{
|
||||
throw new IndexOutOfRangeException("colorNum (" + colorNum + ") out of range (" + colorList.Length + ") in color switch block");
|
||||
}
|
||||
colorIndex = colorList[colorNum];
|
||||
colorNum++;
|
||||
|
||||
curBlock.colorIndex = colorIndex;
|
||||
curBlock.color = GetColorFromIndex(colorIndex);
|
||||
//read useless(?) byte
|
||||
// The value of this 'useless' byte seems to start with 2 for the first block and
|
||||
// alternate between 2 and 1 for every other block after that. The only exception
|
||||
// I've noted is the last block which appears to always be 0.
|
||||
curBlock.unknownStartByte = fileIn.ReadByte();
|
||||
blocks.Add(curBlock);
|
||||
|
||||
firstStitchOfBlock = true;
|
||||
|
||||
tempStitches = new List<Stitch>();
|
||||
}
|
||||
else
|
||||
{
|
||||
// This is a 7-bit int. Allows for needle movement
|
||||
// of up to +63 or -64.
|
||||
deltaX = get7Bit2sComplement(val1);
|
||||
int deltaX = 0;
|
||||
int deltaY = 0;
|
||||
int extraBits1 = 0x00;
|
||||
Stitch.MoveBitSize xMoveBits;
|
||||
Stitch.MoveBitSize yMoveBits;
|
||||
if ((val1 & 0x80) == 0x80)
|
||||
{
|
||||
// Save the top 4 bits to output with debug info
|
||||
// The top bit means this is a 12 bit value, but I don't know what the next 3 bits mean.
|
||||
// The only combinations I've observed in real files are 0x10 and 0x20. 0x20 occurs
|
||||
// about 4 times as much as 0x10 in the samples I have available.
|
||||
extraBits1 = val1 & 0x70;
|
||||
|
||||
// The X value only used 1 byte, so copy the second
|
||||
// to to the first for Y value.
|
||||
val1 = val2;
|
||||
}
|
||||
// This is a 12-bit int. Allows for needle movement
|
||||
// of up to +2047 or -2048.
|
||||
deltaX = Get12Bit2sComplement(val1, val2);
|
||||
|
||||
if ((val1 & 0x80) == 0x80)
|
||||
{
|
||||
// This is a 12-bit int. Allows for needle movement
|
||||
// of up to +2047 or -2048.
|
||||
// Read in the next byte to get the full value
|
||||
val2 = fileIn.ReadByte();
|
||||
deltaY = get12Bit2sComplement(val1, val2);
|
||||
}
|
||||
else
|
||||
{
|
||||
// This is a 7-bit int. Allows for needle movement
|
||||
// of up to +63 or -64.
|
||||
deltaY = get7Bit2sComplement(val1);
|
||||
// Finished reading data for this stitch, no more
|
||||
// bytes needed.
|
||||
}
|
||||
tempStitches.Add(
|
||||
new Stitch(
|
||||
new Point(prevX, prevY),
|
||||
new Point(prevX + deltaX, prevY + deltaY)
|
||||
)
|
||||
);
|
||||
prevX = prevX + deltaX;
|
||||
prevY = prevY + deltaY;
|
||||
if (prevX > maxX)
|
||||
{
|
||||
maxX = prevX;
|
||||
}
|
||||
else if (prevX < minX)
|
||||
{
|
||||
minX = prevX;
|
||||
}
|
||||
xMoveBits = Stitch.MoveBitSize.TwelveBits;
|
||||
|
||||
if (prevY > maxY)
|
||||
{
|
||||
maxY = prevY;
|
||||
}
|
||||
else if (prevY < minY)
|
||||
{
|
||||
minY = prevY;
|
||||
// The X value used both bytes, so read next byte
|
||||
// for Y value.
|
||||
val1 = fileIn.ReadByte();
|
||||
}
|
||||
else
|
||||
{
|
||||
// This is a 7-bit int. Allows for needle movement
|
||||
// of up to +63 or -64.
|
||||
deltaX = Get7Bit2sComplement(val1);
|
||||
|
||||
xMoveBits = Stitch.MoveBitSize.SevenBits;
|
||||
|
||||
// The X value only used 1 byte, so copy the second
|
||||
// to to the first for Y value.
|
||||
val1 = val2;
|
||||
}
|
||||
|
||||
int extraBits2 = 0x00;
|
||||
if ((val1 & 0x80) == 0x80)
|
||||
{
|
||||
// Save the top 4 bits to output with debug info
|
||||
// The top bit means this is a 12 bit value, but I don't know what the next 3 bits mean.
|
||||
// In all the files I've checked, extraBits2 is the same as extraBits1.
|
||||
extraBits2 = val1 & 0x70;
|
||||
|
||||
// This is a 12-bit int. Allows for needle movement
|
||||
// of up to +2047 or -2048.
|
||||
// Read in the next byte to get the full value
|
||||
val2 = fileIn.ReadByte();
|
||||
deltaY = Get12Bit2sComplement(val1, val2);
|
||||
|
||||
yMoveBits = Stitch.MoveBitSize.TwelveBits;
|
||||
}
|
||||
else
|
||||
{
|
||||
// This is a 7-bit int. Allows for needle movement
|
||||
// of up to +63 or -64.
|
||||
deltaY = Get7Bit2sComplement(val1);
|
||||
|
||||
yMoveBits = Stitch.MoveBitSize.SevenBits;
|
||||
// Finished reading data for this stitch, no more
|
||||
// bytes needed.
|
||||
}
|
||||
|
||||
Stitch.StitchType stitchType;
|
||||
if (deltaX == 0 && deltaY == 0)
|
||||
{
|
||||
// A stitch with zero movement seems to indicate the current and next stitches are movement only.
|
||||
// Almost always occurs at the end of a block.
|
||||
stitchType = Stitch.StitchType.MovementBeginAnchor;
|
||||
}
|
||||
else if (extraBits1 == 0x20 && extraBits2 == 0x20)
|
||||
{
|
||||
// A stitch with extrabits 0x20 seems to indicate the current and next stitches are movement only.
|
||||
// Almost always occurs within a block, not the beginning or end.
|
||||
stitchType = Stitch.StitchType.MovementOnly;
|
||||
}
|
||||
else if (extraBits1 == 0x10 && extraBits2 == 0x10)
|
||||
{
|
||||
// A stitch with extrabits 0x10 seems to indicate the current stitch is movement only.
|
||||
// Almost always occurs at the beginning of a block.
|
||||
stitchType = Stitch.StitchType.MovementEndAnchor;
|
||||
}
|
||||
else if (prevStitch != null &&
|
||||
(prevStitch.stitchType == Stitch.StitchType.MovementOnly ||
|
||||
prevStitch.stitchType == Stitch.StitchType.MovementBeginAnchor))
|
||||
{
|
||||
stitchType = Stitch.StitchType.MovementEndAnchor;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (firstStitchOfBlock)
|
||||
{
|
||||
// First stitch of block is usually a movement to position the needle in the block
|
||||
firstStitchOfBlock = false;
|
||||
stitchType = Stitch.StitchType.MovementEndAnchor;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Assume everything else is a normal stitch
|
||||
stitchType = Stitch.StitchType.NormalStitch;
|
||||
}
|
||||
}
|
||||
|
||||
// Add stitch to list
|
||||
prevStitch = new Stitch(
|
||||
new Point(prevX, prevY),
|
||||
new Point(prevX + deltaX, prevY + deltaY),
|
||||
extraBits1,
|
||||
extraBits2,
|
||||
xMoveBits,
|
||||
yMoveBits,
|
||||
stitchType
|
||||
);
|
||||
tempStitches.Add(prevStitch);
|
||||
|
||||
// Calculate new "previous" position
|
||||
prevX = prevX + deltaX;
|
||||
prevY = prevY + deltaY;
|
||||
|
||||
// Update maximum distances
|
||||
if (prevX > maxX)
|
||||
{
|
||||
maxX = prevX;
|
||||
}
|
||||
else if (prevX < minX)
|
||||
{
|
||||
minX = prevX;
|
||||
}
|
||||
|
||||
if (prevY > maxY)
|
||||
{
|
||||
maxY = prevY;
|
||||
}
|
||||
else if (prevY < minY)
|
||||
{
|
||||
minY = prevY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
imageWidth = maxX - minX;
|
||||
imageHeight = maxY - minY;
|
||||
translateStart.X = -minX;
|
||||
translateStart.Y = -minY;
|
||||
readyStatus = statusEnum.Ready;
|
||||
|
||||
// Close the file
|
||||
fileIn.Close();
|
||||
|
||||
#if !DEBUG
|
||||
}
|
||||
catch (System.IO.IOException ioex)
|
||||
{
|
||||
readyStatus = statusEnum.IOError;
|
||||
lastError = ioex.Message;
|
||||
if (fileIn != null)
|
||||
{
|
||||
fileIn.Close();
|
||||
imageWidth = maxX - minX;
|
||||
imageHeight = maxY - minY;
|
||||
translateStart.X = -minX;
|
||||
translateStart.Y = -minY;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
readyStatus = statusEnum.ParseError;
|
||||
lastError = ex.Message;
|
||||
if (fileIn != null)
|
||||
{
|
||||
fileIn.Close();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public int GetWidth()
|
||||
|
@ -331,23 +482,32 @@ namespace PesFile
|
|||
}
|
||||
}
|
||||
|
||||
public string GetInternalDesignName()
|
||||
{
|
||||
return designName;
|
||||
}
|
||||
|
||||
// Returns the path of the file it saved debug info to
|
||||
public string saveDebugInfo()
|
||||
public string SaveDebugInfo()
|
||||
{
|
||||
string retval = System.IO.Path.ChangeExtension(_filename, ".txt");
|
||||
System.IO.StreamWriter outfile = new System.IO.StreamWriter(retval);
|
||||
outfile.Write(getDebugInfo());
|
||||
outfile.Close();
|
||||
using (System.IO.StreamWriter outfile = new System.IO.StreamWriter(retval))
|
||||
{
|
||||
outfile.Write(GetDebugInfo());
|
||||
outfile.Close();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
public string getDebugInfo()
|
||||
public string GetDebugInfo()
|
||||
{
|
||||
System.IO.StringWriter outfile = new System.IO.StringWriter();
|
||||
outfile.WriteLine("PES header");
|
||||
outfile.WriteLine(_filename);
|
||||
outfile.WriteLine("PES version:\t" + pesVersion);
|
||||
outfile.WriteLine("Internal name:\t" + designName);
|
||||
outfile.WriteLine("Format warning:\t" + formatWarning);
|
||||
outfile.WriteLine("Color warning:\t" + colorWarning);
|
||||
|
||||
outfile.WriteLine("stitches start: " + startStitches.ToString());
|
||||
outfile.WriteLine("block info");
|
||||
outfile.WriteLine("number\tcolor\tstitches");
|
||||
for (int i = 0; i < this.blocks.Count; i++)
|
||||
|
@ -355,49 +515,71 @@ namespace PesFile
|
|||
outfile.WriteLine((i + 1).ToString() + "\t" + blocks[i].colorIndex.ToString() + "\t" + blocks[i].stitchesTotal.ToString());
|
||||
}
|
||||
outfile.WriteLine("color table");
|
||||
outfile.WriteLine("number\ta\tb");
|
||||
for (int i = 0; i < colorTable.Count; i++)
|
||||
outfile.WriteLine("block number\tcolor");
|
||||
for (int i = 0; i < colorList.Length; i++)
|
||||
{
|
||||
outfile.WriteLine((i + 1).ToString() + "\t" + colorTable[i].Item1.ToString() + ", " + colorTable[i].Item2.ToString());
|
||||
outfile.WriteLine((i + 1).ToString() + "\t" + colorList[i]);
|
||||
}
|
||||
if (blocks.Count > 0)
|
||||
{
|
||||
outfile.WriteLine("Extended stitch debug info");
|
||||
for (int blocky = 0; blocky < blocks.Count; blocky++)
|
||||
int blockCount = 1;
|
||||
foreach(StitchBlock thisBlock in blocks)
|
||||
{
|
||||
outfile.WriteLine("block " + (blocky + 1).ToString() + " start");
|
||||
outfile.WriteLine("unknown start byte: " + blocks[blocky].unknownStartByte.ToString("X2"));
|
||||
for (int stitchy = 0; stitchy < blocks[blocky].stitches.Length; stitchy++)
|
||||
outfile.WriteLine("block " + blockCount.ToString() + " start (color index " + thisBlock.colorIndex + ")");
|
||||
outfile.WriteLine("unknown start byte: " + thisBlock.unknownStartByte.ToString("X2"));
|
||||
foreach (Stitch thisStitch in thisBlock.stitches)
|
||||
{
|
||||
outfile.WriteLine(blocks[blocky].stitches[stitchy].a.ToString() + " - " + blocks[blocky].stitches[stitchy].b.ToString());
|
||||
string tempLine = thisStitch.a.ToString() + " - " + thisStitch.b.ToString() + ", length " + thisStitch.CalcLength().ToString("F02");
|
||||
if (thisStitch.extraBits1 != 0x00)
|
||||
{
|
||||
tempLine += " (extra bits 1: " + thisStitch.extraBits1.ToString("X2") + ")";
|
||||
}
|
||||
if (thisStitch.extraBits2 != 0x00)
|
||||
{
|
||||
tempLine += " (extra bits 2: " + thisStitch.extraBits2.ToString("X2") + ")";
|
||||
}
|
||||
|
||||
if(thisStitch.XMoveBits == Stitch.MoveBitSize.SevenBits)
|
||||
{
|
||||
tempLine += " (7 bit X move)";
|
||||
}
|
||||
else if(thisStitch.XMoveBits == Stitch.MoveBitSize.TwelveBits)
|
||||
{
|
||||
tempLine += " (12 bit X move)";
|
||||
}
|
||||
|
||||
if (thisStitch.YMoveBits == Stitch.MoveBitSize.SevenBits)
|
||||
{
|
||||
tempLine += " (7 bit Y move)";
|
||||
}
|
||||
else if (thisStitch.YMoveBits == Stitch.MoveBitSize.TwelveBits)
|
||||
{
|
||||
tempLine += " (12 bit Y move)";
|
||||
}
|
||||
|
||||
tempLine += " (type " + thisStitch.stitchType + ")";
|
||||
|
||||
outfile.WriteLine(tempLine);
|
||||
}
|
||||
blockCount++;
|
||||
}
|
||||
}
|
||||
outfile.Close();
|
||||
return outfile.ToString();
|
||||
}
|
||||
|
||||
public statusEnum getStatus()
|
||||
{
|
||||
return readyStatus;
|
||||
}
|
||||
|
||||
public string getLastError()
|
||||
{
|
||||
return lastError;
|
||||
}
|
||||
|
||||
public bool getColorWarning()
|
||||
public bool GetColorWarning()
|
||||
{
|
||||
return colorWarning;
|
||||
}
|
||||
|
||||
public bool getFormatWarning()
|
||||
public bool GetFormatWarning()
|
||||
{
|
||||
return formatWarning;
|
||||
}
|
||||
|
||||
private Color getColorFromIndex(int index)
|
||||
private Color GetColorFromIndex(int index)
|
||||
{
|
||||
if(index >= 1 && index <= 64)
|
||||
{
|
||||
|
@ -414,16 +596,116 @@ namespace PesFile
|
|||
}
|
||||
}
|
||||
|
||||
public Bitmap designToBitmap(Single threadThickness, bool filterUglyStitches, double filterUglyStitchesThreshold, float scale)
|
||||
struct OptimizedBlockData
|
||||
{
|
||||
Bitmap DrawArea;
|
||||
Graphics xGraph;
|
||||
public Color color;
|
||||
public Point [] points;
|
||||
|
||||
public OptimizedBlockData(Color color, Point [] points)
|
||||
{
|
||||
this.color = color;
|
||||
this.points = points;
|
||||
}
|
||||
}
|
||||
|
||||
private List<OptimizedBlockData> GetOptimizedDrawData(StitchBlock block, float scale, bool filterUglyStitches, double filterUglyStitchesThreshold)
|
||||
{
|
||||
List<OptimizedBlockData> retval = new List<OptimizedBlockData>();
|
||||
|
||||
// Skip this block if it doesn't have stitches, for any reason
|
||||
if (block.stitches.Length == 0)
|
||||
{
|
||||
return retval;
|
||||
}
|
||||
|
||||
// Start first block
|
||||
List<Point> currentPoints = new List<Point>();
|
||||
|
||||
foreach (Stitch thisStitch in block.stitches)
|
||||
{
|
||||
if (filterUglyStitches && // Check for filter ugly stitches option
|
||||
!formatWarning && // Only filter stitches if we think we understand the format
|
||||
thisStitch.CalcLength() > filterUglyStitchesThreshold) // Check stitch length
|
||||
{
|
||||
// This stitch is too long, so skip it and start a new block
|
||||
if (currentPoints.Count != 0)
|
||||
{
|
||||
retval.Add(new OptimizedBlockData(block.color, currentPoints.ToArray()));
|
||||
}
|
||||
currentPoints = new List<Point>();
|
||||
continue;
|
||||
}
|
||||
|
||||
// Style special stitches differently
|
||||
// TODO: Finish figuring out the remaining stitch types
|
||||
if (filterUglyStitches && (thisStitch.stitchType == Stitch.StitchType.MovementBeginAnchor ||
|
||||
thisStitch.stitchType == Stitch.StitchType.MovementOnly ||
|
||||
thisStitch.stitchType == Stitch.StitchType.MovementEndAnchor))
|
||||
{
|
||||
// Skip these stitch types, and start a new block
|
||||
if (currentPoints.Count != 0)
|
||||
{
|
||||
retval.Add(new OptimizedBlockData(block.color, currentPoints.ToArray()));
|
||||
}
|
||||
currentPoints = new List<Point>();
|
||||
continue;
|
||||
}
|
||||
|
||||
if(currentPoints.Count == 0)
|
||||
{
|
||||
// If this is the first point in this optimized block, we'll need the previous point to form a line
|
||||
currentPoints.Add(new Point((int)(thisStitch.a.X * scale), (int)(thisStitch.a.Y * scale)));
|
||||
}
|
||||
currentPoints.Add(new Point((int)(thisStitch.b.X * scale), (int)(thisStitch.b.Y * scale)));
|
||||
}
|
||||
|
||||
if(currentPoints.Count != 0)
|
||||
{
|
||||
retval.Add(new OptimizedBlockData(block.color, currentPoints.ToArray()));
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
// When scale is 1.0, each pixel appears to be 0.1mm, or about 254 ppi
|
||||
public Bitmap DesignToBitmap(Single threadThickness, bool filterUglyStitches, double filterUglyStitchesThreshold, float scale)
|
||||
{
|
||||
// Do some basic input checks
|
||||
if(scale < 0.0000001f)
|
||||
{
|
||||
throw new ArgumentException("Scale must be > 0");
|
||||
}
|
||||
if(filterUglyStitchesThreshold < 1.0)
|
||||
{
|
||||
throw new ArgumentException("Filter ungly stitches threshold must be at least 1.0");
|
||||
}
|
||||
if(threadThickness < 0.1)
|
||||
{
|
||||
throw new ArgumentException("Thread thickness must be at least 0.1");
|
||||
}
|
||||
|
||||
int imageWidth = (int)((GetWidth() + (threadThickness * 2)) * scale);
|
||||
int imageHeight = (int)((GetHeight() + (threadThickness * 2)) * scale);
|
||||
float tempThreadThickness = threadThickness * scale;
|
||||
// This assumes the image format will use 4 bytes per pixel
|
||||
UInt64 imageRequiredRam = (UInt64)(imageHeight * imageWidth * 4);
|
||||
|
||||
DrawArea = new Bitmap(imageWidth, imageHeight);
|
||||
using (xGraph = Graphics.FromImage(DrawArea))
|
||||
// Check for a bitmap that might be too large.
|
||||
// Apparently, there is a 2GB (minus a little overhead) limit for objects on the GC heap in
|
||||
// .Net, even when using a 64 bit framework. More detail at:
|
||||
// https://blogs.msdn.microsoft.com/joshwil/2005/08/10/bigarrayt-getting-around-the-2gb-array-size-limit/
|
||||
if(imageRequiredRam > (Int32.MaxValue - 1024))
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("Generated image would be too large (" + imageWidth + "x" + imageHeight + ", " + imageRequiredRam + " bytes)");
|
||||
}
|
||||
Bitmap DrawArea = new Bitmap(imageWidth, imageHeight);
|
||||
// Return now if for any reason there aren't any blocks
|
||||
if(blocks.Count == 0)
|
||||
{
|
||||
return DrawArea;
|
||||
}
|
||||
|
||||
using (Graphics xGraph = Graphics.FromImage(DrawArea))
|
||||
{
|
||||
int translateX = (int)(translateStart.X * scale);
|
||||
int translateY = (int)(translateStart.Y * scale);
|
||||
|
@ -432,28 +714,32 @@ namespace PesFile
|
|||
// Draw smoother lines
|
||||
xGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||||
|
||||
for (int i = 0; i < blocks.Count; i++)
|
||||
// Only use one pen - I think this will be more resource friendly than creating a new pen for each block
|
||||
using (Pen tempPen = new Pen(blocks[0].color, tempThreadThickness))
|
||||
{
|
||||
using (Pen tempPen = new Pen(blocks[i].color, tempThreadThickness))
|
||||
{
|
||||
tempPen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
|
||||
tempPen.EndCap = System.Drawing.Drawing2D.LineCap.Round;
|
||||
tempPen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
|
||||
// Set rounded ends and joints
|
||||
tempPen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
|
||||
tempPen.EndCap = System.Drawing.Drawing2D.LineCap.Round;
|
||||
tempPen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
|
||||
|
||||
foreach (Stitch thisStitch in blocks[i].stitches)
|
||||
{
|
||||
if (filterUglyStitches && // Check for filter ugly stitches option
|
||||
!formatWarning && // Only filter stitches if we think we understand the format
|
||||
thisStitch.calcLength() > filterUglyStitchesThreshold) // Check stitch length
|
||||
{
|
||||
// This stitch is too long, so skip it
|
||||
continue;
|
||||
}
|
||||
Point tempA = new Point((int)(thisStitch.a.X * scale), (int)(thisStitch.a.Y * scale));
|
||||
Point tempB = new Point((int)(thisStitch.b.X * scale), (int)(thisStitch.b.Y * scale));
|
||||
xGraph.DrawLine(tempPen, tempA, tempB);
|
||||
}
|
||||
// List to build up draw-optimized data
|
||||
List<OptimizedBlockData> optimizedBlocks = new List<OptimizedBlockData>();
|
||||
|
||||
// Get optimized data
|
||||
foreach(StitchBlock thisBlock in blocks)
|
||||
{
|
||||
optimizedBlocks.AddRange(GetOptimizedDrawData(thisBlock, scale, filterUglyStitches, filterUglyStitchesThreshold));
|
||||
}
|
||||
|
||||
// Draw using optimized data
|
||||
foreach(OptimizedBlockData optBlock in optimizedBlocks)
|
||||
{
|
||||
tempPen.Color = optBlock.color;
|
||||
xGraph.DrawLines(tempPen, optBlock.points);
|
||||
}
|
||||
|
||||
// Done with optimized data
|
||||
optimizedBlocks = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("PesFile")]
|
||||
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2016")]
|
||||
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2019")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
@ -55,5 +55,5 @@ using System.Runtime.InteropServices;
|
|||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("1.2.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.2.0.0")]
|
||||
[assembly: AssemblyVersion("1.5.4.0")]
|
||||
[assembly: AssemblyFileVersion("1.5.4.0")]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Embroidery Reader - an application to view .pes embroidery designs
|
||||
|
||||
Copyright (C) 2016 Nathan Crawford
|
||||
Copyright (C) 2019 Nathan Crawford
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
@ -23,17 +23,37 @@ You can contact me at http://www.njcrawford.com/contact/.
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
|
||||
namespace PesFile
|
||||
{
|
||||
public class Stitch
|
||||
{
|
||||
public enum MoveBitSize
|
||||
{
|
||||
Unknown,
|
||||
SevenBits,
|
||||
TwelveBits
|
||||
};
|
||||
|
||||
public enum StitchType
|
||||
{
|
||||
Unknown,
|
||||
NormalStitch,
|
||||
MovementBeginAnchor,
|
||||
MovementEndAnchor,
|
||||
MovementOnly
|
||||
}
|
||||
|
||||
public Point a;
|
||||
public Point b;
|
||||
// Extra bits to output with debug info
|
||||
public int extraBits1;
|
||||
public int extraBits2;
|
||||
// Was this stitch represented as 7 bit move or 12 bit move in the file
|
||||
public MoveBitSize XMoveBits;
|
||||
public MoveBitSize YMoveBits;
|
||||
public StitchType stitchType;
|
||||
|
||||
public Stitch(Point pointA, Point pointB)
|
||||
{
|
||||
|
@ -41,7 +61,18 @@ namespace PesFile
|
|||
this.b = pointB;
|
||||
}
|
||||
|
||||
public double calcLength()
|
||||
public Stitch(Point pointA, Point pointB, int extraBits1, int extraBits2, MoveBitSize XMoveBits, MoveBitSize YMoveBits, StitchType stitchType)
|
||||
{
|
||||
this.a = pointA;
|
||||
this.b = pointB;
|
||||
this.extraBits1 = extraBits1;
|
||||
this.extraBits2 = extraBits2;
|
||||
this.XMoveBits = XMoveBits;
|
||||
this.YMoveBits = YMoveBits;
|
||||
this.stitchType = stitchType;
|
||||
}
|
||||
|
||||
public double CalcLength()
|
||||
{
|
||||
double diffx = Math.Abs(a.X - b.X);
|
||||
double diffy = Math.Abs(a.Y - b.Y);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Embroidery Reader - an application to view .pes embroidery designs
|
||||
|
||||
Copyright (C) 2016 Nathan Crawford
|
||||
Copyright (C) 2019 Nathan Crawford
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
@ -23,9 +23,6 @@ You can contact me at http://www.njcrawford.com/contact/.
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
|
||||
namespace PesFile
|
||||
|
@ -39,7 +36,7 @@ namespace PesFile
|
|||
public byte unknownStartByte;
|
||||
public StitchBlock()
|
||||
{
|
||||
color = System.Drawing.Color.Black;
|
||||
color = Color.Black;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Embroidery Reader - an application to view .pes embroidery designs
|
||||
|
||||
Copyright (C) 2016 Nathan Crawford
|
||||
Copyright (C) 2018 Nathan Crawford
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
@ -23,8 +23,6 @@ You can contact me at http://www.njcrawford.com/contact/.
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace TranslationBuilder
|
||||
|
|
|
@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("TranslationBuilder")]
|
||||
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2016")]
|
||||
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
|
|
@ -0,0 +1,343 @@
|
|||
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
|
||||
{\*\generator Riched20 10.0.10586}\viewkind4\uc1
|
||||
\pard\sa200\sl276\slmult1\f0\fs22\lang9\tab\tab GNU GENERAL PUBLIC LICENSE\par
|
||||
\tab\tab Version 2, June 1991\par
|
||||
\par
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\par
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par
|
||||
Everyone is permitted to copy and distribute verbatim copies\par
|
||||
of this license document, but changing it is not allowed.\par
|
||||
\par
|
||||
\tab\tab\tab Preamble\par
|
||||
\par
|
||||
The licenses for most software are designed to take away your\par
|
||||
freedom to share and change it. By contrast, the GNU General Public\par
|
||||
License is intended to guarantee your freedom to share and change free\par
|
||||
software--to make sure the software is free for all its users. This\par
|
||||
General Public License applies to most of the Free Software\par
|
||||
Foundation's software and to any other program whose authors commit to\par
|
||||
using it. (Some other Free Software Foundation software is covered by\par
|
||||
the GNU Lesser General Public License instead.) You can apply it to\par
|
||||
your programs, too.\par
|
||||
\par
|
||||
When we speak of free software, we are referring to freedom, not\par
|
||||
price. Our General Public Licenses are designed to make sure that you\par
|
||||
have the freedom to distribute copies of free software (and charge for\par
|
||||
this service if you wish), that you receive source code or can get it\par
|
||||
if you want it, that you can change the software or use pieces of it\par
|
||||
in new free programs; and that you know you can do these things.\par
|
||||
\par
|
||||
To protect your rights, we need to make restrictions that forbid\par
|
||||
anyone to deny you these rights or to ask you to surrender the rights.\par
|
||||
These restrictions translate to certain responsibilities for you if you\par
|
||||
distribute copies of the software, or if you modify it.\par
|
||||
\par
|
||||
For example, if you distribute copies of such a program, whether\par
|
||||
gratis or for a fee, you must give the recipients all the rights that\par
|
||||
you have. You must make sure that they, too, receive or can get the\par
|
||||
source code. And you must show them these terms so they know their\par
|
||||
rights.\par
|
||||
\par
|
||||
We protect your rights with two steps: (1) copyright the software, and\par
|
||||
(2) offer you this license which gives you legal permission to copy,\par
|
||||
distribute and/or modify the software.\par
|
||||
\par
|
||||
Also, for each author's protection and ours, we want to make certain\par
|
||||
that everyone understands that there is no warranty for this free\par
|
||||
software. If the software is modified by someone else and passed on, we\par
|
||||
want its recipients to know that what they have is not the original, so\par
|
||||
that any problems introduced by others will not reflect on the original\par
|
||||
authors' reputations.\par
|
||||
\par
|
||||
Finally, any free program is threatened constantly by software\par
|
||||
patents. We wish to avoid the danger that redistributors of a free\par
|
||||
program will individually obtain patent licenses, in effect making the\par
|
||||
program proprietary. To prevent this, we have made it clear that any\par
|
||||
patent must be licensed for everyone's free use or not licensed at all.\par
|
||||
\par
|
||||
The precise terms and conditions for copying, distribution and\par
|
||||
modification follow.\par
|
||||
\par
|
||||
\tab\tab GNU GENERAL PUBLIC LICENSE\par
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par
|
||||
\par
|
||||
0. This License applies to any program or other work which contains\par
|
||||
a notice placed by the copyright holder saying it may be distributed\par
|
||||
under the terms of this General Public License. The "Program", below,\par
|
||||
refers to any such program or work, and a "work based on the Program"\par
|
||||
means either the Program or any derivative work under copyright law:\par
|
||||
that is to say, a work containing the Program or a portion of it,\par
|
||||
either verbatim or with modifications and/or translated into another\par
|
||||
language. (Hereinafter, translation is included without limitation in\par
|
||||
the term "modification".) Each licensee is addressed as "you".\par
|
||||
\par
|
||||
Activities other than copying, distribution and modification are not\par
|
||||
covered by this License; they are outside its scope. The act of\par
|
||||
running the Program is not restricted, and the output from the Program\par
|
||||
is covered only if its contents constitute a work based on the\par
|
||||
Program (independent of having been made by running the Program).\par
|
||||
Whether that is true depends on what the Program does.\par
|
||||
\par
|
||||
1. You may copy and distribute verbatim copies of the Program's\par
|
||||
source code as you receive it, in any medium, provided that you\par
|
||||
conspicuously and appropriately publish on each copy an appropriate\par
|
||||
copyright notice and disclaimer of warranty; keep intact all the\par
|
||||
notices that refer to this License and to the absence of any warranty;\par
|
||||
and give any other recipients of the Program a copy of this License\par
|
||||
along with the Program.\par
|
||||
\par
|
||||
You may charge a fee for the physical act of transferring a copy, and\par
|
||||
you may at your option offer warranty protection in exchange for a fee.\par
|
||||
\par
|
||||
2. You may modify your copy or copies of the Program or any portion\par
|
||||
of it, thus forming a work based on the Program, and copy and\par
|
||||
distribute such modifications or work under the terms of Section 1\par
|
||||
above, provided that you also meet all of these conditions:\par
|
||||
\par
|
||||
a) You must cause the modified files to carry prominent notices\par
|
||||
stating that you changed the files and the date of any change.\par
|
||||
\par
|
||||
b) You must cause any work that you distribute or publish, that in\par
|
||||
whole or in part contains or is derived from the Program or any\par
|
||||
part thereof, to be licensed as a whole at no charge to all third\par
|
||||
parties under the terms of this License.\par
|
||||
\par
|
||||
c) If the modified program normally reads commands interactively\par
|
||||
when run, you must cause it, when started running for such\par
|
||||
interactive use in the most ordinary way, to print or display an\par
|
||||
announcement including an appropriate copyright notice and a\par
|
||||
notice that there is no warranty (or else, saying that you provide\par
|
||||
a warranty) and that users may redistribute the program under\par
|
||||
these conditions, and telling the user how to view a copy of this\par
|
||||
License. (Exception: if the Program itself is interactive but\par
|
||||
does not normally print such an announcement, your work based on\par
|
||||
the Program is not required to print an announcement.)\par
|
||||
\par
|
||||
These requirements apply to the modified work as a whole. If\par
|
||||
identifiable sections of that work are not derived from the Program,\par
|
||||
and can be reasonably considered independent and separate works in\par
|
||||
themselves, then this License, and its terms, do not apply to those\par
|
||||
sections when you distribute them as separate works. But when you\par
|
||||
distribute the same sections as part of a whole which is a work based\par
|
||||
on the Program, the distribution of the whole must be on the terms of\par
|
||||
this License, whose permissions for other licensees extend to the\par
|
||||
entire whole, and thus to each and every part regardless of who wrote it.\par
|
||||
\par
|
||||
Thus, it is not the intent of this section to claim rights or contest\par
|
||||
your rights to work written entirely by you; rather, the intent is to\par
|
||||
exercise the right to control the distribution of derivative or\par
|
||||
collective works based on the Program.\par
|
||||
\par
|
||||
In addition, mere aggregation of another work not based on the Program\par
|
||||
with the Program (or with a work based on the Program) on a volume of\par
|
||||
a storage or distribution medium does not bring the other work under\par
|
||||
the scope of this License.\par
|
||||
\par
|
||||
3. You may copy and distribute the Program (or a work based on it,\par
|
||||
under Section 2) in object code or executable form under the terms of\par
|
||||
Sections 1 and 2 above provided that you also do one of the following:\par
|
||||
\par
|
||||
a) Accompany it with the complete corresponding machine-readable\par
|
||||
source code, which must be distributed under the terms of Sections\par
|
||||
1 and 2 above on a medium customarily used for software interchange; or,\par
|
||||
\par
|
||||
b) Accompany it with a written offer, valid for at least three\par
|
||||
years, to give any third party, for a charge no more than your\par
|
||||
cost of physically performing source distribution, a complete\par
|
||||
machine-readable copy of the corresponding source code, to be\par
|
||||
distributed under the terms of Sections 1 and 2 above on a medium\par
|
||||
customarily used for software interchange; or,\par
|
||||
\par
|
||||
c) Accompany it with the information you received as to the offer\par
|
||||
to distribute corresponding source code. (This alternative is\par
|
||||
allowed only for noncommercial distribution and only if you\par
|
||||
received the program in object code or executable form with such\par
|
||||
an offer, in accord with Subsection b above.)\par
|
||||
\par
|
||||
The source code for a work means the preferred form of the work for\par
|
||||
making modifications to it. For an executable work, complete source\par
|
||||
code means all the source code for all modules it contains, plus any\par
|
||||
associated interface definition files, plus the scripts used to\par
|
||||
control compilation and installation of the executable. However, as a\par
|
||||
special exception, the source code distributed need not include\par
|
||||
anything that is normally distributed (in either source or binary\par
|
||||
form) with the major components (compiler, kernel, and so on) of the\par
|
||||
operating system on which the executable runs, unless that component\par
|
||||
itself accompanies the executable.\par
|
||||
\par
|
||||
If distribution of executable or object code is made by offering\par
|
||||
access to copy from a designated place, then offering equivalent\par
|
||||
access to copy the source code from the same place counts as\par
|
||||
distribution of the source code, even though third parties are not\par
|
||||
compelled to copy the source along with the object code.\par
|
||||
\par
|
||||
4. You may not copy, modify, sublicense, or distribute the Program\par
|
||||
except as expressly provided under this License. Any attempt\par
|
||||
otherwise to copy, modify, sublicense or distribute the Program is\par
|
||||
void, and will automatically terminate your rights under this License.\par
|
||||
However, parties who have received copies, or rights, from you under\par
|
||||
this License will not have their licenses terminated so long as such\par
|
||||
parties remain in full compliance.\par
|
||||
\par
|
||||
5. You are not required to accept this License, since you have not\par
|
||||
signed it. However, nothing else grants you permission to modify or\par
|
||||
distribute the Program or its derivative works. These actions are\par
|
||||
prohibited by law if you do not accept this License. Therefore, by\par
|
||||
modifying or distributing the Program (or any work based on the\par
|
||||
Program), you indicate your acceptance of this License to do so, and\par
|
||||
all its terms and conditions for copying, distributing or modifying\par
|
||||
the Program or works based on it.\par
|
||||
\par
|
||||
6. Each time you redistribute the Program (or any work based on the\par
|
||||
Program), the recipient automatically receives a license from the\par
|
||||
original licensor to copy, distribute or modify the Program subject to\par
|
||||
these terms and conditions. You may not impose any further\par
|
||||
restrictions on the recipients' exercise of the rights granted herein.\par
|
||||
You are not responsible for enforcing compliance by third parties to\par
|
||||
this License.\par
|
||||
\par
|
||||
7. If, as a consequence of a court judgment or allegation of patent\par
|
||||
infringement or for any other reason (not limited to patent issues),\par
|
||||
conditions are imposed on you (whether by court order, agreement or\par
|
||||
otherwise) that contradict the conditions of this License, they do not\par
|
||||
excuse you from the conditions of this License. If you cannot\par
|
||||
distribute so as to satisfy simultaneously your obligations under this\par
|
||||
License and any other pertinent obligations, then as a consequence you\par
|
||||
may not distribute the Program at all. For example, if a patent\par
|
||||
license would not permit royalty-free redistribution of the Program by\par
|
||||
all those who receive copies directly or indirectly through you, then\par
|
||||
the only way you could satisfy both it and this License would be to\par
|
||||
refrain entirely from distribution of the Program.\par
|
||||
\par
|
||||
If any portion of this section is held invalid or unenforceable under\par
|
||||
any particular circumstance, the balance of the section is intended to\par
|
||||
apply and the section as a whole is intended to apply in other\par
|
||||
circumstances.\par
|
||||
\par
|
||||
It is not the purpose of this section to induce you to infringe any\par
|
||||
patents or other property right claims or to contest validity of any\par
|
||||
such claims; this section has the sole purpose of protecting the\par
|
||||
integrity of the free software distribution system, which is\par
|
||||
implemented by public license practices. Many people have made\par
|
||||
generous contributions to the wide range of software distributed\par
|
||||
through that system in reliance on consistent application of that\par
|
||||
system; it is up to the author/donor to decide if he or she is willing\par
|
||||
to distribute software through any other system and a licensee cannot\par
|
||||
impose that choice.\par
|
||||
\par
|
||||
This section is intended to make thoroughly clear what is believed to\par
|
||||
be a consequence of the rest of this License.\par
|
||||
\par
|
||||
8. If the distribution and/or use of the Program is restricted in\par
|
||||
certain countries either by patents or by copyrighted interfaces, the\par
|
||||
original copyright holder who places the Program under this License\par
|
||||
may add an explicit geographical distribution limitation excluding\par
|
||||
those countries, so that distribution is permitted only in or among\par
|
||||
countries not thus excluded. In such case, this License incorporates\par
|
||||
the limitation as if written in the body of this License.\par
|
||||
\par
|
||||
9. The Free Software Foundation may publish revised and/or new versions\par
|
||||
of the General Public License from time to time. Such new versions will\par
|
||||
be similar in spirit to the present version, but may differ in detail to\par
|
||||
address new problems or concerns.\par
|
||||
\par
|
||||
Each version is given a distinguishing version number. If the Program\par
|
||||
specifies a version number of this License which applies to it and "any\par
|
||||
later version", you have the option of following the terms and conditions\par
|
||||
either of that version or of any later version published by the Free\par
|
||||
Software Foundation. If the Program does not specify a version number of\par
|
||||
this License, you may choose any version ever published by the Free Software\par
|
||||
Foundation.\par
|
||||
\par
|
||||
10. If you wish to incorporate parts of the Program into other free\par
|
||||
programs whose distribution conditions are different, write to the author\par
|
||||
to ask for permission. For software which is copyrighted by the Free\par
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes\par
|
||||
make exceptions for this. Our decision will be guided by the two goals\par
|
||||
of preserving the free status of all derivatives of our free software and\par
|
||||
of promoting the sharing and reuse of software generally.\par
|
||||
\par
|
||||
\tab\tab\tab NO WARRANTY\par
|
||||
\par
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\par
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\par
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\par
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\par
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\par
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\par
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\par
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\par
|
||||
REPAIR OR CORRECTION.\par
|
||||
\par
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\par
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\par
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\par
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\par
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\par
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\par
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\par
|
||||
POSSIBILITY OF SUCH DAMAGES.\par
|
||||
\par
|
||||
\tab\tab END OF TERMS AND CONDITIONS\par
|
||||
\par
|
||||
\tab How to Apply These Terms to Your New Programs\par
|
||||
\par
|
||||
If you develop a new program, and you want it to be of the greatest\par
|
||||
possible use to the public, the best way to achieve this is to make it\par
|
||||
free software which everyone can redistribute and change under these terms.\par
|
||||
\par
|
||||
To do so, attach the following notices to the program. It is safest\par
|
||||
to attach them to the start of each source file to most effectively\par
|
||||
convey the exclusion of warranty; and each file should have at least\par
|
||||
the "copyright" line and a pointer to where the full notice is found.\par
|
||||
\par
|
||||
<one line to give the program's name and a brief idea of what it does.>\par
|
||||
Copyright (C) <year> <name of author>\par
|
||||
\par
|
||||
This program is free software; you can redistribute it and/or modify\par
|
||||
it under the terms of the GNU General Public License as published by\par
|
||||
the Free Software Foundation; either version 2 of the License, or\par
|
||||
(at your option) any later version.\par
|
||||
\par
|
||||
This program is distributed in the hope that it will be useful,\par
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of\par
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par
|
||||
GNU General Public License for more details.\par
|
||||
\par
|
||||
You should have received a copy of the GNU General Public License along\par
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,\par
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par
|
||||
\par
|
||||
Also add information on how to contact you by electronic and paper mail.\par
|
||||
\par
|
||||
If the program is interactive, make it output a short notice like this\par
|
||||
when it starts in an interactive mode:\par
|
||||
\par
|
||||
Gnomovision version 69, Copyright (C) year name of author\par
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par
|
||||
This is free software, and you are welcome to redistribute it\par
|
||||
under certain conditions; type `show c' for details.\par
|
||||
\par
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate\par
|
||||
parts of the General Public License. Of course, the commands you use may\par
|
||||
be called something other than `show w' and `show c'; they could even be\par
|
||||
mouse-clicks or menu items--whatever suits your program.\par
|
||||
\par
|
||||
You should also get your employer (if you work as a programmer) or your\par
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if\par
|
||||
necessary. Here is a sample; alter the names:\par
|
||||
\par
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.\par
|
||||
\par
|
||||
<signature of Ty Coon>, 1 April 1989\par
|
||||
Ty Coon, President of Vice\par
|
||||
\par
|
||||
This General Public License does not permit incorporating your program into\par
|
||||
proprietary programs. If your program is a subroutine library, you may\par
|
||||
consider it more useful to permit linking proprietary applications with the\par
|
||||
library. If this is what you want to do, use the GNU Lesser General\par
|
||||
Public License instead of this License.\par
|
||||
}
|
||||
|