home *** CD-ROM | disk | FTP | other *** search
- /* ScreenSave
- * Saves front screen as an ILBM
- * Requires linkage with several iffparse modiules - See Makefile
- */
-
- #include "iffp/ilbmapp.h"
-
- #include <intuition/intuitionbase.h>
- #include <workbench/workbench.h>
-
- #include <clib/icon_protos.h>
-
- #ifdef LATTICE
- int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */
- int chkabort(void) { return(0); } /* really */
- #endif
-
- char *vers = "\0$VER: screensave 37.5";
- char *Copyright =
- "screensave v37.5 - supports new modes - Freely Redistributable";
- char *usage =
- "Usage: screensave filename (filename -c[unit] for clipboard)\n"
- "Options: QUIET, NODELAY, NOICON, SEQUENCE (sequence adds a number to name)\n"
- "Saves front screen after 10-sec delay (unless NODELAY).\n";
-
- int mygets(char *s);
- void bye(UBYTE *s,int e);
- void cleanup(void);
-
- struct Library *IntuitionBase = NULL;
- struct Library *GfxBase = NULL;
- struct Library *IconBase = NULL;
- struct Library *IFFParseBase = NULL;
-
- struct ILBMInfo ilbm = {0};
-
- BOOL fromWB, Quiet, NoDelay, NoIcon, Sequence;
-
-
-
- #define INBUFSZ 128
- char nbuf[INBUFSZ];
-
- /* Data for project icon for saved ILBM
- *
- */
- UWORD ILBMI1Data[] =
- {
- /* Plane 0 */
- 0x0000,0x0000,0x0000,0x0001,0x0000,0x0000,0x0000,0x0003,
- 0x0FFF,0xFFFF,0xFFFF,0xFFF3,0x0FFF,0x0000,0x0000,0xFFF3,
- 0x0FFC,0x0000,0x0000,0x3FF3,0x0FE0,0x0E80,0xF800,0x07F3,
- 0x0F80,0x1C01,0x8C00,0x01F3,0x0F00,0x0001,0x8C00,0x00F3,
- 0x0600,0x0000,0x0600,0x0063,0x0600,0x0003,0xBC00,0x0063,
- 0x0600,0x0001,0xFC00,0x0063,0x0600,0x0000,0xFC00,0x0063,
- 0x0600,0x1FC1,0xFE40,0x0063,0x0600,0x1DC1,0xFE20,0x0063,
- 0x0600,0x1CE3,0xFF12,0x0063,0x0F00,0x1CE0,0x004F,0xC0F3,
- 0x0F80,0x1CE0,0x002F,0x01F3,0x0FE0,0x0E78,0x423D,0x07F3,
- 0x0FFC,0x0000,0x0000,0x3FF3,0x0FFF,0x0000,0x0000,0xFFF3,
- 0x0FFF,0xFFFF,0xFFFF,0xFFF3,0x0000,0x0000,0x0000,0x0003,
- 0x7FFF,0xFFFF,0xFFFF,0xFFFF,
- /* Plane 1 */
- 0xFFFF,0xFFFF,0xFFFF,0xFFFE,0xD555,0x5555,0x5555,0x5554,
- 0xD000,0x0000,0x0000,0x0004,0xD3FC,0xFFFF,0xFFFF,0x3FC4,
- 0xD3C0,0x0000,0x0000,0x03C4,0xD300,0x0100,0xF800,0x00C4,
- 0xD300,0x0381,0xFC00,0x00C4,0xD080,0x0701,0xFC00,0x0104,
- 0xD180,0xF883,0xFE00,0x0194,0xD181,0xDF80,0x4700,0x0194,
- 0xD181,0xDF82,0x0180,0x0194,0xD180,0x6F82,0x00C0,0x0194,
- 0xD180,0x0002,0x0020,0x0194,0xD180,0x0000,0x0000,0x0194,
- 0xD180,0x0000,0x0002,0x0194,0xD080,0x0000,0xCC46,0xC104,
- 0xD300,0x0000,0xCC2F,0x00C4,0xD300,0x0E78,0x883D,0x00C4,
- 0xD3C0,0x0000,0x0000,0x03C4,0xD3FC,0xFFFF,0xFFFF,0x3FC4,
- 0xD000,0x0000,0x0000,0x0004,0xD555,0x5555,0x5555,0x5554,
- 0x8000,0x0000,0x0000,0x0000,
- };
-
- struct Image ILBMI1 =
- {
- 0, 0, /* Upper left corner */
- 64, 23, 2, /* Width, Height, Depth */
- ILBMI1Data, /* Image data */
- 0x0003, 0x0000, /* PlanePick, PlaneOnOff */
- NULL /* Next image */
- };
-
- UBYTE *ILBMTools[] =
- {
- "FILETYPE=ILBM",
- NULL
- };
-
- struct DiskObject ILBMobject =
- {
- WB_DISKMAGIC, /* Magic Number */
- WB_DISKVERSION, /* Version */
- { /* Embedded Gadget Structure */
- NULL, /* Next Gadget Pointer */
- 0, 0, 64, 24, /* Left,Top,Width,Height */
- GADGIMAGE | GADGBACKFILL, /* Flags */
- RELVERIFY | GADGIMMEDIATE, /* Activation Flags */
- BOOLGADGET, /* Gadget Type */
- (APTR)&ILBMI1, /* Render Image */
- NULL, /* Select Image */
- NULL, /* Gadget Text */
- NULL, /* Mutual Exclude */
- NULL, /* Special Info */
- 0, /* Gadget ID */
- NULL, /* User Data */
- },
- WBPROJECT, /* Icon Type */
- "Display", /* Default Tool */
- ILBMTools, /* Tool Type Array */
- NO_ICON_POSITION, /* Current X */
- NO_ICON_POSITION, /* Current Y */
- NULL, /* Drawer Structure */
- NULL, /* Tool Window */
- 0 /* Stack Size */
- };
-
-
-
- void main(int argc, char **argv)
- {
- struct Screen *frontScreen;
- LONG error = 0L, seqlock;
- char *filename;
- int l, k;
-
- fromWB = (argc==0) ? TRUE : FALSE;
-
-
- if(!(IntuitionBase = OpenLibrary("intuition.library", 0)))
- bye("Can't open intuition library.\n",RETURN_WARN);
-
- if(!(GfxBase = OpenLibrary("graphics.library",0)))
- bye("Can't open graphics library.\n",RETURN_WARN);
-
- if(!(IFFParseBase = OpenLibrary("iffparse.library",0)))
- bye("Can't open iffparse library.\n",RETURN_WARN);
-
- if(!(IconBase = OpenLibrary("icon.library",0)))
- bye("Can't open icon library.\n",RETURN_WARN);
-
- if(!(ilbm.ParseInfo.iff = AllocIFF()))
- bye(IFFerr(IFFERR_NOMEM),RETURN_WARN);
-
- if(argc>1) /* Passed filename via command line */
- {
- if(argv[1][0]=='?')
- {
- printf("%s\n%s\n",Copyright,usage);
- bye("\n",RETURN_OK);
- }
- else filename = argv[1];
-
- NoDelay = NoIcon = Quiet = Sequence = FALSE;
- for(k=2; k < (argc); k++)
- {
- if(!(stricmp(argv[k],"NODELAY"))) NoDelay = TRUE;
- else if(!(stricmp(argv[k],"NOICON"))) NoIcon = TRUE;
- else if(!(stricmp(argv[k],"QUIET"))) Quiet = TRUE;
- else if(!(stricmp(argv[k],"SEQUENCE"))) Sequence = TRUE;
- }
- if(Sequence)
- {
- for(k=1; k<9999; k++)
- {
- sprintf(nbuf,"%s%04ld",filename,k);
- if(seqlock = Lock(nbuf,ACCESS_READ)) UnLock(seqlock);
- else break;
- }
- filename = nbuf;
- }
- }
- else
- {
- printf("%s\n%s\n",Copyright,usage);
- printf("Enter filename for save: ");
- l = mygets(&nbuf[0]);
-
- if(l==0) /* No filename - Exit */
- {
- bye("\nScreen not saved, filename required\n",RETURN_FAIL);
- }
- else
- {
- filename = &nbuf[0];
- }
- }
-
- if(!NoDelay) Delay(500);
-
- Forbid();
- frontScreen = ((struct IntuitionBase *)IntuitionBase)->FirstScreen;
- Permit();
-
- if(error = screensave(&ilbm, frontScreen,
- NULL, NULL,
- filename))
- {
- printf("%s\n",IFFerr(error));
- }
- else
- {
- if(!Quiet) printf("Screen saved as %s... ",filename);
- if((!NoIcon)&&(filename[0]!='-')&&(filename[1]!='c')) /* not clipboard */
- {
- if(!(PutDiskObject(filename,&ILBMobject)))
- {
- bye("Error saving icon\n",RETURN_WARN);
- }
- if(!Quiet) printf("Icon saved\n");
- }
- else if(!Quiet) printf("\n");
- bye("",RETURN_OK);
- }
- }
-
-
- void bye(UBYTE *s,int e)
- {
- if(s&&(*s)) printf("%s\n",s);
- if ((fromWB)&&(*s)) /* Wait so user can read messages */
- {
- printf("\nPRESS RETURN TO EXIT\n");
- mygets(&nbuf[0]);
- }
- cleanup();
- exit(e);
- }
-
- void cleanup()
- {
- if(ilbm.ParseInfo.iff) FreeIFF(ilbm.ParseInfo.iff);
-
- if(GfxBase) CloseLibrary(GfxBase);
- if(IntuitionBase) CloseLibrary(IntuitionBase);
- if(IconBase) CloseLibrary(IconBase);
- if(IFFParseBase) CloseLibrary(IFFParseBase);
- }
-
-
- int mygets(char *s)
- {
- int l = 0, max = INBUFSZ - 1;
-
- while (((*s = getchar()) !='\n' )&&(l < max)) s++, l++;
- *s = NULL;
- return(l);
- }
-
-