home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / screen / scremo10.lha / ScreenMod / Source / ScreenMod.c < prev    next >
C/C++ Source or Header  |  1991-06-06  |  9KB  |  401 lines

  1. /************************************************************\
  2.  *                    SCREEN MOD                            *
  3.  *                                                          *
  4.  *  A little utility to make life just that oh, little      *
  5.  *  bit easier .... have fun!                               *
  6.  *                                                          *
  7.  *  This program, source code, and documentation are        *
  8.  *  Copyrighted ©1991 by Legendary Design Technologies Inc. *
  9.  *  but are freely distributable.                           *
  10.  *                                                          *
  11.  *   Written by Syd L. Bolton on May 1, 1991 at ~ 11:00pm   *
  12.  *                                                          *
  13.  *                     Version: 1.0                         *
  14. \************************************************************/
  15.  
  16. #include <stdio.h>
  17. #include <exec/types.h>
  18. #include <exec/ports.h>
  19. #include <exec/io.h>
  20. #include <exec/memory.h>
  21. #include <libraries/dos.h>
  22. #include <libraries/dosextens.h>
  23. #include <intuition/intuition.h>
  24. #include <intuition/intuitionbase.h>
  25. #include <graphics/gfxbase.h>
  26. #include <functions.h>
  27.  
  28. #include "main.h"
  29.  
  30. #define VMODES Screens[scr]->ViewPort.Modes   /* shortcut */
  31.  
  32. long *IntuitionBase=0,*GfxBase=0;
  33. struct Screen *Screen;
  34. struct Window *Window;
  35. struct RastPort *rport;
  36. struct ViewPort *vport;
  37.  
  38. struct Screen *Screens[20];
  39.  
  40. char string[80],origtitle[80];
  41. int count,origwidth,origheight,scr=0;
  42.  
  43. main(argc,argv)
  44. int argc;
  45. char *argv[];
  46. {
  47. struct IntuiMessage *message;
  48. ULONG class;
  49. int exit_flag=0;
  50.  
  51. openstuff();
  52.  
  53. if (argc > 1) {
  54.     if((!(strcmp(argv[1],"small")))||(!(strcmp(argv[1],"SMALL")))) {
  55.         iconify();
  56.         goto mloop;
  57.         }
  58.     }
  59.  
  60. opendisplay();
  61. screenlist();
  62. updatestats();
  63.  
  64. mloop:
  65. do {
  66.     WaitPort(Window->UserPort);
  67.         while ( ( message=(struct IntuiMessage *)
  68.             GetMsg(Window->UserPort) ) != NULL)
  69.         {
  70.         class=message->Class;
  71.         ReplyMsg(message); 
  72.  
  73.         if (class==GADGETUP) option(message);
  74.         if (class==MOUSEBUTTONS) click(message);
  75.         if (class==MENUPICK) exit_flag=menu(message);
  76.         if (class==VANILLAKEY) keystroke(message);
  77.         }
  78.     } while (exit_flag==0);
  79.  
  80. closestuff();
  81. }            
  82.  
  83. #include "message.c"  
  84. #include "save.c"
  85. #include "iconify.c"
  86. #include "palette.c"
  87.  
  88. keystroke(message)
  89. struct IntuiMessage *message;
  90. {
  91. switch(message->Code) {
  92.     case 'R':
  93.     case 'r': remakescreen();
  94.           break;
  95.  
  96.     case 'V':
  97.     case 'v': viewscreen();
  98.           break;
  99.  
  100.     case 'H':
  101.     case 'h': Message(2);    /* help */
  102.                 break;
  103.  
  104.     case 'A':
  105.     case 'a': adjustcolor();
  106.           break;
  107.  
  108.     case 'U':
  109.     case 'u': screenlist();
  110.           scr=0;
  111.           updatestats();
  112.           break;
  113.  
  114.     case 27: strcpy(Gadget3SIBuff,"0");
  115.          strcpy(Gadget4SIBuff,"0");
  116.          strcpy(Gadget5SIBuff,"640");
  117.          strcpy(Gadget6SIBuff,"200");
  118.          strcpy(Gadget7SIBuff,"0");
  119.          strcpy(Gadget8SIBuff,"1");
  120.          strcpy(Gadget9SIBuff,"ScreenMod v1.0 ©1991 Legendary Design Technologies Inc.");
  121.          strcpy(Gadget10SIBuff,Gadget9SIBuff);
  122.          Gadget12.Flags |= SELECTED;
  123.          Gadget13.Flags &= ~SELECTED;
  124.          Gadget14.Flags |= SELECTED;
  125.          Gadget15.Flags &= ~SELECTED;
  126.          Gadget16.Flags &= ~SELECTED;
  127.          Gadget17.Flags &= ~SELECTED;
  128.          remakescreen();
  129.          screenlist();
  130.          scr=0;
  131.          updatestats();
  132.          break;
  133.         
  134.     default: break;
  135.     }
  136. }
  137.  
  138. menu(message)
  139. struct IntuiMessage *message;
  140. {
  141. int rv=0;
  142.  
  143. switch(MENUNUM(message->Code)) {
  144.     case 0: rv=project(message);
  145.         break;
  146.  
  147.     case 1: rv=special(message);
  148.         break;
  149.  
  150.     default: break;
  151.     }
  152. return(rv);
  153. }
  154.  
  155. project(message)
  156. struct IntuiMessage *message;
  157. {
  158. switch(ITEMNUM(message->Code)) {
  159.  
  160.     case 0: save();
  161.         break;         /* save settings */
  162.  
  163.     case 1: Message(1);           /* about */
  164.          break;
  165.  
  166.     case 2: Message(2);           /* help */
  167.         break;
  168.  
  169.     case 3: return(1);            /* quit */
  170.  
  171.     default: break;
  172.     }
  173. return(0);
  174. }
  175.     
  176. special(message)
  177. struct IntuiMessage *message;
  178. {
  179. int rv=0;
  180.  
  181. switch(ITEMNUM(message->Code)) {
  182.  
  183.     case 0: rv=iconify();
  184.         break;
  185.  
  186.     default: break;
  187.     }
  188. return(rv);
  189. }
  190.  
  191. click(message)
  192. struct IntuiMessage *message;
  193. {
  194. int x,y;
  195.  
  196. if(!(message->Code==SELECTUP))
  197.     return();
  198.  
  199. x=message->MouseX;
  200. y=message->MouseY;
  201.  
  202. if (x < 12 || x > 340 || y < 26 || y > 196)
  203.     return();
  204.  
  205. y=(y-28)/10;
  206.  
  207. if (y >count-1) return();
  208.  
  209. displaysname(scr,1,0);
  210. scr=y;
  211. updatestats();
  212. }
  213.  
  214. option(message)
  215. struct IntuiMessage *message;
  216. {
  217. struct Gadget *igad;
  218. int gadgid;
  219.  
  220. igad=(struct Gadget *) message->IAddress;
  221. gadgid=igad->GadgetID;
  222.  
  223. switch(gadgid) {
  224.     case 20: screenlist();
  225.          scr=0;
  226.          updatestats();
  227.  
  228.     case 30: remakescreen();
  229.          break;
  230.  
  231.     case 40: adjustcolor();
  232.          break;
  233.  
  234.     case 50: viewscreen();
  235.          break;
  236.  
  237.     default: break;
  238.     }
  239. }
  240.  
  241. viewscreen()
  242. {
  243. struct IntuiMessage *waitmsg;
  244.  
  245. if (scr==0) return();   /* screen already in front */
  246. ScreenToFront(Screens[scr]);
  247. WaitPort(Window->UserPort);
  248.     while ( ( waitmsg=(struct IntuiMessage *)
  249.         GetMsg(Window->UserPort) ) != NULL)
  250.             ReplyMsg(waitmsg); 
  251. ScreenToFront(Screens[0]);
  252. }
  253.  
  254. adjustcolor()
  255. {
  256. ScreenToFront(Screens[scr]);
  257. doPalette(Screens[scr]);
  258. ScreenToFront(Screens[0]);  /* this brings SCREENMOD back */
  259. }
  260.  
  261. remakescreen()
  262. {
  263. Screens[scr]->LeftEdge=atoi(Gadget3SIBuff);
  264. Screens[scr]->TopEdge=atoi(Gadget4SIBuff);
  265. Screens[scr]->Width=atoi(Gadget5SIBuff);
  266. Screens[scr]->Height=atoi(Gadget6SIBuff);
  267. Screens[scr]->DetailPen=atoi(Gadget7SIBuff);
  268. Screens[scr]->BlockPen=atoi(Gadget8SIBuff);
  269. strcpy(Screens[scr]->Title,Gadget9SIBuff);
  270. strcpy(Screens[scr]->DefaultTitle,Gadget10SIBuff);
  271. Screens[scr]->ViewPort.DxOffset=atoi(Gadget3SIBuff);
  272. Screens[scr]->ViewPort.DyOffset=atoi(Gadget4SIBuff);
  273. if (Gadget12.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= HIRES;
  274.     else Screens[scr]->ViewPort.Modes &= ~HIRES;
  275. if (Gadget13.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= LACE;
  276.     else Screens[scr]->ViewPort.Modes &= ~LACE;
  277. if (Gadget14.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= SPRITES;
  278.     else Screens[scr]->ViewPort.Modes &= ~SPRITES;
  279. if (Gadget15.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= DUALPF;
  280.     else Screens[scr]->ViewPort.Modes &= ~DUALPF;
  281. if (Gadget16.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= HAM;
  282.     else Screens[scr]->ViewPort.Modes &= ~HAM;
  283. if (Gadget17.Flags & SELECTED) Screens[scr]->ViewPort.Modes |= EXTRA_HALFBRITE;
  284.     else Screens[scr]->ViewPort.Modes &= ~EXTRA_HALFBRITE;
  285. RemakeDisplay();
  286. if (Screens[scr]->Flags & SHOWTITLE) ShowTitle(Screens[scr],TRUE);
  287. }
  288.  
  289. updatestats()
  290. {
  291. int i,j;
  292.  
  293. sprintf(Gadget3SIBuff,"%-d",Screens[scr]->LeftEdge);
  294. sprintf(Gadget4SIBuff,"%-d",Screens[scr]->TopEdge);
  295. sprintf(Gadget5SIBuff,"%-d",Screens[scr]->Width);
  296. sprintf(Gadget6SIBuff,"%-d",Screens[scr]->Height);
  297. sprintf(Gadget7SIBuff,"%-d",Screens[scr]->DetailPen);
  298. sprintf(Gadget8SIBuff,"%-d",Screens[scr]->BlockPen);
  299. strcpy(Gadget9SIBuff,Screens[scr]->Title);
  300. strcpy(Gadget10SIBuff,Screens[scr]->DefaultTitle);
  301. strcpy(Gadget11SIBuff,(STRPTR)Screens[scr]->Font.ta_Name);
  302. strcpy(origtitle,Screens[scr]->DefaultTitle);
  303. origheight=Screens[scr]->Height;
  304. origwidth=Screens[scr]->Width;
  305. SetAPen(rport,0);
  306. for (i=0; i<2; i++) {
  307.     for (j=0; j<3; j++)
  308.         RectFill(rport,357+j*97,132+i*16,357+76+j*97,132+8+i*16);
  309.     }
  310. if (VMODES & HIRES) Gadget12.Flags |= SELECTED;
  311.     else Gadget12.Flags &= ~SELECTED;
  312. if (VMODES & LACE) Gadget13.Flags |= SELECTED;
  313.     else Gadget13.Flags &= ~SELECTED;
  314. if (VMODES & SPRITES) Gadget14.Flags |= SELECTED;
  315.     else Gadget14.Flags &= ~SELECTED;
  316. if (VMODES & DUALPF) Gadget15.Flags |= SELECTED;
  317.     else Gadget15.Flags &= ~SELECTED;
  318. if (VMODES & HAM) Gadget16.Flags |= SELECTED;
  319.     else Gadget16.Flags &= ~SELECTED;
  320. if (VMODES & EXTRA_HALFBRITE) Gadget17.Flags |= SELECTED;
  321.     else Gadget17.Flags &= ~SELECTED;
  322. RefreshGadgets(&Gadget3,Window,NULL);
  323. displaysname(scr,3,1);
  324. }
  325.  
  326. screenlist()
  327. {
  328. int done=0,i;
  329.  
  330. count=0;
  331.  
  332. Screens[0]=IntuitionBase->FirstScreen;
  333.  
  334. do {
  335.     Screens[count+1]=Screens[count]->NextScreen;
  336.     if (Screens[count+1]==NULL) done=1;
  337.     count++;
  338.     if (count==17) done=1;
  339.     } while (done==0);
  340.  
  341. for (i=0; i<count; i++) 
  342.     displaysname(i,1,0);    
  343. }
  344.  
  345. displaysname(i,a,b)
  346. int i,a,b;
  347. {
  348. char tempstring[15];
  349.  
  350. SetAPen(rport,a); SetBPen(rport,b);
  351. sprintf(string,"%-30s",Screens[i]->Title);
  352. string[30]=' ';string[31]='\0';
  353. if (Screens[i]->Title[0]=='\0') strcpy(string,"** NO NAME **                  ");
  354. sprintf(tempstring,"%4dX%-4d",Screens[i]->Width,Screens[i]->Height);
  355. strcat(string,tempstring);
  356. Move(rport,15,35+i*10);
  357. Text(rport,string,strlen(string));
  358. }
  359.  
  360. openstuff()
  361. {
  362. if((IntuitionBase=OpenLibrary("intuition.library",0L))==NULL)
  363.     exit(1);
  364. if((GfxBase=OpenLibrary("graphics.library",0L))==NULL)
  365.     exit(1);
  366. }
  367.  
  368. opendisplay()
  369. {
  370. if(!(Screen=OpenScreen(&NewScreenStructure))) {
  371.     puts("Can't open screen!");
  372.     closestuff();
  373.     exit(1);
  374.     }
  375.  
  376. NewWindowStructure1.Screen=Screen;
  377.  
  378. if (!(Window=OpenWindow(&NewWindowStructure1))) {
  379.     puts("Cannot open the window.");
  380.     closestuff();
  381.     exit(1);
  382.     }
  383. vport=&Screen->ViewPort;
  384.  
  385. LoadRGB4(vport,&Palette[0],PaletteColorCount);
  386.  
  387. rport=Window->RPort;
  388. PrintIText(rport,&IntuiTextList1,0,0);
  389. DrawBorder(rport,&BorderList1,0,0);
  390. SetMenuStrip(Window,&MenuList1);
  391. }
  392.  
  393. closestuff()
  394. {
  395. if (Window) ClearMenuStrip(Window);
  396. if (Window) CloseWindow(Window);
  397. if (Screen) CloseScreen(Screen);
  398. if (IntuitionBase) CloseLibrary(IntuitionBase);
  399. if (GfxBase) CloseLibrary(GfxBase);
  400. }
  401.