home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1994-07-18 | 35.3 KB | 1,012 lines
'************************************************************************** '* INSTALLATION DE VOLUMM4D '************************************************************************** '' $DEFINE DEBUG ''Define for script development/debugging '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' ''Dialog ID's CONST LOGOVOLUMM = 1 CONST INSTALLATIONVOL = 2 CONST FIRST = 10 CONST QUITTER = 20 CONST WELCOME = 100 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST OPTIONS = 800 CONST BADPATH = 6400 CONST LANGUECHOICE = 5000 CONST LANGUECHOICEHLP = 5010 CONST INSTALLCHOICE = 5020 CONST INSTALLCHOICEHLP = 5030 CONST INSTALLCUSTOM = 6410 CONST INSTALLCUSTOMHLP = 6420 CONST HELPWELCOME = 1000 CONST VERPATH = 1100 CONST EXITFAILNOTWIN31 = 1200 CONST EXITFAILNOTENH = 1300 CONST EXITFAILNOTPAGING = 1325 CONST EXITFAILNOTINTEL = 1350 CONST FREECELLINST = 1400 CONST FREECELLINSTNOWIN32S = 1450 CONST FREECELLPATH = 1500 CONST HELPFREECELL = 1600 CONST WANTOVERVIEW = 7000 ''Bitmap ID CONST LOGO = 1 GLOBAL DESTSYS$ ''Windows\System directory. GLOBAL DEST32S$ ''Windows\System\Win32s directory GLOBAL DESTVOLUMM$ ''Freecell directory GLOBAL FONTES$ GLOBAL MAPPING$ GLOBAL IMAGES$ GLOBAL LBM$ GLOBAL MAQUETTES$ GLOBAL TYPEWIN$ GLOBAL REPINI$ GLOBAL REP$ GLOBAL REPOK$ GLOBAL DEMOPATH$ GLOBAL LANGUE GLOBAL BC$ DECLARE SUB Install DECLARE SUB UpdateSystemIni DECLARE SUB RebootSystem DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION TestCheckBox (BoxNum%) AS STRING DECLARE FUNCTION GetV4DPath (reset%) AS STRING DECLARE FUNCTION CustomInst (Path$, Win32Size%) AS STRING DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER DECLARE FUNCTION WinExec LIB "kernel" (szCmd$,cbBuf%) AS INTEGER INIT: CUIDLL$ = "mscuistf.dll" ''Custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure szOldVer$ ="1.00.000 " ''Reserve space in string for version WIN32ENABLED% = 0 GLOBAL AlwaysCopy% AlwaysCopy% = 0 GLOBAL MiniInstall% GLOBAL CDInstall% GLOBAL ReqSpace MiniInstall%=0 CDInstall%=1 ReqSpace=13500000 LANGUE=0 ON ERROR GOTO ERRNORMAL SrcDir$ = GetSymbolValue("STF_SRCDIR") SetBitmap CUIDLL$, INSTALLATIONVOL sz$ = UIStartDlg(CUIDLL$, LANGUECHOICE, "FRadioDlgProc", LANGUECHOICEHLP, HELPPROC$) BC$=GetSymbolValue("ButtonChecked") UIPop 1 IF BC$="2" THEN LANGUE=1 ELSE LANGUE=0 ENDIF IF LANGUE=0 THEN SetTitle "Win32s and VOLUMM4D 3.0 Installation" ELSE SetTitle "Installation de Win32s et VOLUMM4D 3.0" ENDIF OVERVIEW: SrcDir$ = GetSymbolValue("STF_SRCDIR") DEMOPATH$ = MID$(SrcDir$, 1, 1) DEMOPATH$ = DEMOPATH$ + ":\VOLUMM\VOLUMM4D\" sz$ = UIStartDlg(CUIDLL$, WANTOVERVIEW+LANGUE, "FInfoDlgProc", HELPWELCOME+LANGUE, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSEIF sz$ = "BACK" THEN truc%=WinExec(DEMOPATH$+"SCRNCAMP /SC "+DEMOPATH$+"OVERVIEW.SCM",5) GOTO OVERVIEW ELSE GOSUB ASKQUIT GOTO OVERVIEW END IF ' IF LANGUE=0 THEN ' i%=DoMsgBox("If you have a sound card, you can assist to a multimedia presentation of VOLUMM4D, before proceeding with the installation", "VOLUMM4D 3.0 Installation", 1+MB_TASKMODAL) ' ELSE ' i%=DoMsgBox("Si vous Ωtes ΘquipΘ d'une carte son, vous pouvez assister α une prΘsentation de VOLUMM4D avant de proceder α l'installation", "VOLUMM4D 3.0 Installation", 1+MB_TASKMODAL) ' ENDIF ' if i%=1 THEN ' SrcDir$ = GetSymbolValue("STF_SRCDIR") ' DEMOPATH$ = MID$(SrcDir$, 1, 1) ' DEMOPATH$ = DEMOPATH$ + ":\VOLUMM\VOLUMM4D\" ' truc%=WinExec(DEMOPATH$+"SCRNCAMP /SC "+DEMOPATH$+"OVERVIEW.SCM",5) ' IF LANGUE=0 THEN ' i%=DoMsgBox("Do you want to start the installation ?", "VOLUMM4D 3.0 Installation", 1+MB_TASKMODAL) ' ELSE ' i%=DoMsgBox("Voulez vous dΘmarrer l'installation ?", "VOLUMM4D 3.0 Installation", 1+MB_TASKMODAL) ' ENDIF ' IF i%<>1 THEN ' ExitCode% = EXITFAILURE ' GOTO QUIT ' ENDIF ' ENDIF szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "setup.inf" END IF ReadInfFile szInf$ IF MiniInstall%=1 THEN ReqSpace=6000000 END IF DESTSYS$ = GetWindowsSysDir() DEST32S$ = DESTSYS + "WIN32S\" WELCOMEFIRST: sz$ = UIStartDlg(CUIDLL$, FIRST+LANGUE, "FInfoDlgProc", HELPWELCOME+LANGUE, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSE GOSUB ASKQUIT GOTO WELCOMEFIRST END IF '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal WinDrive$ = MID$(GetWindowsDir, 1, 1) IF IsDriveValid(WinDrive$) = 0 THEN IF LANGUE=0 THEN i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK) ELSE i% = DoMsgBox("Le lecteur Windows ('"+WinDrive$+"') n'est pas un lecteur valide.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK) ENDIF GOTO QUIT END IF '$ENDIF ''DEBUG CHECK: IF GetWindowsMajorVersion < 3 THEN ExitCode% = EXITFAILNOTWIN31 GOTO QUIT END IF IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 1 THEN ExitCode% = EXITFAILNOTWIN31 GOTO QUIT END IF IF GetWindowsMajorVersion >= 4 THEN ExitCode% = EXITSUCCESS WIN32ENABLED% = 1 GOTO FREECELL END IF IF GetWindowsMode < 2 THEN IF OnWindowsNT() THEN ExitCode% = EXITFAILNOTINTEL '' Running on Windows NT (on RISC) ELSE ExitCode% = EXITFAILNOTENH '' Standard Mode Windows END IF GOTO QUIT END IF IF OnWindowsNT() THEN ExitCode% = EXITSUCCESS WIN32ENABLED% = 1 GOTO FREECELL END IF ExitCode% = EXITSUCCESS '' Get version of Win32s to be installed from version info in file szNewVer$ = GetVersionOfFile( GetSymbolValue("STF_SRCDIR") + "WIN32S16.DLL" ) '' Check if Win32s is partially installed sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup") '' If WIN32S.INI specifies Setup=0, then force complete Win32s file overwrite IF sz$ = "0" THEN AlwaysCopy% = 1 GOTO WELCOME END IF '' If WIN32S.INI is missing, try and reinstall Win32s files/recreate WIN32S.INI IF sz$ <> "1" THEN GOTO WELCOME END IF '' If Win32s is already installed, get running version number i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists ) IF i% = 1 THEN i% = IsWin32sLoaded( szOldVer$ ) END IF IF i% = 0 THEN GOTO WELCOME END IF IF szNewVer$ > szOldVer$ THEN GOTO WELCOME END IF WIN32ENABLED% = 1 GOTO FREECELL WELCOME: '' sz$ = UIStartDlg(CUIDLL$, FIRST+LANGUE, "FInfoDlgProc", HELPWELCOME+LANGUE, HELPPROC$) '' IF sz$ = "CONTINUE" THEN '' UIPop 1 '' ELSE '' GOSUB ASKQUIT '' GOTO WELCOME '' END IF GETWIN32SPATH: IF PagingEnabled() = 0 THEN IF LANGUE=0 THEN i% = DoMsgBox("Use the Control Panel 386 Enhanced icon and configure Windows using the Virtual Memory option.", "Win32s requires Virtual Memory", MB_TASKMODAL+MB_ICONHAND+MB_OK) ELSE i% = DoMsgBox("Utilisez l'icone 386 Θtendu du Panneau de controle et configurez Windows avec l'option mΘmoire virtuelle.", "Win32s ne peut fonctionner sans MΘmoire virtuelle", MB_TASKMODAL+MB_ICONHAND+MB_OK) ENDIF ExitCode% = EXITFAILURE '' Enhanced mode but not paging GOTO QUIT END IF IF ShareEnabled() = 0 THEN IF LANGUE=0 THEN i%=DoMsgBox("Exit Windows, add SHARE.EXE to your AUTOEXEC.BAT file and reeboot your PC, then restart SETUP.","Win32s installation : SHARE.EXE required", MB_TASKMODAL+MB_ICONEXCLAMATION+MB_OK) ELSE i%=DoMsgBox("Quittez Windows, ajoutez SHARE.EXE α votre fichier AUTOEXEC.BAT et rΘinitialisez votre PC, puis relancez SETUP.","Installation de Win32s: chargement de SHARE.EXE obligatoire", MB_TASKMODAL+MB_ICONEXCLAMATION+MB_OK) ENDIF ExitCode% = EXITFAILURE '' Pas de share.Exe GOTO QUIT END IF SetSymbolValue "EditTextIn", DESTSYS$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, VERPATH+LANGUE, "FDispDlgProc", HELPWELCOME+LANGUE, HELPPROC$) IF sz$ = "CONTINUE" THEN IF IsDirWritable(DESTSYS$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO GETPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO WELCOME ELSE GOSUB ASKQUIT GOTO GETPATHL1 END IF COPYFILES: CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite '' Indicate Win32s install failure until all files known to be copied. ExitCode% = EXITFAILURE ERR = 0 CreateDir DEST32S$, cmoNone Install UpdateSystemIni '' Terminate if unhandled fatal error IF ERR <> 0 THEN GOTO QUIT END IF CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite IF LANGUE=0 THEN i% = DoMsgBox("Win32s Files fully installed.", "Microsoft Win32s Installation", MB_OK+MB_TASKMODAL) ELSE i% = DoMsgBox("Fichiers de Win32s entiΦrement installΘs.", "Installation de Microsoft Win32s", MB_OK+MB_TASKMODAL) ENDIF '' Indicate Win32s correctly copied and installed. ExitCode% = EXITSUCCESS FREECELL: oldcopymode=SetCopyMode (1) ''Ne pas oublier de tester la fonction GetCopyListCost DESTVOLUMM$ = MID$(DESTSYS$,1,3) + "WIN32APP\VOLUMM4D\" sz$ = UIStartDlg(CUIDLL$, INSTALLCHOICE+LANGUE, "FRadioDlgProc", INSTALLCHOICEHLP+LANGUE, HELPPROC$) BC$=GetSymbolValue("ButtonChecked") UIPop 1 IF BC$="2" THEN MiniInstall%=1 CDInstall%=1 ReqSpace=1000000 ELSE MiniInstall%=0 CDInstall%=0 ReqSpace=7000000 ENDIF ResetV4DPath=0 GETFREEPATH: ' SetSymbolValue "EditTextIn", DESTVOLUMM$ ' SetSymbolValue "EditFocus", "END" ResetV4DPath=1 GETFREEPATHL1: sz$=GetV4DPath(1) ResetV4DPath=0 if sz$="EXIT" then goto QUIT ENDIF GOTO COPYFREECELL ' sz$ = UIStartDlg(CUIDLL$, FREECELLPATH+LANGUE, "FEditDlgProc", HELPFREECELL+LANGUE, HELPPROC$) ' IF sz$ = "CONTINUE" THEN ' DESTVOLUMM$ = GetSymbolValue("EditTextOut") ' IF MID$(DESTVOLUMM$, LEN(DESTVOLUMM$), 1) <> "\" THEN ' DESTVOLUMM$ = DESTVOLUMM$ + "\" ' END IF ''Validate new path. ' IF IsDirWritable(DESTVOLUMM$) = 0 THEN ' GOSUB BADPATH ' GOTO GETFREEPATHL1 ' END IF ' UIPop 1 ' GOTO COPYFREECELL ' ELSEIF sz$ = "REACTIVATE" THEN ' GOTO GETFREEPATHL1 ' ELSEIF sz$ = "EXIT" THEN ' UIPop 1 ' GOTO QUIT ' END IF COPYFREECELL: if MiniInstall=2 then TOTO$=CustomInst(DESTVOLUMM$,0) IF TOTO$ = "EXIT" THEN GOTO QUIT ELSEIF TOTO$="BACK" THEN GOTO GETFREEPATHL1 ENDIF ENDIF FONTES$ = DESTVOLUMM$ + "FONTS\" LBM$ = DESTVOLUMM$ + "LBM\" IMAGES$ = DESTVOLUMM$ + "IMAGES\" MAPPING$ = DESTVOLUMM$ + "MAPPINGS\" MAQUETTES$ = DESTVOLUMM$ + "MODELS\" ClearCopyList CreateDir DESTVOLUMM$, cmoNone CreateDir IMAGES$, cmoNone CreateDir MAPPING$, cmoNone CreateDir MAQUETTES$, cmoNone SrcDir$ = GetSymbolValue("STF_SRCDIR") ERR = 0 ' IF TestCheckBox(1)="ON" THEN IF MiniInstall%= 0 THEN AddSectionFilesToCopyList "IMAGESVITAL", SrcDir$, DESTVOLUMM$ AddSectionFilesToCopyList "PROGRAMMES", SrcDir$, DESTVOLUMM$ AddSectionFilesToCopyList "HELP", SrcDir$, DESTVOLUMM$ AddSectionFilesToCopyList "MODELS", SrcDir$, MAQUETTES$ IF LANGUE=0 THEN AddSectionFilesToCopyList "PROGENG", SrcDir$, DESTVOLUMM$ ELSE AddSectionFilesToCopyList "PROGFRA", SrcDir$, DESTVOLUMM$ ENDIF ELSEIF MiniInstall%=1 THEN AddSectionFilesToCopyList "IMAGESVITAL", SrcDir$, DESTVOLUMM$ ELSEIF MiniInstall% = 2 THEN 'Custom Installation IF GetListItem("CheckItemsState",2)= "ON" THEN AddSectionFilesToCopyList "LeatherMapp", SrcDir$, MAPPING$+"LEATHER\" AddSectionFilesToCopyList "MAPROUGH", SrcDir$, MAPPING$+"ROUGH\" ' AddSectionFilesToCopyList "MappList", SrcDir$, MAPPING$ AddSectionFilesToCopyList "MAPSKY", SrcDir$, MAPPING$+"SKY\" AddSectionFilesToCopyList "TilesMapp", SrcDir$, MAPPING$+"TILES\" AddSectionFilesToCopyList "MAPWALL", SrcDir$, MAPPING$+"WALL\" AddSectionFilesToCopyList "MAPWOOD", SrcDir$, MAPPING$+"WOOD\" AddSectionFilesToCopyList "MAPWATER", SrcDir$, MAPPING$+"WATER\" AddSectionFilesToCopyList "MAPMARBLE", SrcDir$, MAPPING$+"MARBLE\" AddSectionFilesToCopyList "MAPFIRE", SrcDir$, MAPPING$+"FIRE\" AddSectionFilesToCopyList "MAPSTONE", SrcDir$, MAPPING$+"STONE\" AddSectionFilesToCopyList "MAPVARIED", SrcDir$, MAPPING$+"VARIED\" AddSectionFilesToCopyList "MAPFILTER", SrcDir$, MAPPING$+"FILTER\" ENDIF IF GetListItem("CheckItemsState",3)= "ON" THEN AddSectionFilesToCopyList "MODELS", SrcDir$, MAQUETTES$ ENDIF IF GetListItem("CheckItemsState",4)= "ON" THEN AddSectionFilesToCopyList "IMAGES", SrcDir$, IMAGES$ ENDIF IF GetListItem("CheckItemsState",5)= "ON" THEN AddSectionFilesToCopyList "IMAGESL", SrcDir$, IMAGES$ ENDIF IF GetListItem("CheckItemsState",6)= "ON" THEN AddSectionFilesToCopyList "ANIMS", SrcDir$, DESTVOLUMM$ + "ANIMS\" ENDIF END IF ERR = 0 DstDrvLtr$=MID$(DESTVOLUMM$, 1, 1) NumDstDrv=ASC(DstDrvLtr$)-ASC("A")+1 ReqSpace=GetCopyListCost("EXTRA","COST","NEEDED") ReqSpace=VAL(GetListItem("COST",NumDstDrv)) DriveSpace=GetFreeSpaceForDrive(DstDrvLtr$) IF DriveSpace < ReqSpace THEN IF LANGUE=0 THEN MsgDrvSpace$=" There is only "+STR$(DriveSpace)+" bytes free on the "+DstDrvLtr$+" drive :"+STR$(ReqSpace)+" bytes are required." ELSE MsgDrvSpace$="Il y a seulement "+STR$(DriveSpace)+" octets libres sur "+DstDrvLtr$+":"+STR$(ReqSpace)+" octets sont nΘcessaires." ENDIF i%=DoMsgBox(MsgDrvSpace$, "VOLUMM4D 3.0 Installation", MB_OK+MB_TASKMODAL) GOTO GETFREEPATHL1 END IF CopyFilesInCopyList '' If error copying FreeCell, not a fatal error. Win32s is already installed. IF ERR <> 0 THEN ERR = 0 GOTO QUIT END IF ERR = 0 IF (MiniInstall%=1) THEN EXEPATH$=SrcDir$ EXEPATH$ = MID$(SrcDir$, 1, 1) EXEPATH$ = EXEPATH$ + ":\VOLUMM\VOLUMM4D\" ELSE EXEPATH$=DESTVOLUMM$ ENDIF 'IF (MiniInstall% = 1) OR (MiniInstall% = 0 AND GetListItem("CheckItemsState",1)= "ON") THEN IF TestCheckBox(1)="ON" THEN CreateProgmanGroup "VOLUMM4D", "", cmoNone ShowProgmanGroup "VOLUMM4D", 1, cmoNone CreateProgmanItem "VOLUMM4D", "Modeler", EXEPATH$ + "MODELER.EXE", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Renderer", EXEPATH$ + "V2.EXE", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Player", EXEPATH$ + "VPLAY.EXE", "", cmoOverwrite IF LANGUE=0 THEN CreateProgmanItem "VOLUMM4D", "Tutorial", EXEPATH$ + "TUTORENG.HLP", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Modeler Documentation", EXEPATH$ + "ANV1.HLP", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Renderer Documentation", EXEPATH$ + "V2ENG.HLP", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Player Documentation", EXEPATH$ + "VPENG.HLP", "", cmoOverwrite ELSE CreateProgmanItem "VOLUMM4D", "Guide utilisateur", EXEPATH$ + "TUTORFRA.HLP", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Documentation Modeler", EXEPATH$ + "FRV1.HLP", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Documentation Renderer", EXEPATH$ + "V2FRA.HLP", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Documentation Player", EXEPATH$ + "VPFRA.HLP", "", cmoOverwrite ENDIF DEMOPATH$=SrcDir$ DEMOPATH$ = MID$(SrcDir$, 1, 1) DEMOPATH$ = DEMOPATH$ + ":\VOLUMM\VOLUMM4D\" IF LANGUE=0 THEN CreateProgmanItem "VOLUMM4D", "VOLUMM4D Overview", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"OVERVIEW.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Visualize functions", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"VISUAL.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Modelize functions", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"MODEL.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Material functions", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"MATIERE.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Animation functions", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"anim.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Content", DESTVOLUMM$+"CDROM.WRI", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Purchase Order", DESTVOLUMM$+"COMMANDE.WRI", "", cmoOverwrite ELSE CreateProgmanItem "VOLUMM4D", "PrΘsentation GΘnΘrale", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"OVERVIEW.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Fonctions Visualisation", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"VISUAL.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Fonctions Modelisation", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"MODEL.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "DΘfinition des materiaux", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"MATIERE.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Fonctions Animation", DEMOPATH$+"SCRNCAMP.EXE /SC "+DEMOPATH$+"anim.SCM", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Contenu", DESTVOLUMM$+"CDROM.WRI", "", cmoOverwrite CreateProgmanItem "VOLUMM4D", "Bon de Commande", DESTVOLUMM$+"COMMANDE.WRI", "", cmoOverwrite ENDIF REPINI$ = GetWindowsDir() REP$=MID$(DESTVOLUMM$,LEN(DESTVOLUMM$),1) IF REP$="\" THEN REPOK$=MID$(DESTVOLUMM$,1,LEN(DESTVOLUMM$)-1) ELSE REPOK$=DESTVOLUMM$ END IF REPINI$=MakePath(REPINI$,"VOLUMM4D.INI") CreateIniKeyValue REPINI$, "VOLUMM4D", "CHEMIN_DATA", REPOK$, cmoOverwrite 'Si pas MiniInstall EXEPATH$ et DESTVOLUMM$ identiques 'Sinon EXEPATH$ pointe sur le CD ROM REP$=MID$(EXEPATH$,LEN(EXEPATH$),1) IF REP$="\" THEN REPOK$=MID$(EXEPATH$,1,LEN(EXEPATH$)-1) ELSE REPOK$=EXEPATH$ END IF CreateIniKeyValue REPINI$, "VOLUMM4D", "CHEMIN", REPOK$, cmoOverwrite CreateIniKeyValue REPINI$, "VOLUMM4D", "VERSION","3.1.01", cmoOverwrite CreateIniKeyValue REPINI$, "VOLUMM4D", "DBUF","5000", cmoOverwrite IF (LANGUE=0) THEN CreateIniKeyValue REPINI$, "VOLUMM4D", "LANGUE","ENG", cmoOverwrite ELSE CreateIniKeyValue REPINI$, "VOLUMM4D", "LANGUE","FRA", cmoOverwrite ENDIF CreateIniKeyValue REPINI$, "V1_ENV", "MainWindow", "633 1 0 479", cmoOverwrite CreateIniKeyValue REPINI$, "V1_ENV", "NbWin", "1", cmoOverwrite CreateIniKeyValue REPINI$, "WIN_1", "PH", "0", cmoOverwrite CreateIniKeyValue REPINI$, "WIN_1", "TH", "0", cmoOverwrite CreateIniKeyValue REPINI$, "WIN_1", "ZOOM", "1000", cmoOverwrite CreateIniKeyValue REPINI$, "WIN_1", "PERS", "2000", cmoOverwrite CreateIniKeyValue REPINI$, "WIN_1", "CIBLE", "0.000000 0.000000 0.000000", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "MainWindow", "528 498 404 641", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "REDIM_WINDOW", "1", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "LOUPE_WINDOW", "1", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "SAVE_OPTS_ON_QUIT", "1", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "RECAPITULATIF", "1", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "MAX_OCTREE_DEPTH", "4", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "OCTREE_MAX_NODE_ELEM", "8", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "MAX_ANTIALIAS_DEPTH", "3", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "DITHER256", "0", cmoOverwrite CreateIniKeyValue REPINI$, "V2_ENV", "LAST_RPJ", "DEFAULT", cmoOverwrite CreateIniKeyValue REPINI$, "VPLAY_ENV", "MainWindow", "334 46 180 217", cmoOverwrite CreateIniKeyValue REPINI$, "VPLAY_ENV", "DITHER256", "0", cmoOverwrite ENDIF '' Only put up success dialog if icon added to group 'truc%=WinExec("WRITE "+DEMOPATH$+"cdrom.wri",5) IF ERR = 0 THEN IF LANGUE=0 THEN i% = DoMsgBox("VOLUMM4D 3.0 installation done.", "VOLUMM4D 3.0 Installation", MB_OK+MB_TASKMODAL) ELSE i% = DoMsgBox("Installation de VOLUMM4D 3.0 terminΘe.", "VOLUMM4D 3.0 Installation", MB_OK+MB_TASKMODAL) ENDIF ExitCode% = 700 IF Has87MathChip() = 0 THEN PrType%=GetProcessorType() IF LANGUE=0 THEN MsgProc$="without a mathematic coprocessor. For best usage of VOLUMM4D we suggest that you add a " IF PrType=3 THEN MsgProc$="Your PC have a 386 processor type "+MsgProc$+" 387 coprocessor." ELSEIF PrType=4 THEN MsgProc$="Your PC have a 486 SX processor type "+MsgProc$+" 487 coprocessor or a DX2 overdrive." ELSE MsgProc$="Your PC have a processor "+MsgProc$+" coprocessor." END IF i% = DoMsgBox(MsgProc$, "VOLUMM4D 3.0 Installation", MB_OK+MB_TASKMODAL) ELSE MsgProc$="sans coprocesseur mathΘmatique.Pour que vous tiriez au mieux parti de VOLUMM4D nous vous recommandons d'y adjoindre un " IF PrType=3 THEN MsgProc$="Votre PC est equipΘ d'un processeur de type 386 "+MsgProc$+" coprocesseur 387." ELSEIF PrType=4 THEN MsgProc$="Votre PC est equipΘ d'un processeur de type 486 SX "+MsgProc$+" coprocesseur 487 ou un overdrive DX2." ELSE MsgProc$="Votre PC est equipΘ d'un processeur "+MsgProc$+" coprocesseur." END IF i% = DoMsgBox(MsgProc$, "Installation de VOLUMM4D 3.0", MB_OK+MB_TASKMODAL) END IF END IF END IF QUIT: '' Install error handler for final message box routines ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = ExitCode% ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ExitCode% = EXITQUIT ELSE dlg% = EXITFAILURE ExitCode% = EXITQUIT END IF QUITL1: IF WIN32ENABLED% = 1 THEN UIPop 1 END END IF sz$ = UIStartDlg(CUIDLL$, dlg%+LANGUE, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 IF ExitCode% = EXITSUCCESS THEN RebootSystem CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite IF LANGUE=0 THEN i% = DoMsgBox("Win32s is not properly configured and Win32s Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL) ELSE i% = DoMsgBox("Win32s n'est pas configurΘ correctement L'installation doit Ωtre relancΘe.", "Impossible de rΘinitialiser Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL) ENDIF END IF END '' Fatal error handler for error message routine ERRQUIT: IF LANGUE=0 THEN i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) ELSE i% = DoMsgBox("Les fichiers sources sont corrompu!", "Message Setup", MB_OK+MB_TASKMODAL+MB_ICONHAND) ENDIF END '' Bypass run-time errors. Let final dialog box display fatal error message. ERRNORMAL: '' Check if user cancelled setup IF ERR = STFQUIT THEN GOTO QUIT END IF RESUME NEXT BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH+LANGUE, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADPATH END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, QUITTER+LANGUE, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Builds the copy list and performs all installation operations. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB Install STATIC SrcDir$ = GetSymbolValue("STF_SRCDIR") '' Check if overwrite required. IF AlwaysCopy% = 1 THEN '' Use file layout sections that specify ALWAYS overwrite files AddSectionFilesToCopyList "_WindowsSystem", SrcDir$, DESTSYS$ AddSectionFilesToCopyList "_WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\" ELSE '' Use file layout sections that specify OLDER file version/time check AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$ AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\" END IF SetRestartDir GetWindowsDir() CopyFilesInCopyList END SUB SUB UpdateSystemIni STATIC VxDPath$ = DEST32S$ + "W32S.386" SystemIniPath$ = GetWindowsDir() t% = MakeSystemIni(SystemIniPath$, VxdPath$) END SUB SUB RebootSystem STATIC ' Check if any files were locked during install. If the RestartList ' is not empty, ExitExecRestart() will restart Windows, cleanup setup ' files, and copy over locked files before Windows restarts. i% = RestartListEmpty() IF i% = 0 THEN ' ExitExecRestart() only returns if applications refuse to be shutdown. ' Win32s is installed but will not operate until Windows is restarted ' and the Win32s VxD is loaded. i% = ExitExecRestart() ELSE ' If the RestartList list is empty, it is necessary to restart windows ' directly. The MSSETUP program creates _MSRSTRT.EXE and _MSSETUP.BAT ' in the restart directory. This program should be exec'd to handle ' proper MSSETUP cleanup (temp files) and restart Windows. i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" ) ENDIF END SUB '** '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION '** '** Purpose: '** Displays the custom installation dialog box '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION CustomInst (Path$, Win32Size%) STATIC AS STRING SrcDir$ = GetSymbolValue("STF_SRCDIR") IF LANGUE=0 THEN KBFREE$=" Kb Free" KBNEEDED$=" Kb Needed" ELSE KBFREE$=" Ko Libres" KBNEEDED$=" Ko NΘcessaires" ENDIF IMAGES$ = Path$ + "IMAGES\" MAPPING$ = Path$ + "MAPPINGS\" MAQUETTES$ = Path$ + "MODELS\" SetSymbolValue "StatusItemsText", "" SetSymbolValue "CheckItemsState", "" SetSymbolValue "DriveStatusText", "" DstDrvLtr$=MID$(Path$, 1, 1) DriveSpace=GetFreeSpaceForDrive(DstDrvLtr$) NumDstDrv=ASC(DstDrvLtr$)-ASC("A")+1 Win32sCost&=0 if Win32Size%=1 THEN WinDrive$ = MID$(GetWindowsDir, 1, 1) NumWinDrv=ASC(WinDrive$)-ASC("A")+1 ClearCopyList 'Win32S AddSectionFilesToCopyList "_WindowsSystem", SrcDir$, DESTSYS$ AddSectionFilesToCopyList "_WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\" Win32sCost&=GetCopyListCost("EXTRA","COST","NEEDED") Win32sCost&=VAL(GetListItem("COST",NumWinDrv)) if WinDrive$<>DstDrvLtr$ THEN WinDriveSpace=GetFreeSpaceForDrive(WinDrive$) ELSE WinDriveSpace=-1 ENDIF ELSE WinDriveSpace=-1 ENDIF ClearCopyList 'vital file always installed AddSectionFilesToCopyList "IMAGESVITAL", SrcDir$, DESTVOLUMM$ AddSectionFilesToCopyList "PROGRAMMES", SrcDir$, DESTVOLUMM$ AddSectionFilesToCopyList "HELP", SrcDir$, DESTVOLUMM$ IF LANGUE=0 THEN AddSectionFilesToCopyList "PROGENG", SrcDir$, DESTVOLUMM$ ELSE AddSectionFilesToCopyList "PROGFRA", SrcDir$, DESTVOLUMM$ ENDIF VitalCost&=GetCopyListCost("EXTRA","COST","NEEDED") VitalCost&=VAL(GetListItem("COST",NumDstDrv)) AddListItem "StatusItemsText", STR$(VitalCost&/1024)+KBNEEDED$ ClearCopyList 'mappings AddSectionFilesToCopyList "LeatherMapp", SrcDir$, MAPPING$+"LEATHER\" AddSectionFilesToCopyList "MAPROUGH", SrcDir$, MAPPING$+"ROUGH\" 'AddSectionFilesToCopyList "MappList", SrcDir$, MAPPING$ AddSectionFilesToCopyList "MAPSKY", SrcDir$, MAPPING$+"SKY\" AddSectionFilesToCopyList "TilesMapp", SrcDir$, MAPPING$+"TILES\" AddSectionFilesToCopyList "MAPWALL", SrcDir$, MAPPING$+"WALL\" AddSectionFilesToCopyList "MAPWOOD", SrcDir$, MAPPING$+"WOOD\" AddSectionFilesToCopyList "MAPWATER", SrcDir$, MAPPING$+"WATER\" AddSectionFilesToCopyList "MAPMARBLE", SrcDir$, MAPPING$+"MARBLE\" AddSectionFilesToCopyList "MAPFIRE", SrcDir$, MAPPING$+"FIRE\" AddSectionFilesToCopyList "MAPSTONE", SrcDir$, MAPPING$+"STONE\" AddSectionFilesToCopyList "MAPVARIED", SrcDir$, MAPPING$+"VARIED\" AddSectionFilesToCopyList "MAPFILTER", SrcDir$, MAPPING$+"FILTER\" MappCost&=GetCopyListCost("EXTRA","COST","NEEDED") MappCost&=VAL(GetListItem("COST",NumDstDrv)) AddListItem "StatusItemsText", STR$(MappCost&/1024)+KBNEEDED$ ClearCopyList 'models AddSectionFilesToCopyList "MODELS", SrcDir$, MAQUETTES$ ModelCost&=GetCopyListCost("EXTRA","COST","NEEDED") ModelCost&=VAL(GetListItem("COST",NumDstDrv)) AddListItem "StatusItemsText", STR$(ModelCost&/1024)+KBNEEDED$ ClearCopyList 'small images AddSectionFilesToCopyList "IMAGES", SrcDir$, IMAGES$ ImagesCost&=GetCopyListCost("EXTRA","COST","NEEDED") ImagesCost&=VAL(GetListItem("COST",NumDstDrv)) AddListItem "StatusItemsText",STR$(ImagesCost&/1024)+KBNEEDED$ ClearCopyList 'large images AddSectionFilesToCopyList "IMAGESL", SrcDir$, IMAGES$ ImagesLCost&=GetCopyListCost("EXTRA","COST","NEEDED") ImagesLCost&=VAL(GetListItem("COST",NumDstDrv)) AddListItem "StatusItemsText", STR$(ImagesLCost&/1024)+KBNEEDED$ 'les HELP SONT INSTALLES SYSTEMATIQUEMENT 'ClearCopyList 'help files 'AddSectionFilesToCopyList "HELP", SrcDir$, Path$ 'HelpCost&=GetCopyListCost("EXTRA","COST","NEEDED") 'HelpCost&=VAL(GetListItem("COST",NumDstDrv)) 'AddListItem "StatusItemsText", "Needs "+STR$(HelpCost&/1024)+" Kb." ClearCopyList 'anims AddSectionFilesToCopyList "ANIMS", SrcDir$, Path$ + "ANIMS\" AnimCost&=GetCopyListCost("EXTRA","COST","NEEDED") AnimCost&=VAL(GetListItem("COST",NumDstDrv)) AddListItem "StatusItemsText", STR$(AnimCost&/1024)+KBNEEDED$ AddListItem "CheckItemsState", "ON" ''Executables et doc AddListItem "CheckItemsState", "ON" ''mappings AddListItem "CheckItemsState", "ON" ''models files AddListItem "CheckItemsState", "ON" ''small images AddListItem "CheckItemsState", "OFF" ''large images AddListItem "CheckItemsState", "OFF" ''animation IF LANGUE=0 THEN AddListItem "DriveStatusText", "Install Drive: ["+DstDrvLtr$+":]" ELSE AddListItem "DriveStatusText", "Destination: ["+DstDrvLtr$+":]" ENDIF AddListItem "DriveStatusText", "6 Mb needed" AddListItem "DriveStatusText", STR$(DriveSpace/1024)+KBFREE$ IF WinDriveSpace=-1 OR Win32Size%=0 THEN AddListItem "DriveStatusText", "" AddListItem "DriveStatusText", "" AddListItem "DriveStatusText", "" ELSE AddListItem "DriveStatusText", "Windows Drive ["+WinDrive$+":]" AddListItem "DriveStatusText", STR$(Win32sCost&/1024)+KBNEEDED$ AddListItem "DriveStatusText", STR$(WinDriveSpace/1024)+KBFREE$ ENDIF AddListItem "DriveStatusText", Path$ CustomInst="OK" BOUCLECUSTOM: IF WinDrive$<>DstDrvLtr$ THEN TotalNeed&=0 ELSE if Win32Size%=1 THEN TotalNeed&=Win32sCost& 'Taille de win32s en plus sur le lecteur destination ELSE TotalNeed&=0 ENDIF ENDIF IF GetListItem("CheckItemsState",1)= "ON" THEN TotalNeed&=TotalNeed&+VitalCost& ENDIF IF GetListItem("CheckItemsState",2)= "ON" THEN TotalNeed&=TotalNeed&+MappCost& ENDIF IF GetListItem("CheckItemsState",3)= "ON" THEN TotalNeed&=TotalNeed&+ModelCost& ENDIF IF GetListItem("CheckItemsState",4)= "ON" THEN TotalNeed&=TotalNeed&+ImagesCost& ENDIF IF GetListItem("CheckItemsState",5)= "ON" THEN TotalNeed&=TotalNeed&+ImagesLCost& ENDIF IF GetListItem("CheckItemsState",6)= "ON" THEN TotalNeed&=TotalNeed&+AnimCost& ENDIF ReplaceListItem "DriveStatusText", 2, STR$(TotalNeed&/(1024))+KBNEEDED$ sz$ = UIStartDlg("mscuistf.dll", 6410+LANGUE, "FCustInstDlgProc", 6420+LANGUE, "FHelpDlgProc") ''BC$=GetSymbolValue("ButtonChecked") IF sz$ <> "CONTINUE" THEN 'ReplaceListItem "DriveStatusText", 7,sz$ IF MID$(sz$,1,3) = "CHK" THEN NumCHK%=VAL(MID$(sz$,LEN(sz$),1)) IF GetListItem("CheckItemsState",NumCHK)= "OFF" THEN ReplaceListItem "CheckItemsState", NumCHK% ,"ON" ELSE ReplaceListItem "CheckItemsState", NumCHK% , "OFF" ENDIF ELSEIF sz$ = "EXIT" THEN CustomInst="EXIT" GOTO sortie ELSEIF sz$ = "BACK" THEN CustomInst="BACK" GOTO sortie ENDIF GOTO BOUCLECUSTOM ENDIF IF GetListItem("CheckItemsState",1)= "OFF" AND VitalCost&<>0 THEN IF LANGUE=0 THEN i% = DoMsgBox("If you don't install the executable and help files. You will need the CD in DRIVE to use VOLUMM4D. Is that OK ?","WARNING",MB_TASKMODAL+MB_ICONQUESTION+1) ELSE i% = DoMsgBox("Si vous n'installer pas les executables. Vous devrez avoir le CD-ROM dans le lecteur pour utiliser VOLUMM4D. Ok ?", "ATTENTION", MB_TASKMODAL+MB_ICONQUESTION+1) ENDIF ' IF LANGUE=0 THEN ' i% = DoMsgBox("The executable and help files are not installed in this path. Are you sure you want to continue ?","NECESSARY MINIMUM INSTALLATION",MB_TASKMODAL+MB_ICONQUESTION+1) ' ELSE ' i% = DoMsgBox("Les programmes et documentations ne sont pas installΘs dans ce repertoire. Etes-vous sur de vouloir continuer ?", "INSTALLATION MINIMUM NECESSAIRE", MB_TASKMODAL+MB_ICONQUESTION+1) ' ENDIF if i%<>1 THEN goto BOUCLECUSTOM ENDIF ENDIF sortie: ReqSpace=TotalNeed& UIPop 1 END FUNCTION FUNCTION GetV4DPath (reset%) STATIC AS STRING if reset=1 then GETV4DPATH: SetSymbolValue "EditTextIn", DESTVOLUMM$ SetSymbolValue "EditFocus", "END" endif GETV4DPATHL1: sz$ = UIStartDlg("mscuistf.dll", FREECELLPATH+LANGUE, "FEditDlgProc", HELPFREECELL+LANGUE, "FHelpDlgProc") IF sz$ = "CONTINUE" THEN DESTVOLUMM$ = GetSymbolValue("EditTextOut") IF MID$(DESTVOLUMM$, LEN(DESTVOLUMM$), 1) <> "\" THEN DESTVOLUMM$ = DESTVOLUMM$ + "\" END IF ''Validate new path. IF IsDirWritable(DESTVOLUMM$) = 0 THEN GOSUB BADPATH GOTO GETV4DPATHL1 END IF UIPop 1 GetV4DPath=sz$ RETURN ELSEIF sz$ = "REACTIVATE" THEN GOTO GETV4DPATHL1 ELSEIF sz$ = "EXIT" THEN UIPop 1 GetV4DPath="EXIT" RETURN END IF goto sortie BADPATH: sz$ = UIStartDlg("mscuistf.dll", 6400+LANGUE, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADPATH END IF UIPop 1 RETURN sortie: END FUNCTION '** '** Purpose: '** Teste la case α coche BoxNum de la procΘdure personalisΘ '** avec support de l'installation minimum pour eviter les erreur d'Item List vide '** Returns: '** ON/OFF. '************************************************************************* FUNCTION TestCheckBox (BoxNum%) STATIC AS STRING IF (MiniInstall% <> 2) THEN IF BoxNum%=1 THEN TestCheckBox="ON" ELSE TestCheckBox="OFF" ENDIF ELSE TestCheckBox=GetListItem("CheckItemsState",BoxNum%) ENDIF END FUNCTION