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

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