home *** CD-ROM | disk | FTP | other *** search
/ PhotoFinish 4.0 (French) / Photofinish-v4-FrenchVersion-Win31.iso / setup.rul < prev    next >
Text File  |  1996-11-28  |  12KB  |  384 lines

  1. /*----------------------------------------------------------------------------*\
  2.  *
  3.  *  Softkey International 
  4.  *   Strategic Products Group
  5.  *    Cross Platform Team
  6.  *
  7.  *    File Name:  SETUP.RUL
  8.  *
  9.  *  Description:  Main script file for the 32-bit Cross-platform Installation
  10.  *
  11.  *
  12.  *
  13.  *       Author: Thomas Quinn, Install Engineer         Date:  10 July, 1996
  14.  *
  15.  *     Comments: Based on IS xplatform, for generic installer FirstDraft
  16.  *
  17.  *     Modified:  10 July, 1996
  18.  *
  19. \*----------------------------------------------------------------------------*/
  20.  
  21. declare
  22.  
  23.         #include "sddialog.h"
  24.         #include "instw32s.h"
  25.         #include "StrFmPrf.h"
  26.         #include "FileSet.h"
  27.         #include "init.h"
  28.         #include "ids.h"
  29.         #include "registry.h"
  30.         #include "AddIcons.h"
  31.         #include "ErrMsg.h"
  32.         #include "AppSpec.h"
  33.         #include "Sysfile.h"
  34.  
  35.         #include "strings.h"
  36.         string szDestTitle, szDestMsg1, szDestMsg2, szDestMsg3, szLicenseStr;
  37.         string szFinTitle, szFinMsg1, szFinMsg2, szFinMsgBottom;
  38.         string szCmdLine, svDir, svFolder, szTemp, svResult, svTypeResult, szLicenseFile;
  39.         string szWin32sVer, szFileSetName, szProgram, szCommand, szMessage, szMsgTitle;
  40.         string szDefLogPath, szLogPath, szDefAppPath, szFullKey, szLaunchApp;
  41.         STRING szOpt1,szOpt2,szReadMeFileName, svQuit32sMsg;
  42.         number nResult, nvResult, nvTypeResult;
  43.         NUMBER nPlatform, nWin32sBuild, ISVersion;
  44.         NUMBER nExtx, nExty, nAddExtx, nAddExty;
  45.         BOOL bvOpt1, bvOpt2, bSpaceOk, bExplorer;
  46.         BOOL bNeed32s, bNo32s;
  47.         HWND hWindow;
  48.         prototype ConfirmShortPath( STRING );
  49.         prototype EarlyCancel();
  50.         prototype BOOL user.BringWindowToTop( HWND );
  51. program
  52.         start:
  53.         
  54.         Disable( BACKGROUND );
  55.         // See Init.rul, Init Sets up Screen, Initializes app variables,
  56.         // Sets Global OS system variables, and checks requirements.
  57.         // Contains some functionality previously in Instw32s.rul
  58.         Init();
  59.  
  60.         //SetHandler to remove reg entry made in init, if canceled, q.v.
  61.         Handler( EXIT, OnEarlyCancel );
  62.  
  63.         if (( nPlatform = IS_WINDOWSNT ) || ( nPlatform = IS_WINDOWS95 )) then
  64.     goto ProceedFurther;
  65.     endif;
  66. /*---------------------------------------------------------------------*\
  67.  * If the target system operating system is neither Windows NT nor
  68.  * Windows 95, and if the Win32s version number less than 1.25, call
  69.  * _InstallWin32s to install or upgrade Win32s on the target system.
  70. \*---------------------------------------------------------------------*/
  71. Need32s:
  72.     if ( bNo32s ) then
  73.         MsgStrFromProfile ( "NeedWin32s", NEEDWIN32S_MSG );
  74.         if ( AskYesNo(NEEDWIN32S_MSG, YES ) = NO ) then
  75.             goto OnQuit32s;
  76.         else
  77.             goto Install32s;
  78.         endif;
  79.     endif;
  80.         if (( nPlatform != IS_WINDOWSNT ) && ( nPlatform != IS_WINDOWS95 )) then
  81.         // Get the version number of Win32s, if installed.
  82.         // MyGetWin32sVerInfo also retrieves the Win32s build number.
  83.             //bNeedWin32s = _MyGetWin32sVerInfo();
  84.             if ( bNeed32s ) then
  85.                 MsgStrFromProfile ( "OldWin32s", NEEDWIN32S_MSG );
  86.                 if ( AskYesNo(NEEDWIN32S_MSG, YES ) = NO ) then
  87.                 // If the user does not want to install Win32s, bypass the Win32s
  88.                 // installation section of SETUP.RUL.
  89.                 goto ProceedFurther;
  90.                 else
  91.                 goto Install32s;
  92.                 endif;
  93.             endif;
  94.         endif;
  95.  
  96.         goto Install32s;
  97.  
  98. OnQuit32s:
  99.         MsgStrFromProfile ( "Quit32s", svQuit32sMsg );
  100.         if ( AskYesNo( svQuit32sMsg, NO ) = YES ) then
  101.             exit;
  102.         else
  103.             goto Need32s;
  104.         endif;
  105.     
  106.  
  107.         //could be the second time through, after installing win32s
  108.         //need to reset win.ini by calling these functions again so even if we
  109.         // don't need win32s we still need to call this
  110. Install32s:
  111.         //GetSystemInfo( OS, nvResult, svResult );
  112.         if (( nPlatform != IS_WINDOWSNT ) && ( nPlatform != IS_WINDOWS95 )) then
  113.                 // Specify the Win32s version you are installing (1.30c here).
  114.                 // If Win32s installation fails, exit.
  115.                 if !( _InstallWin32s( CURRENT_WIN32S_VERSION ) ) then
  116.                         _ErrMsg( "ERR_WIN32SFAIL", TRUE );
  117.                         exit;
  118.         endif;
  119.  
  120.                // _RestartAfterInstall() restarts Windows and modifies WIN.INI
  121.                // so the 32-bit Cross-platform Installation setup starts again, 
  122.                // allowing installation to continue.
  123.                _RestartAfterInstall();
  124.     else
  125.         //Set nInstallCompleted to TRUE, as we don't need 32s
  126.         nInstallCompleted = TRUE;
  127.         endif;
  128.  
  129.  
  130.         // If Win32s is installed correctly, install the 32-bit application.
  131.  
  132. ProceedFurther:
  133.         
  134.         Enable( LOGGING );
  135.         SdWelcome( "", "" );
  136.  
  137.  
  138. ConfirmLicense:
  139.         DlgStrFromProfile( "LicenseStr", szLicenseStr );
  140.         szLicenseFile = SUPPORTDIR ^ "Agree.txt";
  141.         if( SdLicense( "", szLicenseStr, "", szLicenseFile ) = BACK ) then
  142.             goto ProceedFurther;
  143.         endif;
  144.     
  145.  
  146.  
  147.         //set the destination location.
  148.         svDir = WINDISK ^ DEFAULT_PATH;
  149.  
  150.         DlgStrFromProfile( "DestinationTitle", szDestTitle );
  151.         DlgStrFromProfile( "DestinationMsg1", szDestMsg1 );
  152.         DlgStrFromProfile( "DestinationMsg2", szDestMsg2 );
  153.         DlgStrFromProfile( "DestinationMsg3", szDestMsg3 );
  154.  
  155. GetDestPath:
  156.         if ( SdAskDestPath( szDestTitle, szDestMsg1 + szDestMsg2 + szDestMsg3, svDir, 0 ) = BACK ) then
  157.             goto ConfirmLicense; 
  158.         else
  159.             
  160.             //Make sure we have a valid path
  161.             if( ( ( nPlatform != IS_WINDOWSNT ) && ( nPlatform != IS_WINDOWS95 ) ) ) then
  162.                 if( !ConfirmShortPath( svDir ) ) then
  163.                     _ErrMsg( "NoLongNames", FALSE );
  164.                     goto GetDestPath;
  165.                 endif;
  166.             endif;
  167.             //Confirm directory creation
  168.             if( ExistsDir( svDir ) = NOTEXISTS ) then
  169.                 nResult = SdConfirmNewDir( "", svDir, 0 );
  170.                 if(  nResult = NO ) then
  171.                     goto GetDestPath;
  172.                 elseif( nResult < 0 ) then
  173.                     _ErrMsg( "CantCreatePath", FALSE );
  174.                     goto GetDestPath;
  175.                 endif;
  176.             endif;
  177.             //Confirm file space is adequate
  178.             bSpaceOk = TRUE;
  179.             if( GetDiskSpace( svDir ) < SPACE_REQUIRED ) then
  180.                 MsgStrFromProfile( "NotEnoughSpaceTitle", szMsgTitle );
  181.                 SetDialogTitle( DLG_ASK_YESNO, szMsgTitle );
  182.                 if( _AskYesNoFmt( "NotEnoughSpace", svDir ) = NO ) then
  183.                     SetDialogTitle( DLG_ASK_YESNO, "" );
  184.                     goto GetDestPath;
  185.                 else
  186.                     SetDialogTitle( DLG_ASK_YESNO, "" );
  187.                 endif;
  188.             endif;
  189.                     
  190.         endif;
  191.         
  192.         //Reset Handler, as deinstall start will take care of exit cleanup.
  193.         Handler( EXIT, -1 );
  194.         
  195.         StrRemoveLastSlash( svDir );
  196.  
  197.         //Get Program Folder.
  198.         svFolder = DEFAULT_FOLDER;
  199.         if ( SdSelectFolder( "","",svFolder ) = BACK ) then
  200.             goto GetDestPath;
  201.         endif;
  202.  
  203.  
  204.         // Define the file set, which is used to transfer application files
  205.         // to the target system.
  206.  
  207.         RegDBSetItem( REGDB_APPPATH, svDir );
  208.         szDefAppPath = svDir ^ PRODUCT_KEY;
  209.         RegDBSetItem( REGDB_APPPATH_DEFAULT, szDefAppPath );
  210.         CreateUncompFileSet( nPlatform, svDir, szFileSetName );
  211.         
  212.         szDefLogPath = WINDIR;
  213.         DeinstallStart( szDefLogPath, szLogPath, UNINSTALL_KEY, 0 );
  214.         RegDBSetItem( REGDB_UNINSTALL_NAME, UNINSTALL_NAME );
  215.         
  216.         //Place the stuff
  217.         GetExtents( nExtx, nExty );
  218.         nAddExtx = nExtx / 15;
  219.         nAddExty = nExty / 15; 
  220.         
  221.         PlaceWindow( STATUS, nAddExtx, nAddExty, LOWER_RIGHT );
  222.         PlaceWindow( FEEDBACK, nAddExtx, nAddExty, LOWER_LEFT );
  223.  
  224.         nAddExtx = nAddExtx / 2;
  225.         nAddExty = nAddExty + (nAddExty/2);
  226.         PlaceWindow( BILLBOARD, CENTERED, nAddExty, UPPER_RIGHT );
  227.         Disable( DIALOGCACHE );
  228.         Enable( STATUS );
  229.         Enable( INDVFILESTATUS );
  230.         Enable( FEEDBACK_FULL );
  231.         SetColor( STATUSBAR, BLUE );     // Bright blue.
  232.         PerformUncompFileSet( szFileSetName );
  233.         InstallSystemFiles();
  234.         Disable( STATUS );
  235.         Disable( INDVFILESTATUS );
  236.         Disable( FEEDBACK_FULL );
  237.         //Font Install uses 32-bit function calls, so need to load
  238.         //separate .ins file if we're still running 16 bit installshield.
  239.         //Pass in SRCDIR so it knows where fonts live
  240.         if( ISVersion = 16 ) then
  241.             DoInstall( SUPPORTDIR ^ "InstFt16.ins", SRCDIR, WAIT );
  242.             goto RegistryEntries;
  243.         endif;
  244.         
  245. AppSpec:
  246.         Handler( EXIT, OnCancel );
  247.         DoAppSpecificStuff();
  248. AfterAppSpec:
  249.         Handler( EXIT, -1 );
  250. RegistryEntries:
  251.         CreateRegistryEntries();
  252.         
  253.         AddFolderIcons( bExplorer, svFolder, svDir, szLogPath );
  254.             
  255.         //App specific, need to make Plugins Directory
  256.         CreateDir( svDir ^ "Plugins" );
  257.  
  258.         if( BATCH_INSTALL ) then
  259.             SdFinishReboot( "", "", SYS_BOOTWIN, "", 0 );
  260.             hWindow = CmdGetHwndDlg( SD_DLG_FINISHREBOOT );
  261.             BringWindowToTop( hWindow );
  262.         else
  263.         // Announce the end of the installation and allow the user to run.
  264.         szProgram = "notepad.exe";
  265.         AppStrFromProfile( "ReadMeFileName", szReadMeFileName );
  266.         szCommand = svDir ^ szReadMeFileName;
  267.         LongPathToShortPath( szCommand );
  268.         szProgram = szProgram + " " + szCommand;
  269.         
  270.         //nInstallCompleted is true if Win32s was installed completely
  271.         //or we're on 95 or NT. if its false we know that there is an old version of
  272.         //Win32s present, so we'll give 'em a different message
  273.         if( nInstallCompleted ) then
  274.             DlgStrFromProfile( "FinishBoxMsg1", szFinMsg1 );
  275.             DlgStrFromProfile( "FinishBoxMsg2", szFinMsg2 );
  276.         else
  277.             DlgStrFromProfile( "FinishWin32Msg1", szFinMsg1 );
  278.             DlgStrFromProfile( "FinishWin32Msg2", szFinMsg2 );
  279.         endif;
  280.         DlgStrFromProfile( "FinishBox1", szOpt1 );
  281.         DlgStrFromProfile( "FinishBox2", szOpt2 );
  282.         DlgStrFromProfile( "FinishTitle", szFinTitle );
  283.         DlgStrFromProfile( "FinishBoxMsgBottom", szFinMsgBottom );
  284.         szLaunchApp = svDir ^ PRODUCT_KEY;
  285.         if( nPlatform = IS_WINDOWS95 || nPlatform = IS_WINDOWSNT ) then
  286.             LongPathToQuote( szLaunchApp, TRUE );
  287.         endif;
  288.             SdFinish(szFinTitle, szFinMsg1 + szFinMsg2 ,
  289.                         szFinMsgBottom, szOpt1,
  290.                         szOpt2, bvOpt1, bvOpt2 );
  291.             hWindow = CmdGetHwndDlg( SD_DLG_FINISH );
  292.             BringWindowToTop( hWindow );
  293.  
  294.             if ( bvOpt1 ) then
  295.                 LaunchAppAndWait( szLaunchApp, "", NOWAIT );
  296.             endif;
  297.             if( bvOpt2 ) then
  298.                 LaunchAppAndWait( szProgram, "", NOWAIT );
  299.             endif;
  300.         endif;
  301. exit;
  302.  
  303. OnEarlyCancel:
  304.     if( _AskYesNoFmt( "ExitMsg", "" ) = NO ) then
  305.         return;
  306.     else
  307.         szFullKey = "Software\\" + COMPANY_NAME + "\\" + PRODUCT_NAME;
  308.         RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
  309.         RegDBDeleteKey( szFullKey );
  310.         exit;
  311.     endif;
  312.         
  313. OnCancel:
  314.     EndDialog( SD_DLG_DISPLAYTOPICS );
  315.     goto AfterAppSpec;
  316.     return;
  317.  
  318. /*---------------------------------------------------------------------------*\
  319.  *
  320.  * Function:  EarlyCancel
  321.  *
  322.  *  Purpose:  Perform some registry cleanup if the user quits, or gets kicked out
  323.  *
  324.  *    Input:  
  325.  *
  326.  *  Returns: 
  327.  *
  328.  * Comments:  Exit routine, calle in _ErrMsg funcs
  329.  * 
  330. \*---------------------------------------------------------------------------*/
  331. function EarlyCancel()
  332.     STRING szFullKey;
  333. begin
  334.     szFullKey = "Software\\" + COMPANY_NAME + "\\" + PRODUCT_NAME;
  335.     RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
  336.     RegDBDeleteKey( szFullKey );
  337.     exit;
  338. end;
  339. /*---------------------------------------------------------------------------*\
  340.  *
  341.  * Function:  ConfirmShortPath
  342.  *
  343.  *  Purpose:  This is a utility function for Win32s
  344.  *
  345.  *    Input:  Path 
  346.  *
  347.  *  Returns: True if its a valid short path, false otherwise.
  348.  *
  349.  * Comments: 32-bit install shield allows long filenames no matter what, 
  350.  *           so we must make sure it's short in 32s
  351. \*---------------------------------------------------------------------------*/
  352. function ConfirmShortPath( szPath )
  353.     STRING svPath, svCurDir;
  354.     LIST listDirs;
  355.     NUMBER nCheck, nLength;
  356. begin
  357.     //Get Parts
  358.     ParsePath( svPath, szPath, DIRECTORY );
  359.     listDirs = ListCreate( STRINGLIST );
  360.     StrGetTokens( listDirs, svPath, "\\" );
  361.     nCheck = ListGetFirstString( listDirs, svCurDir );
  362.     while( nCheck = 0 )
  363.         nLength = StrLength( svCurDir );
  364.         if( nLength > 8 ) then 
  365.             return FALSE;
  366.         endif;
  367.         if( svCurDir % " " ) then
  368.             return FALSE;
  369.         endif;
  370.         nCheck = ListGetNextString( listDirs, svCurDir );
  371.     endwhile;
  372.     return TRUE;
  373. end;
  374.  
  375. #include "Sysfile.rul"    
  376. #include "ErrMsg.rul"        
  377. #include "instw32s.rul"
  378. #include "StrFmPrf.rul"
  379. #include  "sddialog.rul"
  380. #include  "init.rul"
  381. #include "FileSet.rul"
  382. #include "registry.rul"
  383. #include "AddIcons.rul"
  384. #include "AppSpec.rul"