home *** CD-ROM | disk | FTP | other *** search
-
- /* *** 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;
-
-