home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
monitors
/
rsys
/
source.lha
/
src
/
RSysTextFormatter.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-09
|
9KB
|
378 lines
/*
***************************************************************************
*
* Datei:
* RSysTextFormatter.c
*
* Inhalt:
* int RSysFormatOutput(char *format);
*
* Bemerkungen:
* Formatierung der Ausgabelisten von RSys.
*
* Erstellungsdatum:
* 07-Jul-93 Rolf Böhme
*
* Änderungen:
* 07-Jul-93 Rolf Böhme Erstellung
*
***************************************************************************
*/
#include "RSysDebug.h"
#include "RSysFunc.h"
enum
{
GD_PrefixSGad,
GD_PostFixSGad,
GD_BlankLeftCGad,
GD_QuoteCGad,
GD_NoHeaderCGad,
GD_TextTGad,
GD_UseGad,
GD_NoFormatGad
};
#define Formatter_CNT 8
struct _fmt {
int f_blanks,
f_quote;
int f_noheader;
int f_noformat;
char f_prefix[100],
f_postfix[100];
char f_format[MAXWRITESIZE];
} TFormat, TFormatDef = {
FALSE, FALSE, FALSE, TRUE,"","","%s"
};
static struct Window *FormatterWnd = NULL;
static struct Gadget *FormatterGList = NULL;
static struct IntuiMessage FormatterMsg;
static struct Gadget *FormatterGadgets[Formatter_CNT];
static UWORD FormatterLeft = 47;
static UWORD FormatterTop = 52;
static UWORD FormatterWidth = 610;
static UWORD FormatterHeight = 74;
static UBYTE *FormatterWdt = (UBYTE *) NAME " " VERSION " - Output Formatter";
static UWORD FormatterGTypes[]=
{
STRING_KIND,
STRING_KIND,
CHECKBOX_KIND,
CHECKBOX_KIND,
CHECKBOX_KIND,
TEXT_KIND,
BUTTON_KIND,
BUTTON_KIND
};
int PrefixSGadClicked( void );
int PostFixSGadClicked( void );
int BlankLeftCGadClicked( void );
int QuoteCGadClicked( void );
int NoHeaderCGadClicked( void );
int UseGadClicked( void );
int NoFormatGadClicked( void );
static struct NewGadget FormatterNGad[]=
{
14, 17, 211, 13, (UBYTE *)"Prefix", NULL, GD_PrefixSGad, PLACETEXT_ABOVE, NULL, (APTR)PrefixSGadClicked,
384, 17, 211, 13, (UBYTE *)"Postfix", NULL, GD_PostFixSGad, PLACETEXT_ABOVE, NULL, (APTR)PostFixSGadClicked,
14, 33, 26, 11, (UBYTE *)"Blanks between texts", NULL, GD_BlankLeftCGad, PLACETEXT_RIGHT, NULL, (APTR)BlankLeftCGadClicked,
234, 33, 26, 11, (UBYTE *)"Quote-in text", NULL, GD_QuoteCGad, PLACETEXT_RIGHT, NULL, (APTR)QuoteCGadClicked,
419, 33, 26, 11, (UBYTE *)"No header in file", NULL, GD_NoHeaderCGad, PLACETEXT_RIGHT, NULL, (APTR)NoHeaderCGadClicked,
233, 17, 143, 13, (UBYTE *)"Text to save", NULL, GD_TextTGad, PLACETEXT_ABOVE, NULL, NULL,
119, 53, 147, 13, (UBYTE *)"Use Format", NULL, GD_UseGad, PLACETEXT_IN, NULL, (APTR)UseGadClicked,
343, 53, 147, 13, (UBYTE *)"No Format", NULL, GD_NoFormatGad, PLACETEXT_IN, NULL, (APTR)NoFormatGadClicked
};
static ULONG *FormatterGTags[]=
{
(ULONG *) (GTST_MaxChars), (ULONG *) 100, (ULONG *) (TAG_DONE),
(ULONG *) (GTST_MaxChars), (ULONG *) 100, (ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (GTTX_Text), (ULONG *) "This is text", (ULONG *) (GTTX_Border), (ULONG *) TRUE, (ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE)
};
static int
UseGadClicked(void)
{
TFormat.f_noformat = FALSE;
strncpy(TFormat.f_prefix,gadgetbuff(FormatterGadgets[GD_PrefixSGad]),100);
strncpy(TFormat.f_postfix,gadgetbuff(FormatterGadgets[GD_PostFixSGad]),100);
sprintf(TFormat.f_format,"%s%s%s%s%s%s%s",
TFormat.f_prefix,
TFormat.f_blanks ? " " : "",
TFormat.f_quote ? "\"" : "",
"\%s",
TFormat.f_quote ? "\"" : "",
TFormat.f_blanks ? " " : "",
TFormat.f_postfix
);
return(FALSE);
}
static void
preview(void)
{
char text[MAXWRITESIZE];
DPOS;
sprintf(text,"%s%s%s%s%s",
TFormat.f_blanks ? " " : "",
TFormat.f_quote ? "\"" : "",
"This is text",
TFormat.f_quote ? "\"" : "",
TFormat.f_blanks ? " " : ""
);
GT_SetGadgetAttrs(FormatterGadgets[GD_TextTGad], FormatterWnd,
NULL,
GTTX_Text, text,
TAG_DONE);
(void)UseGadClicked();
return;
}
static int
PrefixSGadClicked(void)
{
DPOS;
strncpy(TFormat.f_prefix,gadgetbuff(FormatterGadgets[GD_PrefixSGad]),100);
preview();
return TRUE;
}
static int
PostFixSGadClicked(void)
{
DPOS;
strncpy(TFormat.f_postfix,gadgetbuff(FormatterGadgets[GD_PostFixSGad]),100);
preview();
return TRUE;
}
static int
BlankLeftCGadClicked(void)
{
DPOS;
TFormat.f_blanks = (TFormat.f_blanks ? FALSE : TRUE);
preview();
return TRUE;
}
static int
QuoteCGadClicked(void)
{
DPOS;
TFormat.f_quote = (TFormat.f_quote ? FALSE : TRUE);
preview();
return TRUE;
}
static int
NoHeaderCGadClicked(void)
{
DPOS;
TFormat.f_noheader = (TFormat.f_noheader ? FALSE : TRUE);
return TRUE;
}
static int
NoFormatGadClicked(void)
{
DPOS;
TFormat.f_noformat = TRUE;
TFormat.f_noheader = FALSE;
return FALSE;
}
static int
OpenFormatterWindow(void)
{
struct NewGadget ng;
struct Gadget *g;
UWORD lc,
tc;
UWORD wleft = FormatterLeft,
wtop = FormatterTop,
ww,
wh;
int gl[] = { GD_PrefixSGad, GD_PostFixSGad, GD_TextTGad };
DPOS;
ComputeFont(Scr, FormatterWidth, FormatterHeight);
ww = ComputeX(FormatterWidth);
wh = ComputeY(FormatterHeight);
if ((wleft + ww + OffX + Scr->WBorRight) > Scr->Width)
wleft = Scr->Width - ww;
if ((wtop + wh + OffY + Scr->WBorBottom) > Scr->Height)
wtop = Scr->Height - wh;
ww = compute((UWORD) (OffX + Scr->WBorRight), FontX, (int)FormatterWidth);
wh = compute((UWORD) (OffY + Scr->WBorBottom), FontY, (int)FormatterHeight);
CenterWindow(Scr, &wtop, &wleft, ww, wh);
if (!(g = CreateContext(&FormatterGList)))
return (1L);
for (lc = 0, tc = 0; lc < Formatter_CNT; lc++)
{
CopyMem((char *)&FormatterNGad[lc], (char *)&ng, (long)sizeof(struct NewGadget));
ng.ng_VisualInfo = VisualInfo;
ng.ng_TextAttr = Font;
ng.ng_LeftEdge = OffX + ComputeX(ng.ng_LeftEdge);
ng.ng_TopEdge = OffY + ComputeY(ng.ng_TopEdge);
ng.ng_Width = ComputeX(ng.ng_Width);
ng.ng_Height = ComputeY(ng.ng_Height);
FormatterGadgets[lc] = g = CreateGadgetA((ULONG) FormatterGTypes[lc], g, &ng, (struct TagItem *) & FormatterGTags[tc]);
makelabelvisible(FormatterGadgets[lc]);
while (FormatterGTags[tc])
tc += 2;
tc++;
if (NOT g)
return (2L);
}
if (!(FormatterWnd = OpenWindowTags(NULL,
WA_Left, wleft,
WA_Top, wtop,
WA_Width, ww,
WA_Height, wh,
WA_IDCMP, STRINGIDCMP | CHECKBOXIDCMP |
TEXTIDCMP | BUTTONIDCMP | IDCMP_CLOSEWINDOW |
IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY,
WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET |
WFLG_CLOSEGADGET | WFLG_SMART_REFRESH |
WFLG_ACTIVATE | WFLG_RMBTRAP,
WA_Gadgets, FormatterGList,
WA_Title, FormatterWdt,
WA_PubScreenFallBack,TRUE,
WA_PubScreen, Scr,
TAG_DONE)))
return (4L);
RefreshRastPort(FormatterWnd,FormatterGadgets,gl, 3);
if(Flags.autofront)
{
WindowToFront(FormatterWnd);
ActivateWindow(FormatterWnd);
}
return (0L);
}
static int
HandleFormatterIDCMP(void)
{
struct IntuiMessage *m;
int (*func) (void);
BOOL running = TRUE;
DPOS;
while (m = GT_GetIMsg(FormatterWnd->UserPort))
{
CopyMem((char *)m, (char *)&FormatterMsg, (long)sizeof(struct IntuiMessage));
GT_ReplyIMsg(m);
switch (FormatterMsg.Class)
{
case IDCMP_REFRESHWINDOW:
GT_BeginRefresh(FormatterWnd);
GT_EndRefresh(FormatterWnd, TRUE);
break;
case IDCMP_VANILLAKEY:
if ((char)FormatterMsg.Code == ESC)
running = FALSE;
break;
case IDCMP_CLOSEWINDOW:
running = NoFormatGadClicked();
break;
case IDCMP_GADGETUP:
func = (void *)((struct Gadget *) FormatterMsg.IAddress)->UserData;
running = func();
break;
}
}
DPOS;
return (running);
}
int
RSysFormatOutput(char *format)
{
APTR req;
DPOS;
CopyMem(&TFormatDef, &TFormat, sizeof(struct _fmt));
if (OpenASysWindow(OpenFormatterWindow, NO_KILL))
{
PrintInfo("Format output strings", SPEAK, 0);
if (SysWnd)
req = LockWindow(SysWnd);
while(HandleFormatterIDCMP()) ;
CloseASysWindow(&FormatterWnd, &FormatterGList, NULL);
if(TFormat.f_noformat == FALSE)
strcpy(format,TFormat.f_format);
else
strcpy(format,"%s");
if (SysWnd)
{
UnlockWindow(req);
RefreshMainWindowPattern();
RefreshList(LastID);
}
}
return TFormat.f_noheader;
}