home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD2.img
/
d4xx
/
d493
/
screenmod
/
source
/
screenmod.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-06-06
|
9KB
|
401 lines
/************************************************************\
* SCREEN MOD *
* *
* A little utility to make life just that oh, little *
* bit easier .... have fun! *
* *
* This program, source code, and documentation are *
* Copyrighted ©1991 by Legendary Design Technologies Inc. *
* but are freely distributable. *
* *
* Written by Syd L. Bolton on May 1, 1991 at ~ 11:00pm *
* *
* Version: 1.0 *
\************************************************************/
#include <stdio.h>
#include <exec/types.h>
#include <exec/ports.h>
#include <exec/io.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <graphics/gfxbase.h>
#include <functions.h>
#include "main.h"
#define VMODES Screens[scr]->ViewPort.Modes /* shortcut */
long *IntuitionBase=0,*GfxBase=0;
struct Screen *Screen;
struct Window *Window;
struct RastPort *rport;
struct ViewPort *vport;
struct Screen *Screens[20];
char string[80],origtitle[80];
int count,origwidth,origheight,scr=0;
main(argc,argv)
int argc;
char *argv[];
{
struct IntuiMessage *message;
ULONG class;
int exit_flag=0;
openstuff();
if (argc > 1) {
if((!(strcmp(argv[1],"small")))||(!(strcmp(argv[1],"SMALL")))) {
iconify();
goto mloop;
}
}
opendisplay();
screenlist();
updatestats();
mloop:
do {
WaitPort(Window->UserPort);
while ( ( message=(struct IntuiMessage *)
GetMsg(Window->UserPort) ) != NULL)
{
class=message->Class;
ReplyMsg(message);
if (class==GADGETUP) option(message);
if (class==MOUSEBUTTONS) click(message);
if (class==MENUPICK) exit_flag=menu(message);
if (class==VANILLAKEY) keystroke(message);
}
} while (exit_flag==0);
closestuff();
}
#include "message.c"
#include "save.c"
#include "iconify.c"
#include "palette.c"
keystroke(message)
struct IntuiMessage *message;
{
switch(message->Code) {
case 'R':
case 'r': remakescreen();
break;
case 'V':
case 'v': viewscreen();
break;
case 'H':
case 'h': Message(2); /* help */
break;
case 'A':
case 'a': adjustcolor();
break;
case 'U':
case 'u': screenlist();
scr=0;
updatestats();
break;
case 27: strcpy(Gadget3SIBuff,"0");
strcpy(Gadget4SIBuff,"0");
strcpy(Gadget5SIBuff,"640");
strcpy(Gadget6SIBuff,"200");
strcpy(Gadget7SIBuff,"0");
strcpy(Gadget8SIBuff,"1");
strcpy(Gadget9SIBuff,"ScreenMod v1.0 ©1991 Legendary Design Technologies Inc.");
strcpy(Gadget10SIBuff,Gadget9SIBuff);
Gadget12.Flags |= SELECTED;
Gadget13.Flags &= ~SELECTED;
Gadget14.Flags |= SELECTED;
Gadget15.Flags &= ~SELECTED;
Gadget16.Flags &= ~SELECTED;
Gadget17.Flags &= ~SELECTED;
remakescreen();
screenlist();
scr=0;
updatestats();
break;
default: break;
}
}
menu(message)
struct IntuiMessage *message;
{
int rv=0;
switch(MENUNUM(message->Code)) {
case 0: rv=project(message);
break;
case 1: rv=special(message);
break;
default: break;
}
return(rv);
}
project(message)
struct IntuiMessage *message;
{
switch(ITEMNUM(message->Code)) {
case 0: save();
break; /* save settings */
case 1: Message(1); /* about */
break;
case 2: Message(2); /* help */
break;
case 3: return(1); /* quit */
default: break;
}
return(0);
}
special(message)
struct IntuiMessage *message;
{
int rv=0;
switch(ITEMNUM(message->Code)) {
case 0: rv=iconify();
break;
default: break;
}
return(rv);
}
click(message)
struct IntuiMessage *message;
{
int x,y;
if(!(message->Code==SELECTUP))
return();
x=message->MouseX;
y=message->MouseY;
if (x < 12 || x > 340 || y < 26 || y > 196)
return();
y=(y-28)/10;
if (y >count-1) return();
displaysname(scr,1,0);
scr=y;
updatestats();
}
option(message)
struct IntuiMessage *message;
{
struct Gadget *igad;
int gadgid;
igad=(struct Gadget *) message->IAddress;
gadgid=igad->GadgetID;
switch(gadgid) {
case 20: screenlist();
scr=0;
updatestats();
case 30: remakescreen();
break;
case 40: adjustcolor();
break;
case 50: viewscreen();
break;
default: break;
}
}
viewscreen()
{
struct IntuiMessage *waitmsg;
if (scr==0) return(); /* screen already in front */
ScreenToFront(Screens[scr]);
WaitPort(Window->UserPort);
while ( ( waitmsg=(struct IntuiMessage *)
GetMsg(Window->UserPort) ) != NULL)
ReplyMsg(waitmsg);
ScreenToFront(Screens[0]);
}
adjustcolor()
{
ScreenToFront(Screens[scr]);
doPalette(Screens[scr]);
ScreenToFront(Screens[0]); /* this brings SCREENMOD back */
}
remakescreen()
{
Screens[scr]->LeftEdge=atoi(Gadget3SIBuff);
Screens[scr]->TopEdge=atoi(Gadget4SIBuff);
Screens[scr]->Width=atoi(Gadget5SIBuff);
Screens[scr]->Height=atoi(Gadget6SIBuff);
Screens[scr]->DetailPen=atoi(Gadget7SIBuff);
Screens[scr]->BlockPen=atoi(Gadget8SIBuff);
strcpy(Screens[scr]->Title,Gadget9SIBuff);
strcpy(Screens[scr]->DefaultTitle,Gadget10SIBuff);
Screens[scr]->ViewPort.DxOffset=atoi(Gadget3SIBuff);
Screens[scr]->ViewPort.DyOffset=atoi(Gadget4SIBuff);
if (Gadget12.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= HIRES;
else Screens[scr]->ViewPort.Modes &= ~HIRES;
if (Gadget13.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= LACE;
else Screens[scr]->ViewPort.Modes &= ~LACE;
if (Gadget14.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= SPRITES;
else Screens[scr]->ViewPort.Modes &= ~SPRITES;
if (Gadget15.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= DUALPF;
else Screens[scr]->ViewPort.Modes &= ~DUALPF;
if (Gadget16.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= HAM;
else Screens[scr]->ViewPort.Modes &= ~HAM;
if (Gadget17.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= EXTRA_HALFBRITE;
else Screens[scr]->ViewPort.Modes &= ~EXTRA_HALFBRITE;
RemakeDisplay();
if (Screens[scr]->Flags & SHOWTITLE) ShowTitle(Screens[scr],TRUE);
}
updatestats()
{
int i,j;
sprintf(Gadget3SIBuff,"%-d",Screens[scr]->LeftEdge);
sprintf(Gadget4SIBuff,"%-d",Screens[scr]->TopEdge);
sprintf(Gadget5SIBuff,"%-d",Screens[scr]->Width);
sprintf(Gadget6SIBuff,"%-d",Screens[scr]->Height);
sprintf(Gadget7SIBuff,"%-d",Screens[scr]->DetailPen);
sprintf(Gadget8SIBuff,"%-d",Screens[scr]->BlockPen);
strcpy(Gadget9SIBuff,Screens[scr]->Title);
strcpy(Gadget10SIBuff,Screens[scr]->DefaultTitle);
strcpy(Gadget11SIBuff,(STRPTR)Screens[scr]->Font.ta_Name);
strcpy(origtitle,Screens[scr]->DefaultTitle);
origheight=Screens[scr]->Height;
origwidth=Screens[scr]->Width;
SetAPen(rport,0);
for (i=0; i<2; i++) {
for (j=0; j<3; j++)
RectFill(rport,357+j*97,132+i*16,357+76+j*97,132+8+i*16);
}
if (VMODES & HIRES) Gadget12.Flags |= SELECTED;
else Gadget12.Flags &= ~SELECTED;
if (VMODES & LACE) Gadget13.Flags |= SELECTED;
else Gadget13.Flags &= ~SELECTED;
if (VMODES & SPRITES) Gadget14.Flags |= SELECTED;
else Gadget14.Flags &= ~SELECTED;
if (VMODES & DUALPF) Gadget15.Flags |= SELECTED;
else Gadget15.Flags &= ~SELECTED;
if (VMODES & HAM) Gadget16.Flags |= SELECTED;
else Gadget16.Flags &= ~SELECTED;
if (VMODES & EXTRA_HALFBRITE) Gadget17.Flags |= SELECTED;
else Gadget17.Flags &= ~SELECTED;
RefreshGadgets(&Gadget3,Window,NULL);
displaysname(scr,3,1);
}
screenlist()
{
int done=0,i;
count=0;
Screens[0]=IntuitionBase->FirstScreen;
do {
Screens[count+1]=Screens[count]->NextScreen;
if (Screens[count+1]==NULL) done=1;
count++;
if (count==17) done=1;
} while (done==0);
for (i=0; i<count; i++)
displaysname(i,1,0);
}
displaysname(i,a,b)
int i,a,b;
{
char tempstring[15];
SetAPen(rport,a); SetBPen(rport,b);
sprintf(string,"%-30s",Screens[i]->Title);
string[30]=' ';string[31]='\0';
if (Screens[i]->Title[0]=='\0') strcpy(string,"** NO NAME ** ");
sprintf(tempstring,"%4dX%-4d",Screens[i]->Width,Screens[i]->Height);
strcat(string,tempstring);
Move(rport,15,35+i*10);
Text(rport,string,strlen(string));
}
openstuff()
{
if((IntuitionBase=OpenLibrary("intuition.library",0L))==NULL)
exit(1);
if((GfxBase=OpenLibrary("graphics.library",0L))==NULL)
exit(1);
}
opendisplay()
{
if(!(Screen=OpenScreen(&NewScreenStructure))) {
puts("Can't open screen!");
closestuff();
exit(1);
}
NewWindowStructure1.Screen=Screen;
if (!(Window=OpenWindow(&NewWindowStructure1))) {
puts("Cannot open the window.");
closestuff();
exit(1);
}
vport=&Screen->ViewPort;
LoadRGB4(vport,&Palette[0],PaletteColorCount);
rport=Window->RPort;
PrintIText(rport,&IntuiTextList1,0,0);
DrawBorder(rport,&BorderList1,0,0);
SetMenuStrip(Window,&MenuList1);
}
closestuff()
{
if (Window) ClearMenuStrip(Window);
if (Window) CloseWindow(Window);
if (Screen) CloseScreen(Screen);
if (IntuitionBase) CloseLibrary(IntuitionBase);
if (GfxBase) CloseLibrary(GfxBase);
}