home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / devcon / sanfrancisco_1989 / sf-devcon89.1 / commodities / lattice / cxsupp / argarray.c next >
C/C++ Source or Header  |  1992-08-27  |  3KB  |  124 lines

  1. /* argarray.c -- tool types and startup parameters.    */
  2.  
  3. #include "sysall.h"
  4.  
  5. #include "cx/cxusr.h"
  6.  
  7. extern struct Library    *CxBase;
  8. struct Library    *IconBase = 0;
  9. static    struct    DiskObject    *disko = NULL;
  10.  
  11. /* Pass this your start-up arguments, and it will return
  12.  * an array of strings, either ToolTypes or command line args
  13.  * which should be of the form "THING=some thing else"
  14.  *
  15.  * Opens the icon library and may call GetDiskObject, so
  16.  * be sure to call ArgArrayDone() after you are through
  17.  * using icon library functions and the array of strings.
  18.  *
  19.  * This technique (of blurring the distinction between ToolTypes
  20.  * and argv[]) can only work if startup null-terminates argv[]
  21.  * (i.e., argv[argc] == NULL).  Manx is OK.
  22.  */
  23. char    **
  24. ArgArrayInit(argc, argv)
  25. int        argc;
  26. char    **argv;
  27. {
  28.     char    **getToolTypes();
  29.  
  30.     /* open icon.library in any case so user can call
  31.      * FindToolType().
  32.      */
  33.     if (!(IconBase = (struct Library *) OpenLibrary("icon.library", 32L))) {
  34.         return (NULL);
  35.     }
  36.  
  37.     if (argc) {
  38.         return (argv);
  39.     }
  40.     else {
  41.         return (getToolTypes(argv));
  42.     }
  43. }
  44.  
  45. void
  46. ArgArrayDone()
  47. {
  48.     if (disko) FreeDiskObject(disko);
  49.     if (IconBase) CloseLibrary(IconBase);
  50. }
  51.  
  52. /* returns a string from a tooltypes array, or the
  53.  * default passed if none is found
  54.  */
  55. char    *
  56. ArgString(tt, string, defstring)
  57. char    **tt;
  58. char    *string;
  59. char    *defstring;
  60. {
  61.     char     *s;
  62.  
  63.     if (tt && (s = FindToolType(tt, string)) ) {
  64.         return (s);
  65.     }
  66.     else {
  67.         return (defstring);
  68.     }
  69. }
  70.  
  71. /* This function returns an integer value from a tooltype
  72.  * string, using the 'defval' if the tooltype entry is
  73.  * not found.  The point is that atoi(NULL) isn't zero
  74.  * if some program put garbage at location 0.
  75.  */
  76. ArgInt(tt, field_name, defval)
  77. char    **tt;
  78. char    *field_name;
  79. int        defval;
  80. {
  81.     char    *s;
  82.  
  83.     s = FindToolType(tt, field_name);
  84.  
  85.     return (s? atoi(s): defval);
  86. }
  87.  
  88. /* This function is an interface to CxFilter() which 
  89.  * allows an entry in a ToolTypes field to override
  90.  * the programmers default choice of input description.
  91.  */
  92. CxObj    *
  93. UserFilter(tt, action_name, default_descr)
  94. char    **tt;            /* null-terminated (char *(*)[])    */
  95. char    *action_name;    /* name of your semantic action        */
  96. char    *default_descr;    /* used if user doesn't provide        */
  97. {
  98.     char    *desc;
  99.  
  100.     desc = FindToolType(tt, action_name);
  101.  
  102.     return ( CxFilter(desc? desc: default_descr) );
  103. }
  104.  
  105. char **
  106. getToolTypes(msg)
  107. struct WBStartup *msg;
  108. {
  109.     struct    WBArg        *arg;
  110.     char                **tt;
  111.  
  112.     arg = msg->sm_ArgList;
  113.  
  114.     disko = GetDiskObject(arg->wa_Name);
  115.  
  116.     if (disko)
  117.     {
  118.         tt = disko->do_ToolTypes;
  119.     }
  120.  
  121.     return (tt);
  122. }
  123.  
  124.