From bbc4200bdcbb5fae39b78c8f01ebd2dc66776459 Mon Sep 17 00:00:00 2001
From: rrt <unknown>
Date: Thu, 9 Nov 2000 11:37:25 +0000
Subject: [PATCH] [project @ 2000-11-09 11:37:24 by rrt] Add more bits of
 InstallShield setup

---
 .../Registry Entries/Default.rge              |   6 +
 ghc/InstallShield/Script Files/Setup.Inx      | Bin 0 -> 3931 bytes
 ghc/InstallShield/Script Files/Setup.Obs      | Bin 0 -> 132 bytes
 ghc/InstallShield/Script Files/Setup.dbg      | Bin 0 -> 2960 bytes
 ghc/InstallShield/Script Files/Setup.ino      | Bin 0 -> 4350 bytes
 ghc/InstallShield/Script Files/Setup.ins      | Bin 0 -> 5413 bytes
 ghc/InstallShield/Script Files/Setup.map      | 574 +++++++++++
 ghc/InstallShield/Script Files/setup.rul      | 950 ++++++++++++++++++
 8 files changed, 1530 insertions(+)
 create mode 100644 ghc/InstallShield/Registry Entries/Default.rge
 create mode 100644 ghc/InstallShield/Script Files/Setup.Inx
 create mode 100644 ghc/InstallShield/Script Files/Setup.Obs
 create mode 100644 ghc/InstallShield/Script Files/Setup.dbg
 create mode 100644 ghc/InstallShield/Script Files/Setup.ino
 create mode 100644 ghc/InstallShield/Script Files/Setup.ins
 create mode 100644 ghc/InstallShield/Script Files/Setup.map
 create mode 100644 ghc/InstallShield/Script Files/setup.rul

