home *** CD-ROM | disk | FTP | other *** search
- /**********************************************************************/
- /* Public screen Opening code, for creating new public screens */
- /**********************************************************************/
- #include "psx.h"
-
- /*
- struct ColorSpec ColourSpecs[] =
- {
- {0, 11, 9, 7},
- {1, 3, 2, 2 },
- {2, 15, 14, 13},
- {3, 12, 2, 0 },
- {-1,},
- };
- */
-
- ULONG OpenErr;
-
- char *OpenErrors[] =
- {
- "Unknown Error",
- "Named monitor not available",
- "Proper chips not available",
- "Not enough memory",
- "Not enough chip memory",
- "Screen name in use",
- "Unknown screen mode",
- };
-
-
- /* I accept the default pens, but have to
- * pass something to get the new look.
- */
- UWORD Pens[] =
- {
- 0, 1, ~0 /* just detail and block */
- };
-
- char NewPubScreenName[MAXPUBSCREENNAME];
-
- ULONG NewScreenTags[] =
- {
- SA_PubName, (ULONG) NewPubScreenName,
- SA_ErrorCode, (ULONG) &OpenErr,
- SA_Pens, (ULONG) Pens,
- TAG_DONE,
- };
-
-
-
- /**********************************************************************/
- /* Get the parameters for the new public screen */
- /**********************************************************************/
- int
- GetScreenParameters(struct NewScreen *NS)
- {
- ULONG TopBorder;
- int WinHeight, WinWidth;
- struct Window *ReqWindow;
- struct IntuiMessage *Message;
- ULONG Class, Code;
- int AllOkay=TRUE;
- int KG;
- int XDim=0, YDim=0, Depth=0;
-
- TopBorder=Screen->WBorTop;
- strcpy(NewPubScreenName, "PSX_Screen");
-
- SGadList=NULL;
- WinHeight=CreateScreenGadgets(&SGadList, VI, TopBorder, TAttr, &WinWidth);
- if (WinHeight==0)
- {
- SetMessage("Unable to create gadgets.");
- return(FALSE);
- };
-
- ReqWindow = (struct Window *)OpenWindowTags( NULL,
- WA_Left, WIN_LEFT+10,
- WA_Top, WIN_TOP+5,
- WA_Width, WinWidth,
- WA_Height, WinHeight,
- WA_IDCMP, GADGETUP|CLOSEWINDOW|BUTTONIDCMP|LISTVIEWIDCMP|REFRESHWINDOW,
- WA_Activate, TRUE,
- WA_DepthGadget, TRUE,
- WA_DragBar, TRUE,
- WA_RMBTrap, TRUE,
- WA_Title, "Select Screen Style",
- WA_SimpleRefresh, TRUE,
- WA_PubScreen, Window->WScreen,
- TAG_END
- );
-
- if (!ReqWindow) return(FALSE);
-
- /** Set screen font **/
-
- SetFont(ReqWindow->RPort, ScreenFont);
-
- /** GadTools Init **/
-
- AddGList(ReqWindow, SGadList, -1, -1, NULL);
- RefreshGList(SGadList, ReqWindow, NULL, -1);
- GT_RefreshWindow(ReqWindow, NULL);
-
- KG=TRUE;
-
- while (KG)
- {
- struct Gadget *Gad;
- ULONG GadID;
-
- Message=(struct IntuiMessage *)GT_GetIMsg(ReqWindow->UserPort);
- if (Message==FALSE)
- {
- WaitPort(ReqWindow->UserPort);
- continue;
- };
-
- Class=Message->Class;
- Code=Message->Code;
- Gad=Message->IAddress;
- GadID=Gad->GadgetID;
-
- GT_ReplyIMsg((struct IntuiMessage *)Message);
-
- switch (Class)
- {
- case GADGETUP:
- switch (GadID)
- {
- case SGID_NAME:
- strcpy(NewPubScreenName, ((struct StringInfo *)Gad->SpecialInfo)->Buffer);
- break;
-
- case SGID_CANCEL:
- KG=FALSE;
- AllOkay=FALSE;
- break;
-
- case SGID_XDIM:
- XDim=Code;
- break;
-
- case SGID_YDIM:
- YDim=Code;
- break;
-
- case SGID_DEPTH:
- Depth=Code;
- break;
-
- case SGID_OPEN:
- KG=FALSE;
-
- default:
- break;
- };
- break;
-
- case REFRESHWINDOW:
- GT_BeginRefresh(ReqWindow);
- GT_EndRefresh(ReqWindow, TRUE);
- break;
- default:
- break;
- };
- };
-
- NS->ViewModes=0;
-
- if (XDim==0)
- NS->ViewModes|=HIRES;
-
- if (YDim==1)
- NS->ViewModes|=LACE;
-
- NS->Depth=Depth+1;
-
- CloseWindow(ReqWindow);
- return(AllOkay);
- }
-
-
- /**********************************************************************/
- /* Open screen base routine */
- /**********************************************************************/
- void
- OpenNewPublicScreen(void)
- {
- struct Screen *PubScreen;
- struct ExtNewScreen NS;
-
- setmem(&NS, sizeof(NS), 0);
-
- if (GetScreenParameters(&NS)==FALSE)
- return;
-
- NS.Width = -1; // Set Non-Zero items
- NS.Height = -1;
- NS.BlockPen = 1;
- NS.Type = CUSTOMSCREEN;
-
- PubScreen=(struct Screen *)OpenScreenTagList(&NS, (struct TagItem *)&NewScreenTags[0]);
-
- if (PubScreen==0)
- SetMessage("Error opening screen.");
- else
- {
- PubScreenStatus(PubScreen, 0L);
- strcpy(CurPubScreenName, NewPubScreenName);
- ClosePSXWindow();
- ReleasePublicScreen();
- FindPublicScreen();
- OpenPSXWindow();
- ScreenToFront(PubScreen);
- SetMessage("Public screen opened.");
- };
-
- }
-
-
- /**********************************************************************/
- /* CLI-driven open public screen */
- /**********************************************************************/
- void
- CLIOpenNewPublicScreen(char *Name, long HiresFlag, long LaceFlag, long *DepthPtr, long DefaultFlag)
- {
- struct Screen *PubScreen;
- struct NewScreen NS;
-
- setmem(&NS, sizeof(NS), 0);
-
- NS.Depth = 2;
- NS.Width = -1; // Set Non-Zero items
- NS.Height = -1;
- NS.BlockPen = 1;
- NS.Type = CUSTOMSCREEN;
-
- strcpy(NewPubScreenName, Name);
-
- // Check args for HIRES, LORES, LACE, NOLACE, and DEPTH # arguments
- if (HiresFlag) NS.ViewModes|=HIRES;
- if (LaceFlag) NS.ViewModes|=LACE;
- if (DepthPtr) NS.Depth=*DepthPtr;
-
- PubScreen=(struct Screen *)OpenScreenTagList(&NS, (struct TagItem *)&NewScreenTags[0]);
- if (PubScreen==0)
- {
- int ShowErr;
-
- if (OpenErr>6) ShowErr=0;
- else ShowErr=OpenErr;
- printf("Public screen open error: %s (%d).\n", OpenErrors[ShowErr], OpenErr);
- } else
- {
- PubScreenStatus(PubScreen, 0L);
- if (DefaultFlag)
- SetDefaultPubScreen(NewPubScreenName);
- };
-
- return;
- }
-
-
- /**********************************************************************/
- /* Close a named public screen from the CLI */
- /**********************************************************************/
- void
- CLIClosePublicScreen(char *Name)
- {
- struct Screen *ToClose;
- long Result;
-
- ToClose=LockPubScreen(Name);
-
- if (ToClose==0)
- {
- printf("Unable to lock screen.\n");
- return;
- };
-
- if ((ToClose->Flags&SCREENTYPE)==WBENCHSCREEN)
- {
- printf("Cannot close the Workbench screen!\n");
- UnlockPubScreen(Name, ToClose);
- return;
- };
-
- UnlockPubScreen(Name, ToClose);
-
- Result=CloseScreen(ToClose);
-
- if (Result==FALSE)
- printf("Unable to close screen.\n");
- else printf("Screen successfully closed.\n");
- }
-