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

  1. /*---------------------------------------------------------------------------*\
  2.  *
  3.  * Program:  InstallFonts16
  4.  *
  5.  *  Purpose:  This is a general purpose font installing program for 16-bit win3.1
  6.  *
  7.  *    
  8.  *
  9.  * Comments: 
  10. \*---------------------------------------------------------------------------*/
  11.  
  12. declare
  13.  
  14. #include "ErrMsg.h"
  15. #include "StrFmPrf.h"
  16. #include "SdDialog.h"
  17.  
  18. prototype BOOL GDI.CreateScalableFontResource( LONG, STRING, STRING, STRING );
  19. prototype INT  GDI.AddFontResource( STRING );
  20. prototype InstallFonts( STRING );
  21. prototype GetFontDir( BYREF STRING );
  22. prototype SafeFontCopyInstall( STRING, STRING );
  23. prototype FindFont( STRING, STRING, STRING );
  24. prototype EnableFont( STRING, STRING, STRING );
  25. prototype EarlyCancel();
  26.  
  27. #define HWND_BROADCAST 0xFFFF
  28. #define WM_FONTCHANGE  0x001D
  29. #define INSTALL_NEW_FONT 0
  30. #define INSTALL_OVER_FONT 1
  31. #define DONT_REPLACE_FONT 2
  32.  
  33. STRING PRODUCT_NAME;
  34. STRING BACKGROUND_CAPTION;
  35. STRING BACKGROUND_TITLE;
  36.  
  37. #define SD_SINGLE_DIALOGS 1
  38. #define SD_DISPLAYTOPICS  1    
  39.  
  40. program
  41. start:
  42.     //Original SRCDIR gets passed in in CMDLINE
  43.     SRCDIR = CMDLINE;
  44.     AppStrFromProfile( "BackgroundCaption", BACKGROUND_CAPTION );
  45.     AppStrFromProfile( "BackgroundTitle", BACKGROUND_TITLE );
  46.     SetTitle( BACKGROUND_CAPTION, 24, WHITE );
  47.     SetTitle( BACKGROUND_TITLE, 0, BACKGROUNDCAPTION ); // Caption bar text.
  48.     AppStrFromProfile( "ProductName", PRODUCT_NAME );
  49.     VarSave( SRCTARGETDIR );
  50.  
  51.     Disable( LOGGING );
  52.  
  53.     Handler( EXIT, OnCancel );
  54.     InstallFonts( SRCDIR ^ "fonts" );
  55. AfterInstall:
  56.     Handler( EXIT, -1 );
  57.     VarRestore( SRCTARGETDIR );
  58.  
  59.     Enable( LOGGING );
  60. exit;
  61.  
  62. OnCancel:
  63.     EndDialog( SD_DLG_DISPLAYTOPICS );
  64.     goto AfterInstall;
  65.     return;
  66. /*---------------------------------------------------------------------------*\
  67.  *
  68.  * Function:  InstallFonts
  69.  *
  70.  *  Purpose:  This is a general purpose font installing function
  71.  *
  72.  *    Input:  Path to the fonts on source
  73.  *
  74.  *  Returns: 
  75.  *
  76.  * Comments: The calling function should surround this call with 
  77.  *           VarSave and VarRestore. If you don't want fonts to be 
  78.  *           uninstallable, diable logging befopre call.
  79.  *           Also the source directory should contain
  80.  *           a text file containing a list of the fonts, one per line, in fonts.txt.
  81. \*---------------------------------------------------------------------------*/
  82. function InstallFonts( szSource )
  83.     STRING szTarget, svDlgTitle, svDlgMsg, svAddStr, szSourceFile, szFileCaption;
  84.     STRING szTargetFile, szResult, szHeaderFile;
  85.     LIST listTopics, listDetails, listFonts;
  86.     NUMBER nFilePercent, nTotalPercent, nFileFound, nEndOfList;
  87. begin
  88.     
  89.  
  90.     //Set up Dialog to ask
  91.     DlgStrFromProfile( "FontDlgTitle", svDlgTitle );
  92.     DlgStrFromProfile( "FontDlgMessage", svDlgMsg );
  93.     listTopics = ListCreate( STRINGLIST );
  94.     listDetails = ListCreate( STRINGLIST );
  95.     DlgStrFromProfile( "FontDlgTopic", svAddStr );
  96.     ListAddString( listTopics, svAddStr, AFTER );
  97.     DlgStrFromProfile( "FontDlgDetail", svAddStr );
  98.     ListAddString( listDetails, svAddStr, AFTER );
  99.  
  100.     ListAddString( listTopics, "", AFTER );
  101.     ListAddString( listDetails, "", AFTER );
  102.     ListAddString( listTopics, "", AFTER );
  103.     ListAddString( listDetails, "", AFTER );
  104.  
  105.     Disable( BACKBUTTON );
  106.     if( SdDisplayTopics( svDlgTitle, svDlgMsg, listTopics, listDetails, 0 ) = NEXT ) then
  107.         
  108.         //See where the fonts go.
  109.         if !( GetFontDir( szTarget ) ) then
  110.             return;
  111.         endif;
  112.         
  113.  
  114.         //Make list of fonts from txt file.
  115.         listFonts = ListCreate( STRINGLIST );
  116.         szSourceFile = szSource ^ "fonts.txt";
  117.         ListReadFromFile( listFonts, szSourceFile );
  118.         nFilePercent = ListCount( listFonts );
  119.         nFilePercent = 100 / nFilePercent;
  120.         nTotalPercent = 0;
  121.         
  122.         //Enable progress bar
  123.         PlaceWindow( STATUS, CENTERED, CENTERED, CENTERED );
  124.         Enable( STATUS );
  125.         Enable( INDVFILESTATUS );
  126.         DlgStrFromProfile( "InstallingFonts", szFileCaption );
  127.         
  128.         //SetStatusForFirstFile
  129.         SetStatusWindow( nTotalPercent, szFileCaption );
  130.         nTotalPercent = nFilePercent;
  131.         StatusUpdate( ON, nTotalPercent );
  132.  
  133.         //SetDirectories
  134.         TARGETDIR = szTarget;
  135.         SRCDIR = szSource;
  136.  
  137.         //Start Copying
  138.         nEndOfList = ListGetFirstString( listFonts, szSourceFile );
  139.         while( nEndOfList = 0 );
  140.             //See if its already there
  141.             SafeFontCopyInstall( szTarget, szSourceFile );
  142.             nEndOfList = ListGetNextString( listFonts, szSourceFile );
  143.             nTotalPercent = nTotalPercent + nFilePercent;
  144.             StatusUpdate( ON, nTotalPercent );
  145.         endwhile;
  146.         Disable( INDVFILESTATUS );
  147.         Disable( STATUS );
  148.     endif;
  149.     Enable( BACKBUTTON );
  150. end;
  151.  
  152.  
  153. /*---------------------------------------------------------------------------*\
  154.  *
  155.  * Function:  GetFontDir
  156.  *
  157.  *  Purpose:  This Function determines the correct Font directory
  158.  *
  159.  *    Input:  
  160.  *
  161.  *  Returns: Path in string passedin BYREF
  162.  *
  163.  * Comments: 
  164. \*---------------------------------------------------------------------------*/
  165. function GetFontDir( szTarget )
  166.     BOOL bShared;
  167.     STRING svResult;
  168. begin
  169.     //Fonts go in sysdir unless its a shared network version, then windir
  170.     bShared = Is( WINDOWS_SHARED, svResult );
  171.     if( bShared ) then
  172.         szTarget = WINDIR;
  173.     else
  174.         szTarget = WINSYSDIR;
  175.     endif;
  176.     return TRUE;
  177. end;
  178.  
  179. /*---------------------------------------------------------------------------*\
  180.  *
  181.  * Function:  SafeFontCopyInstall
  182.  *
  183.  *  Purpose:  This function looks for anexeisting font of the same name,
  184.  *            Querys whether to replace it if found, copies it, and
  185.  *            Enables it in the system.
  186.  *
  187.  *    Input:  Source file and Target path. SRCDIR and TARGETDIR already set.
  188.  *
  189.  *  Returns:
  190.  *
  191.  * Comments: Calls FindFont, and EnableFont
  192.  *           
  193. \*---------------------------------------------------------------------------*/
  194. function SafeFontCopyInstall( szTarget, szSourceFile )
  195.     BOOL nInstall;
  196.     STRING szDllName, svTypeFaceName;
  197.     NUMBER nTypeFaceSize;
  198.     LIST listFontNames;
  199. begin
  200.     //GetFile name and typeface name out of string;
  201.     listFontNames = ListCreate( STRINGLIST );
  202.     StrGetTokens( listFontNames, szSourceFile, "|" );
  203.     ListGetFirstString( listFontNames, szSourceFile );
  204.     ListGetNextString( listFontNames, svTypeFaceName );
  205.     ListDestroy( listFontNames );
  206.  
  207.     nInstall = FindFont( szTarget, szSourceFile, svTypeFaceName );
  208.     if( nInstall != DONT_REPLACE_FONT ) then
  209.         
  210.         //Copy 'er on over
  211.         XCopyFile( szSourceFile, "*.*", EXCLUDE_SUBDIR | LOCKEDFILE );
  212.  
  213.         EnableFont( szSourceFile, szTarget, svTypeFaceName );
  214.         
  215.     endif;
  216. end;
  217.  
  218.  
  219.  
  220.  
  221.  
  222. /*---------------------------------------------------------------------------*\
  223.  *
  224.  * Function:  FindFont
  225.  *
  226.  *  Purpose:  This Function determines if a font is installed, 
  227.  *            and Queries whether to replace it.
  228.  *
  229.  *    Input:  Target Path and FontName
  230.  *
  231.  *  Returns: True if we're going to install it, false if user chooses not to.
  232.  *
  233.  * Comments: 
  234. \*---------------------------------------------------------------------------*/
  235. function FindFont( szTarget, szSourceFile, svTypeFaceName )
  236.     STRING szResult, szTargetFile;
  237.     NUMBER nFileFound;
  238. begin
  239.     nFileFound = FindFile( szTarget, szSourceFile, szResult );
  240.     
  241.     //if nFile Found  not = 0 its not there so we can install it.
  242.     if( nFileFound != 0 ) then
  243.         return INSTALL_NEW_FONT;
  244.     elseif ( _AskYesNoFmt( "OldFont", svTypeFaceName ) = YES  ) then
  245.         //Make sure we can get rid of it.
  246.         szTargetFile = szTarget ^ szSourceFile;
  247.         SetFileInfo( szTargetFile, FILE_ATTRIBUTE, FILE_ATTR_NORMAL, szResult );
  248.         return INSTALL_OVER_FONT;
  249.     else
  250.         return DONT_REPLACE_FONT;
  251.     endif;
  252. end;
  253.  
  254. /*---------------------------------------------------------------------------*\
  255.  *
  256.  * Function:  EnableFont
  257.  *
  258.  *  Purpose:  Loads font into font table, and registers it with windows
  259.  *
  260.  *    Input:  Source file and Target path and typefacename
  261.  *
  262.  *  Returns:
  263.  *
  264.  * Comments: Platform independent, works with WinNT,Win95 and 32s
  265. \*---------------------------------------------------------------------------*/
  266. function EnableFont( szSourceFile, szTarget, szTypeFaceName )
  267.     STRING szHeaderFile, szWinIni, szKey;
  268. begin
  269.     //Create resource file 
  270.     
  271.     ParsePath( szHeaderFile, szSourceFile, FILENAME_ONLY );
  272.     szHeaderFile = szHeaderFile + ".FOT";            
  273.     CreateScalableFontResource( 0, WINSYSDIR ^ szHeaderFile, szSourceFile, WINSYSDIR );
  274.     szSourceFile = szHeaderFile;
  275.     
  276.  
  277.     //add the font to the table, and let everyone know.            
  278.     AddFontResource( szSourceFile );
  279.     SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );    
  280.     
  281.     //do proper registration
  282.     //add font to the WIN.INI
  283.     szWinIni = WINDIR ^ "win.ini";
  284.     WriteProfString( szWinIni, "fonts", szTypeFaceName, szSourceFile );
  285.     
  286. end;
  287.  
  288. /*---------------------------------------------------------------------------*\
  289.  *
  290.  * Function:  EarlyCancel
  291.  *
  292.  *  Purpose:  Perform some registry cleanup if the user quits, or gets kicked out
  293.  *
  294.  *    Input:  
  295.  *
  296.  *  Returns: 
  297.  *
  298.  * Comments:  Exit routine, calle in _ErrMsg funcs
  299.  * 
  300. \*---------------------------------------------------------------------------*/
  301. function EarlyCancel()
  302.     STRING szFullKey, szCompanyName;
  303. begin
  304.     AppStrFromProfile( "CompanyName", szCompanyName );
  305.     szFullKey = "Software\\" + szCompanyName + "\\" + PRODUCT_NAME;
  306.     RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
  307.     RegDBDeleteKey( szFullKey );
  308.     exit;
  309. end;
  310.  
  311. #include "ErrMsg.rul"
  312. #include "StrFmPrf.rul"
  313. #include "SdDialog.rul"
  314.