diff --git a/ghc/InstallShield/Registry Entries/Default.rge b/ghc/InstallShield/Registry Entries/Default.rge
new file mode 100644
index 000000000000..f73a93c2a4ce
--- /dev/null
+++ b/ghc/InstallShield/Registry Entries/Default.rge	
@@ -0,0 +1,6 @@
+[Data]
+
+[General]
+Type=REGISTRYDATA
+Version=2.10.000
+
diff --git a/ghc/InstallShield/Script Files/Setup.Inx b/ghc/InstallShield/Script Files/Setup.Inx
new file mode 100644
index 0000000000000000000000000000000000000000..4aef7fa61890db98d0603055809868953d3db9e5
GIT binary patch
literal 3931
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
T*J-S9r`^xs6Uxu((~<lix}Mn!

literal 0
HcmV?d00001

diff --git a/ghc/InstallShield/Script Files/Setup.Obs b/ghc/InstallShield/Script Files/Setup.Obs
new file mode 100644
index 0000000000000000000000000000000000000000..53425bdaea05d6c43492690f1d520020266dd080
GIT binary patch
literal 132
zcmeb9|9rB{SkKZ@&%nTlfq}s}zo4=xGd-h3K_gjH!O+suKo>|@Dg>8g7Ug8-r7MJ_
zCTHa3=j5knrWWfc_>`pRDLCfjC<KA@6e|R!7N-`KrKacsje-EiB!-zx3=E7wo{10x
WgA<b=gAGUqC?KT5z;HvEfdK%}cpp>%

literal 0
HcmV?d00001

diff --git a/ghc/InstallShield/Script Files/Setup.dbg b/ghc/InstallShield/Script Files/Setup.dbg
new file mode 100644
index 0000000000000000000000000000000000000000..7c868708780ecd184a0518d8146f4da26746fd63
GIT binary patch
literal 2960
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

literal 0
HcmV?d00001

diff --git a/ghc/InstallShield/Script Files/Setup.ino b/ghc/InstallShield/Script Files/Setup.ino
new file mode 100644
index 0000000000000000000000000000000000000000..421984ed6b5001db1cc9545841618d4d07eba8e9
GIT binary patch
literal 4350
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
O`0X;1y2SM4u>A|t5q${&

literal 0
HcmV?d00001

diff --git a/ghc/InstallShield/Script Files/Setup.ins b/ghc/InstallShield/Script Files/Setup.ins
new file mode 100644
index 0000000000000000000000000000000000000000..156a8eecdce2e457a3dd33a360f8dafcb46b4959
GIT binary patch
literal 5413
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
GRR0T)fJ!g`

literal 0
HcmV?d00001

diff --git a/ghc/InstallShield/Script Files/Setup.map b/ghc/InstallShield/Script Files/Setup.map
new file mode 100644
index 000000000000..3039284bcd2d
--- /dev/null
+++ b/ghc/InstallShield/Script Files/Setup.map	
@@ -0,0 +1,574 @@
+***** External Functions *****
+1    CloseFile                                          isrt.obl(Files.obs)
+2    CmdGetHwndDlg                                      isrt.obl(CustomDlg.obs)
+3    CommitSharedFiles                                  isrt.obl(Misc.obs)
+4    ComponentCompareSizeRequired                       isrt.obl(component.obs)
+5    ComponentError                                     isrt.obl(component.obs)
+6    ComponentErrorInfo                                 isrt.obl(component.obs)
+7    ComponentFilterLanguage                            isrt.obl(component.obs)
+8    ComponentFilterOS                                  isrt.obl(component.obs)
+9    ComponentGetData                                   isrt.obl(component.obs)
+10   ComponentGetTotalCost                              isrt.obl(component.obs)
+11   ComponentIsItemSelected                            isrt.obl(component.obs)
+12   ComponentListItems                                 isrt.obl(component.obs)
+13   ComponentMoveData                                  isrt.obl(component.obs)
+14   ComponentReinstall                                 isrt.obl(component.obs)
+15   ComponentRemoveAll                                 isrt.obl(component.obs)
+16   ComponentSaveTarget                                isrt.obl(component.obs)
+17   ComponentSelectItem                                isrt.obl(component.obs)
+18   ComponentSetTarget                                 isrt.obl(component.obs)
+19   ComponentSetupTypeSet                              isrt.obl(component.obs)
+20   ComponentTransferData                              isrt.obl(component.obs)
+21   ComponentTreeInit                                  isrt.obl(Dialogs.obs)
+22   ComponentViewCreate                                isrt.obl(CmptView.obs)
+23   CopyFile                                           isrt.obl(Files.obs)
+24   CreateDir                                          isrt.obl(Files.obs)
+25   CreateFile                                         isrt.obl(Files.obs)
+26   CreateInstallationInfo                             isrt.obl(Registry.obs)
+27   CreateRegistrySet                                  isrt.obl(component.obs)
+28   CreateShellObjects                                 isrt.obl(component.obs)
+29   CtrlGetCurSel                                      isrt.obl(CustomDlg.obs)
+30   CtrlGetNotificationCode                            isrt.obl(CustomDlg.obs)
+31   CtrlGetState                                       isrt.obl(CustomDlg.obs)
+32   CtrlGetText                                        isrt.obl(CustomDlg.obs)
+33   CtrlPGroups                                        isrt.obl(CustomDlg.obs)
+34   CtrlSelectText                                     isrt.obl(CustomDlg.obs)
+35   CtrlSetCurSel                                      isrt.obl(CustomDlg.obs)
+36   CtrlSetList                                        isrt.obl(CustomDlg.obs)
+37   CtrlSetMLEText                                     isrt.obl(CustomDlg.obs)
+38   CtrlSetState                                       isrt.obl(CustomDlg.obs)
+39   CtrlSetText                                        isrt.obl(CustomDlg.obs)
+40   DefineDialog                                       isrt.obl(CustomDlg.obs)
+41   DeinstallStart                                     isrt.obl(Registry.obs)
+42   Delay                                              isrt.obl(Misc.obs)
+43   DeleteFile                                         isrt.obl(Files.obs)
+44   DialogSetDefaultFont                               isrt.obl(Dialogs.obs)
+45   DialogSetFont                                      isrt.obl(Dialogs.obs)
+46   DialogSetInfo                                      isrt.obl(Dialogs.obs)
+47   Disable                                            isrt.obl(Enable.obs)
+48   DiskSizeToStr                                      isrt.obl(SDINT.obs)
+49   Divide                                             isrt.obl(Misc.obs)
+50   DllSizeOf                                          isrt.obl(Str.obs)
+51   Do                                                 isrt.obl(Misc.obs)
+52   Enable                                             isrt.obl(Enable.obs)
+53   EndDialog                                          isrt.obl(CustomDlg.obs)
+54   EnterDisk                                          isrt.obl(EnterDisk.obs)
+55   ExistsDir                                          isrt.obl(Files.obs)
+56   ExistsDisk                                         isrt.obl(Files.obs)
+57   EzDefineDialog                                     isrt.obl(CustomDlg.obs)
+58   FinalConstruct                                     ifx.obl(Events.obs)
+59   FinalRelease                                       ifx.obl(Events.obs)
+60   FindFile                                           isrt.obl(Files.obs)
+61   FormatMessage                                      isrt.obl(Misc.obs)
+62   GDI32.CreateRectRgn                                isrt.obl(AskDestPath.obs)
+63   GDI32.GetDeviceCaps                                isrt.obl(AskDestPath.obs)
+64   GetBillboard                                       isrt.obl(SysVars.obs)
+65   GetDialogTitle                                     isrt.obl(Dialogs.obs)
+66   GetDir                                             isrt.obl(Str.obs)
+67   GetDisk                                            isrt.obl(Str.obs)
+68   GetDiskSpace                                       isrt.obl(GSI.obs)
+69   GetDiskSpaceEx                                     isrt.obl(GSI.obs)
+70   GetErrorMsg                                        isrt.obl(Dialogs.obs)
+71   GetErrorTitle                                      isrt.obl(Dialogs.obs)
+72   GetExtents                                         isrt.obl(GSI.obs)
+73   GetFolderNameList                                  isrt.obl(Shell.obs)
+74   GetFolderPrograms                                  isrt.obl(SysVars.obs)
+75   GetISRes                                           isrt.obl(SysVars.obs)
+76   GetLine                                            isrt.obl(Files.obs)
+77   GetLog                                             isrt.obl(SysVars.obs)
+78   GetMaintenance                                     isrt.obl(SysVars.obs)
+79   GetOpenFileMode                                    isrt.obl(Files.obs)
+80   GetProductGUID                                     isrt.obl(SysVars.obs)
+81   GetProfString                                      isrt.obl(Profile.obs)
+82   GetProgramFiles                                    isrt.obl(SysVars.obs)
+83   GetSelectedLanguage                                isrt.obl(SysVars.obs)
+84   GetSelectedTreeComponent                           isrt.obl(CmptView.obs)
+85   GetSupportDir                                      isrt.obl(SysVars.obs)
+86   GetSystemInfo                                      isrt.obl(GSI.obs)
+87   GetWinDir                                          isrt.obl(SysVars.obs)
+88   GetWinSysDir                                       isrt.obl(SysVars.obs)
+89   GetWindowHandle                                    isrt.obl(Misc.obs)
+90   HIWORD                                             isrt.obl(Misc.obs)
+91   HexStrToNum                                        isrt.obl(Str.obs)
+92   ISDeterminePlatform                                isrt.obl(OsInfo.obs)
+93   ISMIF32.InstallStatusMIF                           isrt.obl(MIF.obs)
+94   ISRT.ComponentViewCreateWindow                     isrt.obl(CmptView.obs)
+95   ISRT.ComponentViewDestroy                          isrt.obl(CmptView.obs)
+96   ISRT.ComponentViewRefresh                          isrt.obl(CmptView.obs)
+97   ISRT.ComponentViewSetInfo                          isrt.obl(CmptView.obs)
+98   ISRT.ComponentViewSetInfoEx                        isrt.obl(Dialogs.obs)
+99   ISRT.EnableHourGlass                               isrt.obl(Enable.obs)
+100  ISRT.EnumFoldersItems                              isrt.obl(Shell.obs)
+101  ISRT.GetCPUType                                    isrt.obl(GSI.obs)
+102  ISRT.GetFontSub                                    isrt.obl(Dialogs.obs)
+103  ISRT.GetHandle                                     Setup.Obs
+104  ISRT.GetPorts                                      isrt.obl(GSI.obs)
+105  ISRT.IsEmpty                                       Setup.Obs
+106  ISRT.IsNTAdmin                                     isrt.obl(Is.obs)
+107  ISRT.IsObject                                      Setup.Obs
+108  ISRT.LangLoadString                                isrt.obl(SDINT.obs)
+109  ISRT.MessageBeepP                                  Setup.Obs
+110  ISRT.PathCompactPathPixel                          isrt.obl(CustomDlg.obs)
+111  ISRT.PathGetDir                                    isrt.obl(Str.obs)
+112  ISRT.PathGetDrive                                  isrt.obl(Str.obs)
+113  ISRT.PathGetFile                                   isrt.obl(Str.obs)
+114  ISRT.PathGetFileExt                                isrt.obl(Str.obs)
+115  ISRT.PathGetFileName                               isrt.obl(Str.obs)
+116  ISRT.PathGetPath                                   isrt.obl(Str.obs)
+117  ISRT.PathGetSpecialFolder                          isrt.obl(SysVars.obs)
+118  ISRT.PathIsValidSyntax                             isrt.obl(Is.obs)
+119  ISRT._BrowseForFolder                              isrt.obl(SelectDir.obs)
+120  ISRT._CleanupInet                                  isrt.obl(MIO.obs)
+121  ISRT._CloseFile                                    isrt.obl(Files.obs)
+122  ISRT._CmdGetHwndDlg                                isrt.obl(CustomDlg.obs)
+123  ISRT._ComponentCompareSizeRequired                 isrt.obl(component.obs)
+124  ISRT._ComponentError                               isrt.obl(component.obs)
+125  ISRT._ComponentErrorInfo                           isrt.obl(component.obs)
+126  ISRT._ComponentFilterLanguage                      isrt.obl(component.obs)
+127  ISRT._ComponentFilterOS                            isrt.obl(component.obs)
+128  ISRT._ComponentGetData                             isrt.obl(component.obs)
+129  ISRT._ComponentGetTotalCost                        isrt.obl(component.obs)
+130  ISRT._ComponentIsItemSelected                      isrt.obl(component.obs)
+131  ISRT._ComponentListItems                           isrt.obl(component.obs)
+132  ISRT._ComponentMoveData                            isrt.obl(component.obs)
+133  ISRT._ComponentReinstall                           isrt.obl(component.obs)
+134  ISRT._ComponentRemoveAll                           isrt.obl(component.obs)
+135  ISRT._ComponentSaveTarget                          isrt.obl(component.obs)
+136  ISRT._ComponentSelectItem                          isrt.obl(component.obs)
+137  ISRT._ComponentSetupTypeSet                        isrt.obl(component.obs)
+138  ISRT._ComponentTransferData                        isrt.obl(component.obs)
+139  ISRT._ComponentViewCreate                          isrt.obl(CmptView.obs)
+140  ISRT._CreateDir                                    isrt.obl(Files.obs)
+141  ISRT._CreateRegistrySet                            isrt.obl(component.obs)
+142  ISRT._CreateShellObjects                           isrt.obl(component.obs)
+143  ISRT._CtrlGetNotificationCode                      isrt.obl(CustomDlg.obs)
+144  ISRT._DefineDialog                                 isrt.obl(CustomDlg.obs)
+145  ISRT._DialogSetFont                                isrt.obl(Dialogs.obs)
+146  ISRT._DisableStatus                                isrt.obl(Enable.obs)
+147  ISRT._Divide                                       isrt.obl(Misc.obs)
+148  ISRT._DoSprintf                                    isrt.obl(MsgBox.obs)
+149  ISRT._EnableDialogCache                            isrt.obl(Enable.obs)
+150  ISRT._EnablePrevDialog                             isrt.obl(AskDestPath.obs)
+151  ISRT._EnableStatus                                 isrt.obl(Enable.obs)
+152  ISRT._EndDialog                                    isrt.obl(CustomDlg.obs)
+153  ISRT._ExistsDir                                    isrt.obl(Files.obs)
+154  ISRT._ExistsDisk                                   isrt.obl(Files.obs)
+155  ISRT._ExistsFile                                   isrt.obl(Files.obs)
+156  ISRT._FileCopy                                     isrt.obl(Files.obs)
+157  ISRT._GetDiskSpaceEx                               isrt.obl(GSI.obs)
+158  ISRT._GetLine                                      isrt.obl(Files.obs)
+159  ISRT._GetSelectedTreeComponent                     isrt.obl(CmptView.obs)
+160  ISRT._GetSupportDir                                isrt.obl(SysVars.obs)
+161  ISRT._InetEndofTransfer                            isrt.obl(iftw.obs)
+162  ISRT._InetGetLastError                             isrt.obl(iftw.obs)
+163  ISRT._InetGetNextDisk                              isrt.obl(iftw.obs)
+164  ISRT._ListAddItem                                  isrt.obl(scrlist.obs)
+165  ISRT._ListAddString                                isrt.obl(scrlist.obs)
+166  ISRT._ListCount                                    isrt.obl(scrlist.obs)
+167  ISRT._ListCreate                                   isrt.obl(scrlist.obs)
+168  ISRT._ListCurrentString                            isrt.obl(scrlist.obs)
+169  ISRT._ListDeleteString                             isrt.obl(scrlist.obs)
+170  ISRT._ListDestroy                                  isrt.obl(scrlist.obs)
+171  ISRT._ListFindString                               isrt.obl(scrlist.obs)
+172  ISRT._ListGetFirstItem                             isrt.obl(scrlist.obs)
+173  ISRT._ListGetFirstString                           isrt.obl(scrlist.obs)
+174  ISRT._ListGetNextItem                              isrt.obl(scrlist.obs)
+175  ISRT._ListGetNextString                            isrt.obl(scrlist.obs)
+176  ISRT._ListGetType                                  isrt.obl(scrlist.obs)
+177  ISRT._ListReadFromFile                             isrt.obl(scrlist.obs)
+178  ISRT._ListSetIndex                                 isrt.obl(scrlist.obs)
+179  ISRT._OpenFile                                     isrt.obl(Files.obs)
+180  ISRT._Rebooted                                     Setup.Obs
+181  ISRT._RegCreateKey                                 isrt.obl(Registry.obs)
+182  ISRT._RegExistsKey                                 isrt.obl(Registry.obs)
+183  ISRT._RegQueryKeyBinaryValue                       isrt.obl(Registry.obs)
+184  ISRT._RegQueryKeyValue                             isrt.obl(Registry.obs)
+185  ISRT._RegSetKeyBinaryValue                         isrt.obl(Registry.obs)
+186  ISRT._RegSetKeyValue                               isrt.obl(Registry.obs)
+187  ISRT._ReleaseDialog                                isrt.obl(CustomDlg.obs)
+188  ISRT._SetAltMainImage                              isrt.obl(Dialogs.obs)
+189  ISRT._SetColor                                     isrt.obl(ui.obs)
+190  ISRT._SetDisplayEffect                             isrt.obl(ui.obs)
+191  ISRT._SetPaletteFile                               isrt.obl(MIO.obs)
+192  ISRT._SetTitle                                     isrt.obl(ui.obs)
+193  ISRT._SetupInet                                    isrt.obl(MIO.obs)
+194  ISRT._ShowObjWizardPages                           isrt.obl(Objects.obs)
+195  ISRT._StatusUpdate                                 isrt.obl(ui.obs)
+196  ISRT._TreeViewCreate                               isrt.obl(CmptView.obs)
+197  ISRT._WaitOnDialog                                 isrt.obl(CustomDlg.obs)
+198  ISRT._WriteLine                                    isrt.obl(Files.obs)
+199  ISRT.__CreateObjectContext                         isrt.obl(ISRTInit.obs)
+200  ISRT.__GetCmdLineOptions                           isrt.obl(ISRTInit.obs)
+201  ISRT.__GetContextGUID                              isrt.obl(ISRTInit.obs)
+202  ISRT.__GetFileRegistrar                            isrt.obl(ISRTInit.obs)
+203  ISRT.__GetInfo                                     isrt.obl(ISRTInit.obs)
+204  ISRT.__GetLog                                      isrt.obl(SysVars.obs)
+205  ISRT.__GetLogDB                                    isrt.obl(ISRTInit.obs)
+206  ISRT.__GetMainWindow                               Setup.Obs
+207  ISRT.__GetMaintenanceMode                          isrt.obl(SysVars.obs)
+208  ISRT.__GetProductGuid                              isrt.obl(SysVars.obs)
+209  ISRT.__GetProgress                                 Setup.Obs
+210  ISRT.__GetReboot                                   isrt.obl(ISRTInit.obs)
+211  ISRT.__GetTextSub                                  isrt.obl(ISRTInit.obs)
+212  ISRT.__GetUser                                     isrt.obl(MIO.obs)
+213  ISRT.__ISRTGetPropertyBag                          ifx.obl(PersistPropertyBag.obs)
+214  ISRT.__ISRTReleasePropertyBag                      ifx.obl(PersistPropertyBag.obs)
+215  ISRT.__LoadString                                  isrt.obl(LoadStr.obs)
+216  ISRT.__ReleaseObjectContext                        isrt.obl(ISRTInit.obs)
+217  ISRT.__RestoreMainLog                              isrt.obl(ISRTInit.obs)
+218  ISRT.__SetComponentLog                             isrt.obl(ISRTInit.obs)
+219  IfxFilterComponents                                ifx.obl(MoveData.obs)
+220  IfxFinalConstruct                                  ifx.obl(EventsMIO.obs)
+221  IfxFinalRelease                                    ifx.obl(EventsMIO.obs)
+222  IfxInitProperties                                  ifx.obl(PersistPropertyBag.obs)
+223  IfxMoveFileData                                    ifx.obl(MoveData.obs)
+224  IfxOnAbortInstall                                  ifx.obl(Events.obs)
+225  IfxOnAppSearch                                     ifx.obl(Events.obs)
+226  IfxOnCCPSearch                                     ifx.obl(Events.obs)
+227  IfxOnCanceling                                     ifx.obl(Events.obs)
+228  IfxOnDisk1Installed                                ifx.obl(EventsMIO.obs)
+229  IfxOnDisk1Installing                               ifx.obl(EventsMIO.obs)
+230  IfxOnExitInstall                                   ifx.obl(EventsMIO.obs)
+231  IfxOnFileError                                     ifx.obl(Exceptions.obs)
+232  IfxOnFileLocked                                    ifx.obl(Exceptions.obs)
+233  IfxOnFileReadOnly                                  ifx.obl(Exceptions.obs)
+234  IfxOnHelp                                          ifx.obl(Events.obs)
+235  IfxOnInitInstall                                   ifx.obl(EventsMIO.obs)
+236  IfxOnInternetError                                 ifx.obl(Exceptions.obs)
+237  IfxOnMD5Error                                      ifx.obl(Exceptions.obs)
+238  IfxOnNextDisk                                      ifx.obl(Exceptions.obs)
+239  IfxOnRebooted                                      ifx.obl(Events.obs)
+240  IfxOnRemovingSharedFile                            ifx.obl(Exceptions.obs)
+241  IfxOnShowWizardPages                               ifx.obl(UserInterfaceMIO.obs)
+242  IfxOnTransferred                                   ifx.obl(Events.obs)
+243  IfxOnTransferring                                  ifx.obl(EventsMIO.obs)
+244  IfxOnUnhandledException                            ifx.obl(Events.obs)
+245  IfxReadProperties                                  ifx.obl(PersistPropertyBag.obs)
+246  IfxRunAfterReboot                                  ifx.obl(Driver.obs)
+247  IfxWriteProperties                                 ifx.obl(PersistPropertyBag.obs)
+248  InetEndofTransfer                                  isrt.obl(iftw.obs)
+249  InetErrorDisplayMode                               isrt.obl(iftw.obs)
+250  InetGetLastError                                   isrt.obl(iftw.obs)
+251  InetNextDisk                                       isrt.obl(iftw.obs)
+252  InitProperties                                     ifx.obl(PersistPropertyBag.obs)
+253  InstallationInfo                                   isrt.obl(Registry.obs)
+254  Is                                                 isrt.obl(Is.obs)
+255  IsInetInstall                                      isrt.obl(iftw.obs)
+256  KERNEL.GetModuleHandle                             Setup.Obs
+257  KERNEL32.CloseHandle                               isrt.obl(AskDestPath.obs)
+258  KERNEL32.CreateFileA                               isrt.obl(AskDestPath.obs)
+259  KERNEL32.DeleteFileA                               isrt.obl(AskDestPath.obs)
+260  KERNEL32.FileTimeToLocalFileTime                   isrt.obl(AskDestPath.obs)
+261  KERNEL32.FileTimeToSystemTime                      isrt.obl(AskDestPath.obs)
+262  KERNEL32.FindClose                                 isrt.obl(AskDestPath.obs)
+263  KERNEL32.FindFirstFileA                            isrt.obl(AskDestPath.obs)
+264  KERNEL32.FindNextFileA                             isrt.obl(AskDestPath.obs)
+265  KERNEL32.FormatMessageA                            isrt.obl(AskDestPath.obs)
+266  KERNEL32.GetDriveType                              isrt.obl(AskDestPath.obs)
+267  KERNEL32.GetFileAttributesA                        isrt.obl(AskDestPath.obs)
+268  KERNEL32.GetFileTime                               isrt.obl(AskDestPath.obs)
+269  KERNEL32.GetLocalTime                              isrt.obl(AskDestPath.obs)
+270  KERNEL32.GetLocaleInfo                             isrt.obl(AskDestPath.obs)
+271  KERNEL32.GetPrivateProfileString                   isrt.obl(AskDestPath.obs)
+272  KERNEL32.GetPrivateProfileStringA                  isrt.obl(AskDestPath.obs)
+273  KERNEL32.GetProfileStringA                         isrt.obl(AskDestPath.obs)
+274  KERNEL32.GetSystemDefaultLCID                      isrt.obl(AskDestPath.obs)
+275  KERNEL32.GetUserDefaultLangID                      isrt.obl(AskDestPath.obs)
+276  KERNEL32.GetVersion                                isrt.obl(AskDestPath.obs)
+277  KERNEL32.GetVersionEx                              isrt.obl(AskDestPath.obs)
+278  KERNEL32.GetVolumeInformation                      isrt.obl(AskDestPath.obs)
+279  KERNEL32.GetWindowsDirectory                       isrt.obl(AskDestPath.obs)
+280  KERNEL32.GlobalMemoryStatus                        isrt.obl(AskDestPath.obs)
+281  KERNEL32.LocalFileTimeToFileTime                   isrt.obl(AskDestPath.obs)
+282  KERNEL32.MoveFileA                                 isrt.obl(AskDestPath.obs)
+283  KERNEL32.SetFileAttributesA                        isrt.obl(AskDestPath.obs)
+284  KERNEL32.SetFileTime                               isrt.obl(AskDestPath.obs)
+285  KERNEL32.Sleep                                     isrt.obl(AskDestPath.obs)
+286  KERNEL32.SystemTimeToFileTime                      isrt.obl(AskDestPath.obs)
+287  KERNEL32.WritePrivateProfileString                 isrt.obl(AskDestPath.obs)
+288  KERNEL32.WritePrivateProfileStringA                isrt.obl(AskDestPath.obs)
+289  KERNEL32.WriteProfileStringA                       isrt.obl(AskDestPath.obs)
+290  KERNEL32.lstrlen                                   isrt.obl(AskDestPath.obs)
+291  LOWORD                                             isrt.obl(Misc.obs)
+292  ListAddItem                                        isrt.obl(scrlist.obs)
+293  ListAddString                                      isrt.obl(scrlist.obs)
+294  ListCount                                          isrt.obl(scrlist.obs)
+295  ListCreate                                         isrt.obl(scrlist.obs)
+296  ListCurrentString                                  isrt.obl(scrlist.obs)
+297  ListDeleteString                                   isrt.obl(scrlist.obs)
+298  ListDestroy                                        isrt.obl(scrlist.obs)
+299  ListFindString                                     isrt.obl(scrlist.obs)
+300  ListGetFirstItem                                   isrt.obl(scrlist.obs)
+301  ListGetFirstString                                 isrt.obl(scrlist.obs)
+302  ListGetNextItem                                    isrt.obl(scrlist.obs)
+303  ListGetNextString                                  isrt.obl(scrlist.obs)
+304  ListGetType                                        isrt.obl(scrlist.obs)
+305  ListReadFromFile                                   isrt.obl(scrlist.obs)
+306  ListSetIndex                                       isrt.obl(scrlist.obs)
+307  LongPathToQuote                                    isrt.obl(Str.obs)
+308  MAKELONG                                           isrt.obl(Misc.obs)
+309  MIFCreateMIFFile                                   isrt.obl(MIF.obs)
+310  MIFDeleteMIFFile                                   isrt.obl(MIF.obs)
+311  MIFInitialize                                      isrt.obl(MIF.obs)
+312  MIFSetInformation                                  isrt.obl(MIF.obs)
+313  MIFUnInitialize                                    isrt.obl(MIF.obs)
+314  MIFWasSetInformationCalled                         isrt.obl(MIF.obs)
+315  MIOShutdown                                        isrt.obl(MIO.obs)
+316  MIOStartup                                         isrt.obl(MIO.obs)
+317  MaintenanceStart                                   isrt.obl(Registry.obs)
+318  MessageBeep                                        isrt.obl(Misc.obs)
+319  MessageBox                                         isrt.obl(MsgBox.obs)
+320  OnAbort                                            ifx.obl(Events.obs)
+321  OnAppSearch                                        ifx.obl(Events.obs)
+322  OnBegin                                            ifx.obl(Events.obs)
+323  OnCCPSearch                                        ifx.obl(Events.obs)
+324  OnCanceling                                        ifx.obl(EventsMIO.obs)
+325  OnComponentError                                   ifx.obl(Exceptions.obs)
+326  OnEnd                                              ifx.obl(Events.obs)
+327  OnFileError                                        ifx.obl(Exceptions.obs)
+328  OnFileLocked                                       ifx.obl(Exceptions.obs)
+329  OnFileReadOnly                                     ifx.obl(Exceptions.obs)
+330  OnFirstUIAfter                                     ifx.obl(UserInterfaceMIO.obs)
+331  OnFirstUIBefore                                    ifx.obl(UserInterfaceMIO.obs)
+332  OnHelp                                             ifx.obl(Events.obs)
+333  OnInternetError                                    ifx.obl(Exceptions.obs)
+334  OnMD5Error                                         ifx.obl(Exceptions.obs)
+335  OnMaintUIAfter                                     ifx.obl(UserInterfaceMIO.obs)
+336  OnMaintUIBefore                                    ifx.obl(UserInterfaceMIO.obs)
+337  OnMoved                                            ifx.obl(Events.obs)
+338  OnMoving                                           ifx.obl(Events.obs)
+339  OnNextDisk                                         ifx.obl(Exceptions.obs)
+340  OnRebooted                                         ifx.obl(Events.obs)
+341  OnRemovingSharedFile                               ifx.obl(Exceptions.obs)
+342  OnSelfRegistrationError                            ifx.obl(Events.obs)
+343  OnUnhandledException                               ifx.obl(Events.obs)
+344  OpenFile                                           isrt.obl(Files.obs)
+345  OpenFileMode                                       isrt.obl(Files.obs)
+346  ParsePath                                          isrt.obl(Str.obs)
+347  ProgDefGroupType                                   isrt.obl(Shell.obs)
+348  ProgGetGroupType                                   isrt.obl(Shell.obs)
+349  PthFixPath                                         isrt.obl(Pth.obs)
+350  PthIsAbsPath                                       isrt.obl(Pth.obs)
+351  ReadProperties                                     ifx.obl(PersistPropertyBag.obs)
+352  Rebooted                                           isrt.obl(Driver.obs)
+353  RegDBCreateKeyEx                                   isrt.obl(Registry.obs)
+354  RegDBGetKeyValueEx                                 isrt.obl(Registry.obs)
+355  RegDBInit                                          isrt.obl(Registry.obs)
+356  RegDBKeyExist                                      isrt.obl(Registry.obs)
+357  RegDBQueryValue                                    isrt.obl(Registry.obs)
+358  RegDBSetDefaultRoot                                isrt.obl(Registry.obs)
+359  RegDBSetItem                                       isrt.obl(Registry.obs)
+360  RegDBSetKeyValueEx                                 isrt.obl(Registry.obs)
+361  RegDBSetValue                                      isrt.obl(Registry.obs)
+362  ReleaseDialog                                      isrt.obl(CustomDlg.obs)
+363  RenameFile                                         isrt.obl(Files.obs)
+364  SdAskDestPath                                      isrt.obl(SDADPATH.obs)
+365  SdCloseDlg                                         isrt.obl(SDINT.obs)
+366  SdComponentDialog2                                 isrt.obl(SDCOMDL2.obs)
+367  SdComponentDlgCheckSpace                           isrt.obl(SDINT.obs)
+368  SdComponentTree                                    isrt.obl(SDCOMTREE.obs)
+369  SdCreateComponentView                              isrt.obl(SDINT.obs)
+370  SdDlgToTop                                         isrt.obl(SDINT.obs)
+371  SdDoStdButton                                      isrt.obl(SDINT.obs)
+372  SdEnablement                                       isrt.obl(SDINT.obs)
+373  SdError                                            isrt.obl(SDINT.obs)
+374  SdExceptions                                       isrt.obl(SdExceptions.obs)
+375  SdFinish                                           isrt.obl(SDFINISH.obs)
+376  SdFinishEx                                         isrt.obl(SdFinishEx.obs)
+377  SdFinishReboot                                     isrt.obl(SDFINBOT.obs)
+378  SdGeneralInit                                      isrt.obl(SDINT.obs)
+379  SdInit                                             isrt.obl(SDINT.obs)
+380  SdIsShellExplorer                                  isrt.obl(SDINT.obs)
+381  SdIsStdButton                                      isrt.obl(SDINT.obs)
+382  SdLoadString                                       isrt.obl(SDINT.obs)
+383  SdMakeName                                         isrt.obl(SDINT.obs)
+384  SdPlugInProductName                                isrt.obl(SDINT.obs)
+385  SdProductName                                      isrt.obl(SDPRODCT.obs)
+386  SdRemoveEndSpace                                   isrt.obl(SDINT.obs)
+387  SdSelectFolder                                     isrt.obl(SDSFDR.obs)
+388  SdSetDlgTitle                                      isrt.obl(SDINT.obs)
+389  SdSetStatic                                        isrt.obl(SDINT.obs)
+390  SdShowInfoList                                     isrt.obl(SDSINFOL.obs)
+391  SdStartCopy                                        isrt.obl(SDSCOPY.obs)
+392  SdUnInit                                           isrt.obl(SDINT.obs)
+393  SdVerifyFolder                                     isrt.obl(SDINT.obs)
+394  SdWelcome                                          isrt.obl(SDWEL.obs)
+395  SdWelcomeMaint                                     isrt.obl(SdWelcomeMaint.obs)
+396  SelectDir                                          isrt.obl(SelectDir.obs)
+397  SelectDirNoLog                                     isrt.obl(SelectDir.obs)
+398  SendMessage                                        isrt.obl(Misc.obs)
+399  SetCmdLine                                         isrt.obl(SysVars.obs)
+400  SetColor                                           isrt.obl(ui.obs)
+401  SetDialogTitle                                     isrt.obl(Dialogs.obs)
+402  SetDisplayEffect                                   isrt.obl(ui.obs)
+403  SetFileInfo                                        isrt.obl(Files.obs)
+404  SetFolderDesktop                                   isrt.obl(SysVars.obs)
+405  SetFolderPrograms                                  isrt.obl(SysVars.obs)
+406  SetFolderStartMenu                                 isrt.obl(SysVars.obs)
+407  SetFolderStartup                                   isrt.obl(SysVars.obs)
+408  SetInstallationInfo                                isrt.obl(Registry.obs)
+409  SetStatusWindow                                    isrt.obl(ui.obs)
+410  SetTitle                                           isrt.obl(ui.obs)
+411  SetupType                                          isrt.obl(SetupType.obs)
+412  ShowObjWizardPages                                 isrt.obl(Objects.obs)
+413  SilentCreateFile                                   isrt.obl(Silent.obs)
+414  SilentDoGeneralInfo                                isrt.obl(Silent.obs)
+415  SilentFailed                                       isrt.obl(Silent.obs)
+416  SilentFinish                                       isrt.obl(Silent.obs)
+417  SilentGetMode                                      isrt.obl(Silent.obs)
+418  SilentInit                                         isrt.obl(Silent.obs)
+419  SilentLogWriteData                                 isrt.obl(Silent.obs)
+420  SilentReadData                                     isrt.obl(Silent.obs)
+421  SilentSetInfo                                      isrt.obl(Silent.obs)
+422  SilentSetMode                                      isrt.obl(Silent.obs)
+423  SilentWriteData                                    isrt.obl(Silent.obs)
+424  Sprintf                                            isrt.obl(Str.obs)
+425  SprintfBox                                         isrt.obl(MsgBox.obs)
+426  StatusUpdate                                       isrt.obl(ui.obs)
+427  StrGetTokens                                       isrt.obl(Str.obs)
+428  StrLength                                          isrt.obl(Str.obs)
+429  StrRemoveLastSlash                                 isrt.obl(Str.obs)
+430  StrRemoveSpaces                                    isrt.obl(Str.obs)
+431  StrToUpper                                         isrt.obl(Str.obs)
+432  SysVarsInit                                        isrt.obl(SysVars.obs)
+433  SysVarsUnInit                                      isrt.obl(SysVars.obs)
+434  System                                             isrt.obl(Misc.obs)
+435  TreeViewCreate                                     isrt.obl(CmptView.obs)
+436  USER.EnableWindow                                  Setup.Obs
+437  USER.GetClassName                                  Setup.Obs
+438  USER.GetClientRect                                 Setup.Obs
+439  USER.GetDC                                         Setup.Obs
+440  USER.GetDlgItem                                    Setup.Obs
+441  USER.GetFocus                                      Setup.Obs
+442  USER.GetWindowLong                                 Setup.Obs
+443  USER.GetWindowRect                                 Setup.Obs
+444  USER.IsIconic                                      Setup.Obs
+445  USER.IsWindow                                      Setup.Obs
+446  USER.IsWindowVisible                               isrt.obl(AskDestPath.obs)
+447  USER.MoveWindow                                    Setup.Obs
+448  USER.ReleaseDC                                     Setup.Obs
+449  USER.SendMessageA                                  isrt.obl(AskDestPath.obs)
+450  USER.SetFocus                                      Setup.Obs
+451  USER.SetForegroundWindow                           isrt.obl(AskDestPath.obs)
+452  USER.SetWindowPos                                  Setup.Obs
+453  USER.SetWindowText                                 Setup.Obs
+454  USER.ShowWindow                                    Setup.Obs
+455  USER32.CharUpperBuffA                              isrt.obl(AskDestPath.obs)
+456  USER32.DrawText                                    isrt.obl(AskDestPath.obs)
+457  USER32.GetDesktopWindow                            isrt.obl(AskDestPath.obs)
+458  USER32.GetSystemMetrics                            isrt.obl(AskDestPath.obs)
+459  USER32.GetWindowText                               isrt.obl(AskDestPath.obs)
+460  USER32.GetWindowTextLength                         isrt.obl(AskDestPath.obs)
+461  USER32.MessageBoxA                                 isrt.obl(AskDestPath.obs)
+462  USER32.ScreenToClient                              isrt.obl(AskDestPath.obs)
+463  USER32.SendMessageA                                isrt.obl(AskDestPath.obs)
+464  USER32.SetWindowLong                               isrt.obl(AskDestPath.obs)
+465  USER32.SetWindowRgn                                isrt.obl(AskDestPath.obs)
+466  VarRestore                                         isrt.obl(SysVars.obs)
+467  VarSave                                            isrt.obl(SysVars.obs)
+468  WaitOnDialog                                       isrt.obl(CustomDlg.obs)
+469  WriteLine                                          isrt.obl(Files.obs)
+470  WriteProfString                                    isrt.obl(Profile.obs)
+471  WriteProperties                                    ifx.obl(PersistPropertyBag.obs)
+472  _HandleException                                   isrt.obl(exceptions.obs)
+473  _WinSubEnableControl                               isrt.obl(WINSUB.obs)
+474  _WinSubEnableWindow                                isrt.obl(WINSUB.obs)
+475  _WinSubGetChildWindow                              isrt.obl(WINSUB.obs)
+476  _WinSubIsWindow                                    isrt.obl(WINSUB.obs)
+477  __DefaultExitHandler                               isrt.obl(handlers.obs)
+478  __ISRTDoExit                                       isrt.obl(Misc.obs)
+479  __ISRTInit                                         isrt.obl(ISRTInit.obs)
+480  __ISRTRestoreMainLog                               isrt.obl(ISRTInit.obs)
+481  __ISRTSetComponentLog                              isrt.obl(ISRTInit.obs)
+482  __ISRTUnInit                                       isrt.obl(ISRTInit.obs)
+483  __LoadIScriptString                                isrt.obl(LoadStr.obs)
+484  program                                            Setup.Obs
+485  sfc.SRSetRestorePoint                              Setup.Obs
+
+
+***** External Variables *****
+1    BATCH_INSTALL                                      Setup.Obs
+2    CMDLINE                                            isrt.obl(DebugSymbols.obs)
+3    COMMONFILES                                        isrt.obl(DebugSymbols.obs)
+4    DISK1TARGET                                        Setup.Obs
+5    ERRORFILENAME                                      Setup.Obs
+6    Err                                                Setup.Obs
+7    FILETIME                                           isrt.obl(AskDestPath.obs)
+8    FIND_DATA                                          isrt.obl(AskDestPath.obs)
+9    FOLDER_DESKTOP                                     isrt.obl(DebugSymbols.obs)
+10   FOLDER_PROGRAMS                                    isrt.obl(DebugSymbols.obs)
+11   FOLDER_STARTMENU                                   isrt.obl(DebugSymbols.obs)
+12   FOLDER_STARTUP                                     isrt.obl(DebugSymbols.obs)
+13   FileRegistrar                                      Setup.Obs
+14   ISRES                                              isrt.obl(DebugSymbols.obs)
+15   ISUSER                                             isrt.obl(DebugSymbols.obs)
+16   ISVERSION                                          isrt.obl(DebugSymbols.obs)
+17   InetSRCDIR                                         Setup.Obs
+18   LAST_RESULT                                        Setup.Obs
+19   LogDB                                              Setup.Obs
+20   MAINTENANCE                                        isrt.obl(DebugSymbols.obs)
+21   MEDIA                                              Setup.Obs
+22   MEMORYSTATUS                                       isrt.obl(AskDestPath.obs)
+23   MODE                                               isrt.obl(DebugSymbols.obs)
+24   NOTHING                                            Setup.Obs
+25   OSINFO_PLATFORM_INFO                               Setup.Obs
+26   OSVERSIONINFO                                      isrt.obl(AskDestPath.obs)
+27   PRODUCT_GUID                                       isrt.obl(DebugSymbols.obs)
+28   PROGRAMFILES                                       isrt.obl(DebugSymbols.obs)
+29   RECT                                               isrt.obl(AskDestPath.obs)
+30   Reboot                                             Setup.Obs
+31   SELECTED_LANGUAGE                                  isrt.obl(DebugSymbols.obs)
+32   SHELL_OBJECT_FOLDER                                Setup.Obs
+33   SRCDIR                                             Setup.Obs
+34   SRCDISK                                            isrt.obl(DebugSymbols.obs)
+35   SUPPORTDIR                                         isrt.obl(DebugSymbols.obs)
+36   SYSTEMTIME                                         isrt.obl(AskDestPath.obs)
+37   SetupInfo                                          Setup.Obs
+38   StatusDlg                                          Setup.Obs
+39   TARGETDIR                                          Setup.Obs
+40   TARGETDISK                                         isrt.obl(DebugSymbols.obs)
+41   TextSub                                            Setup.Obs
+42   UNINST                                             Setup.Obs
+43   UNINSTALL_STRING                                   Setup.Obs
+44   WINDIR                                             isrt.obl(DebugSymbols.obs)
+45   WINDISK                                            isrt.obl(DebugSymbols.obs)
+46   WINSYSDIR                                          isrt.obl(DebugSymbols.obs)
+47   WINSYSDISK                                         isrt.obl(DebugSymbols.obs)
+48   _INT64                                             Setup.Obs
+49   _RESTOREINFO_                                      Setup.Obs
+50   _RESTOREPTINFO                                     Setup.Obs
+51   _SMGRSTATUS                                        Setup.Obs
+52   _SMGSTATUS_                                        Setup.Obs
+53   _WIN9X                                             Setup.Obs
+54   _WINNT                                             Setup.Obs
+55   __SYSTEMINFORMATION                                Setup.Obs
+56   __hContext                                         isrt.obl(AskYesNo.obs)
+57   __objGlobalTextSub                                 Setup.Obs
+58   __szGUID                                           isrt.obl(ISRTInit.obs)
+59   bBackButton                                        Setup.Obs
+60   bCancelButton                                      Setup.Obs
+61   bEnterDiskBeep                                     isrt.obl(AskDestPath.obs)
+62   bFinishButton                                      Setup.Obs
+63   bIFXLFNoToAll                                      Setup.Obs
+64   bIFXLFOnRebootToAll                                Setup.Obs
+65   bIFXLFYesToAll                                     Setup.Obs
+66   bIFXMD5IgnoreToAll                                 Setup.Obs
+67   bIFXRONoToAll                                      Setup.Obs
+68   bIFXROYesToAll                                     Setup.Obs
+69   bIFXSFNoToAll                                      Setup.Obs
+70   bIFXSFYesToAll                                     Setup.Obs
+71   bIfxPCHInitialized                                 Setup.Obs
+72   bIfxPCHOn                                          Setup.Obs
+73   bInstall16                                         Setup.Obs
+74   bNextButton                                        Setup.Obs
+75   bSdInit                                            Setup.Obs
+76   bViewCmptKunits                                    Setup.Obs
+77   bViewCmptUseDecimal                                Setup.Obs
+78   g_bSuppressMissingStringWarning                    isrt.obl(Enable.obs)
+79   nIFXROKey                                          ifx.obl(EventsMIO.obs)
+80   nIFXSFKey                                          ifx.obl(EventsMIO.obs)
+81   nIfxPCHType                                        Setup.Obs
+82   szAppKey                                           Setup.Obs
+83   szInstallDeinstKey                                 Setup.Obs
+84   szSdProduct                                        Setup.Obs
+85   szSdStr_NotEnoughSpace                             Setup.Obs
diff --git a/ghc/InstallShield/Script Files/setup.rul b/ghc/InstallShield/Script Files/setup.rul
new file mode 100644
index 000000000000..28fc24aa2e5f
--- /dev/null
+++ b/ghc/InstallShield/Script Files/setup.rul	
@@ -0,0 +1,950 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  IIIIIII SSSSSS
+//    II    SS                          InstallShield (R)
+//    II    SSSSSS      (c) 1996-1997, InstallShield Software Corporation
+//    II        SS      (c) 1990-1996, InstallShield Corporation
+//  IIIIIII SSSSSS                     All Rights Reserved.
+//
+//
+//  This code is generated as a starting setup template.  You should
+//  modify it to provide all necessary steps for your setup.
+//
+//
+//    File Name:  Setup.rul
+//
+//  Description:  InstallShield script
+//
+//     Comments:  This template script performs a basic setup on a
+//                Windows 95 or Windows NT 4.0 platform. With minor
+//                modifications, this template can be adapted to create
+//                new, customized setups.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+
+  // Include header file
+#include "ifx.h"
+
+////////////////////// string defines ////////////////////////////
+
+#define UNINST_LOGFILE_NAME      "Uninst.isu"
+
+//////////////////// installation declarations ///////////////////
+
+  // ----- DLL prototypes -----
+
+
+     // your DLL prototypes
+
+
+  // ---- script prototypes -----
+
+     // generated
+     prototype ShowDialogs();
+     prototype MoveFileData();
+     prototype HandleMoveDataError( NUMBER );
+     prototype ProcessBeforeDataMove();
+     prototype ProcessAfterDataMove();
+     prototype SetupRegistry();
+     prototype SetupFolders();
+     prototype CleanUpInstall();
+     prototype SetupInstall();
+     prototype SetupScreen();
+     prototype CheckListScreen();
+     prototype CheckRequirements();
+     prototype DialogShowSdWelcome();
+     prototype DialogShowSdShowInfoList();
+     prototype DialogShowSdAskDestPath();
+     prototype DialogShowSdSetupType();
+     prototype DialogShowSdComponentDialog2();
+     prototype DialogShowSdSelectFolder();
+     prototype DialogShowSdFinishReboot();
+
+     // your prototypes
+     prototype MyParsePath ( STRING );
+     prototype ForwardSlashify ( STRING, BYREF STRING );
+     prototype CreateExecPerlScript ( STRING, STRING );
+     prototype DropSuffix ( STRING, BYREF STRING );
+     prototype BaseName   ( STRING, BYREF STRING );
+
+  // ----- global variables ------
+
+     // generated
+     BOOL        bWinNT, bIsShellExplorer, bInstallAborted, bIs32BitSetup;
+     STRING      svDir;
+     STRING      svName, svCompany, svSerial;
+     STRING      szAppPath;
+     STRING      svSetupType;
+     LIST        listPath;
+
+
+     // your global variables
+     //STRING      szRawCpp
+     STRING      szPerlPath;
+     STRING      szBinDir, szBinDirUnslashed,
+                 szLibDir, szLibDirUnslashed,
+                 szDataDir, szLibExecDir;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//   MAIN PROGRAM
+//
+//      The setup begins here by hiding the visible setup
+//      window.  This is done to allow all the titles, images, etc. to
+//      be established before showing the main window.  The following
+//      logic then performs the setup in a series of steps.
+//
+///////////////////////////////////////////////////////////////////////////////
+program
+    Disable( BACKGROUND );
+
+    CheckRequirements();
+
+    SetupInstall();
+
+    SetupScreen();
+
+    if (ShowDialogs()<0) goto end_install;
+
+    if (ProcessBeforeDataMove()<0) goto end_install;
+
+    if (MoveFileData()<0) goto end_install;
+
+    if (ProcessAfterDataMove()<0) goto end_install;
+
+    if (SetupRegistry()<0) goto end_install;
+
+    if (SetupFolders()<0) goto end_install;
+
+    CheckListScreen();
+    
+  end_install:
+
+    CleanUpInstall();
+
+     // If an unrecoverable error occurred, clean up the partial installation.
+     // Otherwise, exit normally.
+
+    if (bInstallAborted) then
+        abort;
+    endif;
+
+endprogram
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function:  ShowDialogs                                                    //
+//                                                                           //
+//  Purpose:  This function manages the display and navigation               //
+//            the standard dialogs that exist in a setup.                    //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function ShowDialogs()
+    NUMBER  nResult;
+ begin
+
+    Dlg_Start:
+        // beginning of dialogs label
+
+    Dlg_SdWelcome:
+        nResult = DialogShowSdWelcome();
+        if (nResult = BACK) goto Dlg_Start;
+
+    Dlg_SdShowInfoList:
+        nResult = DialogShowSdShowInfoList();
+        if (nResult = BACK) goto Dlg_SdWelcome;
+
+    Dlg_SdAskDestPath:
+        nResult = DialogShowSdAskDestPath();
+        if (nResult = BACK) goto Dlg_SdShowInfoList;
+
+    Dlg_SdSetupType:
+        nResult = DialogShowSdSetupType();
+        if (nResult = BACK) goto Dlg_SdAskDestPath;
+
+    Dlg_SdComponentDialog2:
+        if ((nResult = BACK) && (svSetupType != "Custom") && (svSetupType != "")) then
+           goto Dlg_SdSetupType;
+        endif;
+        nResult = DialogShowSdComponentDialog2();
+        if (nResult = BACK) goto Dlg_SdSetupType;
+
+    Dlg_SdSelectFolder:
+        //nResult = DialogShowSdSelectFolder();
+        //if (nResult = BACK) goto Dlg_SdComponentDialog2;
+
+    return 0;
+
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: ProcessBeforeDataMove                                           //
+//                                                                           //
+//  Purpose: This function performs any necessary operations prior to the    //
+//           actual data move operation.                                     //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function ProcessBeforeDataMove()
+    STRING svLogFile;
+    NUMBER nResult;
+ begin
+
+  InstallationInfo( @COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION, @PRODUCT_KEY );
+
+  svLogFile = UNINST_LOGFILE_NAME;
+
+  nResult = DeinstallStart( svDir, svLogFile, @UNINST_KEY, 0 );
+  if (nResult < 0) then
+      MessageBox( @ERROR_UNINSTSETUP, WARNING );
+  endif;
+
+  szAppPath = TARGETDIR; // TODO : if your application .exe is in a subdir of TARGETDIR then add subdir
+
+  if ((bIs32BitSetup) && (bIsShellExplorer)) then
+      RegDBSetItem( REGDB_APPPATH, szAppPath );
+      RegDBSetItem( REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY );
+      RegDBSetItem( REGDB_UNINSTALL_NAME, @UNINST_DISPLAY_NAME );
+  endif;
+  // TODO : update any items you want to process before moving the data
+  //
+
+  ComponentSetTarget( MEDIA, "<DOCDIR>", TARGETDIR ^ "\\doc" );
+
+  return 0;
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function:  MoveFileData                                                   //
+//                                                                           //
+//  Purpose:  This function handles the data movement for                    //
+//            the setup.                                                     //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function MoveFileData()
+    NUMBER nResult, nDisk;
+ begin
+
+  nDisk = 1;
+  SetStatusWindow( 0, "" );
+  Disable( DIALOGCACHE );
+  Enable( STATUS );
+  StatusUpdate( ON, 100 );
+  nResult = ComponentMoveData( MEDIA, nDisk, 0 );
+
+  HandleMoveDataError( nResult );
+
+  Disable( STATUS );
+
+  return nResult;
+
+ end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: HandleMoveDataError                                             //
+//                                                                           //
+//  Purpose: This function handles the error (if any) during the move data   //
+//           operation.                                                      //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function HandleMoveDataError( nResult )
+    STRING szErrMsg, svComponent , svFileGroup , svFile;
+ begin
+
+  svComponent = "";
+  svFileGroup = "";
+  svFile = "";
+
+  switch (nResult)
+  case 0:
+       return 0;
+  default:
+       ComponentError ( MEDIA , svComponent , svFileGroup , svFile , nResult );
+       szErrMsg = @ERROR_MOVEDATA  + "\n\n" +
+                  @ERROR_COMPONENT + " " + svComponent + "\n" +
+                  @ERROR_FILEGROUP + " " + svFileGroup + "\n" +
+                  @ERROR_FILE      + " " + svFile;
+       SprintfBox( SEVERE, @TITLE_CAPTIONBAR, szErrMsg, nResult );
+       bInstallAborted = TRUE;
+       return nResult;
+  endswitch;
+
+ end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: ProcessAfterDataMove                                            //
+//                                                                           //
+//  Purpose: This function performs any necessary operations needed after    //
+//           all data has been moved.                                        //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function ProcessAfterDataMove()
+  STRING szPath, szGcc, szGccDir;
+  STRING szTemp, szRes, szPathEntry, szDrive;
+  NUMBER nvSize,nvType, nResult, nPos, nSuccess;
+  LIST   listDirs;
+ begin
+
+  RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
+  RegDBGetKeyValueEx ( "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" ,
+                       "path" , nvType, szPath , nvSize );
+
+  // Spin through path looking for perl.exe.
+  // Our task is made considerably harder since the
+  // the free version of InstallShield doesn't support
+  // functions such as StrGetTokens() or ParsePath().
+  // TODO: Convert this back to IS Prof Edn
+
+  MyParsePath ( szPath );
+  nResult = ListGetFirstString ( listPath, szPathEntry);
+  szPathEntry = ""; szPerlPath="";
+  while ( nResult != END_OF_LIST )
+     if ( FindFile (szPathEntry, "perl.exe", szRes ) = 0 ) then
+       szPerlPath = szPathEntry + "/" + szRes;
+       nResult = END_OF_LIST;
+     else
+       nResult = ListGetNextString ( listPath, szPathEntry );
+     endif;
+  endwhile;
+  if ( StrCompare ( szPerlPath, "" ) = 0 ) then
+    // If not found in global env. block, look in the
+    // user-specific part.
+    RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
+    RegDBGetKeyValueEx ( "Environment", "path", nvType, szPath, nvSize);
+    MyParsePath ( szPath );
+    nResult = ListGetFirstString ( listPath, szPathEntry);
+    szPathEntry = ""; szPerlPath="";
+    while ( nResult != END_OF_LIST )
+      if ( FindFile (szPathEntry, "perl.exe", szRes ) = 0 ) then
+        szPerlPath = szPathEntry + "/" + szRes;
+        nResult = END_OF_LIST;
+      else
+        nResult = ListGetNextString ( listPath, szPathEntry );
+      endif;
+    endwhile;
+  endif;
+
+  if ( StrCompare ( szPerlPath, "" ) = 0 ) then
+     // Default it to /bin/perl
+     MessageBox ("Unable to find perl in your PATH. Not to worry, this installer includes a version that should be useable." +
+                 "When the installer has finished, please copy it from the bin/ directory of the ghc installation to /bin/perl",
+                 INFORMATION);
+     szPerlPath = "/bin/perl.exe";
+  else
+     // strip initial drive spec.
+     GetDir ( szPerlPath, szTemp);
+     ForwardSlashify ( szTemp, szPerlPath );
+  endif;
+  DropSuffix (szPerlPath, szTemp);
+  szPerlPath = szTemp;
+
+  ListDestroy (listPath);
+
+  return 0;
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: SetupRegistry                                                   //
+//                                                                           //
+//  Purpose: This function makes the registry entries for this setup.        //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function SetupRegistry()
+ NUMBER nResult,nWays,i;
+ STRING szProjectDir, szProjectVersionDir, szTargetDir;
+ STRING szSyslib, szWay, szSyslibsDir;
+ STRING szLib, szSyslibsKey;
+ //LIST   syslib_list, way_list;
+ begin
+
+  // TODO : Add all your registry entry keys here
+  //
+  //
+
+  nResult = CreateRegistrySet( "" );
+
+  // By now, we will have had the following Registry
+  // entries generated (see ProcessBeforeDataMove() ):
+  //
+  // HK_L_M\Software\Glasgow University\GHC\<version no.>
+  //
+  // For GHC, we store and use the install info inside
+  //  HK_L_M\Software\Haskell\GHC (== %ROOT%)
+
+  // So, we perform the following tasks here:
+  //
+  //  * Checks to see if %ROOT% is defined.
+  //    If not, creates it.
+  //  * Checks for %ROOT%\Version is defined.
+  //  * Create %ROOT%\<version>.
+  //  * Create %ROOT%\<version>\libdir
+  //    (This key will be given a value later.)
+  //  * Create %ROOT%\syslib\  and fill it in
+  //    with the syslibs that has been installed.
+  //  * %ROOT%\syslib\name\<way>
+  //    is added for each kind (e.g., seq, conc)
+  //    syslib we're installing.
+
+  // When we eventually reach the end, the registry
+  // should be ready for use by the installed app.
+
+  // Check to see if we've already installed
+  // a version of GHC on this box..
+  RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
+
+  szProjectDir = @HASKELL_REG_ROOT ^ @PRODUCT_NAME;
+
+  // check whether we've already got the Registry sub-tree we're
+  // about to add to. If not, then we create it
+  // level-by-level, so as to ensure that the uninstaller
+  // can clean up after us.
+  if ( RegDBKeyExist ( @HASKELL_REG_ROOT ) < 0) then
+     RegDBCreateKeyEx (@HASKELL_REG_ROOT, "");
+  endif;
+  if ( RegDBKeyExist  ( szProjectDir ) < 0 ) then
+     RegDBCreateKeyEx ( szProjectDir, "");
+  endif;
+
+  // Note: we overwrite any existing value.
+  RegDBSetKeyValueEx( szProjectDir, "Version", REGDB_STRING,
+                       @PRODUCT_KEY, -1);
+
+  szProjectVersionDir = szProjectDir ^ @PRODUCT_KEY;
+
+  if ( RegDBKeyExist ( szProjectVersionDir ) < 0) then
+     RegDBCreateKeyEx ( szProjectVersionDir, "");
+  endif;
+
+  // Here starts the GHC specific part
+
+  ForwardSlashify (TARGETDIR, szTargetDir);
+  // fill in the all-important path to where the archives
+  // and interface files have been parked.
+  szLibDir = szTargetDir + "/lib";
+  szLibDirUnslashed = TARGETDIR ^ "\\lib";
+  RegDBSetKeyValueEx ( szProjectVersionDir, "libdir", REGDB_STRING,
+                       szLibDir , -1);
+  // libexecdir
+  szLibExecDir = szTargetDir + "/lib";
+  RegDBSetKeyValueEx ( szProjectVersionDir, "libexecdir", REGDB_STRING,
+                       szLibExecDir , -1);
+  // bindir
+  szBinDir = szTargetDir + "/bin";
+  szBinDirUnslashed = TARGETDIR ^ "\\bin";
+  RegDBSetKeyValueEx ( szProjectVersionDir, "bindir", REGDB_STRING,
+                       szBinDir , -1);
+  
+  return 0;
+ end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function: SetupFolders
+//
+//  Purpose: This function creates all the folders and shortcuts for the
+//           setup.  This includes program groups and items for Windows 3.1.
+//
+///////////////////////////////////////////////////////////////////////////////
+function SetupFolders()
+ NUMBER nResult;
+ begin
+
+
+  // TODO : Add all your folder (program group) along with shortcuts (program items)
+  //
+  //
+  //    CreateProgramFolder, AddFolderIcon....
+  //
+
+  CreateExecPerlScript ( szBinDirUnslashed, "ghc-" + @PRODUCT_VERSION );
+  CreateExecPerlScript ( szBinDirUnslashed, "stat2resid" );
+  CreateExecPerlScript ( szLibDirUnslashed, "hscpp" );
+  CreateExecPerlScript ( szLibDirUnslashed, "mkdependHS" );
+
+  VarSave (SRCTARGETDIR);
+  SRCDIR = szBinDirUnslashed;
+  TARGETDIR = szBinDirUnslashed;
+  CopyFile( "ghc-" + @PRODUCT_VERSION, "ghc");
+  VarRestore (SRCTARGETDIR);
+
+  nResult = CreateShellObjects( "" );
+
+  return nResult;
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: CleanUpInstall                                                  //
+//                                                                           //
+//  Purpose: This cleans up the setup.  Anything that should                 //
+//           be released or deleted at the end of the setup should           //
+//           be done here.                                                   //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function CleanUpInstall()
+ begin
+
+
+  if (bInstallAborted) then
+      return 0;
+  endif;
+
+  DialogShowSdFinishReboot();
+
+  if (BATCH_INSTALL) then // ensure locked files are properly written
+      CommitSharedFiles(0);
+  endif;
+
+  return 0;
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: SetupInstall                                                    //
+//                                                                           //
+//  Purpose: This will setup the installation.  Any general initialization   //
+//           needed for the installation should be performed here.           //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function SetupInstall()
+
+ begin
+
+  Enable( CORECOMPONENTHANDLING );
+
+  bInstallAborted = FALSE;
+
+  GetDisk(WINDIR, svDir);
+
+  if (bIs32BitSetup) then
+      svDir = svDir + "\\" ^ @PRODUCT_NAME_SHORT ^ @PRODUCT_KEY;
+  else
+      // We're (=>ghc) 32 through and through, but for the sake of
+      // completenes.
+      svDir = svDir + "\\" ^ @PRODUCT_NAME_SHORT ^ @PRODUCT_NAME16;
+  endif;
+
+  TARGETDIR  = svDir;
+
+  SdProductName( @PRODUCT_NAME );
+
+  Enable( DIALOGCACHE );
+
+  return 0;
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function:  SetupScreen                                                    //
+//                                                                           //
+//  Purpose:  This function establishes  the screen look.  This includes     //
+//            colors, fonts, and text to be displayed.                       //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function SetupScreen()
+ begin
+
+  SetColor ( BACKGROUND, BLUE );
+  Enable( FULLWINDOWMODE );
+  Enable( INDVFILESTATUS );
+
+  SetTitle( @TITLE_MAIN, 24, WHITE );
+
+  SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION ); // Caption bar text.
+
+  Enable( BACKGROUND );
+
+  Delay( 1 );
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function:  CheckRequirements                                              //
+//                                                                           //
+//  Purpose:  This function checks all minimum requirements for the          //
+//            application being installed.  If any fail, then the user       //
+//            is informed and the setup is terminated.                       //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function CheckRequirements()
+    NUMBER  nvDx, nvDy, nvResult;
+    STRING  svResult;
+
+ begin
+
+  bWinNT           = FALSE;
+  bIsShellExplorer = FALSE;
+
+  // Check screen resolution.
+  GetExtents( nvDx, nvDy );
+
+  if (nvDy < 480) then
+      MessageBox( @ERROR_VGARESOLUTION, WARNING );
+      abort;
+  endif;
+
+  // set 'setup' operation mode
+  bIs32BitSetup = TRUE;
+  GetSystemInfo( ISTYPE, nvResult, svResult );
+  if (nvResult = 16) then
+      bIs32BitSetup = FALSE; // running 16-bit setup
+      return 0; // no additional information required
+  endif;
+
+  // --- 32-bit testing after this point ---
+
+  // Determine the target system's operating system.
+  GetSystemInfo( OS, nvResult, svResult );
+
+  if (nvResult =  IS_WINDOWSNT) then
+      // Running Windows NT.
+      bWinNT = TRUE;
+
+      // Check to see if the shell being used is EXPLORER shell.
+      if (GetSystemInfo( OSMAJOR, nvResult, svResult ) = 0) then
+          if (nvResult >= 4) then
+              bIsShellExplorer = TRUE;
+          endif;
+      endif;
+
+  elseif (nvResult = IS_WINDOWS95 ) then
+      bIsShellExplorer = TRUE;
+
+  endif;
+
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: DialogShowSdWelcome                                             //
+//                                                                           //
+//  Purpose: This function handles the standard welcome dialog.              //
+//                                                                           //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function DialogShowSdWelcome()
+    NUMBER nResult;
+    STRING szTitle, szMsg;
+ begin
+
+  szTitle = "";
+  szMsg   = "";
+  nResult = SdWelcome( szTitle, szMsg );
+
+  return nResult;
+ end;
+                         
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: DialogShowSdShowInfoList                                        //
+//                                                                           //
+//  Purpose: This function displays the general information list dialog.     //
+//                                                                           //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function DialogShowSdShowInfoList()
+    NUMBER nResult;
+    LIST   list;
+    STRING szTitle, szMsg, szFile;
+ begin
+
+  szFile = SUPPORTDIR ^ "announce";
+
+  list = ListCreate( STRINGLIST );
+  ListReadFromFile( list, szFile );
+  szTitle  = "";
+  szMsg    = " ";
+  nResult  = SdShowInfoList( szTitle, szMsg, list );
+
+  ListDestroy( list );
+
+  return nResult;
+ end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: DialogShowSdAskDestPath                                         //
+//                                                                           //
+//  Purpose: This function asks the user for the destination directory.      //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function DialogShowSdAskDestPath()
+    NUMBER nResult;
+    STRING szTitle, szMsg;
+ begin
+
+  szTitle = "";
+  szMsg   = "WARNING! The path must not contain spaces.";
+  nResult = SdAskDestPath( szTitle, szMsg, svDir, 0 );
+
+  TARGETDIR = svDir;
+
+  return nResult;
+ end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: DialogShowSdSetupType                                           //
+//                                                                           //
+//  Purpose: This function displays the standard setup type dialog.          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function DialogShowSdSetupType()
+    NUMBER nResult, nType;
+    STRING szTitle, szMsg;
+ begin
+
+  switch (svSetupType)
+  case "Typical":
+       nType = TYPICAL;
+  case "Custom":
+       nType = CUSTOM;
+  case "Compact":
+       nType = COMPACT;
+  case "":
+       svSetupType = "Typical";
+       nType = TYPICAL;
+  endswitch;
+
+  szTitle = "";
+  szMsg   = "";
+  nResult = SetupType( szTitle, szMsg, "", nType, 0 );
+
+  switch (nResult)
+  case COMPACT:
+       svSetupType = "Compact";
+  case TYPICAL:
+       svSetupType = "Typical";
+  case CUSTOM:
+       svSetupType = "Custom";
+  endswitch;
+
+  return nResult;
+ end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: DialogShowSdComponentDialog2                                    //
+//                                                                           //
+//  Purpose: This function displays the custom component dialog.             //
+//                                                                           //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function DialogShowSdComponentDialog2()
+    NUMBER nResult;
+    STRING szTitle, szMsg;
+ begin
+
+  if ((svSetupType != "Custom") && (svSetupType != "")) then
+      return 0;
+  endif;
+
+  szTitle  = "";
+  szMsg    = "";
+  nResult  = SdComponentDialog2( szTitle, szMsg, svDir, "" );
+
+  return nResult;
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: CheckListScreen                                                 //
+//                                                                           //
+//  Purpose: Show a check-list of post-install user actions.                 //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function CheckListScreen()   
+	BOOL bDone;
+	NUMBER nCmdValue;
+ begin   
+ 	EzDefineDialog("CHECKLIST", "", "", 30001);
+
+    bDone = FALSE;   
+    while (bDone=FALSE)   
+       nCmdValue = WaitOnDialog("CHECKLIST");   
+          switch (nCmdValue)      
+              case DLG_INIT:               
+              // Process the Next button.         
+              case SD_PBUT_CONTINUE:         
+                  bDone = TRUE;           
+              // Process the Cancel button.         
+              case SD_PBUT_EXITSETUP:
+                  bDone = TRUE;            
+              // Process the close dialog box button.
+              case DLG_CLOSE:         
+                  bDone = TRUE;         
+              // Process dialog box errors.            
+              case DLG_ERR:
+                  MessageBox("Internal dialog box error", SEVERE);         
+                  bDone = TRUE;         
+          endswitch;            
+    endwhile;           
+    // Identify the end of dialog box processing.  
+    EndDialog("CHECKLIST");   
+    // Free the dialog box and list from memory.
+    ReleaseDialog("CHECKLIST");   
+ end;                    
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Function: DialogShowSdFinishReboot                                        //
+//                                                                           //
+//  Purpose: This function will show the last dialog of the product.         //
+//           It will allow the user to reboot and/or show some readme text.  //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+function DialogShowSdFinishReboot()
+    NUMBER nResult, nDefOptions;
+    STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
+    NUMBER bOpt1, bOpt2;
+ begin
+
+  if (!BATCH_INSTALL) then
+      bOpt1 = FALSE;
+      bOpt2 = FALSE;
+      szMsg1 = "";
+      szMsg2 = "";
+      szOption1 = "";
+      szOption2 = "";
+      szTitle = "Installation is now complete.";
+      nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 );
+      return 0;
+  else
+      nDefOptions = SYS_BOOTMACHINE;
+      szTitle     = "";
+      szMsg1      = "";
+      szMsg2      = "";
+      nResult     = SdFinishReboot( szTitle, szMsg1, nDefOptions, szMsg2, 0 );
+      return nResult;
+  endif;
+ end;
+
+function MyParsePath(szPath)
+  STRING szTmp,szPth;
+  NUMBER nPos;
+ begin
+   szPth = szPath;
+   listPath = ListCreate( STRINGLIST );
+
+   // Man, all I want is map. Please? :-)
+   nPos = StrFind ( szPth, ";");
+   while ( nPos > 0 )
+    StrSub ( szTmp, szPth, 0, nPos);
+    ListAddString ( listPath, szTmp, AFTER );
+    StrSub ( szTmp, szPth, nPos + 1, StrLength ( szPth) - nPos );
+    szPth = szTmp;
+    nPos = StrFind ( szPth, ";" );
+   endwhile;
+
+  return 0;
+ end;
+
+ function ForwardSlashify ( szStr , theRes )
+   NUMBER nPos;
+   STRING szTemp, szRes;
+ begin
+  // Tortuous piece of code to convert backslashes into
+  // forward ones.
+  nPos = StrFind ( szStr, "\\");
+  szRes="";
+  while ( nPos >= 0 )
+    StrSub ( szTemp, szStr, 0, nPos);
+    szRes = szRes + szTemp + "/";
+    StrSub ( szTemp, szStr, nPos + 1, StrLength ( szStr) - nPos );
+    szStr = szTemp;
+    nPos = StrFind ( szStr, "\\" );
+  endwhile;
+  StrSub ( szTemp, szStr, 0, StrLength (szStr));
+  szRes = szRes + szTemp;
+  theRes = szRes;
+  return 0;
+ end;
+
+ function CreateExecPerlScript ( szPath, szFileName )
+    NUMBER nResult, writeHandle, readHandle;
+    STRING szLine;
+ begin
+   VarSave (SRCTARGETDIR);
+   SRCDIR = szPath;
+   TARGETDIR = szPath;
+   DeleteFile ( szFileName + ".bak");
+   RenameFile ( szFileName, szFileName + ".bak");
+   VarRestore (SRCTARGETDIR);
+
+   OpenFileMode (FILE_MODE_APPEND);
+   if ( CreateFile ( writeHandle, szPath, szFileName ) < 0 ) then
+      MessageBox ("CreateFile " + szPath ^ szFileName + " failed", INFORMATION);
+   endif;
+   // append
+   WriteLine (writeHandle, "#!" + szPerlPath );
+   WriteLine (writeHandle, "$libdir='" + szLibDir + "';");
+   WriteLine (writeHandle, "$bindir='" + szBinDir + "';");
+   WriteLine (writeHandle, "$libexecdir='" + szLibExecDir + "';");
+   WriteLine (writeHandle, "$datadir='" + szDataDir + "';");
+   WriteLine (writeHandle, "$SED='sed';");
+   WriteLine (writeHandle, "$TMPDIR='C:/TEMP';");
+   WriteLine (writeHandle, "$RAWCPP='gcc -E';");
+   // For the benefit of mkdependHS, which doesn't get this prepended
+   WriteLine (writeHandle, "$INSTALLING=1;");
+
+   OpenFileMode (FILE_MODE_NORMAL);
+   if ( OpenFile ( readHandle, szPath, szFileName + ".bak") < 0 ) then
+      MessageBox ("OpenFile " + szPath ^ szFileName + ".bak failed", INFORMATION);
+   endif;
+
+   // copy the template over.
+   nResult = GetLine ( readHandle, szLine);
+   while ( nResult >= 0 )
+     WriteLine ( writeHandle, szLine);
+     nResult = GetLine ( readHandle, szLine);
+   endwhile;
+   if ( CloseFile( readHandle ) < 0 ) then
+       MessageBox ( "CloseFile " + szPath ^ szFileName + ".bak failed",
+                    INFORMATION);
+   endif;
+   if ( CloseFile( writeHandle ) < 0 ) then
+       MessageBox ( "CloseFile " + szPath ^ szFileName + " failed",
+                    INFORMATION);
+   endif;
+   // There's no way to set the 'x' bit using
+   // SetFileInfo(), but luckily it is not needed to run #! scripts
+   // under cygwin.
+   SetFileInfo ( szPath ^ szFileName, FILE_ATTRIBUTE, FILE_ATTR_NORMAL, "");     
+   // Delete the .bak file
+   DeleteFile ( szPath ^ szFileName + ".bak");
+   
+   return 0;
+ end;
+
+ function DropSuffix ( szInp, szOut )
+   NUMBER nResult, nLen;
+   STRING szTemp, szTemp2;
+ begin
+    nLen = 0;
+    szTemp2 = szInp;
+    nResult = StrFind ( szTemp2 , ".");
+    while ( nResult >= 0 )
+       nLen = nLen + nResult;
+       StrSub ( szTemp, szTemp2, nResult + 1, StrLength ( szTemp2) - nResult );
+       szTemp2 = szTemp;
+       nResult = StrFind ( szTemp2, "." );
+       if ( nResult >= 0 ) then
+          nLen = nLen + 1;  // incl the previous . if there's more.
+       endif;
+    endwhile;
+    StrSub ( szOut, szInp, 0, nLen);
+    return 0;
+ end;
\ No newline at end of file
-- 
GitLab