Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!mcvax!enea!sicsten!roland From: roland@sicsten.UUCP (Roland Karlsson) Newsgroups: net.sources.mac Subject: cubes source Message-ID: <1188@sicsten.UUCP> Date: Wed, 30-Jul-86 22:31:12 EDT Article-I.D.: sicsten.1188 Posted: Wed Jul 30 22:31:12 1986 Date-Received: Fri, 1-Aug-86 07:52:17 EDT Reply-To: roland@sics.UUCP (Roland Karlsson) Organization: Swedish Institute for Computer Science (SICS) Lines: 336 This is a shar file of the source code in SuMacC for a graphics demo. It is called cubes and is a new and better version of cube. You can also see it as an "my new address" message. If you delete appropriate lines you can use this source as a minimal demo scel. It contains initialisations necessary and a quit menu. As usual i dont set any restrictions how you use this program. Steal as much as you want. A seperate posting contains the hex code. Roland Karlsson #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # cubes.rc # cubes.h # cubes.c # This archive created: Wed Jul 30 09:55:43 1986 export PATH; PATH=/bin:$PATH if test -f 'cubes.rc' then echo shar: will not over-write existing file "'cubes.rc'" else cat << \SHAR_EOF > 'cubes.rc' cubes.rsrc * Type CubE = STR ,0 New Spinning Cube by Roland Karlsson 1986. Type WIND ,128 Spinning Cube by Roland Karlsson 40 32 320 480 Visible noGoAway 0 0 Type MENU ,256(0) File Quit 'cubes.h' #define WINDOW 128 #define m2PI &255 #define FILE 256 MenuHandle quit_menu; EventRecord event; Rect show_r1, show_r2, show_r3, text_r; BitMap picture_bits; Ptr work_ptr[128]; WindowPtr show_w, dummy_w; WindowRecord w_record; int done_flag = 0; /* PI/2 = 64 PI = 128 3PI/2 = 196 2PI = 256 PI/4 = 32 3PI/4 = 96 5PI/4 = 160 7PI/4 = 224 */ /* 64 * sin(i * 2pi / 256) */ int sinus[256] = { 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 16, 17, 19, 20, 22, 23, 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60, 59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26, 24, 23, 22, 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2, 0, -2, -3, -5, -6, -8, -9, -11, -12, -14, -16, -17, -19, -20, -22, -23, -24, -26, -27, -29, -30, -32, -33, -34, -36, -37, -38, -39, -41, -42, -43, -44, -45, -46, -47, -48, -49, -50, -51, -52, -53, -54, -55, -56, -56, -57, -58, -59, -59, -60, -60, -61, -61, -62, -62, -62, -63, -63, -63, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -63, -63, -63, -62, -62, -62, -61, -61, -60, -60, -59, -59, -58, -57, -56, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -39, -38, -37, -36, -34, -33, -32, -30, -29, -27, -26, -24, -23, -22, -20, -19, -17, -16, -14, -12, -11, -9, -8, -6, -5, -3, -2 }; int b, c, fi1, fi2, i; int p0h, p0v, p1h, p1v, p2h, p2v, p3h, p3v; SHAR_EOF fi # end of overwriting check if test -f 'cubes.c' then echo shar: will not over-write existing file "'cubes.c'" else cat << \SHAR_EOF > 'cubes.c' #include #include #include #include "cubes.h" main() { struct QDVar QDVar; QD = &QDVar; InitGraf(&thePort); InitFonts(); FlushEvents(everyEvent, 0); InitWindows(); show_w = GetNewWindow(WINDOW, &w_record, (WindowPtr) 0); SetRect(&show_r1, 32, 70, 192, 200); SetRect(&show_r2,272, 10, 432, 140); SetRect(&show_r3,224,140, 384, 270); SetRect(&text_r, 0, 10, 280, 100); TEInit(); InitMenus(); InitDialogs((ProcPtr) 0 ); InitCursor(); quit_menu = GetMenu(FILE); InsertMenu(quit_menu, 0); DisableItem(quit_menu, 0); DrawMenuBar(); SetPort(show_w); TextBox("Swedish Institute of Computer Science\r\ Isafjordsgatan 11 / Box 1263\r\ S-163 13 Kista (Stockholm), SWEDEN\r\ roland@sics (..enea!sics!roland)\r", 146, &text_r, teJustCenter); MoveTo(40, 260); DrawString("Push button to exit"); /* Make a copy of the port bit map parameters */ picture_bits.baseAddr = show_w->portBits.baseAddr; picture_bits.rowBytes = show_w->portBits.rowBytes; picture_bits.bounds.top = show_w->portBits.bounds.top; picture_bits.bounds.left = show_w->portBits.bounds.left; picture_bits.bounds.bottom = show_w->portBits.bounds.bottom; picture_bits.bounds.right = show_w->portBits.bounds.right; /* Change size of bit map */ show_w->portBits.rowBytes = 20; SetRect(&show_w->portBits.bounds, 0, 0, 160, 130); done_flag = fi1 = fi2 = 0; for(i = 0; i < 128; i++){ fi1 = (fi1 + 8) m2PI; fi2 = (fi2 + 2) m2PI; /* Create pointer to new bits */ show_w->portBits.baseAddr = work_ptr[i] = NewPtr(2600); b = sinus[fi2]; c = (sinus[( 64 - fi2) m2PI] * 91) / 128; /* 91/128 = sqrt(2) */ /* Compute corners of cube */ p0v = 66 + sinus[fi1]; p0h = 80 + (b * sinus[( 64 - fi1) m2PI]) / 64; p1v = 66 + sinus[(64 + fi1) m2PI]; p1h = 80 + (b * sinus[( - fi1) m2PI]) / 64; p2v = 66 + sinus[(128 + fi1) m2PI]; p2h = 80 + (b * sinus[(- 64 - fi1) m2PI]) / 64; p3v = 66 + sinus[(192 + fi1) m2PI]; p3h = 80 + (b * sinus[(- 128 - fi1) m2PI]) / 64; EraseRect(&show_w->portBits.bounds); /* Draw lines that is not hidden */ if( ! ( ((((fi2 - 192)m2PI) < 64) && (((fi1 - 32)m2PI) < 128)) || ((((fi2 - 128)m2PI) < 64) && (((fi1 - 160)m2PI) < 128)) ) ){ MoveTo(p0h - c, p0v); LineTo(p1h - c, p1v); } if( ! ( ((((fi2 - 192)m2PI) < 64) && (((fi1 - 224)m2PI) < 128)) || ((((fi2 - 128)m2PI) < 64) && (((fi1 - 96)m2PI) < 128)) ) ){ MoveTo(p1h - c, p1v); LineTo(p2h - c, p2v); } if( ! ( ((((fi2 - 192)m2PI) < 64) && (((fi1 - 160)m2PI) < 128)) || ((((fi2 - 128)m2PI) < 64) && (((fi1 - 32)m2PI) < 128)) ) ){ MoveTo(p2h - c, p2v); LineTo(p3h - c, p3v); } if( ! ( ((((fi2 - 192)m2PI) < 64) && (((fi1 - 96)m2PI) < 128)) || ((((fi2 - 128)m2PI) < 64) && (((fi1 - 224)m2PI) < 128)) ) ){ MoveTo(p3h - c, p3v); LineTo(p0h - c, p0v); } if( ! ( ((((fi2 )m2PI) < 64) && (((fi1 - 32)m2PI) < 128)) || ((((fi2 - 64)m2PI) < 64) && (((fi1 - 160)m2PI) < 128)) ) ){ MoveTo(p0h + c, p0v); LineTo(p1h + c, p1v); } if( ! ( ((((fi2 )m2PI) < 64) && (((fi1 - 224)m2PI) < 128)) || ((((fi2 - 64)m2PI) < 64) && (((fi1 - 96)m2PI) < 128)) ) ){ MoveTo(p1h + c, p1v); LineTo(p2h + c, p2v); } if( ! ( ((((fi2 )m2PI) < 64) && (((fi1 - 160)m2PI) < 128)) || ((((fi2 - 64)m2PI) < 64) && (((fi1 - 32)m2PI) < 128)) ) ){ MoveTo(p2h + c, p2v); LineTo(p3h + c, p3v); } if( ! ( ((((fi2 )m2PI) < 64) && (((fi1 - 96)m2PI) < 128)) || ((((fi2 - 64)m2PI) < 64) && (((fi1 - 224)m2PI) < 128)) ) ){ MoveTo(p3h + c, p3v); LineTo(p0h + c, p0v); } if( ! ( ((((fi2 - 64)m2PI) < 128) && (((fi1 - 224)m2PI) < 64)) || ((((fi2 - 192)m2PI) < 128) && (((fi1 - 96)m2PI) < 64)) ) ){ MoveTo(p0h + c, p0v); Line(-2 * c, 0); } if( ! ( ((((fi2 - 64)m2PI) < 128) && (((fi1 - 160)m2PI) < 64)) || ((((fi2 - 192)m2PI) < 128) && (((fi1 - 32)m2PI) < 64)) ) ){ MoveTo(p1h + c, p1v); Line(-2 * c, 0); } if( ! ( ((((fi2 - 64)m2PI) < 128) && (((fi1 - 96)m2PI) < 64)) || ((((fi2 - 192)m2PI) < 128) && (((fi1 - 224)m2PI) < 64)) ) ){ MoveTo(p2h + c, p2v); Line(-2 * c, 0); } if( ! ( ((((fi2 - 64)m2PI) < 128) && (((fi1 - 32)m2PI) < 64)) || ((((fi2 - 192)m2PI) < 128) && (((fi1 - 160)m2PI) < 64)) ) ){ MoveTo(p3h + c, p3v); Line(-2 * c, 0); } /* Dump on screen */ CopyBits(&show_w->portBits, &picture_bits, &show_w->portBits.bounds, &show_r1, srcCopy, (RgnHandle) 0); } EnableItem(quit_menu, 0); DrawMenuBar(); while(1){ for(i = 0; i < 128; i++){ GetNextEvent(everyEvent, &event); if(event.what == mouseDown) if(FindWindow(&event.where, &dummy_w) == inMenuBar){ if(HiWord(MenuSelect(&event.where)) == FILE) done_flag++; HiliteMenu(0); } if(done_flag){ OffsetRect(&show_r1, 0, 2); OffsetRect(&show_r2, 2, 0); OffsetRect(&show_r3, 2, 2); if(done_flag++ == 200){ /* A simple and frightening sound effect */ for(i = 0; i < 10; i++) SysBeep(0); SysBeep(5); ShowCursor(); ExitToShell(); } } /* Set pointer to work bits */ show_w->portBits.baseAddr = work_ptr[i]; /* Dump on screen */ CopyBits(&show_w->portBits, &picture_bits, &show_w->portBits.bounds, &show_r1, srcCopy, (RgnHandle) 0); show_w->portBits.baseAddr = work_ptr[(i + 33)&127]; CopyBits(&show_w->portBits, &picture_bits, &show_w->portBits.bounds, &show_r2, srcCopy, (RgnHandle) 0); show_w->portBits.baseAddr = work_ptr[(-i)&127]; CopyBits(&show_w->portBits, &picture_bits, &show_w->portBits.bounds, &show_r3, srcCopy, (RgnHandle) 0); } } } SHAR_EOF fi # end of overwriting check # End of shell archive exit 0