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