home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / util / batch / dosreqtools / dosextensions / requestersrc / rtezrequest.c < prev    next >
C/C++ Source or Header  |  1994-11-16  |  6KB  |  234 lines

  1.  
  2. #include <dos/dos.h>
  3. #include <dos/rdargs.h>
  4. #include <clib/dos_protos.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <exec/lists.h>
  8.  
  9. #include <libraries/reqtools.h>
  10.  
  11. #include <functions.h>
  12.  
  13. static char version_string[] = "$VER: rtEZRequest 2.3 (16.11.94)";
  14.  
  15. char MyExtHelp[] =
  16. "\n"
  17. "Usage : rtEZRequest\n"  
  18. "\n"
  19. " TITLE/A,BODY/A,BUTTONTEXT=BUTTON,DEFAULT/N/K,CENTERTEXT/S,NORETURNKEY/S,\n"
  20. " POSITION=POS/K,TOPOFFSET=TOP/N/K,LEFTOFFSET=LEFT/N/K,PUBSCREEN/K\n"
  21. "\n"
  22. "Arguments:\n"
  23. "\n"
  24. "  TITLE      <text> - Title text for requester window.\n"
  25. "  BODY       <text> - Body text for requester window.\n"
  26. "  BUTTONTEXT <text> - Button text for requester window. (default \"Ok|Cancel\")\n"
  27. "  >or BUTTON\n"
  28. "  DEFAULT     <num> - Default response if [RETURN] key pressed w/o selection.\n"
  29. "  CENTERTEXT        - Center body text in requester window.\n"
  30. " >or CENTER\n"
  31. "  NORETURNKEY       - Turn off [RETURN] key as positive response.\n"
  32. "  POSITION    <pos> - Open requester window at <pos>.  Permissible values are:\n"
  33. " >or POS              CENTERSCR, TOPLEFTSCR, CENTERWIN, TOPLEFTWIN, POINTER.\n"
  34. "  TOPOFFSET   <num> - Offset position relative to above.\n"
  35. " >or TOP\n"
  36. "  LEFFTOFFSET <num> - Offset position relative to above.\n"
  37. " >or LEFT\n"
  38. "  PUBSCREEN <screen>- Public screen name.\n";
  39.  
  40. #define TEMPLATE "TITLE/A,BODY/A,BUTTONTEXT=BUTTON,DEFAULT/N/K,CENTERTEXT=CENTER/S,NORETURNKEY/S,POSITION=POS/K,TOPOFFSET=TOP/N/K,LEFTOFFSET=LEFT/N/K,PUBSCREEN/K"
  41.  
  42. #define OPT_TITLE  0
  43. #define OPT_BODY   1
  44. #define OPT_BUTTONTEXT 2
  45. #define OPT_DEFAULT 3
  46. #define OPT_CENTERTEXT 4
  47. #define OPT_NORETURNKEY 5
  48. #define OPT_POSITION 6
  49. #define OPT_TOPOFFSET 7
  50. #define OPT_LEFTOFFSET 8
  51. #define OPT_PUBSCREEN 9
  52.  
  53. #define OPT_COUNT 10
  54.  
  55. struct Library *ReqToolsBase;
  56.  
  57.  
  58. BOOL
  59. adjust (char *dest, char *src)
  60. {
  61.   char *s, *t;
  62.  
  63.   s = dest;
  64.  
  65.   if (src == NULL)        /* bypass */
  66.     return FALSE;
  67.  
  68.   while ((t = strchr (src, '\\')) && (*(t + 1) == 'n'))
  69.     {
  70.       while (src < t)
  71.     *s++ = *src++;
  72.  
  73.       *s++ = '\n';
  74.  
  75.       src++, src++;        /* bump source ptr .... twice */
  76.     }
  77.  
  78.   while (src[0])            /*** copy remainder of src ***/
  79.     *s++ = *src++;
  80.  
  81.   *s = '\0';
  82.  
  83.   return TRUE;
  84. }
  85.  
  86. int
  87. main (int argc, char **argv)
  88. {
  89.   int retval = 0;
  90.  
  91.   if (argc)
  92.     {
  93.       if ((argc == 2) && (stricmp (argv[1], "HELP") == 0))
  94.     {
  95.       fprintf (stdout, "%s", MyExtHelp);
  96.     }
  97.       else
  98.     {
  99.       /* My custom RDArgs */
  100.       struct RDArgs *myrda;
  101.  
  102.       /* Need to ask DOS for a RDArgs structure */
  103.       if (myrda = (struct RDArgs *) AllocDosObject (DOS_RDARGS, NULL))
  104.         {
  105.           /* The array of LONGs where ReadArgs() will store the data from
  106.            * the command line arguments.  C guarantees that all the array
  107.            * entries will be set to zero.
  108.            */
  109.           LONG *result[OPT_COUNT] =
  110.           {NULL};
  111.  
  112.           /* parse my command line */
  113.           if (ReadArgs (TEMPLATE, result, myrda))
  114.         {
  115.           if (ReqToolsBase = (struct Library *) OpenLibrary ("reqtools.library", LIBRARY_MINIMUM))
  116.             {
  117.               struct rtReqInfo *requester;
  118.  
  119.               if (requester = (struct rtReqInfo *) rtAllocRequest (RT_REQINFO, NULL))
  120.             {
  121.               requester->ReqTitle = (result[OPT_TITLE])
  122.                 ? (char *) result[OPT_TITLE] : "Request";
  123.  
  124.               /*
  125.                * Take care of requester positioning
  126.                */
  127.               if (stricmp (result[OPT_POSITION], "CENTERSCR") == 0)
  128.                 requester->ReqPos = REQPOS_CENTERSCR;
  129.               else if (stricmp (result[OPT_POSITION], "TOPLEFTSCR") == 0)
  130.                 requester->ReqPos = REQPOS_TOPLEFTSCR;
  131.               else if (stricmp (result[OPT_POSITION], "CENTERWIN") == 0)
  132.                 requester->ReqPos = REQPOS_CENTERWIN;
  133.               else if (stricmp (result[OPT_POSITION], "TOPLEFTWIN") == 0)
  134.                 requester->ReqPos = REQPOS_TOPLEFTWIN;
  135.               else
  136.                 requester->ReqPos = REQPOS_POINTER;
  137.  
  138.               requester->Flags =
  139.                 ((result[OPT_CENTERTEXT]) ? EZREQF_CENTERTEXT : NULL) |
  140.                 ((result[OPT_NORETURNKEY]) ? EZREQF_NORETURNKEY : NULL);
  141.  
  142.               /*
  143.                * Fix body text - Map *n to '\n'
  144.                */
  145.               adjust (result[OPT_BODY], result[OPT_BODY]);
  146.  
  147.               {
  148.                 struct Process *process = (struct Process *) FindTask (NULL);
  149.                 APTR windowptr = process->pr_WindowPtr;
  150.  
  151.                 /*
  152.                  * Tags will be used to take care ofattributes not directly
  153.                  * settable in the rtReqInfo structure
  154.                  */
  155.  
  156.                 retval = rtEZRequestTags ((result[OPT_BODY])
  157.                 ? (char *) result[OPT_BODY] : (char *) NULL,
  158.                             (result[OPT_BUTTONTEXT])
  159.                               ? (char *) result[OPT_BUTTONTEXT] : "_Ok|_Cancel",
  160.                               requester, NULL,
  161.  
  162.  
  163.                               (result[OPT_DEFAULT]) ? RTEZ_DefaultResponse : TAG_IGNORE,
  164.                               *result[OPT_DEFAULT],
  165.  
  166.                 /*
  167.                  * Finally,
  168.                  * set some more general tags shared by most requesters
  169.                  */
  170.                 RT_Underscore, '_',
  171.                 (result[OPT_TOPOFFSET]) ? RT_TopOffset : TAG_IGNORE,
  172.                                     *result[OPT_TOPOFFSET],
  173.                 (result[OPT_LEFTOFFSET]) ? RT_LeftOffset : TAG_IGNORE,
  174.                             *result[OPT_LEFTOFFSET],
  175.                 (windowptr) ? RT_Window : TAG_IGNORE,
  176.                             windowptr,  
  177.                 (result[OPT_PUBSCREEN]) ? RT_PubScrName : TAG_IGNORE,
  178.                               result[OPT_PUBSCREEN],
  179.                               TAG_END);
  180.  
  181.               }
  182.               rtFreeRequest (requester);
  183.             }
  184.               else
  185.             {
  186.               /* Unable to allocate request structure */
  187.               retval = 20;
  188.             }
  189.               CloseLibrary (ReqToolsBase);
  190.             }
  191.           else
  192.             {
  193.               /* Unable to open reqtools.library */
  194.               fprintf (stderr, "\nrtEZRequest: Unable to open reqtools.library.\n");
  195.  
  196.               retval = 20;
  197.             }
  198.           FreeArgs (myrda);
  199.         }
  200.           else
  201.         {
  202.           /*
  203.            * Something went wrong in the parse
  204.            */
  205.  
  206.           if ((result[OPT_TITLE] == NULL) || (result[OPT_BODY] == NULL))
  207.             {
  208.               fprintf (stderr, "\nrtEZRequest: Required argument missing.\n\n");
  209.             }
  210.           else
  211.             {
  212.               fprintf (stderr, "\nrtEZRequest: Command syntax error.\n\n");
  213.             }
  214.  
  215.           fprintf (stderr, "Try - rtEZRequest help.\n");
  216.  
  217.           retval = 20;
  218.         }
  219.           FreeDosObject (DOS_RDARGS, myrda);
  220.         }
  221.       else
  222.         {
  223.           retval = 20;
  224.         }
  225.     }
  226.     }
  227.   else
  228.     {
  229.       /* we got launched from WB */
  230.     }
  231.  
  232.   return (retval);
  233. }
  234.