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

  1. /*---------------------------------------------------------------------------*\
  2.  *
  3.  * Function:  InstallFonts
  4.  *
  5.  *  Purpose:  This is a general purpose font installing function
  6.  *
  7.  *    Input:  Path to the fonts on source
  8.  *
  9.  *  Returns: 
  10.  *
  11.  * Comments: The calling function should surround this call with 
  12.  *           VarSave and VarRestore. If you don't want fonts to be 
  13.  *           uninstallable, diable logging befopre call.
  14.  *           Also the source directory should contain
  15.  *           a text file containing a list of the fonts, one per line, in fonts.txt.
  16. \*---------------------------------------------------------------------------*/
  17. function InstallFonts( szSource )
  18.     STRING szTarget, svDlgTitle, svDlgMsg, svAddStr, szSourceFile, szFileCaption;
  19.     STRING szTargetFile, szResult, szHeaderFile;
  20.     LIST listTopics, listDetails, listFonts;
  21.     NUMBER nFilePercent, nTotalPercent, nFileFound, nEndOfList;
  22. begin
  23.     //uses gdi32 and user32 function calls, so we must be in 32-bitland.
  24.     if( ISVersion = 16 ) then
  25.         _ErrMsg( "CantInstFont", FALSE );
  26.         return;
  27.     endif;
  28.  
  29.     //Set up Dialog to ask
  30.     DlgStrFromProfile( "FontDlgTitle", svDlgTitle );
  31.     DlgStrFromProfile( "FontDlgMessage", svDlgMsg );
  32.     listTopics = ListCreate( STRINGLIST );
  33.     listDetails = ListCreate( STRINGLIST );
  34.     DlgStrFromProfile( "FontDlgTopic", svAddStr );
  35.     ListAddString( listTopics, svAddStr, AFTER );
  36.     DlgStrFromProfile( "FontDlgDetail", svAddStr );
  37.     ListAddString( listDetails, svAddStr, AFTER );
  38.  
  39.     ListAddString( listTopics, "", AFTER );
  40.     ListAddString( listDetails, "", AFTER );
  41.     ListAddString( listTopics, "", AFTER );
  42.     ListAddString( listDetails, "", AFTER );
  43.  
  44.     Disable( BACKBUTTON );
  45.     if( SdDisplayTopics( svDlgTitle, svDlgMsg, listTopics, listDetails, 0 ) = NEXT ) then
  46.         
  47.         //See where the fonts go.
  48.         if !( GetFontDir( szTarget ) ) then
  49.             return;
  50.         endif;
  51.         
  52.  
  53.         //Make list of fonts from txt file.
  54.         listFonts = ListCreate( STRINGLIST );
  55.         szSourceFile = szSource ^ "fonts.txt";
  56.         ListReadFromFile( listFonts, szSourceFile );
  57.         nFilePercent = ListCount( listFonts );
  58.         nFilePercent = 100 / nFilePercent;
  59.         nTotalPercent = 0;
  60.         
  61.         //Enable progress bar
  62.         PlaceWindow( STATUS, CENTERED, CENTERED, CENTERED );
  63.         Enable( STATUS );
  64.         Enable( INDVFILESTATUS );
  65.         DlgStrFromProfile( "InstallingFonts", szFileCaption );
  66.         
  67.         //SetStatusForFirstFile
  68.         SetStatusWindow( nTotalPercent, szFileCaption );
  69.         nTotalPercent = nFilePercent;
  70.         StatusUpdate( ON, nTotalPercent );
  71.  
  72.         //SetDirectories
  73.         TARGETDIR = szTarget;
  74.         SRCDIR = szSource;
  75.  
  76.         //Start Copying
  77.         nEndOfList = ListGetFirstString( listFonts, szSourceFile );
  78.         while( nEndOfList = 0 );
  79.             //See if its already there
  80.             SafeFontCopyInstall( szTarget, szSourceFile );
  81.             nEndOfList = ListGetNextString( listFonts, szSourceFile );
  82.             nTotalPercent = nTotalPercent + nFilePercent;
  83.             StatusUpdate( ON, nTotalPercent );
  84.         endwhile;
  85.         Disable( INDVFILESTATUS );
  86.         Disable( STATUS );
  87.     endif;
  88.     Enable( BACKBUTTON );
  89. end;
  90.  
  91.  
  92. /*---------------------------------------------------------------------------*\
  93.  *
  94.  * Function:  GetFontDir
  95.  *
  96.  *  Purpose:  This Function determines the correct Font directory
  97.  *
  98.  *    Input:  
  99.  *
  100.  *  Returns: Path in string passedin BYREF
  101.  *
  102.  * Comments: 
  103. \*---------------------------------------------------------------------------*/
  104. function GetFontDir( szTarget )
  105.     NUMBER nSize, nCheck, nType;
  106. begin
  107.     if( bExplorer ) then
  108.             //Check to see if were using a shared Windows OS
  109.             RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
  110.  
  111.             //if return is < 0 no name existed so we're not shared
  112.             //Otherwise szTarget contains path to server or local Windows directory
  113.             nType = REGDB_STRING;
  114.             if(  RegDBGetKeyValueEx( "Software\\Microsoft\\Windows\\CurrentVersion\\Setup", "SharedDir", nType, szTarget, nSize ) = 0 ) then
  115.                 if( nSize >= 1 ) then //make sure we got something.
  116.                     szTarget = szTarget ^ "Fonts";
  117.                     //Make sure we can write there
  118.                     nCheck = Is( DIR_WRITEABLE , szTarget );
  119.  
  120.                     // If access rights inadequate, display a message and return FALSE.
  121.                     if ( nCheck != TRUE ) then
  122.                             _ErrFmtMsg( "ERR_SYSDIR", szTarget, FALSE ); 
  123.                             return FALSE;
  124.                     endif;
  125.                 else
  126.                     szTarget = WINDIR ^ "Fonts";
  127.                 endif;
  128.             else
  129.                 szTarget = WINDIR ^ "Fonts";
  130.             endif;
  131.         else
  132.             //we're on Win32s or WinNT3.51, no Fonts dir.
  133.             szTarget = WINSYSDIR;
  134.         endif;
  135.         return TRUE;
  136. end;
  137.  
  138. /*---------------------------------------------------------------------------*\
  139.  *
  140.  * Function:  SafeFontCopyInstall
  141.  *
  142.  *  Purpose:  This function looks for anexeisting font of the same name,
  143.  *            Querys whether to replace it if found, copies it, and
  144.  *            Enables it in the system.
  145.  *
  146.  *    Input:  Source file and Target path. SRCDIR and TARGETDIR already set.
  147.  *
  148.  *  Returns:
  149.  *
  150.  * Comments: Calls FindFont, and EnableFont
  151.  *           
  152. \*---------------------------------------------------------------------------*/
  153. function SafeFontCopyInstall( szTarget, szSourceFile )
  154.     BOOL nInstall;
  155.     STRING szDllName, svTypeFaceName;
  156.     NUMBER nTypeFaceSize;
  157.     LIST listFontNames;
  158. begin
  159.     //GetFile name and typeface name out of string;
  160.     listFontNames = ListCreate( STRINGLIST );
  161.     StrGetTokens( listFontNames, szSourceFile, "|" );
  162.     ListGetFirstString( listFontNames, szSourceFile );
  163.     ListGetNextString( listFontNames, svTypeFaceName );
  164.     ListDestroy( listFontNames );
  165.  
  166.     nInstall = FindFont( szTarget, szSourceFile, svTypeFaceName );
  167.     if( nInstall != DONT_REPLACE_FONT ) then
  168.         
  169.         //Copy 'er on over
  170.         XCopyFile( szSourceFile, "*.*", EXCLUDE_SUBDIR | LOCKEDFILE );
  171.  
  172.         EnableFont( szSourceFile, szTarget, svTypeFaceName );
  173.         
  174.     endif;
  175. end;
  176.  
  177.  
  178.  
  179.  
  180.  
  181. /*---------------------------------------------------------------------------*\
  182.  *
  183.  * Function:  FindFont
  184.  *
  185.  *  Purpose:  This Function determines if a font is installed, 
  186.  *            and Queries whether to replace it.
  187.  *
  188.  *    Input:  Target Path and FontName
  189.  *
  190.  *  Returns: True if we're going to install it, false if user chooses not to.
  191.  *
  192.  * Comments: 
  193. \*---------------------------------------------------------------------------*/
  194. function FindFont( szTarget, szSourceFile, svTypeFaceName )
  195.     STRING szResult, szTargetFile;
  196.     NUMBER nFileFound;
  197. begin
  198.     nFileFound = FindFile( szTarget, szSourceFile, szResult );
  199.     
  200.     //if nFile Found  not = 0 its not there so we can install it.
  201.     if( nFileFound != 0 ) then
  202.         return INSTALL_NEW_FONT;
  203.     elseif ( _AskYesNoFmt( "OldFont", svTypeFaceName ) = YES  ) then
  204.         //Make sure we can get rid of it.
  205.         szTargetFile = szTarget ^ szSourceFile;
  206.         SetFileInfo( szTargetFile, FILE_ATTRIBUTE, FILE_ATTR_NORMAL, szResult );
  207.         return INSTALL_OVER_FONT;
  208.     else
  209.         return DONT_REPLACE_FONT;
  210.     endif;
  211. end;
  212.  
  213. /*---------------------------------------------------------------------------*\
  214.  *
  215.  * Function:  EnableFont
  216.  *
  217.  *  Purpose:  Loads font into font table, and registers it with windows
  218.  *
  219.  *    Input:  Source file and Target path and typefacename
  220.  *
  221.  *  Returns:
  222.  *
  223.  * Comments: Platform independent, works with WinNT,Win95 and 32s
  224. \*---------------------------------------------------------------------------*/
  225. function EnableFont( szSourceFile, szTarget, szTypeFaceName )
  226.     STRING szHeaderFile, szWinIni, szKey;
  227. begin
  228.     //Create resource file if we're in 32s
  229.     if(( nPlatform != IS_WINDOWSNT ) && ( nPlatform != IS_WINDOWS95 )) then
  230.         ParsePath( szHeaderFile, szSourceFile, FILENAME_ONLY );
  231.         szHeaderFile = szHeaderFile + ".FOT";            
  232.         CreateScalableFontResource( 0, WINSYSDIR ^ szHeaderFile, szSourceFile, WINSYSDIR );
  233.         szSourceFile = szHeaderFile;
  234.     endif;
  235.  
  236.     //add the font to the table, and let everyone know.            
  237.     AddFontResource( szSourceFile );
  238.     SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );    
  239.     
  240.     //do proper registration
  241.     //if we're in 32s add font to the WIN.INI
  242.     if(( nPlatform != IS_WINDOWSNT ) && ( nPlatform != IS_WINDOWS95 )) then
  243.         szWinIni = WINDIR ^ "win.ini";
  244.         WriteProfString( szWinIni, "fonts", szTypeFaceName, szSourceFile );
  245.     else //put it in the registry
  246.         RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
  247.         if( nPlatform = IS_WINDOWSNT ) then
  248.             szKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts";
  249.         else
  250.             szKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Fonts";
  251.         endif;
  252.         RegDBSetKeyValueEx( szKey, szTypeFaceName, REGDB_STRING, szSourceFile, -1 );
  253.     endif;
  254. end;    
  255.