jimb@amdcad.UUCP (Jim Budler) (08/05/85)
I don't know how many people need this. Our Valid workstation complains about the use of the & operator between an int and a boolean. Therefore I added a cast to int to fix it. It still compiles on a Vax of course. Here it is. ---------------------< cut here >---------------------- *** xbin.c.orig Sun Aug 4 13:27:45 1985 --- xbin.c Sun Aug 4 17:33:09 1985 *************** *** 102,107 * revised jcb 03/30/85 -- revised for compatibility with 16-bit int * revised liberte 07/12/85 -- added trlookup for indexed translation * revised vishniac 07/23/85 -- picked out some more lint */ char usage[] = "usage: \"xbin [-v] [-l] [-o] [-n name] [-] filename\"\n"; --- 102,108 ----- * revised jcb 03/30/85 -- revised for compatibility with 16-bit int * revised liberte 07/12/85 -- added trlookup for indexed translation * revised vishniac 07/23/85 -- picked out some more lint + * revised jcb 08/04/85 -- added cast of boolean to int for Valid */ char usage[] = "usage: \"xbin [-v] [-l] [-o] [-n name] [-] filename\"\n"; *************** *** 583,589 obuf[1] = (ibuf[1] << 4 | ibuf[2] >> 2); obuf[2] = (ibuf[2] << 6 | ibuf[3]); } ! if ((eof) & (op >= &obuf[eof])) return EOF; c = *op++; if (op >= oend) --- 584,590 ----- obuf[1] = (ibuf[1] << 4 | ibuf[2] >> 2); obuf[2] = (ibuf[2] << 6 | ibuf[3]); } ! if ((eof) & (int) (op >= &obuf[eof])) /* cast needed by Valid - jcb */ return EOF; c = *op++; if (op >= oend) -- Jim Budler Advanced Micro Devices, Inc. (408) 749-5806 UUCPnet: {ucbvax,decwrl,ihnp4,allegra,intelca}!amdcad!jimb Compuserve: 72415,1200 "... Don't sue me, I'm just the piano player!...."
nikhefh@uva.UUCP (NIKHEFH) (11/13/85)
A new Crabs DA, and 2 other screen demolishing DA's.
SOURCES INCLUDED (in Aztec C) !!!!!
Have fun !!
# ------------------------ Cut here -----------------------
#!/bin/sh
# shar: Shell Archiver
# This shell script will extract:
# crabs.Hqx, crabs.c, collapse.Hqx, collapse.c, flow.Hqx, flow.c
#
echo x - crabs.Hqx
sed 's/^X//' << 'Eof_Shar_crabs.Hqx' > crabs.Hqx
X(This file must be converted with BinHex 4.0)
X
X:"80bB@*c!%4'58a%68p@!*!)$B@GM!#3"!%!N!-06!!!$%`!N!-j!*$b$%KN!*!
X%!3#3!c!$N!!$QJ13!!0L#%0bB@*c)*!$!%Rk$#ST52r%+8Rrb%je)'cra%je6PE
XrmNMR$""KiLJXrmJN4%UU!"jQ!!*d*%3[#Lmm!!!"aNkk#j4B6b4I*8!!&#m!6VS
X,D&K2*'crb#*U!"3U%54%,`T#Td+R5'cr[%Kkrj4#Ccmm!!)[22q3"%*R3UHT%b!
XI*N!NAb9!!"iN4$GU!"J!E#4&*JA@[!#3!m3P3`!i*%8[+J!iU'p#E[rm$'i!"2r
XmE(`f,[rmar`!$L4$eF9#DJ!'0Llrr-Im!!iN3pA&3QS!#$BZrrc(r!!1*%29a69
Xm!!J!#MBZrrc(r!!1*%29a69m!!J!$$BZrrc(r!!1*%29a69m!!)!"$BZrrc(r!!
X1*%8d,[rm5-,VJY5&e,`!N!0%*B)i!&*ZrraJ!2pq*%8[%NKk!B#SCL4&,bS!$NK
Xk!CDSCL4&,bS!(%Kk!DbSCL4&,bS!+NKk!F+SCL4&eI`!N!-m,`T)HJ(8U'C#E[r
Xq2A`!!Irk3Qlrr!aZ!!Vrr'`!!3`f,[rm5-2PJb4$eF8eE[rq!9Jf,[rm5-2PJb4
X$eF9#DJ&D"Qi!-rrq0Llrr%M$jB-N3pA&2@S"@2rd0Llrr%M$jB-N3pA&2@S"@[r
Xb0Llrr%M$jB-N3pA&0LS"@&"$282rq$BZrra)`q@$*%29a6BU!9T33ce$rrBf,[r
Xkar`!$YD&,`-N45*U!$K8L5m*0LlrqXIm!!l@K9b$,`0)E[rb3QG#TkMX0Llrr%M
X$ii-N3pA&0@lrqJ'S0Llrr%M$*%29a8)U!E`f,[rm5-2PJb4$eF8f,[rm5-2PJb*
X$dm8eD3&B!B!f,[rm5-2PJb4$eF8f,[rm5-2PJb*$dm8eD3&D!B*5E[rmB!$qlL4
X&eI`!N!-m,`USI#4%,bS!&%kk#4jB6dkkr@j`!%cI#$"1ANje)$Na-*!$1$!`0d8
X`-$3b-$!i-6!`1$%`-$3b-$"#4$!`!#"#4$!`0$)`-$Ja-$!i-6!`0$)`-$G&-$!
Xa-*!$1$N`-!!J3M%`-$4$-$!i0$!`1$8`-$Jf-$!i0$!`0%-`-%)a-$!!)$K%-$!
Xc-M!`-M%`-$Ba-$""-6!`-M%`-$-b-$!i4$!`!"""368e38%e08&"069"368e!%j
X@!!![#dkkr,)QE2r),bX!(UN83UX!(LmV!"41ZJKH@%p1Z[bNF!!QAdjH6R919J!
X!F!"1ANje6PErj%MR#""1Z[ai*Qcrb#mV!"41ZJJD@%mNE2r))QS!&#J4*'cra$!
XU!"TJ!!CN*%3[+J!iU(0#E[rk$'i!#[rkE!!'6$BZrrT)`b4$eF4++J'mCNJf,[r
Xk5-2MJb4$eF3[#Mmm!!8r22rl6VS'4&K2*&me3!%`0LlrqNM$ii-N3pA%,`Sr2!!
X&2ccrqdkk"L*B6b4I08!"4'!!!4if,[rk5-2MJb4$eF3-DJ!)!6"Y)MBZrrT)`q1
X$*%29a#m+3QFr22rr6VS&kPK2*&r4DJ%`B&Jf,[rk5-2MJb4$eF3-D[ri!6"Z)MB
XZrrT)`q1$*%29a#m+2c`!!8*R6VS&Y&K2*&r4DJ%`B#)f,[rk5-2MJb4$eF3[#Mm
Xm!!%r22rr6VS&N!"B6b4Id@S"-$BZrrT)`q1$*%29a!aU!!J"4'dL0LlrqNM$ii-
XN3pA%,`T#Ccmmrrp1ZJ9F@%mNAp&U!84J@$BZrrT)`q1$*%29a!aUrrJ"4'iL0Ll
XrqNM$ii-N3pA%,`Sr2!!"3QG1ZJ8Q@%mNAp&U!84J)MBZrrT)`q1$*%29a#m+2c`
X!!6mmrrp1ZJ8#@%mNAp&U!83f,[rk5-2PJb4$eF3f,[rk5-2MJb*$dm3f+3%`efS
X"@$BZrrT)`q@$*%29a$BZrrT)`q1$)N26a$BT!86ADJ&D0LlrqNM$jB-N3pA%$'S
X!!!&BE6if,[rk5-2PJb4$eF3-DJ(i!9KZ+MBZrrT)`q@$*%29a!aU!!!"@Qd@0Ll
XrqNM$jB-N3pA%$'S"6J&DE`!!bMBZrrT)`q@$*%29a$BZrrT)`q1$)N26a$BT!6#
XADJ&B0LlrqNM$jB-N3pA%0LlrqNM$ii-L3p2%0LN"4*GU!9Sf,[rk5-2MJb4$eF3
X[#Mmm!!8r22rl6VS%$PK2*&me3!%`0LlrqNM$ii-N3pA%,`Sr2!!&2ccrqdkk!qa
XB6b4I08!"4$BZrrT)`q@$*%29a$BZrrT)`q1$)N26a$BT!6$ADJ&B0LlrqNM$jB-
XN3pA%0LlrqNM$ii-L3p2%0LN"40GU!9TJ!2lS0LlrqNM$ii-N3pA%2bS"4%kk"1j
X86cm!0LlrqNM$ii-N3pA%2bS"-%kk"0C86cBIYN"Y)MBZrrT)`q1$*%29a!aU!!!
X"4'i'3QlrpQ!'2A`!!IrfB#)f,[rk5-2MJb4$eF3-DJ!!!6"Y#$em!!,rpQ!'2A`
X!!rrf0LlrqNM$jB-N3pA%2@S"J2r`0LlrqNM$jB-N3pA%2@S"J[rZ0LlrqNM$jB-
XN3pA%0LS"J&"$282rp$BZrrT)`q@$*%29a$BU!B*33ce$rr*)E[rZU+0#E[ri(A`
X!rrrP0LlrqNM$jB-N3pA%2@S"@2rq0LlrqNM$ii-N3pA%$'S!!!%`EaJf,[rk5-2
XPJb4$eF3f+J&DAN-p3rrmB")f,[rk5-2PJb4$eF3pDJ&Drr`f,[rk5-2PJb4$eF3
Xf+J&BAN-d,[rqY%0Z(%*R2blrrMmZrrbSC4!I5J"R"&*ZrrK5E[rqB-S-EJ!%rrK
XR"%)Zrq8f,[rk5--N3pA%&@lrj3'm5Llrj@B!!5Jf,[rk5-2PJb4$eF3pDJ&Brr!
Xf,[rk5-2PJb4$eF3pDJ&Drqif,[rk5-2PJb4$eF3f+J&B8%-p3rrd0LlrqNM$jB-
XN3pA%0LS"@P"$282rmNKZrqkSScBZrrT)`q@$*%29a$eU!B$rk$BZrrT)`q@$*%2
X9a$eU!B,rjMBZrrT)`q@$*%29a$BU!B"33ce$rq`f,[rk5-2PJb4$eF3f+J'#8%-
Xp3rrU0LlrqNM$ii-N3pA%2@S"U2rf0LlrpXIm!!l@K#m$*%3LDJ!i9)N[#6BZrrE
X(r!!1eS4FJbm$5'lrjN*R3UHSl$BZrrT)`q@$*%29a$BZrrT)`q@$)N26a$9T!B!
X"@$BZrrT)`q@$*%29a$BZrrT)`q@$)N26a$9T!B)"@Q!!!-if,[rk5-2PJb4$eF3
XpDJ&BrqJf,[rk5-2PJb4$eF3pDJ&DrqBf,[rk5-2PJb4$eF3f+J&B8%-p3rrX0Ll
XrqNM$jB-N3pA%0LS"@P"$282rkMBZrrE(r!!1eS3[!b4%)QS!1&5*,`Nf,[rfar`
X!$YD%A)-[!dKZrqC#Cd+RU1`f,[rk5-2PJb4$eF3f,[rk5-2PJb*$dm3eD3&B!B!
Xf,[rk5-2PJb4$eF3f,[rk5-2PJb*$dm3eD3&D!B)f,[rk5-2MJb4$eF3eE[rf!DK
X5E[rkB!$jVQ!)N!"m!%&R!2QB,bX!&%kk!CTB6dkkpHT`!%cI#""1ANje6PErr$B
XZ!!U@EJ!)2`-[$dKXrm`r2#!1UHY86f!)2r!!N!C)H[rf5'crc$mm#!#Tke&25'c
Xrc%K[!!3r2!J3UHY#CkKK-"mr!%kk!4486cm!,`p)E2r-2c`J$URV9%p)9dKXrpB
Xr2!J1UHY36dKXrma)E2r@2c`!"+RVB!K!i!#3"NKkrrC)E2r@2c`)"URV0Li!#$m
X$,`p)E2r-2c`J$URV9%p)E2r-5'creMmm!!#TkdKXrpC)E[rm2c`3%+RV5'lrr%K
XXrm`r2"!1UHYJ#!#3#%KkrrC)E2r-2c`)#+RVE%4)E[rm5'crc$mm%!kTkf!)[r!
X!N!C)H[rf5'crc$mm#!#TkdKXrma)E[rm2c`3%+RV5'crc%KXrq!r2!!3UHYJ$NK
XZrra)E2rJ2c`3$URV98p)E2rJ2c`!&URV5'cri%K[!!3r2#!3UHXf(c!$6Pj1G8j
X@!!!-EJ#3!`K["M!Z!!KJ"M!Z!!K%3%jH6R8JE`!%S#P1qJ!U)'m!"+!U6[S!)#"
X[!!5J)dlk!"BJ,`!%S5*1qJ!#3qhrrM+!)!K1G82YrribJ%je!*"G(!!b!!"%8PC
X5!*!$#J!I!!!J!*!("J"$FQ&LFaFj!:
Eof_Shar_crabs.Hqx
echo 'Original Sum -> 00007 5'
echo -n 'Current Sum -> '
sum crabs.Hqx
echo x - crabs.c
sed 's/^X//' << 'Eof_Shar_crabs.c' > crabs.c
X/* ----------------- crabs -----------------
X *
X * Implementation of the crabs game for the
X * Macintosh, written in Aztec C.
X * See Scientific American, Sep 1985, p18-23.
X *
X * Author: Fons Rademakers, Nikhef-h/CERN
X * Version: 29-oct-1985
X * Revision:
X *
X */
X
X#asm
Xmain
X dc.w $6400 ;ctl-enable, need time and locked in mem.
X dc.w 0 ;update as often as possible
X dc.w $0001 ;don't react on any specific event
X dc.w 0 ;no menu
X
X dc.w open_-main ;open routine
X dc.w nop_-main ;prime routine
X dc.w control_-main ;control routine
X dc.w nop_-main ;status routine
X dc.w close_-main ;close routine
X
Xtitle_
X dc.b 8
X dc.b "Crabs "
X ds 0 ;for alignment
X
X public _Uend_,_Dorg_,_Cend_
X
Xsave_
X lea main+(_Uend_-_Dorg_)+(_Cend_-main),a4 ;set up globals
X move.l a0,Pbp_ ;save pb pointer
X move.l a1,Dp_ ;save DCE pointer
X rts
X
Xrestore_
X move.l Pbp_,a0
X rts
X#endasm
X
X#define _DRIVER
X#define SMALL_MEM
X#include <quickdraw.h>
X#include <memory.h>
X#undef SMALL_MEM
X#include <event.h>
X#include <pb.h>
X#include <desk.h>
X
X#define NULL (0L)
X
X#define BASE1 512 /* Mac screen size in x direction */
X#define BASE2 342 /* Mac screen size in y direction */
X
X#define MAXVEL 8 /* max velocity of the crabs */
X#define CRABS 10 /* # of crabs */
X
X#define SP (*(struct storage **)Dp->dCtlStorage)
X
XDCEPtr Dp;
XParmBlkPtr Pbp;
X
XRect wind_rect = {0, 0, 0, 0};
X
Xstruct storage {
X BitMap crabmap[4]; /* the 4 crab bitmaps */
X GrafPtr crabport; /* the crabs grafport */
X Pattern gray; /* backgr fill pattern */
X short crabspace[4][16]; /* space for the 4 crab bitmaps */
X short portspace[54]; /* space for the crabport */
X short xvel[CRABS], yvel[CRABS]; /* the crabs velocity */
X short newdest[CRABS][2], olddest[CRABS][2]; /* the crabs pos. */
X short olddir[CRABS]; /* the direction the crab was going
X*/
X Boolean oldbackgr[CRABS]; /* flag to see if crab was on backgr
X*/
X};
X
Xopen()
X{
X register WindowPtr wp;
X register struct DCE *dp;
X register struct storage *sp;
X extern char title[];
X struct windowpeek {
X GrafPort port;
X int windowKind;
X };
X short x, i, dir;
X Rect destrect;
X
X save();
X dp = Dp;
X if (dp->dCtlWindow == NULL) {
X HLock(dp->dCtlStorage = NewHandle((long) sizeof(struct storage)));
X sp = SP;
X /* create an invisible window */
X dp->dCtlWindow =
X wp = NewWindow(NULL, &wind_rect, title, FALSE, plainDBox, -1L, FALSE,
XNULL);
X ((struct windowpeek *)wp)->windowKind = dp->dCtlRefNum;
X /* allocate space for new crabport */
X &sp->crabport->device = sp->portspace;
X OpenPort(sp->crabport);
X /* set the 4 crab bitmaps */
X for(i = 0; i < 4; i++){
X sp->crabmap[i].bounds.top = 0;
X sp->crabmap[i].bounds.left = 0;
X sp->crabmap[i].bounds.bottom = 8;
X sp->crabmap[i].bounds.right = 8;
X sp->crabmap[i].rowBytes = 2; /* needs to be even (to fit on a word)
X*/
X sp->crabmap[i].baseAddr = &sp->crabspace[i][0];
X }
X StuffHex(sp->crabmap[0].baseAddr, "\P910008007E004200810081004200BD00");
X StuffHex(sp->crabmap[1].baseAddr, "\PBD0042008100810042007E0010008900");
X StuffHex(sp->crabmap[2].baseAddr, "\PB1004C0084008500860084004C00B100");
X StuffHex(sp->crabmap[3].baseAddr, "\P8D00320021006100A100210032008D00");
X /* gray pattern */
X StuffHex(sp->gray, "\PAA55AA55AA55AA55");
X /* set the start positions of the crabs and draw them */
X x = 0;
X dir = 1;
X for (i = 0; i < CRABS; i++){
X sp->newdest[i][0] = x;
X sp->newdest[i][1] = 0;
X x += BASE1/CRABS;
X
X destrect.left = sp->newdest[i][0];
X destrect.top = sp->newdest[i][1];
X destrect.right = sp->newdest[i][0] + 8;
X destrect.bottom = sp->newdest[i][1] + 8;
X CopyBits(&sp->crabmap[dir], &sp->crabport->portBits,
X &sp->crabmap[dir].bounds, &destrect,
X srcCopy, NULL);
X sp->olddir[i] = dir;
X sp->oldbackgr[i] = FALSE;
X sp->olddest[i][0] = sp->newdest[i][0];
X sp->olddest[i][1] = sp->newdest[i][1];
X }
X /* set the background pattern to gray */
X BackPat(sp->gray);
X
X HUnlock(dp->dCtlStorage);
X }
X restore();
X return(0);
X}
X
X
Xclose()
X{
X register struct DCE *dp;
X
X save();
X dp = Dp;
X /* get rid of the allocated space for the window and crabs */
X DisposeWindow(dp->dCtlWindow);
X dp->dCtlWindow = NULL;
X DisposHandle(dp->dCtlStorage);
X restore();
X return(0);
X}
X
X
Xnop()
X{
X return(0);
X}
X
X
X
X
Xcontrol()
X{
X register struct DCE *dp;
X register struct storage *sp;
X short x, y, i, j, dir;
X Rect grayrect, destrect;
X Boolean backgr;
X
X save();
X dp = Dp;
X HLock(dp->dCtlStorage);
X sp = SP;
X switch (Pbp->u.cp.csCode) {
X case accRun: /* time to move the crabs */
X SetPort(sp->crabport);
X for (i = 0; i < CRABS; i++) {
X if (!sp->oldbackgr[i]) {
X /* if crab was not on bakcgr, determine complete
X * new x and y velocities */
X sp->xvel[i] = rand(-5, 5);
X sp->yvel[i] = rand(-5, 5);
X } else {
X /* if crab was on backgr, increase or decrease the
X * x and y velocities only slightly */
X if (sp->xvel[i] >= MAXVEL)
X sp->xvel[i] += rand(-1, 0);
X else if (sp->xvel[i] <= -MAXVEL)
X sp->xvel[i] += rand(0, 1);
X else
X sp->xvel[i] += rand(-1,1);
X
X if (sp->yvel[i] >= MAXVEL)
X sp->yvel[i] += rand(-1, 0);
X else if (sp->yvel[i] <= -MAXVEL)
X sp->yvel[i] += rand(0, 1);
X else
X sp->yvel[i] += rand(-1 ,1);
X }
X /* update the crab position */
X sp->newdest[i][0] += sp->xvel[i];
X sp->newdest[i][1] += sp->yvel[i];
X /* make sure to remain within screen boundaries */
X while ((sp->newdest[i][0] < 0) || (sp->newdest[i][0] > BASE1 - 8) ||
X (sp->newdest[i][1] < 0) || (sp->newdest[i][1] > BASE2 - 8)) {
X sp->newdest[i][0] -= sp->xvel[i];
X sp->newdest[i][1] -= sp->yvel[i];
X sp->xvel[i] = rand(-5, 5);
X sp->yvel[i] = rand(-5, 5);
X sp->newdest[i][0] += sp->xvel[i];
X sp->newdest[i][1] += sp->yvel[i];
X }
X /* calculate new direction of crab */
X if (abs(sp->yvel[i]) >= abs(sp->xvel[i]))
X if (sp->yvel[i] <= 0)
X dir = 0;
X else
X dir = 1;
X else
X if (sp->xvel[i] >= 0)
X dir = 2;
X else
X dir = 3;
X /* erase the crab from the previous position, by drawing
X * it over with the gray background */
X grayrect.left = sp->olddest[i][0];
X grayrect.top = sp->olddest[i][1];
X grayrect.right = sp->olddest[i][0] + 8;
X grayrect.bottom = sp->olddest[i][1] + 8;
X EraseRect(&grayrect);
X
X /* determine if the new position does occupy a
X * non gray site */
X j = 0;
X backgr = TRUE;
X x = sp->newdest[i][0];
X if (sp->xvel[i] > 0)
X y = sp->newdest[i][1] + 7; /* scan only bottom line */
X else /* of new crab position */
X y = sp->newdest[i][1]; /* or only top line */
X for (;x <= sp->newdest[i][0] + 7; x++)
X if (GetPixel(x, y)) j++;
X if (j != 4) backgr = FALSE;
X sp->oldbackgr[i] = backgr;
X
X if (!backgr) {
X /* if the site is not gray, make it gray and redraw
X * the crab in the previous position */
X grayrect.left = sp->newdest[i][0];
X grayrect.top = sp->newdest[i][1];
X grayrect.right = sp->newdest[i][0] + 8;
X grayrect.bottom = sp->newdest[i][1] + 8;
X EraseRect(&grayrect);
X destrect.left = sp->olddest[i][0];
X destrect.top = sp->olddest[i][1];
X destrect.right = sp->olddest[i][0] + 8;
X destrect.bottom = sp->olddest[i][1] + 8;
X dir = sp->olddir[i];
X CopyBits(&sp->crabmap[dir], &sp->crabport->portBits,
X &sp->crabmap[dir].bounds, &destrect,
X srcCopy, NULL);
X sp->newdest[i][0] = sp->olddest[i][0];
X sp->newdest[i][1] = sp->olddest[i][1];
X } else {
X /* if the site is gray, draw the crab in the new
X * position */
X destrect.left = sp->newdest[i][0];
X destrect.top = sp->newdest[i][1];
X destrect.right = sp->newdest[i][0] + 8;
X destrect.bottom = sp->newdest[i][1] + 8;
X CopyBits(&sp->crabmap[dir], &sp->crabport->portBits,
X &sp->crabmap[dir].bounds, &destrect,
X srcCopy, NULL);
X sp->olddest[i][0] = sp->newdest[i][0];
X sp->olddest[i][1] = sp->newdest[i][1];
X sp->olddir[i] = dir;
X }
X }
X break; /* end case */
X }
X HUnlock(dp->dCtlStorage);
X restore();
X return(0);
X}
X
X
X/* Return random number uniformly distributed on [min,max].
X * Note that Random() delivers a value on [-32768,32767]. */
Xrand(min, max)
Xint min, max;
X{
X float ran;
X
X ran = (max - min + 1.0)*(float)abs(Random())/32768.0 + min;
X return((ran < 0) ? --ran : ran);
X}
X
X
X/* Return absolute value of an integer */
Xabs(n)
Xint n;
X{
X return((n > 0) ? n : -n);
X}
Eof_Shar_crabs.c
echo 'Original Sum -> 10467 9'
echo -n 'Current Sum -> '
sum crabs.c
echo x - collapse.Hqx
sed 's/^X//' << 'Eof_Shar_collapse.Hqx' > collapse.Hqx
X(This file must be converted with BinHex 4.0)
X
X:#%0[E'aKF(0P!%4'58a%68p@!*!)"dEM(3#3"!%!N!-(#J!!"JS!N!-m!*$b"JC
XN!*!%!3#3!c!"0!%q!63""JK$EfaXBA"cC3"*qJAS+8Mra#P*rmK1G5"Xrm41G8j
X@rra)j``3BH)S,2r)*%4+UJ!HCJ!!S#4%,`S[2!#3!hT1ZJ95@%mNAb9!!"3[!%k
Xk"5CB6b4XrmJLDJ!8+K%N4#m+3UG#TdKXrla)H[q83QFr2!!#,ccrN!4#Cd+RU4-
XJ(bC!*&mP3!!H*%3hDJ!B!'`N45B&eV`!N!--*)-N45m5U'mN469m!"3!H#4&@)S
X[#NKk!#kSCL4&@)S[#UKm*%9BLLm+U*dN4#mU!"41ZJ5`@%p1Z[p#F!"-h`J`6Pj
X1G4""368e38%e08&"069"368e!%j@!!![#dkkr`iQE2r),bX!(UN83UX!(LmV!"4
X1ZJ4i@%p1Z[m!F!!QAdjH6R919J!!F!"1ANje6PErl%MR#""1Z[l8*Qcrb#mV!"4
X1ZJ3d@%mNE2r))QS!&#J4*'cra$!U!"TJ!!$H*%3[%UKc*%3-DJ&@!(KZ!!$#2A`
X!!Irm$'i!"rrmEJ!!P%+RU0JJ(be!rq`r2!)!6VS#,&4228$rrNKZrr!r,[rq*%3
Xr+J"i2c`#!$BZrrl@I!#@2`01ZJ1Q@%mr!$mm!9BN4$mU!(K1ZJ#5@%mr!+LR2c`
X!!cmmrre1ZJ#!@%mp32rk2c`!"$mm!!&KEPK228$rq%KZrr!r,[rk2blrq#mZrqb
XSlbmZrqbSf9*ZrraJ!2pQ3QFN4$mU!(LSNcmm!J!N4$mU!(LSN54%8QS!H'!)*%3
XeI!!8!(KJ#*!!I!""C`$r(LmV!"41ZJ-k@%p1Z[h-F!"-h`J36Pj1G8j@rr`f,J!
X+PQi!#$m$,`p)E2r-2c`J$URV9%pJ#$r`!*!'5(VrpNKXrm`r2!J!UHY46dKXrma
X)E`!%2c`)%+RV3QHSB6!I2`"1ZJ*m9%mr!#m25'crc$mm)!kTke425&G)E2r@2c`
X)$URV8%p)E2r-5'creMmm!!5Tkf!)31!!N!C)H[rf5'creMmm#!DTkcBZ!!Jr!bm
X25'crc$mm)!kTke425'crc%KXrpBr2!!!UHY)E2r@5'lrr$mm%"#TkdKZrra)E2r
X-2c`3$URVB!J!N!K)H[rf5'crc$mm#!LTkfa%5'lrr%KXrm`r2"!1UHYJ#,r`!*!
X'5(VrpNKXrm`r2!J!UHY)E2r-5'lrr$mm%"#TkdKXrma)E2rJ2c`!%+RVB!j)E[r
Xm5'cri$mm%!kTke925'cri$mm!"DTkdKXrq")E`!%2c`J%+RV0Km`!djH6R919[r
Xi3QHSB6!I2`"1ZJ&D9%mr!#m25'crc$mm)!kTke42B!K!hrr!!*!%5(VrpNKXrm`
Xr2!J'UHY)E2r-5'lrr$mm%"#TkcBZ!!Jr!bm25'crc$mm)!kTke425'lrr%KXrpB
Xr2"!1UHY)E2r@5'crc$mm!!5Tkf!)2r!!N!C)H[rf5'creMmm#!kTkdKZrra)E2r
XU2c`3$URV5'crkNKXrpBr2!!#UHY)E2r@5'crc$mm!!5Tkf!)3!#3"dKkrrC)E2r
X-2c`)"+RV5'crc%KZrrJr2"!3UHY)E[rm5'crc$mm%!kTkf!)2q!!N!C)H[rf5'c
Xrc$mm#!LTkf8`0Li!#$m$,`p)E2r-2c`J$URV9%p)E[ri5'crc$mm%!+TkdKXrma
X)E[ri2c`3%+RV5'lrq%KXrq!r2"!1UHY96dKXrq!r2!!@UHY)E2rJ5'm!"$mm)"#
XTkcBI-!01ANje6PB!!!aZ!*!$#'m'-#i!#'!'-#i!#%4!6Pj1G8j@!!!f,J!)YQi
X!#Qm'-#i!#'!%-#i!#NjH6R919J!!0Li!#,CZ!!TX"M!Z!!KJ"$!Z!!T1ANje)'m
X!"+!T6[S!+L"[!!5J+Nlk!#!JE`!%S#01qJ!@)#m!"+%L6[S!!N2YrribJ#!)6R9
X$lIrq-S"1G3#3A4`!-J!!4&*@8J#3!`S!(`!!)!#3"`N!3fpXE'&`Ff8qp!:
Eof_Shar_collapse.Hqx
echo 'Original Sum -> 45260 3'
echo -n 'Current Sum -> '
sum collapse.Hqx
echo x - collapse.c
sed 's/^X//' << 'Eof_Shar_collapse.c' > collapse.c
X/* --------------- Collapse ---------------
X *
X * Make the windows on the screen collapse.
X * Written in Aztec C.
X *
X * Author: Fons Rademakers, Nikhef-h/CERN
X * Version: 29-oct-1985
X * Revision:
X *
X */
X
X#asm
Xmain
X dc.w $6400 ;ctl-enable, need time and locked in mem.
X dc.w 0 ;update as often as possible
X dc.w $0001 ;don't react on any specific event
X dc.w 0 ;no menu
X
X dc.w open_-main ;open routine
X dc.w nop_-main ;prime routine
X dc.w control_-main ;control routine
X dc.w nop_-main ;status routine
X dc.w close_-main ;close routine
X
Xtitle_
X dc.b 8
X dc.b "Collapse"
X ds 0 ;for alignment
X
X public _Uend_,_Dorg_,_Cend_
X
Xsave_
X lea main+(_Uend_-_Dorg_)+(_Cend_-main),a4 ;set up globals
X move.l a0,Pbp_ ;save pb pointer
X move.l a1,Dp_ ;save DCE pointer
X rts
X
Xrestore_
X move.l Pbp_,a0
X rts
X#endasm
X
X#define _DRIVER
X#define SMALL_MEM
X#include <quickdraw.h>
X#include <memory.h>
X#undef SMALL_MEM
X#include <event.h>
X#include <pb.h>
X#include <desk.h>
X
X#define NULL (0L)
X
X#define BASE1 512 /* Mac screen size in x direction */
X#define BASE2 342 /* Mac screen size in y direction */
X
X#define SP (*(struct storage **)Dp->dCtlStorage)
X
XDCEPtr Dp;
XParmBlkPtr Pbp;
X
XRect wind_rect = {0, 0, 0, 0};
X
Xstruct storage {
X GrafPtr flowport; /* the flow grafport */
X Pattern gray;
X short portspace[54]; /* space for the flowport */
X short y;
X};
X
Xopen()
X{
X register WindowPtr wp;
X register struct DCE *dp;
X register struct storage *sp;
X extern char title[];
X struct windowpeek {
X GrafPort port;
X int windowKind;
X };
X short x, i;
X
X save();
X dp = Dp;
X if (dp->dCtlWindow == NULL) {
X HLock(dp->dCtlStorage = NewHandle((long) sizeof(struct storage)));
X sp = SP;
X /* create an invisible window */
X dp->dCtlWindow =
X wp = NewWindow(NULL, &wind_rect, title, FALSE, plainDBox, -1L, FALSE,
XNULL);
X ((struct windowpeek *)wp)->windowKind = dp->dCtlRefNum;
X /* allocate space for new flowport */
X &sp->flowport->device = sp->portspace;
X OpenPort(sp->flowport);
X /* set start y value */
X sp->y = 20;
X /* gray pattern */
X StuffHex(sp->gray, "\PAA55AA55AA55AA55");
X /* set the background pattern to gray */
X BackPat(sp->gray);
X /* set the pen pattern to gray */
X PenPat(sp->gray);
X
X HUnlock(dp->dCtlStorage);
X }
X restore();
X return(0);
X}
X
X
Xclose()
X{
X register struct DCE *dp;
X
X save();
X dp = Dp;
X /* get rid of the allocated space for the window */
X DisposeWindow(dp->dCtlWindow);
X dp->dCtlWindow = NULL;
X DisposHandle(dp->dCtlStorage);
X restore();
X return(0);
X}
X
X
Xnop()
X{
X return(0);
X}
X
X
X
X
Xcontrol()
X{
X register struct DCE *dp;
X register struct storage *sp;
X short x, i;
X short xdest, ydest;
X Rect destrect;
X RgnHandle dummyrgn;
X
X save();
X dp = Dp;
X HLock(dp->dCtlStorage);
X sp = SP;
X switch (Pbp->u.cp.csCode) {
X case accRun: /* time to flow the screen */
X SetPort(sp->flowport);
X if (sp->y <= BASE2) {
X for (i = 1; i <= 7; i++) {
X dummyrgn = NewRgn();
X x = jrand(BASE1);
X SetRect(&destrect, x, sp->y, min(x+150, BASE1), rand(sp->y, BASE2));
X xdest = rand(-3, 3);
X ydest = rand(1, 4);
X ScrollRect(&destrect, xdest, ydest, dummyrgn);
X DisposeRgn(dummyrgn);
X }
X MoveTo(0, sp->y);
X LineTo(BASE1, sp->y);
X sp->y++;
X } else
X sp->y = 20;
X break; /* end case */
X }
X HUnlock(dp->dCtlStorage);
X restore();
X return(0);
X}
X
X
X/* Return random number uniformly distributed on [min,max].
X * Note that Random() delivers a value on [-32768,32767]. */
Xrand(min, max)
Xint min, max;
X{
X float ran;
X
X ran = (max - min + 1.0)*(float)abs(Random())/32768.0 + min;
X return((ran < 0) ? --ran : ran);
X}
X
X
X/* Return random number, on base [0, base>, with quadratic emphasis
X * round base/2. */
Xjrand(base)
Xint base;
X{
X float x, ran;
X
X x = (float)abs(Random())/32767.0; /* random number uniformly on [0,
X1> */
X ran = 2.0*(float)base*x*(1.0 - x);
X if (x >= 0.5)
X ran = (float)base - ran;
X return(ran);
X}
X
X
X
X/* Return absolute value of an integer */
Xabs(n)
Xint n;
X{
X return((n > 0) ? n : -n);
X}
X
X
X
X/* Return the max integer */
Xmax(a, b)
Xint a, b;
X{
X return((a > b) ? a : b);
X}
X
X
X/* Return the min integer */
Xmin(a, b)
Xint a, b;
X{
X return((a < b) ? a : b);
X}
X
Eof_Shar_collapse.c
echo 'Original Sum -> 36199 5'
echo -n 'Current Sum -> '
sum collapse.c
echo x - flow.Hqx
sed 's/^X//' << 'Eof_Shar_flow.Hqx' > flow.Hqx
X(This file must be converted with BinHex 4.0)
X
X:"%CXEhF!4%C*6%406eB!N!J(-,P#!*!%!3#3!`Ei!!!&q!#3!cJ!N2)&p'3!N!3
X"!*!$,!%Q!6!"*J$i"%CXEhF!5IS&fLP)rm3T5Ir)6R8JE2r%6R919[rm51F-%'(
XL+#crb#4%5US!(QB!!*BN4#m+,c`!N!0k6VS&4&K2*&mP3!!8,`"1ZJ8B@%mNE2r
X))QS!&#S4*%3[#N+R3UG)E2qm5(VrQ%*R2c`!!Lmmrj!%3QG#TkN6)"mQ3#4I*8!
X!(L4%0fS!'!"X*%8Q"GDm!*!$$#5$*%8[%UK[*%9#DJ"i*%9BLLm+5(S!*UKQ*%9
XBLLm+U(`N4#mU!"41ZJ5X@%p1Z[p-F!"-h`J`6Pj1G4"'N"!!6PB!!#m,6VVr'#C
XXrmJ[+`!HU44#U`!H,bX!&%kk"(4B6dkkr`T`!#CI6Pj1G8j@!!"`!%jH6R919[r
XX51F)%%kkrYiQE2r),bX!&%kk"$"B6b4XrmJLDJ!8+"%NE2r%-#S!'Q!!!0SN4#m
X5U(-N4!aU!9B!H'i!!-!pI!!"rr`-EJ!(rraZ!!#53UHSf#!I,8$rl$mm!J"1ZJ)
XS9%mp32rq5'lrm$mZrriN4$mU!(Jr2!)!0LlrrYCm!*Br!dkk!k*B6cm!2c`"9L4
X%2bS!H%kk!)jB6cm!U+Fr2!!$2ccrr@&m@%mp32rk2c`!"$mm!!&KE&K228$rq%K
XZrr!r,[rk2blrq#mZrqbSlbmZrqbSf9*ZrraJ!2pS3QFN4$mU!(LSNcmm!J!N4$m
XU!(LSN54%8QS!H'!'*%4#DJ"iB!L3!(`!3@F!rb)[+`!86VS$1PK26VVpfR!!60m
X)%%jH6R919[rm0Li!#TCZ!!Jr!bm25'crc$mm)!kTke42B!Jrm!#3"NKkrrC)E2r
X-2c`)!+RV88p)E2r-5'm!"$mm#"#Tkd*RU'%`(cm!6VS#I&422`![$dKXrm`r2#!
X1UHY86dKA5'creMmm#!kTke"25'crc%KXrpBr2!!%UHYJ#%$J!*!'5(VrpNKXrpB
Xr2!J'UHXf,J!)2`-[$dKXrm`r2#!1UHY86dKXrma)E2r@2c`!!+RV5'creNKZrr`
Xr2"!3UHY)E[rm5'crc$mm%!kTkf!)!*!)5(VrpNKXrm`r2!J)UHYX4%KZrra)E2r
X-2c`3$URVB!Lrm!#3"NKkrrC)E2r-2c`)!+RV5'crc%KZrr`r2"!3UHY)E2r-5'c
Xri$mm!"#Tkf!15'lrr%KXrq!r2"!1UHY96dKXrq!r2!!@UHY)E2rJ5'm!"$mm)"#
XTkcBI-!01ANje6PErq%*RU'%`(cm!6VS"@P422`![$dKXrm`r2#!1UHY86f!)31!
X!N!C)H[rf5'crc$mm#!DTkdKXrma)E[rm2c`3%+RV0Li!#$m$,`p)E2r-2c`J$UR
XV9%p)E[rm5'creMmm%!kTkdKXrpC)E2r-2c`!"+RVB!Jrm!#3"NKkrrC)E2r@2c`
X)$URV5'lrr%KXrqSr2"!1UHY)E2rU5'creMmm!!+TkdKXrpC)E2r-2c`!"+RVB!K
X!!*!(5(VrpNKXrm`r2!J%UHY)E2r-5'lrq$mm%"#TkdKZrra)E2r-2c`3$URVB!J
Xri!#3"NKkrrC)E2r-2c`)#+RVC6!f,J!)2`-[$dKXrm`r2#!1UHY86dKZrrK)E2r
X-2c`3!URV5'crc%KZrrJr2"!3UHY)E[ri5'cri$mm%!kTke925'cri$mm!"DTkdK
XXrq")E`!%2c`J%+RV0Km`!djH6R919J!!$'i!N!-)E`B`,J!)B!B`,J!)4%"1ANj
Xe6PB!!$BZ!!LfEJ!+E`B`,J!)B!3`,J!+6Pj1G8j@!!!f,J!)YQi!#Q`'-#i!#'!
X%-#i!#NjH6R8JE`!%S#P1qJ!U)'m!"+!U6[S!)#"[!!5J)dlk!"BJ,`!%S5*1qJ!
X#3qhrrM+!)!K1G82YrribJ%je!*"G(!!b!!"%8PC5!*!$#J!I!!!J!*!("3"'E'p
Xhe-`:
Eof_Shar_flow.Hqx
echo 'Original Sum -> 38094 3'
echo -n 'Current Sum -> '
sum flow.Hqx
echo x - flow.c
sed 's/^X//' << 'Eof_Shar_flow.c' > flow.c
X/* ----------------- flow -----------------
X *
X * Make the Mac screen flow away.
X * Written in Aztec C.
X *
X * Author: Fons Rademakers, Nikhef-h/CERN
X * Version: 29-oct-1985
X * Revision:
X *
X */
X
X#asm
Xmain
X dc.w $6400 ;ctl-enable, need time and locked in mem.
X dc.w 0 ;update as often as possible
X dc.w $0001 ;don't react on any specific event
X dc.w 0 ;no menu
X
X dc.w open_-main ;open routine
X dc.w nop_-main ;prime routine
X dc.w control_-main ;control routine
X dc.w nop_-main ;status routine
X dc.w close_-main ;close routine
X
Xtitle_
X dc.b 4
X dc.b "Flow"
X ds 0 ;for alignment
X
X public _Uend_,_Dorg_,_Cend_
X
Xsave_
X lea main+(_Uend_-_Dorg_)+(_Cend_-main),a4 ;set up globals
X move.l a0,Pbp_ ;save pb pointer
X move.l a1,Dp_ ;save DCE pointer
X rts
X
Xrestore_
X move.l Pbp_,a0
X rts
X#endasm
X
X#define _DRIVER
X#define SMALL_MEM
X#include <quickdraw.h>
X#include <memory.h>
X#undef SMALL_MEM
X#include <event.h>
X#include <pb.h>
X#include <desk.h>
X
X#define NULL (0L)
X
X#define BASE1 512 /* Mac screen size in x direction */
X#define BASE2 342 /* Mac screen size in y direction */
X
X#define SP (*(struct storage **)Dp->dCtlStorage)
X
XDCEPtr Dp;
XParmBlkPtr Pbp;
X
XRect wind_rect = {0, 0, 0, 0};
X
Xstruct storage {
X GrafPtr flowport; /* the flow grafport */
X Pattern black;
X short portspace[54]; /* space for the flowport */
X short y;
X};
X
Xopen()
X{
X register WindowPtr wp;
X register struct DCE *dp;
X register struct storage *sp;
X extern char title[];
X struct windowpeek {
X GrafPort port;
X int windowKind;
X };
X short x, i;
X
X save();
X dp = Dp;
X if (dp->dCtlWindow == NULL) {
X HLock(dp->dCtlStorage = NewHandle((long) sizeof(struct storage)));
X sp = SP;
X /* create an invisible window */
X dp->dCtlWindow =
X wp = NewWindow(NULL, &wind_rect, title, FALSE, plainDBox, -1L, FALSE,
XNULL);
X ((struct windowpeek *)wp)->windowKind = dp->dCtlRefNum;
X /* allocate space for new flowport */
X &sp->flowport->device = sp->portspace;
X OpenPort(sp->flowport);
X /* set start y value */
X sp->y = 0;
X /* black pattern */
X StuffHex(sp->black, "\PFFFFFFFFFFFFFFFF");
X /* set the background pattern to black */
X BackPat(sp->black);
X
X HUnlock(dp->dCtlStorage);
X }
X restore();
X return(0);
X}
X
X
Xclose()
X{
X register struct DCE *dp;
X
X save();
X dp = Dp;
X /* get rid of the allocated space for the window */
X DisposeWindow(dp->dCtlWindow);
X dp->dCtlWindow = NULL;
X DisposHandle(dp->dCtlStorage);
X restore();
X return(0);
X}
X
X
Xnop()
X{
X return(0);
X}
X
X
X
X
Xcontrol()
X{
X register struct DCE *dp;
X register struct storage *sp;
X short x, i;
X short xdest, ydest;
X Rect destrect;
X RgnHandle dummyrgn;
X
X save();
X dp = Dp;
X HLock(dp->dCtlStorage);
X sp = SP;
X switch (Pbp->u.cp.csCode) {
X case accRun: /* time to flow the screen */
X SetPort(sp->flowport);
X if (sp->y <= BASE2) {
X for (i = 1; i <= 7; i++) {
X dummyrgn = NewRgn();
X x = jrand(BASE1);
X SetRect(&destrect, x, sp->y, min(x+150, BASE1), rand(sp->y, BASE2));
X xdest = rand(-3, 3);
X ydest = rand(1, 4);
X ScrollRect(&destrect, xdest, ydest, dummyrgn);
X DisposeRgn(dummyrgn);
X }
X MoveTo(0, sp->y);
X LineTo(BASE1, sp->y);
X sp->y++;
X } else
X sp->y = 0;
X break; /* end case */
X }
X HUnlock(dp->dCtlStorage);
X restore();
X return(0);
X}
X
X
X/* Return random number uniformly distributed on [min,max].
X * Note that Random() delivers a value on [-32768,32767]. */
Xrand(min, max)
Xint min, max;
X{
X float ran;
X
X ran = (max - min + 1.0)*(float)abs(Random())/32768.0 + min;
X return((ran < 0) ? --ran : ran);
X}
X
X
X/* Return random number, on base [0, base>, with quadratic emphasis
X * round base/2. */
Xjrand(base)
Xint base;
X{
X float x, ran;
X
X x = (float)abs(Random())/32768.0; /* random number uniformly on [0,
X1> */
X ran = 2.0*(float)base*x*(1.0 - x);
X if (x >= 0.5)
X ran = (float)base - ran;
X return(ran);
X}
X
X
X
X/* Return absolute value of an integer */
Xabs(n)
Xint n;
X{
X return((n > 0) ? n : -n);
X}
X
X
X
X/* Return the max integer */
Xmax(a, b)
Xint a, b;
X{
X return((a > b) ? a : b);
X}
X
X
X/* Return the min integer */
Xmin(a, b)
Xint a, b;
X{
X return((a < b) ? a : b);
X}
X
Eof_Shar_flow.c
echo 'Original Sum -> 38940 5'
echo -n 'Current Sum -> '
sum flow.c
exit