home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
073.lha
/
FileIO
/
opendata.c
< prev
next >
Wrap
C/C++ Source or Header
|
1987-06-02
|
17KB
|
813 lines
/* *** opendata.c ***********************************************************
*
* File IO Suite -- Open Requester Data
* from Book 1 of the Amiga Programmers' Suite by RJ Mical
*
* Copyright (C) 1986, 1987, Robert J. Mical
* All Rights Reserved.
*
* Created for Amiga developers.
* Any or all of this code can be used in any program as long as this
* entire copyright notice is retained, ok? Thanks.
*
* HISTORY NAME DESCRIPTION
* ----------- -------------- --------------------------------------------
* 12 Aug 86 RJ >:-{)* Prepare (clean house) for release
* 3 May 86 =RJ Mical= Fix prop gadget for both 1.1 and 1.2
* 1 Feb 86 =RJ Mical= Created this file.
*
* *********************************************************************** */
#define FILEIO_SOURCEFILE
#include "fileio.h"
struct TextAttr SafeFont =
{
(UBYTE *)"topaz.font",
TOPAZ_EIGHTY,
0,
0,
};
/* This is where the Select text is kept! This array of text will be
* redrawn every time we want Intuition to redraw the lowly SelectGadget.
* The strings themselves are kept in OpenSelectBuffers where
* the open routines make sure that the buffers are padded with
* blanks and are always null-terminated. Ha ha! Like madmen
* dancing, like crazy monkeys.
*/
UBYTE OpenSelectBuffers[NAME_ENTRY_COUNT][VISIBLE_SELECT_LENGTH];
struct IntuiText OpenSelectText[NAME_ENTRY_COUNT] =
{
{
1, 0,
JAM2,
1, 1 + (OPEN_LINEHEIGHT * 0),
&SafeFont,
&OpenSelectBuffers[0][0],
NULL,
},
{
1, 0,
JAM2,
1, 1 + (OPEN_LINEHEIGHT * 1),
&SafeFont,
&OpenSelectBuffers[1][0],
&OpenSelectText[0],
},
{
1, 0,
JAM2,
1, 1 + (OPEN_LINEHEIGHT * 2),
&SafeFont,
&OpenSelectBuffers[2][0],
&OpenSelectText[1],
},
{
1, 0,
JAM2,
1, 1 + (OPEN_LINEHEIGHT * 3),
&SafeFont,
&OpenSelectBuffers[3][0],
&OpenSelectText[2],
},
{
1, 0,
JAM2,
1, 1 + (OPEN_LINEHEIGHT * 4),
&SafeFont,
&OpenSelectBuffers[4][0],
&OpenSelectText[3],
},
{
1, 0,
JAM2,
1, 1 + (OPEN_LINEHEIGHT * 5),
&SafeFont,
&OpenSelectBuffers[5][0],
&OpenSelectText[4],
},
};
/* === Backdrop Gadget =================================================== */
/* We shouldn't need this gadget. It's sole purpose is to allow the user
* to cancel the filename building operation by clicking outside any of
* the regular requester gadgets. Why, we may ask, don't we just make
* the requester a NOISYREQ and detect SELECTDOWN. Well, we tried that,
* and either there's something wrong with our brains or 1.2 Intuition has
* a bug that doesn't broadcast SELECTDOWN to requester listeners.
* It broadcasts SELECTUP, MENUDOWN and MENUUP jes' fine, but no DOWN.
* Bummer. So anyway, now we got an imageless, highlightless gadget that
* fills up the entire requester but, being at the back of the list, won't
* be hit unless all other gadgets are missed.
* Having a wonderful time, wish you were here.
*/
struct Gadget BackdropGadget =
{
NULL,
0, 0,
OPEN_WIDTH, OPEN_HEIGHT,
GADGHNONE, /* Flags */
GADGIMMEDIATE, /* Activation */
REQGADGET | BOOLGADGET, /* Type */
NULL, /* GadgetRender */
NULL, /* SelectRender */
NULL,
NULL, NULL,
OPENGADGET_BACKDROP,
NULL,
};
/* === OK, Cancel, and NextDisk Gadgets ================================== */
SHORT BoolCluster3Pairs[] =
{
0, -3,
55, -3,
57, -1,
57, 19,
55, 21,
-1, 21,
-3, 19,
-3, -1,
-1, -3,
};
SHORT BoolCluster2Pairs[] =
{
-2, -1,
56, -1,
56, 19,
-2, 19,
-2, -1,
};
SHORT BoolClusterPairs[] =
{
-1, -2,
55, -2,
55, 20,
-1, 20,
-1, -2,
};
struct Border BoolCluster3Border =
{
1, 1,
2, 0,
JAM1,
9,
&BoolCluster3Pairs[0],
NULL,
};
struct Border BoolCluster2Border =
{
1, 1,
1, 0,
JAM1,
5,
&BoolCluster2Pairs[0],
&BoolCluster3Border,
};
struct Border BoolClusterBorder =
{
1, 1,
1, 0,
JAM1,
5,
&BoolClusterPairs[0],
&BoolCluster2Border,
};
struct IntuiText NextDisk2Text =
{
1, 0,
JAM2,
13, 11,
&SafeFont,
(UBYTE *)"DISK",
NULL,
};
struct IntuiText NextDiskText =
{
1, 0,
JAM2,
13, 3,
&SafeFont,
(UBYTE *)"NEXT",
&NextDisk2Text,
};
struct IntuiText CancelText =
{
1, 0,
JAM2,
5, 7,
&SafeFont,
(UBYTE *)"CANCEL",
NULL,
};
struct IntuiText OK2Text =
{
1, 0,
JAM2,
17, 7,
&SafeFont,
(UBYTE *)"OK!",
NULL,
};
struct Gadget NextDiskGadget =
{
&BackdropGadget,
197, 82 + REQTITLE_HEIGHT,
57, 21,
GADGHCOMP, /* Flags */
RELVERIFY, /* Activation */
REQGADGET | BOOLGADGET, /* Type */
(APTR)&BoolClusterBorder, /* GadgetRender */
NULL, /* SelectRender */
&NextDiskText,
NULL, NULL,
OPENGADGET_NEXTDISK,
NULL,
};
struct Gadget CancelGadget =
{
&NextDiskGadget,
114, 82 + REQTITLE_HEIGHT,
57, 21,
GADGHCOMP, /* Flags */
RELVERIFY | ENDGADGET, /* Activation */
REQGADGET | BOOLGADGET, /* Type */
(APTR)&BoolClusterBorder, /* GadgetRender */
NULL, /* SelectRender */
&CancelText,
NULL, NULL,
OPENGADGET_CANCEL,
NULL,
};
struct Gadget OKGadget =
{
&CancelGadget,
32, 82 + REQTITLE_HEIGHT,
57, 21,
GADGHCOMP, /* Flags */
RELVERIFY | ENDGADGET, /* Activation */
REQGADGET | BOOLGADGET, /* Type */
(APTR)&BoolClusterBorder,
NULL, /* Renders */
&OK2Text,
NULL, NULL,
OPENGADGET_OK,
NULL,
};
/* === OpenUp ============================================================= */
struct Image OpenUpImage =
{
1, -1,
15, 14,
2,
&OpenUpData[0],
0x03, 0x00,
NULL,
};
struct Gadget OpenUpGadget =
{
&OKGadget,
134, 14 + REQTITLE_HEIGHT,
15, 12,
GADGIMAGE | GADGHNONE, /* Flags */
GADGIMMEDIATE, /* Activation */
REQGADGET | BOOLGADGET, /* Type */
(APTR)&OpenUpImage,
NULL, /* Renders */
NULL,
NULL, NULL,
OPENGADGET_UPGADGET,
NULL,
};
/* === OpenDown =========================================================== */
struct Image OpenDownImage =
{
1, -1,
15, 14,
2,
&OpenDownData[0],
0x03, 0x00,
NULL,
};
struct Gadget OpenDownGadget =
{
&OpenUpGadget,
134, 64 + REQTITLE_HEIGHT,
15, 12,
GADGIMAGE | GADGHNONE, /* Flags */
GADGIMMEDIATE, /* Activation */
REQGADGET | BOOLGADGET, /* Type */
(APTR)&OpenDownImage,
NULL, /* Renders */
NULL,
NULL, NULL,
OPENGADGET_DOWNGADGET,
NULL,
};
/* === OpenDrawerText ==================================================== */
struct StringInfo OpenDrawerTextInfo =
{
NULL, /* Must be supplied from the appropriate FileIOSupport structure */
&OpenUndoBuffer[0],
0,
MAX_NAME_LENGTH,
0,
0,0,0,0,0,0,0,0,
};
struct Gadget OpenDrawerTextGadget =
{
&OpenDownGadget,
157, 41 + REQTITLE_HEIGHT,
122, 10,
GADGHCOMP | SELECTED, /* Flags */
RELVERIFY | STRINGCENTER, /* Activation */
REQGADGET | STRGADGET, /* Type */
NULL, NULL, /* Renders */
NULL,
NULL,
(APTR)&OpenDrawerTextInfo,
OPENGADGET_DRAWERTEXT,
NULL,
};
/* === OpenDiskText ====================================================== */
struct StringInfo OpenDiskTextInfo =
{
NULL, /* Must be supplied from the appropriate FileIOSupport structure */
&OpenUndoBuffer[0],
0,
MAX_NAME_LENGTH,
0,
0,0,0,0,0,0,0,0,
};
struct Gadget OpenDiskTextGadget =
{
&OpenDrawerTextGadget,
157, 65 + REQTITLE_HEIGHT,
122, 10,
GADGHCOMP | SELECTED, /* Flags */
RELVERIFY | STRINGCENTER, /* Activation */
REQGADGET | STRGADGET, /* Type */
NULL, NULL, /* Renders */
NULL,
NULL,
(APTR)&OpenDiskTextInfo,
OPENGADGET_DISKTEXT,
NULL,
};
/* === OpenNameText ====================================================== */
struct StringInfo OpenNameTextInfo =
{
NULL, /* Must be supplied from the appropriate FileIOSupport structure */
&OpenUndoBuffer[0],
0,
MAX_NAME_LENGTH,
0,
0,0,0,0,0,0,0,0,
};
struct Gadget OpenNameTextGadget =
{
&OpenDiskTextGadget,
157, 16 + REQTITLE_HEIGHT,
122, 10,
GADGHCOMP | SELECTED, /* Flags */
RELVERIFY | ENDGADGET | STRINGCENTER, /* Activation */
REQGADGET | STRGADGET, /* Type */
NULL, NULL, /* Renders */
NULL,
NULL,
(APTR)&OpenNameTextInfo,
OPENGADGET_NAMETEXT,
NULL,
};
/* === OpenProp =========================================================== */
/* OpenPropData[] is in chipdata.c */
struct Image OpenPropImage =
{
1, 0,
11, 8,
2,
&OpenPropData[0],
0x03, 0x00,
NULL,
};
struct PropInfo OpenPropInfo =
{
FREEVERT | PROPBORDERLESS,
0, 0, /* Pots should be reinitialized on the fly */
0, 0, /* Bodies should be reinitialized on the fly */
0, 0, 0, 0, 0, 0,
};
struct Gadget OpenPropGadget =
{
&OpenNameTextGadget,
136, 30 + REQTITLE_HEIGHT, /* Left, Top */
13, 30, /* Width, Height */
GADGIMAGE | GADGHNONE, /* Flags */
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE, /* Activation */
REQGADGET | PROPGADGET, /* Type */
(APTR)&OpenPropImage,
NULL, /* Renders */
NULL,
NULL,
(APTR)&OpenPropInfo,
OPENGADGET_PROPGADGET,
NULL,
};
/* === OpenSelectName ==================================================== */
struct Gadget OpenSelectNameGadget =
{
&OpenPropGadget,
OPENSELECT_LEFT, OPENSELECT_TOP, /* Left, Top */
OPENSELECT_WIDTH, OPENSELECT_HEIGHT, /* Width, Height */
GADGHNONE, /* Flags */
GADGIMMEDIATE, /* Activation */
REQGADGET | BOOLGADGET, /* Type */
NULL, NULL, /* Renders */
NULL, /* Text */
NULL, NULL,
OPENGADGET_SELECTNAME,
NULL,
};
/* === Requester Details ================================================= */
/* This data is used to render the requester more prettily. */
/* === Line Pairs === */
SHORT Req3BorderData[] =
{
1, 0,
OPEN_WIDTH - 2, 0,
OPEN_WIDTH - 2, 1,
OPEN_WIDTH - 1, 1,
OPEN_WIDTH - 1, 108 + REQTITLE_HEIGHT,
OPEN_WIDTH - 2, 108 + REQTITLE_HEIGHT,
OPEN_WIDTH - 2, 109 + REQTITLE_HEIGHT,
1, 109 + REQTITLE_HEIGHT,
1, 108 + REQTITLE_HEIGHT,
0, 108 + REQTITLE_HEIGHT,
0, 1,
1, 1,
1, 0,
};
SHORT Req2BorderData[] =
{
1 + 1, 0 + 1,
OPEN_WIDTH - 2 - 1, 0 + 1,
OPEN_WIDTH - 2 - 1, 1 + 1,
OPEN_WIDTH - 1 - 1, 1 + 1,
OPEN_WIDTH - 1 - 1, 108 - 1 + REQTITLE_HEIGHT,
OPEN_WIDTH - 2 - 1, 108 - 1 + REQTITLE_HEIGHT,
OPEN_WIDTH - 2 - 1, 109 - 1 + REQTITLE_HEIGHT,
1 + 1, 109 - 1 + REQTITLE_HEIGHT,
1 + 1, 108 - 1 + REQTITLE_HEIGHT,
0 + 1, 108 - 1 + REQTITLE_HEIGHT,
0 + 1, 1 + 1,
1 + 1, 1 + 1,
1 + 1, 0 + 1,
};
SHORT ReqBorderData[] =
{
1 + 2, 0 + 2,
OPEN_WIDTH - 2 - 2, 0 + 2,
OPEN_WIDTH - 2 - 2, 1 + 2,
OPEN_WIDTH - 1 - 2, 1 + 2,
OPEN_WIDTH - 1 - 2, 108 - 2 + REQTITLE_HEIGHT,
OPEN_WIDTH - 2 - 2, 108 - 2 + REQTITLE_HEIGHT,
OPEN_WIDTH - 2 - 2, 109 - 2 + REQTITLE_HEIGHT,
1 + 2, 109 - 2 + REQTITLE_HEIGHT,
1 + 2, 108 - 2 + REQTITLE_HEIGHT,
0 + 2, 108 - 2 + REQTITLE_HEIGHT,
0 + 2, 1 + 2,
1 + 2, 1 + 2,
1 + 2, 0 + 2,
};
SHORT SelectBorderData[] =
{
8, 14 + REQTITLE_HEIGHT,
129, 14 + REQTITLE_HEIGHT,
130, 15 + REQTITLE_HEIGHT,
130, 74 + REQTITLE_HEIGHT,
129, 75 + REQTITLE_HEIGHT,
8, 75 + REQTITLE_HEIGHT,
7, 74 + REQTITLE_HEIGHT,
7, 15 + REQTITLE_HEIGHT,
8, 14 + REQTITLE_HEIGHT,
};
SHORT TextBorderData[] =
{
-1, -2,
120, -2,
121, -1,
121, 8,
120, 9,
-1, 9,
-2, 8,
-2, -1,
-1, -2,
};
SHORT PropBorderData[] =
{
0, -3,
16, -3,
16, 32,
0, 32,
0, -2,
15, -2,
15, -1,
17, -1,
17, 30,
15, 30,
15, 31,
1, 31,
1, 30,
-1, 30,
-1, -1,
-1, 1,
};
/* === Borders === */
struct Border Req3Border =
{
0, 0,
1, 0,
JAM1,
13,
&Req3BorderData[0],
NULL,
};
struct Border Req2Border =
{
0, 0,
2, 0,
JAM1,
13,
&Req2BorderData[0],
&Req3Border,
};
struct Border ReqBorder =
{
0, 0,
1, 0,
JAM1,
13,
&ReqBorderData[0],
&Req2Border,
};
struct Border SelectBorder =
{
0, 0,
1, 0,
JAM1,
9,
&SelectBorderData[0],
&ReqBorder,
};
struct Border Text3Border =
{
157, 65 + REQTITLE_HEIGHT,
1, 0,
JAM1,
9,
&TextBorderData[0],
&SelectBorder,
};
struct Border Text2Border =
{
157, 41 + REQTITLE_HEIGHT,
1, 0,
JAM1,
9,
&TextBorderData[0],
&Text3Border,
};
struct Border TextBorder =
{
157, 16 + REQTITLE_HEIGHT,
1, 0,
JAM1,
9,
&TextBorderData[0],
&Text2Border,
};
struct Border PropBorder =
{
134, 30 + REQTITLE_HEIGHT,
1, 0,
JAM1,
16,
&PropBorderData[0],
&TextBorder,
};
/* === RJ wants to know: Some Requester Text For You? === */
UBYTE *DefaultReqTitle = (UBYTE *)"File IO Requester";
struct IntuiText ReqTitleText =
{
1, 0,
JAM2,
0, 5, /* The x-coordinate is initialized to center the title */
&SafeFont,
NULL, /* Points to the title supplied in the FileIOSupport */
NULL,
};
struct IntuiText SelectText =
{
1, 0,
JAM2,
18, 6 + REQTITLE_HEIGHT,
&SafeFont,
(UBYTE *)"Select a Name",
&ReqTitleText,
};
struct IntuiText Type3Text =
{
1, 0,
JAM2,
201, 55 + REQTITLE_HEIGHT,
&SafeFont,
(UBYTE *)"Disk",
&SelectText,
};
struct IntuiText Type2Text =
{
1, 0,
JAM2,
193, 31 + REQTITLE_HEIGHT,
&SafeFont,
(UBYTE *)"Drawer",
&Type3Text,
};
struct IntuiText TypeText =
{
1, 0,
JAM2,
161, 6 + REQTITLE_HEIGHT,
&SafeFont,
(UBYTE *)"Or Type a Name",
&Type2Text,
};
/* === Main Data ======================================================== */
struct ReqSupport OpenReqSupport =
{
/* struct Requester Requester; */
{
/* struct Requester *OlderRequest;*/
NULL,
/* SHORT LeftEdge, TopEdge;*/
OPEN_LEFT, OPEN_TOP,
/* SHORT Width, Height;*/
OPEN_WIDTH, OPEN_HEIGHT,
/* SHORT RelLeft, RelTop;*/
0, 0,
/* struct Gadget *ReqGadget;*/
&OpenSelectNameGadget,
/* struct Border *ReqBorder;*/
&PropBorder,
/* struct IntuiText *ReqText;*/
&TypeText,
/* USHORT Flags;*/
NOISYREQ,
/* UBYTE BackFill;*/
0,
/* struct ClipRect ReqCRect;*/
{ NULL },
/* struct BitMap *ImageBMap;*/
NULL,
/* struct BitMap ReqBMap;*/
{ NULL },
}, /* end of Requester structure */
/* struct Window *Window; */
NULL,
/* LONG (*StartRequest)(); */
NULL,
/* LONG (*ReqHandler)(); */
NULL,
/* LONG (*NewDiskHandler)(); */
NULL,
/* LONG (*MouseMoveHandler)(); */
NULL,
/* SHORT SelectedGadgetID; */
0,
};
struct Requester *OpenReq = NULL;
struct Window *OpenReqWindow = NULL;
struct FileIOSupport *OpenReqFileIO = NULL;
UBYTE OpenUndoBuffer[MAX_NAME_LENGTH];
UBYTE OpenLockName[128] = {0};
ULONG OpenSaveLock = NULL;
UBYTE CurrentDiskString[] = ":";
LONG OpenClickSeconds;
LONG OpenClickMicros;