[net.sources.mac] Little man pushing screen DA + SOURCE

dirkjan@zuring.UUCP (11/26/85)

Hi Folks,
What about a little man pushing your screen away?  How impertinent of him!! 

This is, for now, the last DA in my little series (Crabs, Flow and Push)
of screen molesting DA's. Hope you enjoy them.
(Source included, so you can happily hack the DA the way you want)

Fons Rademakers 
Nikhef-H (Nat. Inst. for High Energy Physics)
Amsterdam
the Netherlands
                 
(Come on folks, post also sources to n.SOURCES.m)

*************** mailed by Dirk Jan for Fons Rademakers *************
Please mail any reactions or questions on this posting to:

{ ...|decvax|seismo|philabs}mcvax!dirkjan




# This is a shell archive.  Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file".  (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# push.hqx mkpush push.c

echo x - push.hqx
cat > "push.hqx" << '//E*O*F push.hqx//'
(This file must be converted with BinHex 4.0)

:"("eFfJ!4%C*6%406eB!N!J5+Kl`!*!%!3#3!a(b!!!3mJ#3!cJ!N2)3lQ3!N!3
"!*!$,!l`$[S1m!l#"&"eFfJ!5IS3e#P)rrBT5Irk6R8JE2rf6R919[rq51F-%'(
L+#crqL4%5US!(QB!"F!N4#m+,c`!!!5i6VS3F&K2*&mP3!!8,`"1ZK"%@%mNE2r
k)QS!&#S4*%3[#N+R3UG)E2rZ5(VrQ%*R2c`!!Lmmrj!%3QG#TkN6)"mQ3#4I*8!
!(L4%0fS!'!"X*%8Q"GDm!*!$0L5$*%8[%UK[3QlrrJaZ!!2rrQaq0LlrrXIm!!i
N3pA&3QS!#MBZrrl(r!!1*%29a8*U!!`f,[rqar`!$L4$eF8eI!!k!!if,[rqar`
!$L4$eF8eI!!`!"!f,[rqar`!$L4$eF8eI!!'!!Jf,[rqar`!$L4$eF8f,[rqar`
"A0D&eV`!N!1L*8-!"&*ZrrjJ!2pm*%8[+J!%5(S%c+KQ*%8LDJ!%dr`!N!-5,`P
)HJ6HU'BN45*U!!66r!#3!b3[#8Kk"2#SCL4&)QS!"02m!*!$0Lm*5(S&!UKQ*%8
LDJ!%dr`!N!0),`P)HJ88U'BN45*U!!66r!#3!eS[#8Kk"5DSCL4&)QS!"02m!*!
$E#m*5(S&1+KQ*%8LDJ!%dr`!N!0q,`P)HJ9+U'BN45*U!!66r!#3!j!!,`P)HJ9
FU'BN45*U!!66r!#3!k)[#8Kk"@kSCL4&)QS!"02m!*!$Y#m*5(S&J+KQ*%8LDJ!
%dr`!N!2',`P)HJ@5U'BN45*U!!66r!#3!pJ[#8Kk"D5SCL4&)QS!"02m!*!$kLm
*5(S&YUKQ*%8LDJ!%dr`!N!2m,`P)HJA)U'BN45*U!!66r!!!!3i[#8Kk"GUSCL4
&)QS!"02m!!!")#m*5(S&l+KQ*%8LDJ!%dr`!!!%b,`P)HJAqU'BN45*U!!66r!!
!!83[#8Kk"K#SCL4&)QS!"02m!!!"9Lm*5(S')UKQ*%8[+J!55(S'*+KQ*%8LDJ!
5dr`!N!-5,`P)HJBfU'BN45*U!",6r!#3!b3[#8Kk"NLSCL4&)QS!%Y2m!*!$0Lm
*5(S'@UKQ*%8LDJ!5dr`!N!0),`P)HJCXU'BN45*U!",6r!#3!eS[#8Kk"RkSCL4
&)QS!%Y2m!*!$E#m*5(S'N!#SCL4&)QS!%Y2m!*!$ILm*5(S'SUKQ*%8LDJ!5dr`
!N!13!#m*5(S'Y+KQ*%8LDJ!5dr`!N!1L,`P)HJE'U'BN45*U!",6r!#3!l3[#8K
k"YLSCL4&)QS!%Y2m!*!$aLm*5(S'kUKQ*%8LDJ!5dr`!N!2B,`P)HJEmU'BN45*
U!",6r!#3!qS[#8Kk"`kSCL4&)QS!%Y2m!*!$r#m*5(S()+KQ*%8LDJ!5dr`!!!%
1,`P)HJFbU'BN45*U!",6r!!!!5![#8Kk"d5SCL4&)QS!%Y2m!!!"-Lm*5(S(9UK
Q*%8LDJ!5dr`!!!&%,`P)HJGSU'BN45*U!",6r!!!!9B[#8Kk"hUSCL4&,bS!)%K
k"hbSCL4&)QS!)02m!*!$%Lm*5(S(MUKQ*%8LDJ!Jdr`!N!-N,`P)HJHJU'BN45*
U!#$6r!#3!cB[#8Kk"l+SCL4&)QS!)02m!*!$5#m*5(S(a+KQ*%8LDJ!Jdr`!N!0
D,`P)HJI@U'BN45*U!#$6r!#3!f`[#8Kk"qLSCL4&)QS!)02m!*!$ILm*5(S(qUK
Q*%8LDJ!Jdr`!N!13!#m*5(S)$+KQ*%8LDJ!Jdr`!N!1L,`P)HJJHU'BN45*U!#$
6r!#3!l3[#8Kk#$#SCL4&)QS!)02m!*!$aLm*5(S)3UKQ*%8LDJ!Jdr`!N!2B,`P
)HJK8U'BN45*U!#$6r!#3!qS[#8Kk#'DSCL4&)QS!)02m!*!$r#m*5(S)H+KQ*%8
LDJ!Jdr`!!!%1,`P)HJL+U'BN45*U!#$6r!!!!5![#8Kk#*bSCL4&)QS!)02m!!!
"-Lm*5(S)VUKQ*%8LDJ!Jdr`!!!&%,`P)HJM!U'BN45*U!#$6r!!!!9B[#8Kk#0+
SCL4&3QS%YL4&eI`!N!-Z,`T)HJM+U'BN4GAm!*!$,Lm+U(`N4#mU!"41ZJUZ@%p
1Z[SLF!"-h`J`6Pj1G53`N!Sa-*!,-6J`N!Sa3`!N-*!+-M#3#c3`N!Xi-!!N-*!
*-6#3#c)`N!Xd-$!!*$#3#6J`N!Sa-*!,-M#3!`!N-$!c4M#3"$3`N!8h4MJ`N!-
i-*!&0d-i-$!a-*!%!#3`-$Fj-$!b-M#3"MF`1$!h0$#3"M)a-$"&1$#3"!!N-$!
a-$Jc-M3`N!Ba4M"$4%8`N!Bb-6Fc-M3`N!3!*$!`0$Fi0%-i-*!'0$&$3M%`N!F
d-$0$-M#3"3!N-$!d-*!$3c#3"c3c1$-`N!Jd-$G$-*!'!#3`-$3`1$#3#63`1$#
3#63`1$#3"`!N-$!d-$J`N!Nb-$J`N!Nc4MJ`N!F!*$!`-M!i-*!*-M!i-*!*-6!
i-*!(!#3`-$%a-*!+-6%`N!Sa-6#3#!!N-$!a-6#3#M%a-*!+-6%`N!J!*$!`-6%
`N!Sa-M#3#M%b-*!)!#3`-$%b-*!+-6)`N!Sa-M#3#!!N-$!a-M#3#M0'-*!+-dB
`N!J!*$!`-dB`N!Sa-M#3#M%b-*!)!#3`-$%b-*!+-60$-*!*-63b-*!(!!``-$&
#46#3"`!N-*!+-6#3#c%i-*!+-8-!*$#3#M)`N!Xd-*!,1$!!*$#3#6%`N!Xb-*!
,0$!`!#3`N!Ni-*!+-6#3#c)`N!-!*$!`-dB`N!3d-*!&0dBi-*!$1$#3"6G$1$!
`-6#3"!!N-$!h16!`-M)`N!Bh-$J`0c3`N!Bb-6!`46J`N!3!*$!`-6!i-c)d-*!
'-8B`3d4&-*!'-M%h-c)d-*!%!#3`-$3h1$4$1$#3"M3a3d)a-*!(0$!c3c)`N!8
!*$!`0$#3!d-`N!Fd-cJc-*!)0$!h3c#3"J!N-$!d-$J`N!Nd-$J`N!Nd-$J`N!F
!*$!`0$!i-*!*-M!i-*!*-dBi-*!(!#3`-$)`1$#3#6)`1$#3#6%`1$#3"`!N-$!
a-$J`N!Na-$J`N!Na-M3`N!F!*$!`-6)d-*!*-6)b-*!*-6-b-*!(!#3`-$)c-6#
3#6)f16#3#63d1$J`N!B!*$!`0$Jd1$#3#$Ji0%-`N!Jj-$)d-*!'!#3`-6%`-M3
`N!Fc4M!h46#3"c0'-$G&-*!'!#3`-dB`0d8`N!Fa-M!b0$#3"c%b-$)d-*!'!#3
`-6)`-M3`N!Fa-d-b0cJ`N!Ba0$)b1$3`N!8!$$!a3N8c0d-`N!8!*$#3#M%`N!X
a1$#3#M&$!#3`N!Sb-*!,0$#3#cJ`!#3`N!Na-*!,-M#3#c3`-!!N-*!*1$#3#M%
`N!Xb-*!$!#3`-$0'-*!%0$#3"6G'1$#3!cJ`N!8h3cJ`-$%`N!3!*$!`0cN`-$)
b-*!'0c!i-$Fd-*!'-M%`-%8i-*!%!#3`-$%`1$-b0$#3"M&'-%0%46#3"M)a0c-
b0$#3"!!N-$!d0cJd3cJ`N!Bd-80#-6#3"c3`-d-b-*!&!#3`-$3`N!0$-*!(0$-
i-c#3#$3`0d-`N!B!*$!`0$!i-*!*0$!i-*!*0$!i-*!(!#3`-$3`1$#3#6)`1$#
3#60'1$#3"`!N-$!b-$J`N!Nb-$J`N!Na-$J`N!F!*$!`-6!i-*!*-6!i-*!*-6)
d-*!(!#3`-$%b0$#3#6%b-M#3#6%c-M#3"`!N-$!b-c%`N!Nd0$N`N!NiN!3`N!B
!*$!a-6!d1$#3"cBb-$4$-*!(4M3`-M3`N!B!*$"'1$!b0$#3"M%h1$!h46#3"M)
c-$!h46#3"J!N0$3`-$G&-*!'1$J`-$)d-*!'4$#3!c)d-*!'!#3d1$!`-M3`N!B
b0$!`-MFi-*!&-6)`-$)i0$#3"3!--%8`-$-h3c#3"3!34T!3!%j@!!![#dkkm8i
QE2rk,bX!(UN83UX!(LmV!"41ZJ(@@%p1Z[&!F!!QAdjH6R919J!!F!"1ANje6PE
rjNMR#""1Z[%8*QcrqLmV!"41ZJ'5@%mNE2rk)QS!&#J4*'crpM!U!"TJ!!&D*%3
[%UKc2A`!![rf*%3-DJ#!",CX"N*Zrr4J+L4%$'S"!!5fE!JpI!2Srr4J'#4%$'S
"J!5fE!JpI"1)rr4J"Mem*a$rp%*Zrri-EJ!$rrjX!!%%3Qlrr$BZrrbfE[rdEJC
5E[rmB2!N4!aU!M!%YQi!!0C#TkMB)"mY32rQ5'lrkL4%2bS%YN*R2c`#!$mm!9D
STceZrrErqN*ZrrK)E[rU2blrqMmZrrJ[,[rQU1mN4$BZrrEADJ5f5QlrrQBX5'l
rkL4%0LS%YTCm!$Jr!cmm!8NN4$BU",D@I!!`2`-r2!&@U+G)E[rUU+0)E[rU*%3
f+J5fPR`!-$m$2c`"(#4%2bS%YMmm!9DSTcBZrrl(r!!1eS4BJbm$*%3L8P5*,`N
f,[rqar`!$YD%eV`!N!-+,`0)E[rU2c`!"%+RU1`[,[rQU0PJ"L4%3QS%YP*Zrrj
J!2lfB!L3!(`!3@F!rU)[+`!86VS!(&K26VV[N!"`!%cI#""1ANje)'m!"+!T6[S
!+L"[!!5J+Nlk!#!JE`!%S#01qJ!@)#m!"+%L6[S!!N2YrribJ#!)6R9$lIrq-S"
1G3#3+a`!-J!!4&*@8J#3!`S!(`!!)!#3"`8!8(9cD#!A!:
//E*O*F push.hqx//

echo x - mkpush
cat > "mkpush" << '//E*O*F mkpush//'
set -x

cp -f $1.c ram:$1.c
cc -bu -z2250 ram:$1.c
ln -an $2 ram:$1.o -lc
cprsrc DRVR 31 ram:$1 2:flow/term
//E*O*F mkpush//

echo x - push.c
cat > "push.c" << '//E*O*F push.c//'
/* ----------------- push ----------------- 
 *
 * A little guy will push away your screen.
 * What a brutality!!
 * Written in Aztec C.
 * 
 * Author:   Fons Rademakers
 *           Nikhef-h (Nat. Inst. for High Energy Physics)
 *           the Netherlands
 * Version:  21-nov-1985
 * Revision:
 *
 */

#asm
main
	dc.w  $6400		;ctl-enable, need time and locked in mem.
	dc.w  0  		;update as often as possible
	dc.w  $0001		;don't react on any specific event
	dc.w  0			;no menu

	dc.w  open_-main	;open routine
	dc.w  nop_-main		;prime routine
	dc.w  control_-main	;control routine
	dc.w  nop_-main		;status routine
	dc.w  close_-main 	;close routine

title_
	dc.b  4
	dc.b  "Push"
	ds    0          	;for alignment

	public   _Uend_,_Dorg_,_Cend_

save_
	lea     main+(_Uend_-_Dorg_)+(_Cend_-main),a4	;set up globals
	move.l  a0,Pbp_					;save pb pointer
	move.l  a1,Dp_					;save DCE pointer
	rts

restore_
	move.l  Pbp_,a0
	rts
#endasm

#define	 _DRIVER
#define  SMALL_MEM
#include <quickdraw.h>
#include <memory.h>
#undef   SMALL_MEM
#include <event.h>
#include <pb.h>
#include <desk.h>

#define notSrcCopy     4 /* Not in QD with SMALL_MEM flag set */
#define NULL  (0L)

#define BASE1 512        /* Mac screen size in x direction */
#define BASE2 342        /* Mac screen size in y direction */

#define SP (*(struct storage **)Dp->dCtlStorage)

DCEPtr  Dp;
ParmBlkPtr  Pbp;

Rect wind_rect = {0, 0, 0, 0};

struct storage {
	GrafPtr pushport;            /* the push grafport */
	BitMap  manmap[3];           /* the 3 amn bitmaps */
	Pattern black;
	short   portspace[54];       /* space for the flowport */
	char    manspace[3][348];    /* space for the 3 man bitmaps */
	short   x;
};

open()
{
	register WindowPtr wp;
	register struct DCE *dp;
	register struct storage *sp;
	extern char title[];
	struct windowpeek {
		GrafPort port;
		int      windowKind;
	};
	short    i;

	save();
	dp = Dp;
	if (dp->dCtlWindow == NULL) {
		HLock(dp->dCtlStorage = NewHandle((long) sizeof(struct storage)));
		sp = SP;
		/* create an invisible window */
		dp->dCtlWindow =         
		wp = NewWindow(NULL, &wind_rect, title, FALSE, plainDBox, -1L, FALSE, 
NULL);
		((struct windowpeek *)wp)->windowKind = dp->dCtlRefNum;
		/* allocate space for new pushport */
		&sp->pushport->device = sp->portspace;
		OpenPort(sp->pushport);
		/* set the 3 man bitmaps */
		for (i = 0; i < 3 ; i++) {
		   sp->manmap[i].bounds.top    = 0;
			sp->manmap[i].bounds.left   = 0;
			sp->manmap[i].bounds.bottom = 58;
			sp->manmap[i].bounds.right  = 48;
			sp->manmap[i].rowBytes      = 6;
			sp->manmap[i].baseAddr      = &sp->manspace[i][0];
		}
      	/* first man map */
      	StuffHex(sp->manmap[0].baseAddr,    "\P00000000001000000000001800000000001C");
		StuffHex(sp->manmap[0].baseAddr+18, "\P000000000020000000000040000000000080");
		StuffHex(sp->manmap[0].baseAddr+36, "\P000000000100000000000200000000000400");
		StuffHex(sp->manmap[0].baseAddr+54, "\P000000000800000000001000000000002000");
		StuffHex(sp->manmap[0].baseAddr+72, "\P003F00004000007F80008000007C80010000");
		StuffHex(sp->manmap[0].baseAddr+90, "\P007900220000007080740000002100E80000");
		StuffHex(sp->manmap[0].baseAddr+108,"\P001083240000001F0CDE0000002173240000");
		StuffHex(sp->manmap[0].baseAddr+126,"\P004784C800000041CB10000000403C200000");
		StuffHex(sp->manmap[0].baseAddr+144,"\P004000C0000000438300000000407C000000");
		StuffHex(sp->manmap[0].baseAddr+162,"\P004080000000004080000000004080000000");
		StuffHex(sp->manmap[0].baseAddr+180,"\P004080000000002080000000003F80000000");
		StuffHex(sp->manmap[0].baseAddr+198,"\P002080000000002080000000001080000000");
		StuffHex(sp->manmap[0].baseAddr+216,"\P001100000000001100000000001100000000");
		StuffHex(sp->manmap[0].baseAddr+234,"\P001100000000001100000000001100000000");
		StuffHex(sp->manmap[0].baseAddr+252,"\P001100000000001200000000001200000000");
		StuffHex(sp->manmap[0].baseAddr+270,"\P001200000000001200000000001200000000");
		StuffHex(sp->manmap[0].baseAddr+288,"\P001200000000003F00000000003F00000000");
		StuffHex(sp->manmap[0].baseAddr+306,"\P003F00000000001200000000001200000000");
		StuffHex(sp->manmap[0].baseAddr+324,"\P0012000000000013C0000000001420000000");
		StuffHex(sp->manmap[0].baseAddr+342,"\P001BE0000000");

      	/* second man map */
     	StuffHex(sp->manmap[1].baseAddr,    "\P00000000001000000000001800000000001C");
		StuffHex(sp->manmap[1].baseAddr+18, "\P000000000020000000000040000000000080");
		StuffHex(sp->manmap[1].baseAddr+36, "\P000000000100000000000200000000000400");
		StuffHex(sp->manmap[1].baseAddr+54, "\P000000000800000000001000000000002000");
		StuffHex(sp->manmap[1].baseAddr+72, "\P003F00004000007F80008000007C80010000");
		StuffHex(sp->manmap[1].baseAddr+90, "\P007900220000007080740000002100E80000");
		StuffHex(sp->manmap[1].baseAddr+108,"\P001083240000001F0CDE0000002173240000");
		StuffHex(sp->manmap[1].baseAddr+126,"\P004784C800000041CB10000000403C200000");
		StuffHex(sp->manmap[1].baseAddr+144,"\P004000C0000000438300000000407C000000");
		StuffHex(sp->manmap[1].baseAddr+162,"\P004080000000004080000000004080000000");
		StuffHex(sp->manmap[1].baseAddr+180,"\P004080000000002080000000003F80000000");
		StuffHex(sp->manmap[1].baseAddr+198,"\P002080000000002080000000001080000000");
		StuffHex(sp->manmap[1].baseAddr+216,"\P001080000000001080000000001240000000");
		StuffHex(sp->manmap[1].baseAddr+234,"\P001240000000001220000000001320000000");
		StuffHex(sp->manmap[1].baseAddr+252,"\P002310000000002690000000004488000000");
		StuffHex(sp->manmap[1].baseAddr+270,"\P00484800000000884C000000009024000000");
		StuffHex(sp->manmap[1].baseAddr+288,"\P01102400000003F07E00000003F07E000000");
		StuffHex(sp->manmap[1].baseAddr+306,"\P03F07E000000012024000000012024000000");
		StuffHex(sp->manmap[1].baseAddr+324,"\P012024000000013C27800000014228400000");
		StuffHex(sp->manmap[1].baseAddr+342,"\P01BE37C00000");

      	/* third man map */
      	StuffHex(sp->manmap[2].baseAddr,    "\P00000000001000000000001800000000001C");
		StuffHex(sp->manmap[2].baseAddr+18, "\P000000000020000000000040000000000080");
		StuffHex(sp->manmap[2].baseAddr+36, "\P000000000100000000000200000000000400");
		StuffHex(sp->manmap[2].baseAddr+54, "\P000000000800000000001000000000002000");
		StuffHex(sp->manmap[2].baseAddr+72, "\P003F00004000007F80008000007C80010000");
		StuffHex(sp->manmap[2].baseAddr+90, "\P007900220000007080740000002100E80000");
		StuffHex(sp->manmap[2].baseAddr+108,"\P001083240000001F0CDE0000002173240000");
		StuffHex(sp->manmap[2].baseAddr+126,"\P004784C800000041CB10000000403C200000");
		StuffHex(sp->manmap[2].baseAddr+144,"\P004000C0000000438300000000407C000000");
		StuffHex(sp->manmap[2].baseAddr+162,"\P004080000000004080000000004080000000");
		StuffHex(sp->manmap[2].baseAddr+180,"\P004080000000002080000000003F80000000");
		StuffHex(sp->manmap[2].baseAddr+198,"\P002080000000002080000000001080000000");
		StuffHex(sp->manmap[2].baseAddr+216,"\P001080000000001080000000001240000000");
		StuffHex(sp->manmap[2].baseAddr+234,"\P001240000000001220000000001320000000");
		StuffHex(sp->manmap[2].baseAddr+252,"\P002310000000004490000000008888000000");
		StuffHex(sp->manmap[2].baseAddr+270,"\P01104800000006204C0000000F4024000000");
		StuffHex(sp->manmap[2].baseAddr+288,"\P0F802400000017807E00000023007E000000");
		StuffHex(sp->manmap[2].baseAddr+306,"\P44007E000000880024000000D00024000000");
		StuffHex(sp->manmap[2].baseAddr+324,"\P480024000000240027800000120028400000");
		StuffHex(sp->manmap[2].baseAddr+342,"\P0E0037C00000");

		/* set start x value */
		sp->x = 0;
		/* black pattern */
		StuffHex(sp->black, "\PFFFFFFFFFFFFFFFF");
		/* set the background pattern to black */
		BackPat(sp->black);

		HUnlock(dp->dCtlStorage);
	}
	restore();
	return(0);
}


close()
{
	register struct DCE *dp;

	save();
	dp = Dp;
	/* get rid of the allocated space for the window */
	DisposeWindow(dp->dCtlWindow);
	dp->dCtlWindow = NULL;
	DisposHandle(dp->dCtlStorage);
	restore();
	return(0);
}


nop()
{
	return(0);
}




control()
{
	register struct DCE *dp;
	register struct storage *sp;
	short     i, j;
	short     xdest, ydest;
	short     xvel, slowdown;
	Rect      destrect;
	RgnHandle dummyrgn;

	save();
	dp = Dp;
	HLock(dp->dCtlStorage);
	sp = SP;
	switch (Pbp->u.cp.csCode) {
	case accRun:        /* time to push the screen */
		SetPort(sp->pushport);

		xvel = 2;    /* speed with which the screen is being pushed by the man 
*/

		/* to prevent man from walking too fast at end of screen, slow him down 
*/ 
		if (sp->x < 128)        /* 1/4*BASE1 */
		   slowdown = 0;
		else if (sp->x < 256)   /* 1/2*BASE1 */
		   slowdown = 1000;
		else if (sp->x < 384)   /* 3/4*BASE1 */
			slowdown = 5000;
		else
			slowdown = 10000;

		for (i = 0; i < 3; i++) {
		   for (j = 0; j <= slowdown; j++)
			   ;
	      if (sp->x <= BASE1 + 48) {
			   dummyrgn = NewRgn();
			   SetRect(&destrect, sp->x, 0, BASE1, BASE2);
			   xdest = xvel;
			   ydest = 0;
			   ScrollRect(&destrect, xdest, ydest, dummyrgn);
			   sp->x += xvel;

				/* kind of dirty fix: erase heel of third man map.
				 * I should have defined the man maps 1 word bigger on the left side
				 * to prevent this EraseRect call */
				if (!i) {
					SetRect(&destrect, sp->x - 56, BASE2 - 13, sp->x - 48, BASE2);
					EraseRect(&destrect);
				}

				SetRect(&destrect, sp->x - 48, BASE2 - 58, sp->x, BASE2);
				CopyBits(&sp->manmap[i], &sp->pushport->portBits,
				         &sp->manmap[i].bounds, &destrect,
							notSrcCopy, NULL);
			   DisposeRgn(dummyrgn);
			} else 
				sp->x = 0;
		}
	break;  /* end case */
	}
	HUnlock(dp->dCtlStorage);
	restore();
	return(0);
}
//E*O*F push.c//

exit 0