ain@j.cc.purdue.edu (Patrick White) (05/17/88)
Submitted by: joe@ut-sally (Joe Hitchens) Summary: Blanks screen after 90 sec. -- takes approx. 250 bytes. Poster Boy: Patrick White (ain@j.cc.purdue.edu) Archive Name: sources/amiga/volume4/blank2.src.sh.Z tested but uncompiled. NOTES: Ran the binary -- it works, but didn't try compiling it. -- Pat White (co-moderator comp.sources/binaries.amiga) ARPA/UUCP: j.cc.purdue.edu!ain BITNET: PATWHITE@PURCCVM PHONE: (317) 743-8421 U.S. Mail: 320 Brown St. apt. 406, West Lafayette, IN 47906 ======================================== # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # readme # blanker2.c # This archive created: Mon May 16 10:53:03 1988 # By: Patrick White (PUCC Land, USA) echo shar: extracting readme '(2149 characters)' cat << \SHAR_EOF > readme From: joe@vixen.uucp (Joe Hitchens) Blanker2 -- by Joe Hitchens -- v1.27.88 A screen blanking program that turns the screen black after 90 seconds of keyboard and mouse inactivity. Adds a tiny event handler to the input.handler event stream and watches the events go by. If it doesn't see a mouse or keyboard event after 900 timer events (10 per second), it turns the screen black by turning off DMA for rasters and the copper. If run from the CLI, a message will be printed out saying how long the blank time is set to. If run from (my cool) icon, nothing will appear to happen, but 90 seconds later you will be able to tell if it installed itself ok. This program cannot be removed once installed, so if you have a problem with it, all I can say is "Stop using it". I realize that it would be a lot nicer to have a true task running in the background and message ports between the handler and the task so the handler could be programmed and removed from the outside, but, I opted to not do this because as it is, Blanker2 will take up less than 256 bytes of ram, and doesn't require any more when it attempts to blank the screen (via opening black screens, etc.). It's tiny and it does the job. I think that may be worth alot to most users. This program is PUBLIC DOMAIN. Do me a favor though, and leave my name on it so I can get a little recognition. Usage: blanker2 [n] n = number of seconds of inactivity after which blanking occurs. if n is not given, a default of 90 is used. NOTE: blanker2 need not be 'run'. It will install an event handler and leave it behind when exiting. Also, the CLI window it may have been run from can be closed after installation. Exit codes 0 Normal exit, everything went fine. 1 CreatePort() failed. 2 CreateStdIO() failed. 3 OpenDevice() on "input.device" failed. 4 Memory Allocation for Interrupt structure failed. 5 Memory Allocation for Blanker structure failed. 6 Memory Allocation for event handler code space failed. Please report any bugs you may find to me, so that I can try to fix them. j.h. joe@sally.utexas.edu SHAR_EOF if test 2149 -ne "`wc -c readme`" then echo shar: error transmitting readme '(should have been 2149 characters)' fi echo shar: extracting blanker2.c '(6051 characters)' cat << \SHAR_EOF > blanker2.c From joe@vixen.UUCP Fri Feb 12 23:14:23 1988 Posted-Date: Fri, 12 Feb 88 21:53:03 CST Received-Date: Fri, 12 Feb 88 23:14:16 CST Received: by sally.utexas.edu (5.54/5.51) id AA24065; Fri, 12 Feb 88 23:14:16 CST Received: by vixen.uucp (3.2/SMI-3.2) id AA00152; Fri, 12 Feb 88 21:53:03 CST Date: Fri, 12 Feb 88 21:53:03 CST From: joe@vixen.uucp (Joe Hitchens) Message-Id: <8802130353.AA00152@vixen.uucp> To: joe@sally.UUCP Subject: blanker2.c Status: R /* Blanker2 -- by Joe Hitchens v1.27.88 A screen blanking program that turns the screen black after 90 seconds of keyboard and mouse inactivity. This program is PUBLIC DOMAIN. Do me a favor though, and leave my name on it. Usage: blanker2 [n] n = number of seconds of inactivity after which blanking occurs. if n is not given, a default of 90 is used. NOTE: blanker2 need not be 'run'. It will install an event handler and leave it behind when exiting. Also, the CLI window it may have been run from can be closed after installation. Exit codes 0 Normal exit, everything went fine. 1 CreatePort() failed. 2 CreateStdIO() failed. 3 OpenDevice() on "input.device" failed. 4 Memory Allocation for Interrupt structure failed. 5 Memory Allocation for Blanker structure failed. 6 Memory Allocation for event handler code space failed. Please report any bugs you may find to me, so that I can try to fix them. j.h. joe@sally.utexas.edu */ #include <stdio.h> #include <exec/types.h> #include <exec/ports.h> #include <exec/memory.h> #include <exec/io.h> #include <exec/interrupts.h> #include <devices/input.h> #include <exec/devices.h> #include <devices/inputevent.h> #include <graphics/gfxmacros.h> #include <hardware/custom.h> extern struct MsgPort *CreatePort(); extern struct IOStdReq *CreateStdIO(); extern char *AllocMem(); extern int HandlerInterface(); #define DEFAULT_BLANKPOINT 900 /* This is 1/10's of seconds */ struct blanker { long Class; long Ticks; long BlankPoint; long Dark; char Name[8]; }; /* ---------------------------------------- Actual entry point for event handler ---------------------------------------- */ #asm public _HandlerInterface _HandlerInterface: movem.l a0/a1,-(a7) ; bsr _myhandler ;go to the C language routine we provided addq.l #8,a7 ; rts #endasm struct InputEvent * myhandler(ev, mydata) register struct InputEvent *ev; register struct blanker *mydata; { mydata->Class = ev->ie_Class; if (mydata->Class == IECLASS_TIMER) { mydata->Ticks++; if (mydata->Ticks >= mydata->BlankPoint) { custom.dmacon = BITCLR | DMAF_RASTER | DMAF_COPPER; custom.color[0] = (UWORD) 0; /* turn out the lights ! */ mydata->Ticks = 0; /* reset counter */ mydata->Dark = 1; /* yes the lights are out */ } return(ev); } if (mydata->Class == IECLASS_RAWMOUSE) { mydata->Ticks = 0; if (mydata->Dark) { custom.dmacon = BITSET | DMAF_RASTER | DMAF_COPPER; /* lightson */ mydata->Dark = 0; } return(ev); } if (mydata->Class == IECLASS_RAWKEY) { mydata->Ticks = 0; if (mydata->Dark) { custom.dmacon = BITSET | DMAF_RASTER | DMAF_COPPER; /* lightson */ mydata->Dark = 0; } return(ev); } return(ev); } /* ---------------------------------------- End of event handler code ---------------------------------------- */ main(argc, argv) int argc; char **argv; { struct MsgPort *inputDevPort; /* for opening input.device */ struct IOStdReq *inputRequestBlock; /* for opening input.device */ struct Interrupt *handlerStuff; /* for adding event handler */ long n; /* for calc'ing handler size */ long s; /* ticks till blanking */ struct blanker *p; /* ptr to handler's variables */ char *code; /* prt to handler's entry point */ if (argc > 1) { s = 10 * atoi(argv[1]); if (s < 10) { s = 10; } } else { s = DEFAULT_BLANKPOINT; } inputDevPort = CreatePort("Blanker-Loader", 0); if (inputDevPort == NULL) exit (1); inputRequestBlock = CreateStdIO(inputDevPort); if (inputRequestBlock == 0) { DeletePort(inputDevPort); exit (2); } if (OpenDevice("input.device", 0, inputRequestBlock, 0)) { DeleteStdIO(inputRequestBlock); DeletePort(inputDevPort); exit (3); } handlerStuff = (struct Interrupt *) AllocMem (sizeof (struct Interrupt), MEMF_CLEAR); if (handlerStuff == (struct Interrupt *) 0) { DeleteStdIO(inputRequestBlock); DeletePort(inputDevPort); exit (4); } /* alloc space for the private variable space used by event handler */ p = (struct blanker *)AllocMem (sizeof (struct blanker), MEMF_CLEAR); if (p == 0) { DeleteStdIO(inputRequestBlock); DeletePort(inputDevPort); FreeMem (handlerStuff, sizeof (struct Interrupt)); exit (5); } p->Class = 0; p->Ticks = 0; p->BlankPoint = s; p->Dark = 0; strncpy (p->Name, "Blanker", 7); n = (char *)main - (char *)HandlerInterface; /* size of handler code */ code = AllocMem (n, MEMF_CLEAR); if (code == 0) { DeleteStdIO(inputRequestBlock); DeletePort(inputDevPort); FreeMem (handlerStuff, sizeof (struct Interrupt)); FreeMem (p, sizeof (struct blanker)); exit (6); } CopyMem (HandlerInterface, code, n); /* move handler code to safe spot */ handlerStuff->is_Data = (APTR) p; /* ptr to our variable space */ handlerStuff->is_Code = (VOID (*)())code; /* ptr to event handler code */ handlerStuff->is_Node.ln_Pri = 51; /* priority just above Intuition */ handlerStuff->is_Node.ln_Name = p->Name; inputRequestBlock->io_Command = IND_ADDHANDLER; inputRequestBlock->io_Data = (APTR) handlerStuff; DoIO (inputRequestBlock); /* install our event handler */ CloseDevice (inputRequestBlock); /* close device and leave event */ DeleteStdIO (inputRequestBlock); /* handler in memory */ DeletePort (inputDevPort); if (argc > 0) { printf(" -- Blanker2 -- by Joe Hitchens -- V1.27.88 --\n"); printf("Screen Blanks after %d sec's of mouse/key inactivity.\n", s / 10); } } SHAR_EOF if test 6051 -ne "`wc -c blanker2.c`" then echo shar: error transmitting blanker2.c '(should have been 6051 characters)' fi # End of shell archive exit 0