[project @ 2000-11-09 11:37:24 by rrt]
authorrrt <unknown>
Thu, 9 Nov 2000 11:37:25 +0000 (11:37 +0000)
committerrrt <unknown>
Thu, 9 Nov 2000 11:37:25 +0000 (11:37 +0000)
Add more bits of InstallShield setup

ghc/InstallShield/Registry Entries/Default.rge [new file with mode: 0644]
ghc/InstallShield/Script Files/Setup.Inx [new file with mode: 0644]
ghc/InstallShield/Script Files/Setup.Obs [new file with mode: 0644]
ghc/InstallShield/Script Files/Setup.dbg [new file with mode: 0644]
ghc/InstallShield/Script Files/Setup.ino [new file with mode: 0644]
ghc/InstallShield/Script Files/Setup.ins [new file with mode: 0644]
ghc/InstallShield/Script Files/Setup.map [new file with mode: 0644]
ghc/InstallShield/Script Files/setup.rul [new file with mode: 0644]

diff --git a/ghc/InstallShield/Registry Entries/Default.rge b/ghc/InstallShield/Registry Entries/Default.rge
new file mode 100644 (file)
index 0000000..f73a93c
--- /dev/null
@@ -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 (file)
index 0000000..4aef7fa
Binary files /dev/null and b/ghc/InstallShield/Script Files/Setup.Inx differ
diff --git a/ghc/InstallShield/Script Files/Setup.Obs b/ghc/InstallShield/Script Files/Setup.Obs
new file mode 100644 (file)
index 0000000..53425bd
Binary files /dev/null and b/ghc/InstallShield/Script Files/Setup.Obs differ
diff --git a/ghc/InstallShield/Script Files/Setup.dbg b/ghc/InstallShield/Script Files/Setup.dbg
new file mode 100644 (file)
index 0000000..7c86870
Binary files /dev/null and b/ghc/InstallShield/Script Files/Setup.dbg differ
diff --git a/ghc/InstallShield/Script Files/Setup.ino b/ghc/InstallShield/Script Files/Setup.ino
new file mode 100644 (file)
index 0000000..421984e
Binary files /dev/null and b/ghc/InstallShield/Script Files/Setup.ino differ
diff --git a/ghc/InstallShield/Script Files/Setup.ins b/ghc/InstallShield/Script Files/Setup.ins
new file mode 100644 (file)
index 0000000..156a8ee
Binary files /dev/null and b/ghc/InstallShield/Script Files/Setup.ins differ
diff --git a/ghc/InstallShield/Script Files/Setup.map b/ghc/InstallShield/Script Files/Setup.map
new file mode 100644 (file)
index 0000000..3039284
--- /dev/null
@@ -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 (file)
index 0000000..28fc24a
--- /dev/null
@@ -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