home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
500-599
/
ff562.lza
/
Intuisup
/
Editor
/
source.lzh
/
req.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-31
|
16KB
|
492 lines
/*************************************
* *
* Editor v1.0 *
* by Torsten Jürgeleit in 07/91 *
* *
* Requester part *
* *
*************************************/
/* Includes */
#include "includes.h"
#include "defines.h"
#include "imports.h"
#include "protos.h"
/* Defines for error requester */
#define ERROR_WINDOW_TITLE " Error "
/* Statics for error requester */
STATIC BYTE *error_text[] = {
"Can't open arp.library v39+",
"Can't open intuisup.library",
"Can't open diskfont.library",
"Can't open window",
"Out of memory",
"Can't open file",
"Error while saving",
"Error while reading",
"Line in load file too long",
"Missing argument in load file",
"Different block types for BEGIN and END in load file"
};
/* Defines for continue requester */
#define CONTINUE_WINDOW_TITLE (UBYTE *)" Error "
#define CONTINUE_WINDOW_IDCMP (CLOSEWINDOW | GADGET_IDCMP_FLAGS_BUTTON)
#define CONTINUE_RENDER_INFO_FLAGS (RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
#define CONTINUE_OPEN_WINDOW_FLAGS 0
#define CONTINUE_GADGET_TYPE GADGET_DATA_TYPE_BUTTON
#define CONTINUE_GADGET_FLAGS GADGET_DATA_FLAG_HOT_KEY
#define CONTINUE_GADGET_TEXT "_Continue"
#define CONTINUE_GADGET_LEFT_EDGE 0
#define CONTINUE_GADGET_TOP_EDGE 0
#define CONTINUE_GADGET_WIDTH ((8 + 2) * 8)
#define CONTINUE_GADGET_HEIGHT 15
#define CONTINUE_GADGET_TEXT_ATTR &topaz80_attr
/* Statics for continue requester */
STATIC struct NewWindow continue_new_window = {
0, 0, 0, 0, 0, 1, CONTINUE_WINDOW_IDCMP, WINDOWCLOSE | WINDOWDRAG |
WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH | ACTIVATE, NULL, NULL, NULL,
NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN
};
STATIC struct GadgetData continue_gadget_data[] = {
{
CONTINUE_GADGET_TYPE, /* gd_Type */
CONTINUE_GADGET_FLAGS, /* gd_Flags */
CONTINUE_GADGET_LEFT_EDGE, /* gd_LeftEdge */
CONTINUE_GADGET_TOP_EDGE, /* gd_TopEdge */
CONTINUE_GADGET_WIDTH, /* gd_Width */
CONTINUE_GADGET_HEIGHT, /* gd_Height */
CONTINUE_GADGET_TEXT, /* *gd_Text */
CONTINUE_GADGET_TEXT_ATTR, /* *gd_TextAttr */
{ 0, 0, 0 }
}, {
INTUISUP_DATA_END /* mark end of gadget data */
}
};
/* Defines for about requester */
#define ABOUT_WINDOW_WIDTH 300
#define ABOUT_WINDOW_HEIGHT 115
#define ABOUT_WINDOW_TITLE (UBYTE *)" About "
#define ABOUT_WINDOW_IDCMP (CLOSEWINDOW | GADGET_IDCMP_FLAGS_BUTTON)
#define ABOUT_RENDER_INFO_FLAGS (RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
#define ABOUT_OPEN_WINDOW_FLAGS OPEN_WINDOW_FLAG_CENTER_WINDOW
#define ABOUT_GADGET_TYPE GADGET_DATA_TYPE_BUTTON
#define ABOUT_GADGET_FLAGS GADGET_DATA_FLAG_HOT_KEY
#define ABOUT_GADGET_TEXT "_Continue"
#define ABOUT_GADGET_LEFT_EDGE ((ABOUT_WINDOW_WIDTH - ABOUT_GADGET_WIDTH) / 2)
#define ABOUT_GADGET_TOP_EDGE (ABOUT_WINDOW_HEIGHT - ABOUT_GADGET_HEIGHT - 10)
#define ABOUT_GADGET_WIDTH ((8 + 2) * 8)
#define ABOUT_GADGET_HEIGHT 15
#define ABOUT_GADGET_TEXT_ATTR &topaz80_attr
#define ABOUT_TEXT1_TYPE TEXT_DATA_TYPE_TEXT
#define ABOUT_TEXT1_FLAGS (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_BOLD)
#define ABOUT_TEXT1_LEFT_EDGE 0
#define ABOUT_TEXT1_TOP_EDGE 10
#define ABOUT_TEXT1_TEXT "Template Editor v1.0"
#define ABOUT_TEXT1_TEXT_ATTR &topaz60_attr
#define ABOUT_TEXT2_TYPE TEXT_DATA_TYPE_TEXT
#define ABOUT_TEXT2_FLAGS (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
#define ABOUT_TEXT2_LEFT_EDGE 0
#define ABOUT_TEXT2_TOP_EDGE 30
#define ABOUT_TEXT2_TEXT "© 08/91 by Torsten Jürgeleit"
#define ABOUT_TEXT2_TEXT_ATTR &topaz80_attr
#define ABOUT_TEXT3_TYPE TEXT_DATA_TYPE_TEXT
#define ABOUT_TEXT3_FLAGS (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
#define ABOUT_TEXT3_LEFT_EDGE 0
#define ABOUT_TEXT3_TOP_EDGE 40
#define ABOUT_TEXT3_TEXT " Am Sandberg 4 "
#define ABOUT_TEXT3_TEXT_ATTR &topaz80_attr
#define ABOUT_TEXT4_TYPE TEXT_DATA_TYPE_TEXT
#define ABOUT_TEXT4_FLAGS (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
#define ABOUT_TEXT4_LEFT_EDGE 0
#define ABOUT_TEXT4_TOP_EDGE 50
#define ABOUT_TEXT4_TEXT " 5270 Gummersbach "
#define ABOUT_TEXT4_TEXT_ATTR &topaz80_attr
#define ABOUT_TEXT5_TYPE TEXT_DATA_TYPE_TEXT
#define ABOUT_TEXT5_FLAGS (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
#define ABOUT_TEXT5_LEFT_EDGE 0
#define ABOUT_TEXT5_TOP_EDGE 60
#define ABOUT_TEXT5_TEXT " West Germany "
#define ABOUT_TEXT5_TEXT_ATTR &topaz80_attr
#define ABOUT_TEXT6_TYPE TEXT_DATA_TYPE_TEXT
#define ABOUT_TEXT6_FLAGS (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
#define ABOUT_TEXT6_LEFT_EDGE 0
#define ABOUT_TEXT6_TOP_EDGE 70
#define ABOUT_TEXT6_TEXT " Phone 02261/27400"
#define ABOUT_TEXT6_TEXT_ATTR &topaz80_attr
/* Statics for about requester */
STATIC struct NewWindow about_new_window = {
0, 0, ABOUT_WINDOW_WIDTH, ABOUT_WINDOW_HEIGHT, 0, 1, ABOUT_WINDOW_IDCMP,
WINDOWCLOSE | WINDOWDRAG | WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH |
ACTIVATE, NULL, NULL, ABOUT_WINDOW_TITLE, NULL, NULL, 0, 0, 0, 0,
WBENCHSCREEN
};
STATIC struct GadgetData about_gadget_data[] = {
{
ABOUT_GADGET_TYPE, /* gd_Type */
ABOUT_GADGET_FLAGS, /* gd_Flags */
ABOUT_GADGET_LEFT_EDGE, /* gd_LeftEdge */
ABOUT_GADGET_TOP_EDGE, /* gd_TopEdge */
ABOUT_GADGET_WIDTH, /* gd_Width */
ABOUT_GADGET_HEIGHT, /* gd_Height */
ABOUT_GADGET_TEXT, /* *gd_Text */
ABOUT_GADGET_TEXT_ATTR, /* *gd_TextAttr */
{ 0, 0, 0 }
}, {
INTUISUP_DATA_END /* mark end of gadget data */
}
};
STATIC struct TextData about_text_data[] = {
{
ABOUT_TEXT1_TYPE, /* td_Type */
ABOUT_TEXT1_FLAGS, /* td_Flags */
ABOUT_TEXT1_LEFT_EDGE, /* td_LeftEdge */
ABOUT_TEXT1_TOP_EDGE, /* td_TopEdge */
ABOUT_TEXT1_TEXT, /* *td_Text */
ABOUT_TEXT1_TEXT_ATTR /* *td_TextAttr */
}, {
ABOUT_TEXT2_TYPE, /* td_Type */
ABOUT_TEXT2_FLAGS, /* td_Flags */
ABOUT_TEXT2_LEFT_EDGE, /* td_LeftEdge */
ABOUT_TEXT2_TOP_EDGE, /* td_TopEdge */
ABOUT_TEXT2_TEXT, /* *td_Text */
ABOUT_TEXT2_TEXT_ATTR /* *td_TextAttr */
}, {
ABOUT_TEXT3_TYPE, /* td_Type */
ABOUT_TEXT3_FLAGS, /* td_Flags */
ABOUT_TEXT3_LEFT_EDGE, /* td_LeftEdge */
ABOUT_TEXT3_TOP_EDGE, /* td_TopEdge */
ABOUT_TEXT3_TEXT, /* *td_Text */
ABOUT_TEXT3_TEXT_ATTR /* *td_TextAttr */
}, {
ABOUT_TEXT4_TYPE, /* td_Type */
ABOUT_TEXT4_FLAGS, /* td_Flags */
ABOUT_TEXT4_LEFT_EDGE, /* td_LeftEdge */
ABOUT_TEXT4_TOP_EDGE, /* td_TopEdge */
ABOUT_TEXT4_TEXT, /* *td_Text */
ABOUT_TEXT4_TEXT_ATTR /* *td_TextAttr */
}, {
ABOUT_TEXT5_TYPE, /* td_Type */
ABOUT_TEXT5_FLAGS, /* td_Flags */
ABOUT_TEXT5_LEFT_EDGE, /* td_LeftEdge */
ABOUT_TEXT5_TOP_EDGE, /* td_TopEdge */
ABOUT_TEXT5_TEXT, /* *td_Text */
ABOUT_TEXT5_TEXT_ATTR /* *td_TextAttr */
}, {
ABOUT_TEXT6_TYPE, /* td_Type */
ABOUT_TEXT6_FLAGS, /* td_Flags */
ABOUT_TEXT6_LEFT_EDGE, /* td_LeftEdge */
ABOUT_TEXT6_TOP_EDGE, /* td_TopEdge */
ABOUT_TEXT6_TEXT, /* *td_Text */
ABOUT_TEXT6_TEXT_ATTR /* *td_TextAttr */
}, {
INTUISUP_DATA_END /* mark end of text data array */
}
};
/* Defines for ok/cancel requester */
#define OK_CANCEL_WINDOW_IDCMP (CLOSEWINDOW | GADGET_IDCMP_FLAGS_BUTTON)
#define OK_CANCEL_RENDER_INFO_FLAGS (RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
#define OK_CANCEL_INIT_NEW_WINDOW_FLAGS 0
#define OK_GADGET_TYPE GADGET_DATA_TYPE_BUTTON
#define OK_GADGET_FLAGS GADGET_DATA_FLAG_HOT_KEY
#define OK_GADGET_TEXT "_Ok"
#define OK_GADGET_LEFT_EDGE 0
#define OK_GADGET_TOP_EDGE 0
#define OK_GADGET_WIDTH ((6 + 2) * 8)
#define OK_GADGET_HEIGHT 15
#define OK_GADGET_TEXT_ATTR &topaz80_attr
#define CANCEL_GADGET_TYPE GADGET_DATA_TYPE_BUTTON
#define CANCEL_GADGET_FLAGS GADGET_DATA_FLAG_HOT_KEY
#define CANCEL_GADGET_TEXT "_Cancel"
#define CANCEL_GADGET_LEFT_EDGE 0
#define CANCEL_GADGET_TOP_EDGE 0
#define CANCEL_GADGET_WIDTH ((6 + 2) * 8)
#define CANCEL_GADGET_HEIGHT 15
#define CANCEL_GADGET_TEXT_ATTR &topaz80_attr
/* Statics for ok/cancel requester */
STATIC struct NewWindow ok_cancel_new_window = {
0, 0, 0, 0, 0, 1, OK_CANCEL_WINDOW_IDCMP, WINDOWCLOSE | WINDOWDRAG |
WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH | ACTIVATE, NULL, NULL, NULL,
NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN
};
STATIC struct GadgetData ok_cancel_gadget_data[] = {
{
OK_GADGET_TYPE, /* gd_Type */
OK_GADGET_FLAGS, /* gd_Flags */
OK_GADGET_LEFT_EDGE, /* gd_LeftEdge */
OK_GADGET_TOP_EDGE, /* gd_TopEdge */
OK_GADGET_WIDTH, /* gd_Width */
OK_GADGET_HEIGHT, /* gd_Height */
OK_GADGET_TEXT, /* *gd_Text */
OK_GADGET_TEXT_ATTR, /* *gd_TextAttr */
{ 0, 0, 0 }
}, {
CANCEL_GADGET_TYPE, /* gd_Type */
CANCEL_GADGET_FLAGS, /* gd_Flags */
CANCEL_GADGET_LEFT_EDGE, /* gd_LeftEdge */
CANCEL_GADGET_TOP_EDGE, /* gd_TopEdge */
CANCEL_GADGET_WIDTH, /* gd_Width */
CANCEL_GADGET_HEIGHT, /* gd_Height */
CANCEL_GADGET_TEXT, /* *gd_Text */
CANCEL_GADGET_TEXT_ATTR, /* *gd_TextAttr */
{ 0, 0, 0 }
}, {
INTUISUP_DATA_END /* mark end of gadget data */
}
};
/* Show error message as continue requester */
VOID
show_error(SHORT status)
{
BYTE *error;
if (status < EDITOR_STATUS_NORMAL) {
error = error_text[-(status + 1)];
if (IntuiSupBase) {
continue_requester(ERROR_WINDOW_TITLE, error);
} else {
if (IntuitionBase) {
intuition_error_requester(error);
}
}
}
}
/* Show IntuiSup continue requester */
VOID
continue_requester(BYTE *title, BYTE *text)
{
struct NewWindow *nwin = &continue_new_window;
struct Window *win;
struct TextAttr *ta = &topaz80_attr;
struct MsgPort *up;
struct IntuiMessage *msg;
APTR ri, gl;
USHORT width, height;
BOOL keepon = TRUE;
nwin->Title = (UBYTE *)title;
if (ri = IGetRenderInfo((struct Screen *)NULL, CONTINUE_RENDER_INFO_FLAGS)) {
width = IPrintText(ri, (struct Window *)NULL, text, 0, 0,
TEXT_DATA_TYPE_TEXT, TEXT_DATA_FLAG_NO_PRINT, ta);
if (width < CONTINUE_GADGET_WIDTH) {
width = CONTINUE_GADGET_WIDTH;
}
width += 40;
height = ta->ta_YSize + CONTINUE_GADGET_HEIGHT + 30;
/* Prepare error window */
nwin->Width = width;
nwin->Height = height;
if (win = IOpenWindow(ri, nwin, CONTINUE_OPEN_WINDOW_FLAGS)) {
IPrintText(ri, win, text, 0, 10, TEXT_DATA_TYPE_TEXT,
TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2, ta);
continue_gadget_data[0].gd_LeftEdge = (width -
CONTINUE_GADGET_WIDTH) / 2;
continue_gadget_data[0].gd_TopEdge = height -
(CONTINUE_GADGET_HEIGHT + 10);
if (gl = ICreateGadgets(ri, &continue_gadget_data[0], 0, 0)) {
IDisplayGadgets(win, gl);
/* Wait for close gadget or button pressed */
up = win->UserPort;
do {
WaitPort(up);
while (msg = IGetMsg(up)) {
switch (msg->Class) {
case CLOSEWINDOW :
case ISUP_ID :
keepon = FALSE;
break;
}
}
} while (keepon == TRUE);
IRemoveGadgets(gl);
IFreeGadgets(gl);
}
CloseWindow(win);
}
IFreeRenderInfo(ri);
}
}
/* Show Intuition error requester */
STATIC VOID
intuition_error_requester(BYTE *text)
{
struct Screen screen;
struct IntuiText itext_error, itext_ok;
USHORT border_left, border_top, width, height, max_width;
/* Get screen dimension */
GetScreenData((BYTE *)&screen, (LONG)sizeof(struct Screen), (LONG)
WBENCHSCREEN, (LONG)NULL);
border_left = screen.BarHeight - screen.BarVBorder + screen.WBorTop;
border_top = screen.WBorTop;
/* Init message text */
itext_error.LeftEdge = border_left;
itext_error.TopEdge = border_top + 4;
itext_error.DrawMode = JAM1;
itext_error.FrontPen = 2;
itext_error.IText = (UBYTE *)text;
itext_error.ITextFont = &topaz80_attr;
max_width = IntuiTextLength(&itext_error);
/* Init ok text */
itext_ok.LeftEdge = 6;
itext_ok.TopEdge = 4;
itext_ok.DrawMode = JAM1;
itext_ok.FrontPen = 3;
itext_ok.ITextFont = &topaz60_attr;
itext_ok.IText = (UBYTE *)"Ok";
if ((width = IntuiTextLength(&itext_ok) + 2 * 16) * 2 > max_width) {
max_width = width;
}
/* Calc requester dimension and scale it if neccessary */
width = max_width + border_left + screen.WBorRight + 2 * 16;
if (width > screen.Width) {
width = screen.Width;
}
height = border_top + screen.WBorBottom + 8 + 10 + 9 + 2 * 8 + 2 * 4;
if (height > screen.Height) {
height = screen.Height;
}
AutoRequest((LONG)NULL, &itext_error, &itext_ok, &itext_ok, 0L, 0L,
(LONG)width, (LONG)height);
}
/* Show about requester */
VOID
about_requester(VOID)
{
struct NewWindow *nwin = &about_new_window;
struct Window *win;
struct MsgPort *up;
struct IntuiMessage *msg;
APTR ri, gl;
BOOL keepon = TRUE;
if (ri = IGetRenderInfo((struct Screen *)NULL, ABOUT_RENDER_INFO_FLAGS)) {
nwin->Width = ABOUT_WINDOW_WIDTH;
nwin->Height = ABOUT_WINDOW_HEIGHT;
if (win = IOpenWindow(ri, nwin, ABOUT_OPEN_WINDOW_FLAGS)) {
IDisplayTexts(ri, win, &about_text_data[0], 0, 0);
if (gl = ICreateGadgets(ri, &about_gadget_data[0], 0, 0)) {
IDisplayGadgets(win, gl);
/* Wait for close gadget or button pressed */
up = win->UserPort;
do {
WaitPort(up);
while (msg = IGetMsg(up)) {
switch (msg->Class) {
case CLOSEWINDOW :
case ISUP_ID :
keepon = FALSE;
break;
}
}
} while (keepon == TRUE);
IRemoveGadgets(gl);
IFreeGadgets(gl);
}
CloseWindow(win);
}
IFreeRenderInfo(ri);
}
}
/* Show IntuiSup ok/cancel requester */
BOOL
ok_cancel_requester(BYTE *title, BYTE *text)
{
struct NewWindow *nwin = &ok_cancel_new_window;
struct Window *win;
struct TextAttr *ta = &topaz80_attr;
struct MsgPort *up;
struct IntuiMessage *msg;
APTR ri, gl;
USHORT width, height;
BOOL result = FALSE, keepon = TRUE;
nwin->Title = (UBYTE *)title;
if (ri = IGetRenderInfo((struct Screen *)NULL,
OK_CANCEL_RENDER_INFO_FLAGS)) {
width = IPrintText(ri, (struct Window *)NULL, text, 0, 0,
TEXT_DATA_TYPE_TEXT, TEXT_DATA_FLAG_NO_PRINT, ta);
if (width < (OK_GADGET_WIDTH + 20 + CANCEL_GADGET_WIDTH)) {
width = OK_GADGET_WIDTH + 20 + CANCEL_GADGET_WIDTH;
}
width += 40;
height = ta->ta_YSize + OK_GADGET_HEIGHT + 30;
/* Prepare error window */
nwin->Width = width;
nwin->Height = height;
if (win = IOpenWindow(ri, nwin, CONTINUE_OPEN_WINDOW_FLAGS)) {
IPrintText(ri, win, text, 0, 10, TEXT_DATA_TYPE_TEXT,
TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2, ta);
ok_cancel_gadget_data[0].gd_LeftEdge = 20;
ok_cancel_gadget_data[0].gd_TopEdge = height - (OK_GADGET_HEIGHT +
10);
ok_cancel_gadget_data[1].gd_LeftEdge = width -
(CANCEL_GADGET_WIDTH + 20);
ok_cancel_gadget_data[1].gd_TopEdge = height -
(CANCEL_GADGET_HEIGHT + 10);
if (gl = ICreateGadgets(ri, &ok_cancel_gadget_data[0], 0, 0)) {
IDisplayGadgets(win, gl);
/* Wait for close gadget or button pressed */
up = win->UserPort;
do {
WaitPort(up);
while (msg = IGetMsg(up)) {
switch (msg->Class) {
case CLOSEWINDOW :
case ISUP_ID :
if (!msg->Code) {
result = TRUE; /* Ok */
}
keepon = FALSE;
break;
}
}
} while (keepon == TRUE);
IRemoveGadgets(gl);
IFreeGadgets(gl);
}
CloseWindow(win);
}
IFreeRenderInfo(ri);
}
return(result);
}