home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / util / batch / dosreqtools / dosextensions / requestersrc / rtfontrequest.c < prev    next >
C/C++ Source or Header  |  1994-11-16  |  7KB  |  231 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: rtFontRequest 2.3 (11.16.94)";
  14.  
  15. char MyExtHelp[] =
  16. "\n"
  17. "Usage : rtFontRequest\n"
  18. "\n"
  19. "  TITLE/A,NOBUFFER/S,FIXEDWIDTH/S,COLORFONTS/S,CHANGEPALETTE/S,LEAVEPALETTE/S,\n"
  20. "  SCALE/S,STYLE/S,HEIGHT/N/K,OKTEXT/K,SAMPLEHEIGHT/N/K,MINHEIGHT/N/K,\n"
  21. "  MAXHEIGHT/N/K,POSITION=POS/K,TOPOFFSET=TOP/N/K,LEFFTOFFSET=LEFT/N/K,\n"
  22. "  PUBSCREEN/K\n"
  23. "\n"
  24. "Arguments:\n"
  25. "\n"
  26. "  TITLE    <text> - Title text for requester window.\n"
  27. "  NOBUFFER        - do not buffer the font list for subsequent calls.\n"
  28. "  FIXEDWIDTH      - only show fixed-width fonts.\n"
  29. "  COLORFONTS      - show color fonts also.\n"
  30. "  CHANGEPALETTE   - change the screen's palette to match that of a selected\n"
  31. "                    color font.\n"
  32. "  LEAVEPALETTE    - leave the palette as it is when exiting rtFontRequest.\n"
  33. "                    Useful in combination with CHANGEPALETTE.\n"
  34. "  SCALE           - allow fonts to be scaled when they don't exist in the\n"
  35. "                    requested size. (works on Kickstart 2.0 only, has no\n" 
  36. "                    effect on 1.2/1.3).\n"
  37. "  STYLE           - include gadgets so the user may select the font's style.\n"
  38. "  HEIGHT    <num> - Suggested height of font requester window.\n"
  39. "  OKTEXT   <text> - Replacement text for \"Ok\" gadget.  Maximum 6 chars.\n"
  40. "  SAMPLEHEIGHT <num> - Height of font sample display in pixels (default 24).\n"
  41. "  MINHEIGHT    <num> - Minimum font size displayed.\n"
  42. "  MAXHEIGHT    <num> - Maximum font size displayed.\n"
  43. "  POSITION     <pos> - Open requester window at <pos>.  Permissible values are:\n"
  44. " >or POS               CENTERSCR, TOPLEFTSCR, CENTERWIN, TOPLEFTWIN, POINTER.\n"
  45. "  TOPOFFSET    <num> - Offset position relative to above.\n"
  46. " >or TOP\n"
  47. "  LEFFTOFFSET  <num> - Offset position relative to above.\n"
  48. " >or LEFT\n"
  49. "  PUBSCREEN <screen> - Public screen name.\n";
  50.  
  51. #define TEMPLATE "TITLE/A,NOBUFFER/S,FIXEDWIDTH/S,COLORFONTS/S,CHANGEPALETTE/S,LEAVEPALETTE/S,SCALE/S,STYLE/S,HEIGHT/N/K,OKTEXT/K,SAMPLEHEIGHT/N/K,MINHEIGHT/N/K,MAXHEIGHT/N/K,POSITION=POS/K,TOPOFFSET=TOP/N/K,LEFFTOFFSET=LEFT/N/K,PUBSCREEN/K"
  52.  
  53. #define OPT_TITLE 0
  54. #define OPT_NOBUFFER 1
  55. #define OPT_FIXEDWIDTH 2
  56. #define OPT_COLORFONTS 3
  57. #define OPT_CHANGEPALETTE 4
  58. #define OPT_LEAVEPALETTE 5
  59. #define OPT_SCALE 6
  60. #define OPT_STYLE 7
  61. #define OPT_HEIGHT 8
  62. #define OPT_OKTEXT 9
  63. #define OPT_SAMPLEHEIGHT 10
  64. #define OPT_MINHEIGHT 11
  65. #define OPT_MAXHEIGHT 12
  66. #define OPT_POSITION 13
  67. #define OPT_TOPOFFSET 14
  68. #define OPT_LEFTOFFSET 15
  69. #define OPT_PUBSCREEN 16
  70. #define OPT_COUNT 17
  71.  
  72. struct Library *ReqToolsBase;
  73.  
  74. int
  75. main (int argc, char **argv)
  76. {
  77.   int retval = 0;
  78.  
  79.   if (argc)
  80.     {
  81.       if ((argc == 2) && (stricmp (argv[1], "HELP") == 0))
  82.     {
  83.       fprintf (stdout, "%s", MyExtHelp);
  84.     }
  85.       else
  86.     {
  87.       /* My custom RDArgs */
  88.       struct RDArgs *myrda;
  89.  
  90.       /* Need to ask DOS for a RDArgs structure */
  91.       if (myrda = (struct RDArgs *) AllocDosObject (DOS_RDARGS, NULL))
  92.         {
  93.           /*
  94.            * The array of LONGs where ReadArgs() will store the data from
  95.            * the command line arguments.  C guarantees that all the array
  96.            * entries will be set to zero.
  97.            */
  98.           LONG *result[OPT_COUNT] =
  99.           {NULL};
  100.  
  101.           /* parse my command line */
  102.           if (ReadArgs (TEMPLATE, result, myrda))
  103.         {
  104.           if (ReqToolsBase = (struct Library *) OpenLibrary ("reqtools.library", LIBRARY_MINIMUM))
  105.             {
  106.               struct rtFileRequester *requester;
  107.  
  108.               if (requester = (struct rtFileRequester *) rtAllocRequest (RT_FONTREQ, NULL))
  109.             {
  110.               /*
  111.                * Take care of requester positioning -
  112.                * These flags common to most rt requesters
  113.                */
  114.               if (stricmp (result[OPT_POSITION], "CENTERSCR") == 0)
  115.                 requester->ReqPos = REQPOS_CENTERSCR;
  116.               else if (stricmp (result[OPT_POSITION], "TOPLEFTSCR") == 0)
  117.                 requester->ReqPos = REQPOS_TOPLEFTSCR;
  118.               else if (stricmp (result[OPT_POSITION], "CENTERWIN") == 0)
  119.                 requester->ReqPos = REQPOS_CENTERWIN;
  120.               else if (stricmp (result[OPT_POSITION], "TOPLEFTWIN") == 0)
  121.                 requester->ReqPos = REQPOS_TOPLEFTWIN;
  122.               else
  123.                 requester->ReqPos = REQPOS_POINTER;
  124.  
  125.               /*
  126.                * take care of some rtFontRequest () specific flags
  127.                */
  128.               requester->Flags =
  129.               ((result[OPT_NOBUFFER]) ? FREQF_NOBUFFER : NULL) |
  130.               ((result[OPT_FIXEDWIDTH]) ? FREQF_FIXEDWIDTH : NULL) |
  131.               ((result[OPT_COLORFONTS]) ? FREQF_COLORFONTS : NULL) |
  132.               ((result[OPT_CHANGEPALETTE]) ? FREQF_CHANGEPALETTE : NULL) |
  133.               ((result[OPT_LEAVEPALETTE]) ? FREQF_LEAVEPALETTE : NULL) |
  134.               ((result[OPT_SCALE]) ? FREQF_SCALE  : NULL) |
  135.               ((result[OPT_STYLE]) ? FREQF_STYLE : NULL);               
  136.  
  137.               {
  138.                 struct Process *process = (struct Process *) FindTask (NULL);
  139.                 APTR windowptr = process->pr_WindowPtr;
  140.  
  141.                 APTR func_return;
  142.  
  143.                 /*
  144.                  * Tags will be used to take care ofattributes not directly
  145.                  * settable in the rtReqInfo structure
  146.                  */
  147.  
  148.                 rtFontRequest (requester, result[OPT_TITLE],
  149.  
  150.                 (result[OPT_HEIGHT]) ? RTFO_Height : TAG_IGNORE,
  151.                              *result[OPT_HEIGHT],
  152.                 (result[OPT_OKTEXT]) ? RTFO_OkText : TAG_IGNORE,
  153.                              result[OPT_OKTEXT],
  154.  
  155.                 (result[OPT_SAMPLEHEIGHT]) ? RTFO_SampleHeight : TAG_IGNORE,
  156.                                           *result[OPT_SAMPLEHEIGHT],
  157.                             (result[OPT_MINHEIGHT]) ? RTFO_MinHeight : TAG_IGNORE,
  158.                                                           *result[OPT_MINHEIGHT],
  159.                             (result[OPT_MAXHEIGHT]) ? RTFO_MaxHeight : TAG_IGNORE,
  160.                                                           *result[OPT_MAXHEIGHT],
  161.                 /*
  162.                  * Finally,
  163.                  * set some more general tags shared by most requesters
  164.                  */
  165.                          RT_Underscore, '_',
  166.  
  167.                 (result[OPT_TOPOFFSET]) ? RT_TopOffset : TAG_IGNORE,
  168.                 *result[OPT_TOPOFFSET],
  169.                 (result[OPT_LEFTOFFSET]) ? RT_LeftOffset : TAG_IGNORE,
  170.                 *result[OPT_LEFTOFFSET],
  171.                 (windowptr) ? RT_Window : TAG_IGNORE,
  172.                 windowptr,
  173.                 (result[OPT_PUBSCREEN]) ? RT_PubScrName : TAG_IGNORE,
  174.                 result[OPT_PUBSCREEN],
  175.                 TAG_END);
  176.               }
  177.  
  178.               rtFreeRequest (requester);
  179.             }
  180.               else
  181.             {
  182.               /* Unable to allocate request structure */
  183.               retval = 20;
  184.             }
  185.               CloseLibrary (ReqToolsBase);
  186.             }
  187.           else
  188.             {
  189.               /* Unable to open reqtools.library */
  190.               fprintf (stderr, "rtGetString: Unable to open reqtools.library.\n");
  191.               retval = 20;
  192.             }
  193.           FreeArgs (myrda);
  194.         }
  195.           else
  196.         {
  197.           /*
  198.            * Something went wrong in the parse
  199.            */
  200.  
  201.           if (result[OPT_TITLE] == NULL)
  202.             {
  203.               fprintf (stderr, "rtFontRequest: Required argument missing.\n");
  204.             }
  205.           else
  206.             {
  207.               /* something else is wrong */
  208.               fprintf (stderr, "rtFontRequest: Command syntax error.\n");
  209.             }
  210.  
  211.           fprintf (stderr, "Try - rtFontRequest help.\n");
  212.  
  213.           retval = 20;
  214.         }
  215.           FreeDosObject (DOS_RDARGS, myrda);
  216.         }
  217.       else
  218.         {
  219.           /* Unable to alloc readargs structure */
  220.           retval = 20;
  221.         }
  222.     }
  223.     }
  224.   else
  225.     {
  226.       /* launched from workbench */
  227.     }
  228.  
  229.   return (retval);
  230. }
  231.