home *** CD-ROM | disk | FTP | other *** search
- /* save.c -- open a window to get filename,
- close it, and proceed as directed.... */
-
- #define SWX 270 /* Save Window Size */
- #define SWY 70
-
- #define CANCEL_GAD 0
- #define OKAY_GAD 1
-
- extern char filename[31];
- extern struct TextAttr TestFont;
- /* define ok and cancel gadgets */
- struct IntuiText okay_text = {3,2,JAM2,0,2,NL,(UBYTE *) " OK ",NL};
- struct IntuiText cancel_text = {3,2,JAM2,0,2,NL,(UBYTE *) "Cancel",NL};
- struct Gadget cancel_gadget = {
- NL, 155,50, 60,11, GADGHCOMP, RELVERIFY,
- BOOLGADGET, NL, NL,
- &cancel_text, NL,NL, CANCEL_GAD, NL };
-
- struct Gadget okay_gadget = {
- &cancel_gadget, 155,30, 60,11, GADGHCOMP, RELVERIFY,
- BOOLGADGET, NL, NL,
- &okay_text, NL,NL, OKAY_GAD, NL };
-
- /* define filename gadget */
-
- #define BUFFERSIZE 26
- USHORT FileNameVectors[] = {
- -1,-1,
- 152,-1,
- 152, 12,
- -1, 12,
- -1, -1,
- };
-
- struct Border FileNameBorder = {
- -1, -1, /* initial offsets, gadget relative */
- 1, 0, JAM1, /* pens (fore, back) and drawmode */
- 5, /* number of vectors */
- FileNameVectors, /* pointer to the actual array of vectors */
- NULL /* no next Border, can point to another border */
- };
-
- /* default text */
- UBYTE FileNameBuffer[BUFFERSIZE] = "temp";
- UBYTE UndoNameBuffer[BUFFERSIZE];
- struct StringInfo FileNameInfo = {
- FileNameBuffer, /* pointer to I/O buffer */
- UndoNameBuffer, /* pointer to undo buffer */
- 0, /* buffer position */
- BUFFERSIZE, /* max number of chars, including NULL */
- 0, 0, /* first char in display, undo positions */
- 5, /* number of chars (currently) in the buffer */
- 0, 0, 0, /* position variables calculated by Intuition */
- NULL, /* no pointer to RastPort */
- 0, /* not a LongInt string gadget */
- NULL /* no pointer to alternate keymap */
- };
- struct IntuiText FileNameText = {
- 2, 2, /* FrontPen, BackPen */
- JAM1, /* DrawMode */
- -101, 0, /* LeftEdge, TopEdge (relative to gadget) */
- &TestFont, /* pointer to TextFont */
- (UBYTE *) "Filename:", /* pointer to Text */
- NL /* no pointer to NextText */
- };
-
- #define FILENAME_GAD 2
-
- struct Gadget FileNameGadget = {
- &okay_gadget, /* pointer to Next Gadget */
- 110, 10, 150, 11, /* (Left Top Width Height) Hit Box */
- GADGHCOMP, /* Flags */
- RELVERIFY, /* Activation flags */
- STRGADGET, /* Type */
- (APTR)&FileNameBorder, /* pointer to Border Image */
- NL, /* no pointer to SelectRender */
- &FileNameText, /* pointer to GadgetText */
- NL, /* no MutualExclude */
- (APTR)&FileNameInfo, /* pointer to SpecialInfo */
- FILENAME_GAD, /* ID */
- NL /* no pointer to special data */
- };
-
- /* Used to open a Window */
- struct NewWindow NewSwin = {
- 25,65, SWX,SWY, 2,BCOL, NL, /* IDCMP set up AFTER CALL */
- ACTIVATE | SMART_REFRESH,
- &FileNameGadget,NL, NL, /* FirstGadget, CheckMark, Title */
- NL,NL, /* MUST SET SCREEN AFTER OPENSCREEN!!! */
- SWX,SWY,SWX,SWY, CUSTOMSCREEN }; /* MinW, MinH, MaxW, MaxH */
-
-
- /********************************************************************
- * save(window)
- * This is the meat. This routine opens the save window and
- * retains control until the user selects the OK or CANCEL gadget.
- * The calling arguement is a window pointer. That window
- * is expected to have opened an IDCMP port, which save uses.
- ********************************************************************/
- int save(calling_window)
- struct Window *calling_window;
- {
- struct Window *cW; /* save window handle */
-
- FAST struct IntuiMessage *imsg;
- FAST struct Gadget *igad;
-
- FAST int class;
- int confirmed;
- BOOL stayhere;
-
- /* Get screen from calling window */
- NewSwin.Screen = calling_window->WScreen; /* NEED TO SET SCREEN!!! */
- if ( ! (cW = (struct Window *)OpenWindow(&NewSwin)) ) {
- return(FALSE); /* Oops... */
- }
-
- cW->UserPort = calling_window->UserPort;
- ModifyIDCMP(cW, GADGETUP | GADGETDOWN);
- stayhere=TRUE;
- while (stayhere == TRUE) {
- while (imsg=(struct IntuiMessage *)GetMsg(cW->UserPort)) {
- class = imsg->Class;
- ReplyMsg(imsg);
- switch ( class ) {
- case GADGETUP:
- case GADGETDOWN:
- igad =(struct Gadget *) imsg->IAddress;
- switch ( igad->GadgetID ) {
- case CANCEL_GAD:
- confirmed=0;
- stayhere=FALSE;
- break;
- case OKAY_GAD:
- strcpy(filename,FileNameBuffer);
- confirmed=1;
- stayhere=FALSE;
- break;
- case FILENAME_GAD:
- strcpy(filename,FileNameBuffer);
- break;
- }
- }
- }
- }
- cW->UserPort = NL;
- CloseWindow(cW);
- if (confirmed==1)
- return(1);
- else
- return(0);
- }
-