home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 January / Chip_1997-01_cd.bin / ms95 / disk22 / dir02 / f014590.re_ / f014590.re
Text File  |  1996-04-02  |  10KB  |  297 lines

  1. /*----------------------------------------------------------------------+
  2. |                                    |
  3. |  Copyright (1995) Bentley Systems, Inc., All rights reserved.        |
  4. |                                    |
  5. |  "MicroStation" is a registered trademark and "MDL" and "MicroCSL"    |
  6. |  are trademarks of Bentley Systems, Inc.                    |
  7. |                                    |
  8. |  Limited permission is hereby granted to reproduce and modify this    |
  9. |  copyrighted material provided that the resulting code is used only     |
  10. |  in conjunction with Bentley Systems products under the terms of the    |
  11. |  license agreement provided therein, and that this notice is retained    |
  12. |  in its entirety in any such reproduction or modification.        |
  13. |                                    |
  14. +----------------------------------------------------------------------*/
  15. /*----------------------------------------------------------------------+
  16. |                                    |
  17. |   $Workfile:   excfgvar.mc  $
  18. |   $Revision:   5.5  $
  19. |       $Date:   25 Jul 1995 12:50:14  $
  20. |                                    |
  21. +----------------------------------------------------------------------*/
  22. /*----------------------------------------------------------------------+
  23. |                                    |
  24. |   Function -                                |
  25. |                                    |
  26. |    Example demonstrating mdlSystem_cfgVarXXXX calls.        |
  27. |                                    |
  28. +----------------------------------------------------------------------*/
  29. /*----------------------------------------------------------------------+
  30. |                                    |
  31. |   Include Files                               |
  32. |                                    |
  33. +----------------------------------------------------------------------*/
  34. #include    <mdl.h>        /* MDL Library funcs structures & constants */
  35. #include    <dlogitem.h>    /* Dialog Box Manager structures & constants */
  36. #include    <cexpr.h>        /* C Expression structures & constants */
  37. #include    <cmdlist.h>        /* MicroStation command numbers */
  38. #include    <msdefs.h>      /* MicroStation common defines */
  39. #include    <stdarg.h>      /* Variable argument defines */
  40. #include    <string.h>      /* String function defines */
  41. #include    <stdio.h>       /* Standard function defines */
  42. #include    <stdlib.h>      /* Function prototype for free() */
  43.  
  44. #include    <dlogman.fdf>   /* dialog box manager function prototypes */
  45. #include    <msrsrc.fdf>    /* mdlResource_xxx prototypes */
  46. #include    <mssystem.fdf>  /* mdlSystem_xxx prototypes */
  47. #include    <msstrngl.fdf>  /* mdlStringList_xxx prototypes */
  48.  
  49. #include    "excfgvar.h"
  50.  
  51. /*----------------------------------------------------------------------+
  52. |                                    |
  53. |   Name    excfgvar_rscSprintf                    |
  54. |                                    |
  55. |   Author    BSI                        3/93    |
  56. |                                    |
  57. +----------------------------------------------------------------------*/
  58. Private void excfgvar_rscSprintf
  59. (
  60. char   *stringP,        /* <=  Result of sprintf from resource    */
  61. int    messageNumber,        /*  => Index into msg list for format str    */
  62. ...                /*  => Any other optional arguments        */
  63. )
  64.     {
  65.     va_list ap;
  66.     char    tempStr[1024];
  67.  
  68.     va_start (ap, messageNumber);
  69.  
  70.     *stringP = tempStr[0] = '\0';
  71.     mdlResource_loadFromStringList (tempStr, NULL, MESSAGELISTID_Msgs,
  72.                     messageNumber);
  73.     vsprintf (stringP, tempStr, ap);
  74.  
  75.     va_end (ap);
  76.     }
  77.  
  78. /*----------------------------------------------------------------------+
  79. |                                    |
  80. | name        main                            |
  81. |                                    |
  82. | author    BSI                     5/93        |
  83. |                                    |
  84. +----------------------------------------------------------------------*/
  85. Public int main
  86. (
  87. int    argc,        /* => number of args in next array */
  88. char   *argv[]        /* => array of cmd line arguments */
  89. )
  90.     {
  91.     int            cfgLevel, i;
  92.     char        cfgLevelName[128];
  93.     char        cfgVarValue[128];
  94.     char        tmpString[128];
  95.     char       *cfgVarExpansion = NULL;
  96.     char       *name;
  97.     RscFileHandle   rscHandle;
  98.  
  99.     mdlResource_openFile (&rscHandle, NULL, FALSE);
  100.  
  101.     /* Get an already existing configuration variable */
  102.     mdlSystem_getCfgVar (cfgVarValue, "MS_DEF", sizeof(cfgVarValue));
  103.     sprintf (tmpString, "MS_DEF = %s", cfgVarValue);
  104.     mdlDialog_dmsgsPrint (tmpString);
  105.  
  106.     /* Expands the configuration variable */
  107.     cfgVarExpansion = mdlSystem_expandCfgVar (cfgVarValue);
  108.  
  109.     if (cfgVarExpansion != NULL)
  110.         {
  111.         excfgvar_rscSprintf (tmpString, MSGID_MSDEFEXPANDED, cfgVarExpansion);
  112.         mdlDialog_dmsgsPrint (tmpString);
  113.  
  114.         /* free when done */
  115.         free (cfgVarExpansion);
  116.         }
  117.  
  118.     /* Get an undefined configuration variable */
  119.     if (mdlSystem_getCfgVar
  120.         (cfgVarValue, "TMP_NEW", sizeof(cfgVarValue)) != SUCCESS)
  121.     {
  122.     mdlResource_loadFromStringList (tmpString, NULL, MESSAGELISTID_Msgs,
  123.                     MSGID_TMPNEWNOTYET);
  124.         mdlDialog_dmsgsPrint (tmpString);
  125.     }
  126.  
  127.     /* Define a new configuration variable */
  128.     mdlSystem_defineCfgVar ("TMP_NEW", "$(MSDIR)test.txt", CFGVAR_LEVEL_USER);
  129.  
  130.     /* Clear the string & get the newly created configuration variable */
  131.     if (mdlSystem_getCfgVar
  132.         (cfgVarValue, "TMP_NEW", sizeof(cfgVarValue)) == SUCCESS)
  133.     {
  134.         sprintf (tmpString, "TMP_NEW = %s", cfgVarValue);
  135.         mdlDialog_dmsgsPrint (tmpString);
  136.  
  137.         /* Expand the configuration variable to get current value */
  138.         cfgVarExpansion = mdlSystem_expandCfgVar (cfgVarValue);
  139.  
  140.         excfgvar_rscSprintf (tmpString, MSGID_TMPNEWEXPANDED, cfgVarExpansion);
  141.         mdlDialog_dmsgsPrint (tmpString);
  142.  
  143.         /* free when done */
  144.         free (cfgVarExpansion);
  145.          }
  146.  
  147. #if defined (MSVERSION) && (MSVERSION >= 0x551)
  148.     /* Starting with 5.5.1, it is possible to get expanded value in one step */
  149.     cfgVarExpansion = mdlSystem_getExpandedCfgVar ("MS_DEF");
  150.  
  151.     if (cfgVarExpansion != NULL)
  152.     {
  153.     int            count;
  154.     StringList      *strListP;
  155.  
  156.         /* in 5.5.1, it is possible to create a list from a cfg vars value */
  157.         count = mdlSystem_createListFromCfgVarValue (&strListP, cfgVarExpansion);
  158.  
  159.         if (count > 0)
  160.         {
  161.         char    *valueEntryP;
  162.         int     j;
  163.  
  164.         for (j=0; j<count; j++)
  165.             {
  166.         mdlStringList_getMember (&valueEntryP, NULL, strListP, j);
  167.             sprintf (tmpString, "(%d) MS_DEF = %s", j, valueEntryP);
  168.             mdlDialog_dmsgsPrint (tmpString);
  169.             }
  170.         
  171.         /* free string list created by createListFromCfgVarValue */
  172.         mdlStringList_destroy (strListP);
  173.         }
  174.  
  175.         /* free when done */
  176.         free (cfgVarExpansion);
  177.          }
  178.  
  179. #endif
  180.  
  181.     /* Delete the newly created configuration variable */
  182.     mdlSystem_deleteCfgVar ("TMP_NEW");
  183.     mdlSystem_getCfgVar (cfgVarValue, "TMP_NEW", sizeof(cfgVarValue));
  184.     excfgvar_rscSprintf(tmpString, MSGID_TMPNEWDELETED, cfgVarValue);
  185.     mdlDialog_dmsgsPrint (tmpString);
  186.  
  187.     /* Define another new configuration variable */
  188.     mdlSystem_defineCfgVar ("TMP_ANOTHERNEW", "$(MSDIR)new.txt", CFGVAR_LEVEL_USER);
  189.  
  190.     /* Check to see if the configuration variable is locked */
  191.     if (mdlSystem_isCfgVarLocked ("TMP_ANOTHERNEW") == TRUE)
  192.     {
  193.     mdlResource_loadFromStringList (tmpString, NULL, MESSAGELISTID_Msgs,
  194.                     MSGID_TMPANOTHERNEWLOCKED);
  195.     mdlDialog_dmsgsPrint (tmpString);
  196.     }
  197.     else
  198.     {
  199.     mdlResource_loadFromStringList (tmpString, NULL, MESSAGELISTID_Msgs,
  200.                     MSGID_TMPANOTHERNEWNOTLOCKED);
  201.     mdlDialog_dmsgsPrint (tmpString);
  202.     }
  203.  
  204.     /* Lock the new configuration variable then try to change it */
  205.     mdlSystem_lockCfgVar ("TMP_ANOTHERNEW");
  206.     if (mdlSystem_isCfgVarLocked("TMP_ANOTHERNEW") == TRUE)
  207.     {
  208.     mdlResource_loadFromStringList (tmpString, NULL, MESSAGELISTID_Msgs,
  209.                     MSGID_TMPANOTHERNEWNOWLOCKED);
  210.     mdlDialog_dmsgsPrint (tmpString);
  211.     }
  212.  
  213.     /* Clear the string & get the newly created configuration variable */
  214.     mdlSystem_getCfgVar (cfgVarValue, "TMP_ANOTHERNEW", sizeof(cfgVarValue));
  215.     sprintf (tmpString, "TMP_ANOTHERNEW = %s", cfgVarValue);
  216.     mdlDialog_dmsgsPrint (tmpString);
  217.  
  218.     /* Unsuccessfully delete the newly created & locked config variable */
  219.     mdlSystem_deleteCfgVar ("TMP_NEW");
  220.     if (mdlSystem_getCfgVar
  221.         (cfgVarValue, "TMP_ANOTHERNEW", sizeof(cfgVarValue)) == SUCCESS)
  222.     {
  223.         excfgvar_rscSprintf (tmpString, MSGID_TMPANOTHERNEWCANTDELETE,
  224.                  cfgVarValue);
  225.         mdlDialog_dmsgsPrint (tmpString);
  226.         }
  227.  
  228.     /* prints out the level that _USTN_SYSTEM IS */
  229.     mdlSystem_getCfgVarLevel(&cfgLevel,"_USTN_SYSTEM");
  230.  
  231.     /* convert level number to level name (msdefs.h) */
  232.     switch (cfgLevel)
  233.     {
  234.     case CFGVAR_LEVEL_SYSENV:
  235.         mdlResource_loadFromStringList (cfgLevelName, NULL,
  236.                         MESSAGELISTID_Msgs, MSGID_SysEnv);
  237.         break;
  238.  
  239.     case CFGVAR_LEVEL_SYSTEM:
  240.         mdlResource_loadFromStringList (cfgLevelName, NULL,
  241.                         MESSAGELISTID_Msgs, MSGID_System);
  242.         break;
  243.  
  244.     case CFGVAR_LEVEL_APPL:
  245.         mdlResource_loadFromStringList (cfgLevelName, NULL,
  246.                         MESSAGELISTID_Msgs,
  247.                         MSGID_Application);
  248.         break;
  249.  
  250.     case CFGVAR_LEVEL_SITE:
  251.         mdlResource_loadFromStringList (cfgLevelName, NULL,
  252.                         MESSAGELISTID_Msgs, MSGID_Site);
  253.         break;
  254.  
  255.     case CFGVAR_LEVEL_PROJECT:
  256.         mdlResource_loadFromStringList (cfgLevelName, NULL,
  257.                         MESSAGELISTID_Msgs, MSGID_Project);
  258.         break;
  259.  
  260.     case CFGVAR_LEVEL_USER:
  261.         mdlResource_loadFromStringList (cfgLevelName, NULL,
  262.                         MESSAGELISTID_Msgs, MSGID_User);
  263.         break;
  264.  
  265.         default:
  266.         mdlResource_loadFromStringList (cfgLevelName, NULL,
  267.                         MESSAGELISTID_Msgs, MSGID_Unknown);
  268.     }
  269.  
  270.     excfgvar_rscSprintf (tmpString, MSGID_USTNSYSTEM, cfgLevelName);
  271.     mdlDialog_dmsgsPrint (tmpString);
  272.  
  273.     /* prints out all of the config variables starting with MS_C */
  274.     mdlDialog_dmsgsPrint (" ");
  275.     mdlResource_loadFromStringList (tmpString, NULL, MESSAGELISTID_Msgs,
  276.                     MSGID_MSC);
  277.     mdlDialog_dmsgsPrint (tmpString);
  278.  
  279.     i=0;
  280.     while (TRUE)
  281.         {
  282.            if (mdlSystem_getCfgVarByIndex (&name, NULL, NULL, NULL, i++) != SUCCESS)
  283.            break;
  284.  
  285.     /* Only print those beginning with MS_C */
  286.     if (strncmp (name, "MS_C", 4) == 0)
  287.         {
  288.         mdlDialog_dmsgsPrint (name);
  289.         }
  290.         }
  291.  
  292.     return (SUCCESS);
  293.     }
  294.  
  295.  
  296.  
  297.