home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- *
- * Screen - Screen Configurator (almost useless example of FileRequest use)
- *
- * By Kevin Lee Clague
- * 408 Tortolla Way
- * San Jose, Ca 95033
- * 408-258-9891 work 408-737-5481
- *
- * Copyright (C) 1986. All rights reserved.
- *
- * This program is freely distributable as long as this copyright notice
- * is retained. It intended for personal, non-commercial use.
- *
- ***************************************************************************/
-
- #include "screen.h"
-
- struct GfxBase *GfxBase;
- struct IntuitionBase *IntuitionBase;
-
- struct Window *window = NULL;
- struct Screen *screen = NULL;
- struct IntuiMessage *message;
- struct RastPort *rp;
- struct ViewPort *vp;
-
- UBYTE QuitScreen = FALSE;
-
- extern struct Menu Menu;
-
- struct NewScreen NewScreen = {
- 0,0, /* start position */
- 320, 200, 6, /* width, height, depth */
- 0,1, /* detail pen, block pen */
- NULL, /* HIRES, INTERLACE, SPRITES, DUAL, HAM */
- CUSTOMSCREEN, /* screen type */
- NULL, /* font to use */
- (UBYTE *) "Screen Configurator", /* default title for screen */
- NULL /* pointer to extra gadgets */
- };
-
- struct NewWindow NewWindow = {
- 0,0, /* start position */
- 320,200, /* width, height */
- 0,1, /* detail pen, block pen */
- MENUPICK|GADGETDOWN|GADGETUP|REQCLEAR, /* IDCMP flags */
- ACTIVATE|BORDERLESS|BACKDROP, /* window flags */
- NULL, /* first gadget */
- NULL, /* user checkmark */
- NULL, /* window title */
- NULL, /* pointer to screen */
- NULL, /* pointer to superbitmap */
- 0,0,320,200, /* sizing */
- CUSTOMSCREEN /* type of screen */
- };
-
- UBYTE ScreenName[80] = "df0:";
- BOOL FileRequest();
-
- main () {
- if (OpenLibs() | OpenDisp())
- CleanUp();
- else {
- ConfScreen();
- CleanUp();
- }
- } /* main */
-
- CleanUp() {
- CloseDisp();
- CloseLibs();
- } /* CleanUp */
-
- OpenLibs() {
- IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0);
- if (IntuitionBase == NULL) {
- printf("Couldn't get Intuition\n");
- return(100);
- }
- GfxBase = (struct GfxBase *) OpenLibrary("graphics.library",0);
- if (GfxBase == NULL) {
- printf("Couldn't get Graphics\n");
- return(100);
- }
- return(0);
- } /* OpenLibs */
-
- CloseLibs() {
- if (IntuitionBase != NULL) CloseLibrary(IntuitionBase);
- if (GfxBase != NULL) CloseLibrary(GfxBase);
- } /* CloseLibs */
-
- OpenDisp() {
- screen = (struct Screen *) OpenScreen(&NewScreen);
- if (screen == NULL) {
- printf("Can't open new screen!\n");
- exit(200);
- }
-
- NewWindow.Screen = screen;
-
- window = (struct Window *) OpenWindow(&NewWindow);
- if (window == NULL) {
- CloseScreen(screen);
- printf("Can't open backdrop window\n");
- exit(201);
- }
- SetMenuStrip(window, &Menu);
-
- rp = window->RPort;
- vp = &screen->ViewPort;
-
- InitFNR();
-
- return(0);
- } /* opendisp */
-
- CloseDisp() {
- if (window)
- {
- ClearMenuStrip(window);
- CloseWindow(window);
- }
- if (screen) CloseScreen(screen);
- } /* CloseDisp */
-
- ConfScreen()
- {
- ULONG class;
- USHORT code = 0;
- struct MenuItem *Item;
-
- while (QuitScreen == FALSE) {
- if ((message=(struct IntuiMessage *) GetMsg(window->UserPort)) == 0L) {
- Wait(1L<<window->UserPort->mp_SigBit);
- continue;
- }
- class = message->Class;
- code = message->Code;
- ReplyMsg(message);
- if (class == MENUPICK)
- while (code != MENUNULL)
- {
- switch (MENUNUM(code))
- {
- case PROJECTMENU:
- ScreenProject(code);
- break;
- case EDITMENU:
- EditScreen(code);
- break;
- }
- Item = ItemAddress(&Menu,code);
- code = Item->NextSelect;
- }
- }
- } /* ConfScreen */
-
- ScreenProject(code)
- USHORT code;
- {
- switch (ITEMNUM(code))
- {
- case LOADITEM:
- if (FileRequest("Load NewScreen","Load",&ScreenName,window))
- printf("You picked %s\n",&ScreenName);
- else
- printf("You punted\n");
- break;
- case SAVEITEM:
- if (FileRequest("Save NewScreen","Save",&ScreenName,window))
- printf("You picked %s\n",&ScreenName);
- else
- printf("You punted\n");
- break;
- case USEITEM:
- CloseDisp();
- OpenDisp();
- break;
- case QUITITEM:
- QuitScreen = TRUE;
- }
- } /* DoProjectScreen */
-
- EditScreen(code)
- USHORT code;
- {
- switch (ITEMNUM(code))
- {
- case DEPTHITEM:
- NewScreen.Depth = SUBNUM(code) + 1;
- AdjustScreenDepth();
- break;
- case VIEWMODEITEM:
- EditScreenViewModes(code);
- break;
- }
- } /* EditScreen */
-
- EditScreenViewModes(code)
- USHORT code;
- {
- struct MenuItem *Item;
-
- Item = ItemAddress((struct Menu *) &Menu,code);
- if (Item->Flags & TOGGLED11)
- Item->Flags ^= CHECKED;
- Item->Flags = Item->Flags ^ TOGGLED11;
-
- switch (SUBNUM(code))
- {
- case HIRESSUB:
- if (!((NewScreen.ViewModes ^= HIRES) & HIRES))
- NewScreen.Width = 320;
- else
- {
- NewScreen.Width = 640;
- AdjustScreenDepth();
- }
- break;
- case INTERLACESUB:
- if ((NewScreen.ViewModes ^= INTERLACE) & INTERLACE)
- NewScreen.Height = 400;
- else
- NewScreen.Height = 200;
- break;
- case SPRITESSUB:
- NewScreen.ViewModes ^= SPRITES;
- break;
- case DUALPFSUB:
- NewScreen.ViewModes ^= DUALPF;
- break;
- case HAMSUB:
- NewScreen.ViewModes ^= HAM;
- }
- } /* EditScreenViewMode */
-
- AdjustScreenDepth()
- { /* Adjust the Number of bit planes to a sane number */
- USHORT code;
- struct MenuItem *Item;
-
- if (NewScreen.Depth > 4 && NewScreen.ViewModes & HIRES)
- {
- code = SHIFTMENU(EDITMENU)|SHIFTITEM(DEPTHITEM)|SHIFTSUB((NewScreen.Depth - 1));
- Item = ItemAddress((struct Menu *) &Menu,code);
- Item->Flags ^= CHECKED;
-
- NewScreen.Depth = 4;
- code = SHIFTMENU(EDITMENU)|SHIFTITEM(DEPTHITEM)|SHIFTSUB((NewScreen.Depth - 1));
- Item = ItemAddress((struct Menu *) &Menu,code);
- Item->Flags ^= CHECKED;
- }
- } /* AdjustScreenDepth */
-