info-mac@uw-beaver (12/22/84)
From: Walter.Smith@CMU-CS-K [EDITOR: Please remove the data from the bottom of this message and archive it (as SLEEP.HCX and SLEEP.SH, I suppose). Thanks.] I have written a desk accessory reminiscent of the Xerox memory test programs; it clears the screen completely and bounces an apple character randomly about the screen. It doesn't actually test memory or anything, but it keeps your display from being burned in. It lasts until you click the mouse, then restores the screen. So far it works with everything except MacTerminal. I don't know why MacTerm doesnt like it. If anyone knows, please tell me. Included in this message are two files: a Desk Accessory Mover 1.4 file containing the accessory, and a shell archive containing the source (it requires the traditional desk and device.h). - Walter Smith (wrs@cmu-cs-k) ------------sleep.hcx---------------------- (This file must be converted with BinHex.Hex) #DESKDAMV$0000 ***COMPRESSED ***DATA FORK ( - )3 53;&5E<&5S:R!!8V-E<W-O<FEE<P!.5O_T ("\,2&[__*ER0J>I)"A?( QF"$AMOHBH46 .#&P 0!L (&\&2&V^B*A1*%].7DYU3E8 $)G3KH$A! ?0JX #$Y> ("Z?3G5.5O[>3KK_LJFT0F<_//__2&W^<*EP'5___3 M (/YP9P !W%- 9QQ50&< 9)50&< 8Q30&< <!50&< ( &T8 !SD)G+RW^>DAN_N*I+#U?__XP+O_^4T!G%%- (&<:4T!G3E- 9R!50&<N8 !3D)G3KKYS& 41(;?YP ("\N_N*ILV 38O+O[B+RW^>DAM_I"I)6 20 0! R ( "0 #P 0 #( X #0 -@ R 8 4VQE97 ( & L K@ ( ( $CG__]#^O^:(@E#^O_()%G5P1X2 H< #_ ($(2TY(,AP /]G$$J'9@8D6=7!8.+CG]7'8-P(.0 ( 7MG##\\ &IR' !2H!F_"/- P 7#/Y @ !# 4 ( (3-___R \! !$& >(#P$ %J8!8@/ 0 :!@#B \ ( 0 ;1@!B \'0 !R$CG/_PO"2\(($!.D%"/3-\__ R ($ !F!$* 3G4O.0 "/Q.=0# !.5O_\2.X /_\ ($IY!@ (=&8N2&[__$ZY! $(%B/+SP# B$3KD& 0 (%B/+R[__$ZY!0 $$%B/,_P 14 "'0@;@ ,2J@ 'F8& ("\(87Y8CR \0 $Y>3G5.5@ 2.X +SD# CT ($ZY" %(%B/(&X #$*H !Y">0, "').N3< !3 @/$ ( 3EY.=4Y6 !([@ @/$ !.7DYU3E8 $CN ( @/$ !.7DYU3E8 $CN " \0 $Y> ($YU3E;__$CN #__"\\ !@2\\ " B\\_____B\\ (/____XO/ , "'A.N14 !*#?_ !0O/ O/ ( !+SS_____+SP "+SP !+SP# AH+SP& AX ("\\ $ZY!@ %$-_\ ("/ !P (]"!N @A0 > ("\Y P (]$ZY! $$%B/+SP# AX3KD' 3 6(\O/ ( *3KD' 106(\O/ I.N0< !(!8CR\\ $ZY ( 8 !'!8CR!N @B>08 "/0S: 8 &PO/ , "(1.N00 ( 006(\O/ , "'A.N00 !+!8CTZY P $,$ZY! $X& : ($ZY!P $X+"N__QM$F%:3KD( 3@!H \+4#__$ZY ( L !/!*@&?8+SP +SP "3KD$ 4 4(].N0, ( 1 0GD# AR+SD# CT3KD( 4@6(\@;@ (0J@ 'DZY ( H !3!.7DYU3E8 $CN "\Y P (]$ZY! $$%B/ ($IY! (<F<D+SD# B +SD# CP3KD' 1@4(\O/ ( 43KD& 206(]@"#/\ $& AR+SP '"3KD' 30 ( * !__R\ 3KD' ?(4(\&@ !0CP 8 "/ O/ ( % 3KD' 30 H '__+P!.N0< !\A0CP: *"/ ( 0 "( O "\Y P (\$ZY!P $8%"/+SP 43KD& 20 (%B/3EY.=4ZY" %0 !"H;TYQ !.N0@ !4 0 (*AS3G$ $ZY" %0 !"H=$YQ !.N0@ !4 (*A23G$ $ZY" %0 "H4TYQ !.N0@ !4 ( (*B<3G$ $ZY" %0 $BHDTYQ !.N0@ !4 ( (*B'3G$ $ZY" %0 BHB4YQ !.N0@ !4 ( (*B#3G$ $ZY" %0 DE"HITYQ !.N0@ !4 0 (*BB3G$ $ZY" %0 !"HI$YQ !.N0@ !4 ! (*AA3G$ $ZY" %0 *I=4YQ !.N0@ !4 % (*ET3G$ $ZY! %0 $@$ :, !.N0@ !4 "J-:2 (*D33G$ $ZY" %0 !"I%$YQ !.N1< !4 (*DW3G$ $Y6_P!([B $__A+[O\$0>X #")N 0@&4(N (/\ ,_Q.<0, !?PCT04 !?YM"#/\3KE$ 7\(@#FB )! ( '/4'_ EF/,@#FB )! ?203([$ 9.^Q " &( $ : ( X !X ,@ 6 !8B&#\!8-A2+O\ +QA@T")8$AGAB1(9 (.&)$AGAB1(9+P%@O"(8'P%@MB(8"($ &&<$+P%@JB)! ($*"(@U2C1K99PI2@@Q" /)M]%&-(D$2@B\!8(PJ>1P ( !<3G$ 2B[_ &< #I+[@ ,(FX !"09YHI9C5B- (#("YHH"00 '9QX, 0 &;>YG#"\53KES >*6(]@X")5 (# 12, B@,B[_ M)!,CL0!D[[$ ( '@ 0 !8 '@ > ( : !X 'C ?2,!@"" ?8 1"@! ?3.X@!/_X3EY8CTYU ( (E\@'S!?+PF@+S] 1.=2)?(!\O": R3G4B7S/? ( 41.T2)?(%\P'R\)H#!*0&< I"+P $8 "!]\ ( ! 1.=2)?(%\P'R\)H#%*0&< I"+P $8 "!]\ ( ! 1.=2!?,!\O"$Y6_^!![O_@,7S__ 8,7P @ : (#% !RB!$Y>3G4@7R)?0AD2N0 @@O"$YU0?D, C\ ("%\ !@ D,7S__ 80J@ #$/Y>0 )/"%) " @'R(? ("\ ,OP 2+!H -.=4Y6_^!![O_@,7S__ 8H@9.7DYU (#\O 2IR"!?WOP D[0(&\ !#)\ 0&$H 9PH2$!# (! !4HE@\B )(&\ !!" 3G4@;P $(DA"@! 84X!M"A+8 (&8"4XE1R/_X0A%.=2!O 1"@! 0T<!2B$(0("\ !%* ($YU("\ ! C !A.=0 3E8 $CG, @+@ () B+@ , ( R! $ &P !1"0$A @,$P H#!0D!(0& #PF >* (.*! H!_____ H%_____#($ 0 ; #_Z(#! H /__ ("\ +P-.N?\ "#A0C[2 ; *0@Y""1(!,WP ,3EY.=4Y6 ( 2.<P "0N @F+@ ,0H P L##,@)(0L3#2$/"P]*" ($A!0D'0@4S? Q.7DYU0V]N92!0:6< ( ( ( ( ( ( ( ,&@ ": 1024-4 'Q( ( !Z( 0 VF $!Z/ $ _____P 07__P'K ( !8 0'K ( $% >L %@'K "&A@ ARX /*& ( !9<P :;8IM@ :;8 ! ?$@ 0'Q( 08 ! ( $ $ ! ! 08 %@ !Z( >B\ !X !6M 5K0 ( " !8!ZP$& >P 5K4 $ ,7@! "[8 ('@> @! '4X RL ._A_@! (K8@% ! (!U, $ 2+$13 P0 ! !0 &" &[@ ,? (!AZ ,/_^<?0 0)R 0 08 )H 0(!,P$= ( ''$0$! H M "0)@ % $" 3 !&P'( 0(!,P$; ( '' 0(!,P$; << P (/4 1_'_@ !>0 , "#U $@ ("?^ &% X"( #^]P &0A$ %[ !,'( ,!@ '_^#\ ( &1Q$ %[ !,'( P 8 %__#\ 9/EP.!P3, $P<@ (!@ , % !#\ 9?WX?#YS, $P<@,! 8 4 $/P !D<= ((;#9S, %1,@(! ( 7_\ < 1Q^'P_\# !43($ 0 ( 0 !0 0 "( ! %P.!P0, %1,@0! $ 4 $_@ !! ($ 0 @ ! P 5$R" $ ( !1\<" '\ !'$ ( 0, %1,@ (( 0 @ %,? ( P8 $<0 X A0 5$R" $ ( !3&#" 8 ((P 7] #@ !Y !4.(( 0 @ % X<( !"$ $^0_@ !>0 5 ( X@@ @" 4'GP@ ((( 1Q#^ &% !43(( $ @ %#X<( ( @@@!"$ 0, %1,@@ (" 4>AP@ ((( (" $# ( 5$R! 00 !3R'" @0@ ?P 0, % L@0 $ 4X ((<( " B_0 #( $# !4+(" " %/X<( ! $_@ $! $! (#, %0L@, 8 4 AP@ & S^ 0"(@$S !4+(!@ , # ( "?R ,'/X !$$$$3, %0L@# !@ '_@ @ &^;^ 00 ( !!>P 5 R # 8#^ 2 " P _X ! 1Q 7L $ (@ /[] ( !__CZ .( (4 F 4 1L!, $= <@!&P$S 1T!QP$; ( $S 1T!QP "@ @\P $ 00 >0 + "#T 4!4?Q4 0#_ (/__ )3 53;&5E<&5S:R!!8V-E<W-O<FEE<P!.5O_T ("\,2&[__*ER0J>I)"A?( QF"$AMOHBH46 .#&P 0!L (&\&2&V^B*A1*%].7DYU3E8 $)G3KH$A! ?0JX #$Y> ("Z?3G5.5O[>3KK_LJFT0F<_//__2&W^<*EP'5___3 M (/YP9P !W%- 9QQ50&< 9)50&< 8Q30&< <!50&< ( &T8 !SD)G+RW^>DAN_N*I+#U?__XP+O_^4T!G%%- (&<:4T!G3E- 9R!50&<N8 !3D)G3KKYS& 41(;?YP ("\N_N*ILV 38O+O[B+RW^>DAM_I"I)6 20 0! R !@ ***END OF DATA ***CRC:3150 --------------cut-here--------------------- ------------sleep.sh----------------------- # # type sh sleep.sh to unpack this archive. # echo extracting Makefile... cat >Makefile <<'!E!O!F!' .SUFFIXES: .rsrc .b .ln .s .c BIN=/usr/apple/bin/ INCLUDE=/usr/apple/include CFILES = desk.c sleep.c HFILES = device.h SFILES = crtsleep.s .c.b: $(BIN)cc68 -I$(INCLUDE) -c $< .c.s: $(BIN)cc68 -I$(INCLUDE) -S $< .s.b: $(BIN)cc68 -c $< .c.ln: $(BIN)lint -I$(INCLUDE) -lmac $< > $*.ln sleep: sleep.b crtsleep.b $(BIN)ld68 -X -r -d -e drvr -T 0 crtsleep.b sleep.b -lmac -lc68 -x -o sleep desk: desk.b $(BIN)cc68 -m desk.b -o desk desk.rsrc: sleep desk desk.rc $(BIN)rmaker desk.rc all: desk.rsrc put: desk.rsrc $(BIN)macput -r desk lint: sleep.ln desk.ln desk.shar: $(CFILES) $(SFILES) $(HFILES) csh shar desk.shar $(CFILES) $(SFILES) $(HFILES) desk.rc Makefile clean: rm -f *.b *.rsrc sleep desk !E!O!F! # # type sh /usrk0/wrs/mac/cone/sleep to unpack this archive. # echo extracting crtsleep.s... cat >crtsleep.s <<'!E!O!F!' | | crtcal.s - self relocating C runtime startoff for Mac desk accessory | | Copyright (C) 1984, Stanford Univ. SUMEX project | May be used but not sold without permission. | | history | 07/20/84 Croft Created. | 10/24/84 Smith Customize for test | .data .text .globl _savea5 .globl drvr .globl drvrOpen,drvrPrime,drvrCtl,drvrStatus,drvrClose | driver header drvr: .word 0x2400 | enable control, need time .word 60 | every second .word 0x0001 | mouseDown events only .word 0 | no menu doffset: .word reloc-drvr | replaced by "dopen-drvr" after initialization .word dprime-drvr .word dctl-drvr .word dstatus-drvr .word dclose-drvr .byte 6 .ascii "\0Sleep" .blkb 25 | 32 bytes total for name reloc: jra .L21 .long 0,0,0,0,0,0,0,0,0,0 | longruns from rmaker _savea5:.long 0 | | a1 = next longrun address | a2 = current reloc address | d1 = relocation factor | .L21: moveml #0xffff,sp@- lea pc@([drvr-.-2]),a1 | reloc factor movl a1,d1 lea pc@([reloc+2-.-2]),a1 movl a1@+,a2 | pickup 1st relocation addl d1,a2 .L16: | for(;;) { | i = *a2; | *a2 = 0; | *(u_long *)a2 += (u_long)d1; | if (i == 0377) | goto start; | if (i == 0) { | a2 = *a1++; | a2 += d1; | continue; | } | a2 += (i << 1); | } movb a2@,d7 andl #255,d7 clrb a2@ addl d1,a2@ cmpl #255,d7 beqs .L18 tstl d7 bnes .L19 movl a1@+,a2 addl d1,a2 bras .L16 .L19: roll #1,d7 addl d7,a2 bras .L16 | | if shift button is pressed on entry, beep and hang around for an NMI. | .L18: btst #0,0x17b beqs .L31 | if not pressed movw #1,sp@- | sysbeep, duration 1 .word /A9C8 moveq #1,d0 .L22: tstl d0 bnes .L22 | hang, waiting for NMI .L31: movl a5,_savea5 movw doff2,doffset | above code is once-only moveml sp@+,#0xffff | | driver entry points | dopen: movl #drvrOpen,d0 bras call dclose: movl #drvrClose,d0 bras call dctl: movl #drvrCtl,d0 bras call dstatus: movl #drvrStatus,d0 bras call dprime: movl #drvrPrime,d0 call: moveml #0x3ffc,sp@- movl a1,sp@- movl a0,sp@- movl d0,a0 jsr a0@ addql #8,sp moveml sp@+,#0x3ffc cmpl #0x40000000,d0 bnes done clrl d0 rts jiodone = 0x8fc done: movl jiodone,sp@- rts doff2: .word dopen-drvr !E!O!F! # # type sh /usrk0/wrs/mac/cone/sleep to unpack this archive. # echo extracting desk.rc... cat >desk.rc <<'!E!O!F!' desk.rsrc Type ALRT ,256(32) 60 81 180 431 256 5555 Type DITL ,256(32) 3 BtnItem Enabled 90 10 110 80 OK BtnItem Enabled 90 270 110 340 Cancel StatText Disabled 10 60 70 350 Replace system resource ^0 type=^1 id=^2? Type DRVR sleep|Sleep,24(48) Type CODE desk,0 !E!O!F! # # type sh /usrk0/wrs/mac/cone/sleep to unpack this archive. # echo extracting sleep.c... cat >sleep.c <<'!E!O!F!' /* * Sleep desk accessory * * Copyright (c) 1984 Walter Smith * All rights reserved * */ #include "quickdraw.h" #include "osintf.h" #include "toolintf.h" #include "packintf.h" #include "device.h" #define NIL 0 #define FALSE 0 #define TRUE 1 /* Globals */ WindowPtr window; /* our window */ Rect windowRect; /* its size */ GrafPort bigport; char title[] = {"Cone Pig"}; /* Alto DMT message */ short pigvisible = 0; /* flag to avoid leaving apples around */ short bpexists = 0; /* bigport created flag */ int coneh, conev; /* position of last apple */ /* Driver routines */ drvrOpen(pb, dce) ControlParam *pb; struct dce *dce; { GrafPtr temp; /* Open a GrafPort for the whole screen */ if (!bpexists) { GetPort(&temp); OpenPort(&bigport); SetPort(temp); bpexists = 1; } if (!dce->dCtlWindow) createWindow(dce); return(IOrts); } /* Unfortunately, this routine never gets called... */ drvrClose(pb, dce) ControlParam *pb; struct dce *dce; { DisposeWindow(window); dce->dCtlWindow = NIL; pigvisible = 0; DrawMenuBar(); return(IOrts); } drvrCtl(pb, dce) ControlParam *pb; struct dce *dce; { return(IOrts); } drvrStatus(pb, dce) ControlParam *pb; struct dce *dce; { return(IOrts); } drvrPrime(pb, dce) ControlParam *pb; struct dce *dce; { return(IOrts); } /* Real routines */ /* Create our window and wait for a click. */ createWindow(dce) struct dce *dce; { int nextTick; SetRect(&windowRect, -2, -2, 514, 385); /* a very large window */ window = NewWindow((WindowPeek) NIL, &windowRect, title, TRUE, 2, (WindowPtr) -1, TRUE, 0); dce->dCtlWindow = window; SetPort(window); InvertRect(&windowRect); /* Black out all but the menu bar */ PenMode(patXor); TextMode(patXor); TextFont(0); ((WindowPeek) window)->windowKind = dce->dCtlRefNum; SetPort(&bigport); PaintRect(&windowRect); /* Kill off the menu bar, too */ HideCursor(); nextTick = TickCount(); /* Move the apple every second, waiting for a click */ for (;!Button();) { if (TickCount() >= nextTick) { doSomething(); nextTick = TickCount() + 60; } } FlushEvents(mDownMask, 0); /* Kill the mouseDown event from the click */ ShowCursor(); pigvisible = 0; DisposeWindow(window); /* Destroy the window */ dce->dCtlWindow = NIL; DrawMenuBar(); /* and put the menu bar back */ } /* Make random apples wander around the screen */ doSomething() { SetPort(window); if (pigvisible) { MoveTo(coneh, conev); DrawChar('\024'); } else pigvisible = 1; coneh = (((unsigned) Random() & 0x7fff) % 450) + 20; conev = (((unsigned) Random() & 0x7fff) % 320) + 40; MoveTo(coneh, conev); DrawChar('\024'); } !E!O!F! --------------------cut-here-------------------------
info-mac@uw-beaver (12/22/84)
From: Walter.Smith@CMU-CS-K I have written a desk accessory reminiscent of the Xerox memory test programs; it clears the screen completely and bounces an apple character randomly about the screen. It doesn't actually test memory or anything, but it keeps your display from being burned in. It lasts until you click the mouse, then restores the screen. So far it works with everything except MacTerminal. I don't know why MacTerm doesnt like it. If anyone knows, please tell me. Included in this message are two files: a Desk Accessory Mover 1.4 file containing the accessory, and a shell archive containing the source (it requires the traditional desk and device.h). - Walter Smith (wrs@cmu-cs-k) [stored on <info-mac>sleep.shar and sleep.hcx]