/************************************************************\ * 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 #include #include #include #include #include #include #include #include #include #include #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; iTitle); 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); }