home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / monitors / rsys / source.lha / src / RSysTextFormatter.c < prev    next >
C/C++ Source or Header  |  1995-01-09  |  9KB  |  378 lines

  1. /*
  2. ***************************************************************************
  3. *
  4. * Datei:
  5. *    RSysTextFormatter.c
  6. *
  7. * Inhalt:
  8. *    int RSysFormatOutput(char *format);
  9. *
  10. * Bemerkungen:
  11. *    Formatierung der Ausgabelisten von RSys.
  12. *
  13. * Erstellungsdatum:
  14. *    07-Jul-93    Rolf Böhme
  15. *
  16. * Änderungen:
  17. *    07-Jul-93    Rolf Böhme    Erstellung
  18. *
  19. ***************************************************************************
  20. */
  21.  
  22. #include "RSysDebug.h"
  23. #include "RSysFunc.h"
  24.  
  25. enum
  26. {
  27.    GD_PrefixSGad,
  28.    GD_PostFixSGad,
  29.    GD_BlankLeftCGad,
  30.    GD_QuoteCGad,
  31.    GD_NoHeaderCGad,
  32.    GD_TextTGad,
  33.    GD_UseGad,
  34.    GD_NoFormatGad
  35. };
  36.  
  37. #define Formatter_CNT 8
  38.  
  39. struct _fmt {
  40.    int   f_blanks,
  41.          f_quote;
  42.    int   f_noheader;
  43.    int   f_noformat;
  44.    char  f_prefix[100],
  45.          f_postfix[100];
  46.    char  f_format[MAXWRITESIZE];
  47. } TFormat, TFormatDef = {
  48.    FALSE, FALSE, FALSE, TRUE,"","","%s"
  49. };
  50.  
  51. static struct Window *FormatterWnd = NULL;
  52. static struct Gadget *FormatterGList = NULL;
  53. static struct IntuiMessage FormatterMsg;
  54. static struct Gadget *FormatterGadgets[Formatter_CNT];
  55. static UWORD FormatterLeft = 47;
  56. static UWORD FormatterTop = 52;
  57. static UWORD FormatterWidth = 610;
  58. static UWORD FormatterHeight = 74;
  59. static UBYTE *FormatterWdt = (UBYTE *) NAME " " VERSION " - Output Formatter";
  60.  
  61. static UWORD FormatterGTypes[]=
  62. {
  63.    STRING_KIND,
  64.    STRING_KIND,
  65.    CHECKBOX_KIND,
  66.    CHECKBOX_KIND,
  67.    CHECKBOX_KIND,
  68.    TEXT_KIND,
  69.    BUTTON_KIND,
  70.    BUTTON_KIND
  71. };
  72.  
  73. int PrefixSGadClicked( void );
  74. int PostFixSGadClicked( void );
  75. int BlankLeftCGadClicked( void );
  76. int QuoteCGadClicked( void );
  77. int NoHeaderCGadClicked( void );
  78. int UseGadClicked( void );
  79. int NoFormatGadClicked( void );
  80.  
  81. static struct NewGadget FormatterNGad[]=
  82. {
  83.     14, 17, 211, 13, (UBYTE *)"Prefix", NULL, GD_PrefixSGad, PLACETEXT_ABOVE, NULL, (APTR)PrefixSGadClicked,
  84.     384, 17, 211, 13, (UBYTE *)"Postfix", NULL, GD_PostFixSGad, PLACETEXT_ABOVE, NULL, (APTR)PostFixSGadClicked,
  85.     14, 33, 26, 11, (UBYTE *)"Blanks between texts", NULL, GD_BlankLeftCGad, PLACETEXT_RIGHT, NULL, (APTR)BlankLeftCGadClicked,
  86.     234, 33, 26, 11, (UBYTE *)"Quote-in text", NULL, GD_QuoteCGad, PLACETEXT_RIGHT, NULL, (APTR)QuoteCGadClicked,
  87.     419, 33, 26, 11, (UBYTE *)"No header in file", NULL, GD_NoHeaderCGad, PLACETEXT_RIGHT, NULL, (APTR)NoHeaderCGadClicked,
  88.     233, 17, 143, 13, (UBYTE *)"Text to save", NULL, GD_TextTGad, PLACETEXT_ABOVE, NULL, NULL,
  89.     119, 53, 147, 13, (UBYTE *)"Use Format", NULL, GD_UseGad, PLACETEXT_IN, NULL, (APTR)UseGadClicked,
  90.     343, 53, 147, 13, (UBYTE *)"No Format", NULL, GD_NoFormatGad, PLACETEXT_IN, NULL, (APTR)NoFormatGadClicked
  91. };
  92.  
  93. static ULONG *FormatterGTags[]=
  94. {
  95.    (ULONG *) (GTST_MaxChars), (ULONG *) 100, (ULONG *) (TAG_DONE),
  96.    (ULONG *) (GTST_MaxChars), (ULONG *) 100, (ULONG *) (TAG_DONE),
  97.    (ULONG *) (TAG_DONE),
  98.    (ULONG *) (TAG_DONE),
  99.    (ULONG *) (TAG_DONE),
  100.    (ULONG *) (GTTX_Text), (ULONG *) "This is text", (ULONG *) (GTTX_Border), (ULONG *) TRUE, (ULONG *) (TAG_DONE),
  101.    (ULONG *) (TAG_DONE),
  102.    (ULONG *) (TAG_DONE)
  103. };
  104.  
  105. static int
  106. UseGadClicked(void)
  107. {
  108.    TFormat.f_noformat = FALSE;
  109.  
  110.    strncpy(TFormat.f_prefix,gadgetbuff(FormatterGadgets[GD_PrefixSGad]),100);
  111.    strncpy(TFormat.f_postfix,gadgetbuff(FormatterGadgets[GD_PostFixSGad]),100);
  112.  
  113.    sprintf(TFormat.f_format,"%s%s%s%s%s%s%s",
  114.            TFormat.f_prefix,
  115.            TFormat.f_blanks ? " " : "",
  116.            TFormat.f_quote  ? "\"" : "",
  117.            "\%s",
  118.            TFormat.f_quote  ? "\"" : "",
  119.            TFormat.f_blanks ? " " : "",
  120.            TFormat.f_postfix
  121.            );
  122.  
  123.    return(FALSE);
  124. }
  125.  
  126. static void
  127. preview(void)
  128. {
  129.    char text[MAXWRITESIZE];
  130.  
  131.    DPOS;
  132.  
  133.    sprintf(text,"%s%s%s%s%s",
  134.            TFormat.f_blanks ? " " : "",
  135.            TFormat.f_quote  ? "\"" : "",
  136.            "This is text",
  137.            TFormat.f_quote  ? "\"" : "",
  138.            TFormat.f_blanks ? " " : ""
  139.            );
  140.  
  141.    GT_SetGadgetAttrs(FormatterGadgets[GD_TextTGad], FormatterWnd,
  142.                      NULL,
  143.                      GTTX_Text, text,
  144.                      TAG_DONE);
  145.  
  146.    (void)UseGadClicked();
  147.  
  148.    return;
  149. }
  150.  
  151. static int
  152. PrefixSGadClicked(void)
  153. {
  154.    DPOS;
  155.  
  156.    strncpy(TFormat.f_prefix,gadgetbuff(FormatterGadgets[GD_PrefixSGad]),100);
  157.  
  158.    preview();
  159.  
  160.    return TRUE;
  161. }
  162.  
  163. static int
  164. PostFixSGadClicked(void)
  165. {
  166.    DPOS;
  167.  
  168.    strncpy(TFormat.f_postfix,gadgetbuff(FormatterGadgets[GD_PostFixSGad]),100);
  169.  
  170.    preview();
  171.  
  172.    return TRUE;
  173. }
  174.  
  175. static int
  176. BlankLeftCGadClicked(void)
  177. {
  178.    DPOS;
  179.  
  180.    TFormat.f_blanks = (TFormat.f_blanks ? FALSE : TRUE);
  181.  
  182.    preview();
  183.  
  184.    return TRUE;
  185. }
  186.  
  187. static int
  188. QuoteCGadClicked(void)
  189. {
  190.    DPOS;
  191.  
  192.    TFormat.f_quote = (TFormat.f_quote ? FALSE : TRUE);
  193.  
  194.    preview();
  195.  
  196.    return TRUE;
  197. }
  198.  
  199. static int
  200. NoHeaderCGadClicked(void)
  201. {
  202.    DPOS;
  203.  
  204.    TFormat.f_noheader = (TFormat.f_noheader ? FALSE : TRUE);
  205.  
  206.    return TRUE;
  207. }
  208.  
  209. static int
  210. NoFormatGadClicked(void)
  211. {
  212.    DPOS;
  213.  
  214.    TFormat.f_noformat = TRUE;
  215.    TFormat.f_noheader = FALSE;
  216.  
  217.    return FALSE;
  218. }
  219.  
  220. static int
  221. OpenFormatterWindow(void)
  222. {
  223.    struct NewGadget ng;
  224.    struct Gadget *g;
  225.    UWORD lc,
  226.          tc;
  227.    UWORD wleft = FormatterLeft,
  228.          wtop = FormatterTop,
  229.          ww,
  230.          wh;
  231.    int gl[] = { GD_PrefixSGad, GD_PostFixSGad, GD_TextTGad };
  232.  
  233.    DPOS;
  234.    ComputeFont(Scr, FormatterWidth, FormatterHeight);
  235.  
  236.    ww = ComputeX(FormatterWidth);
  237.    wh = ComputeY(FormatterHeight);
  238.  
  239.    if ((wleft + ww + OffX + Scr->WBorRight) > Scr->Width)
  240.       wleft = Scr->Width - ww;
  241.    if ((wtop + wh + OffY + Scr->WBorBottom) > Scr->Height)
  242.       wtop = Scr->Height - wh;
  243.  
  244.    ww = compute((UWORD) (OffX + Scr->WBorRight), FontX, (int)FormatterWidth);
  245.    wh = compute((UWORD) (OffY + Scr->WBorBottom), FontY, (int)FormatterHeight);
  246.  
  247.    CenterWindow(Scr, &wtop, &wleft, ww, wh);
  248.  
  249.    if (!(g = CreateContext(&FormatterGList)))
  250.       return (1L);
  251.  
  252.    for (lc = 0, tc = 0; lc < Formatter_CNT; lc++)
  253.    {
  254.       CopyMem((char *)&FormatterNGad[lc], (char *)&ng, (long)sizeof(struct NewGadget));
  255.  
  256.       ng.ng_VisualInfo = VisualInfo;
  257.       ng.ng_TextAttr = Font;
  258.       ng.ng_LeftEdge = OffX + ComputeX(ng.ng_LeftEdge);
  259.       ng.ng_TopEdge = OffY + ComputeY(ng.ng_TopEdge);
  260.       ng.ng_Width = ComputeX(ng.ng_Width);
  261.       ng.ng_Height = ComputeY(ng.ng_Height);
  262.  
  263.       FormatterGadgets[lc] = g = CreateGadgetA((ULONG) FormatterGTypes[lc], g, &ng, (struct TagItem *) & FormatterGTags[tc]);
  264.  
  265.       makelabelvisible(FormatterGadgets[lc]);
  266.  
  267.       while (FormatterGTags[tc])
  268.          tc += 2;
  269.       tc++;
  270.  
  271.       if (NOT g)
  272.          return (2L);
  273.    }
  274.  
  275.    if (!(FormatterWnd = OpenWindowTags(NULL,
  276.                                        WA_Left, wleft,
  277.                                        WA_Top, wtop,
  278.                                        WA_Width, ww,
  279.                                        WA_Height, wh,
  280.                                        WA_IDCMP, STRINGIDCMP | CHECKBOXIDCMP |
  281.                                        TEXTIDCMP | BUTTONIDCMP | IDCMP_CLOSEWINDOW |
  282.                                        IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY,
  283.                                        WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET |
  284.                                        WFLG_CLOSEGADGET | WFLG_SMART_REFRESH |
  285.                                        WFLG_ACTIVATE | WFLG_RMBTRAP,
  286.                                        WA_Gadgets, FormatterGList,
  287.                                        WA_Title, FormatterWdt,
  288.                                        WA_PubScreenFallBack,TRUE,
  289.                                        WA_PubScreen, Scr,
  290.                                        TAG_DONE)))
  291.       return (4L);
  292.  
  293.    RefreshRastPort(FormatterWnd,FormatterGadgets,gl, 3);
  294.  
  295.    if(Flags.autofront)
  296.    {
  297.       WindowToFront(FormatterWnd);
  298.       ActivateWindow(FormatterWnd);
  299.    }
  300.  
  301.    return (0L);
  302. }
  303.  
  304. static int
  305. HandleFormatterIDCMP(void)
  306. {
  307.    struct IntuiMessage *m;
  308.    int   (*func) (void);
  309.    BOOL  running = TRUE;
  310.  
  311.    DPOS;
  312.    while (m = GT_GetIMsg(FormatterWnd->UserPort))
  313.    {
  314.       CopyMem((char *)m, (char *)&FormatterMsg, (long)sizeof(struct IntuiMessage));
  315.  
  316.       GT_ReplyIMsg(m);
  317.  
  318.       switch (FormatterMsg.Class)
  319.       {
  320.          case IDCMP_REFRESHWINDOW:
  321.             GT_BeginRefresh(FormatterWnd);
  322.             GT_EndRefresh(FormatterWnd, TRUE);
  323.             break;
  324.  
  325.          case IDCMP_VANILLAKEY:
  326.             if ((char)FormatterMsg.Code == ESC)
  327.                running = FALSE;
  328.             break;
  329.  
  330.          case IDCMP_CLOSEWINDOW:
  331.             running = NoFormatGadClicked();
  332.             break;
  333.  
  334.          case IDCMP_GADGETUP:
  335.             func = (void *)((struct Gadget *) FormatterMsg.IAddress)->UserData;
  336.             running = func();
  337.             break;
  338.       }
  339.    }
  340.    DPOS;
  341.    return (running);
  342. }
  343.  
  344. int
  345. RSysFormatOutput(char *format)
  346. {
  347.    APTR req;
  348.  
  349.    DPOS;
  350.    CopyMem(&TFormatDef, &TFormat, sizeof(struct _fmt));
  351.  
  352.    if (OpenASysWindow(OpenFormatterWindow, NO_KILL))
  353.    {
  354.       PrintInfo("Format output strings", SPEAK, 0);
  355.  
  356.       if (SysWnd)
  357.          req = LockWindow(SysWnd);
  358.  
  359.       while(HandleFormatterIDCMP()) ;
  360.  
  361.       CloseASysWindow(&FormatterWnd, &FormatterGList, NULL);
  362.  
  363.       if(TFormat.f_noformat == FALSE)
  364.          strcpy(format,TFormat.f_format);
  365.       else
  366.          strcpy(format,"%s");
  367.  
  368.       if (SysWnd)
  369.       {
  370.          UnlockWindow(req);
  371.          RefreshMainWindowPattern();
  372.          RefreshList(LastID);
  373.       }
  374.    }
  375.  
  376.    return TFormat.f_noheader;
  377. }
  378.