games@tekred.CNA.TEK.COM (05/17/89)
Submitted-by: Glenn Kreisel <glenn@midget.towson.edu> Posting-number: Volume 6, Issue 72 Archive-name: mex/Part01 [I played this on a Sun 3/60, OS 3.5 and it seems to work well. I especially like the cute pictures on the blocks. -br] #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 2)." # Contents: README MANIFEST mex.c mex_look.c mex_scores.c # still_block.icon # Wrapped by billr@saab on Wed May 17 08:33:13 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(1872 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X/************************************************************************** X Mex was copyrighted by Glenn Kreisel on April 1989. X X This program may be redistributed without fee as long as this copyright X notice is intact. X X==> PLEASE send comments and bug reports to one of the following addresses: X X ARPA-Internet: glenn@midget.towson.edu X BITNET: S72QKRE@TOWSONVX.BITNET X X X**************************************************************************/ X X Mex is an arcade style game that enhances your spatial X awareness. In short, the object is to not let the rows X build up at the bottom of the screen. Very simular to a X popular arcade style game called Tetris. Information during X game execution will explain which control keys are used. X X X X X XHow to install Mex X X1) Unpack all of the archive files into the same directory. X This should be the directory of final residence for the executable. X X2) While in csh, type: ** X X printenv X X and be sure that the environment variable PWD appears and is set to X the current directory; otherwise, you must modify the Makefile, defining X PWD explicitly as the full path to the directory in which you have X unpacked the files. X X3) Type the following command: X X % make X or X % make install X X5) To clean up, you may remove all but the following files: X X mex X info.file X mex.hiscores X X6) To play Mex simply type: X X % mex X XNOTES: X You can just press the "info" button on the right X control panel to display the info. You are welcome to X redefine the blocks used in the game. They are standard X cursor (16x16) icons created with the icon editor. X X------------- X** I have modified the Makefile to use an explicit path, as this Xwill generally be installed in a common lib dir, rather than the Xdirectory it is unpacked in. <billr@saab.CNA.TEK.COM> END_OF_FILE if test 1872 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(747 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X MANIFEST 1 X Makefile 2 X README 1 X block1.icon 2 X block2.icon 2 X block3.icon 2 X block4.icon 2 X block5.icon 2 X block6.icon 2 X block7.icon 2 X hiscore.icon 2 X info.file 2 X mex.c 1 X mex.h 2 X mex.hiscores.uu 2 X mex.icon 2 X mex_look.c 1 X mex_scores.c 1 X objects.h 2 X screens.h 2 X still_block.icon 1 END_OF_FILE if test 747 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'mex.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mex.c'\" else echo shar: Extracting \"'mex.c'\" \(17519 characters\) sed "s/^X//" >'mex.c' <<'END_OF_FILE' X/* ALL code in this program may be used for personal use */ X/* and this program may be distributed as long as this copyright */ X/* heading is attached to each source code file. Distribution must */ X/* be done FREE of charge................ */ X/* Glenn Kreisel */ X/* glenn@midget.towson.edu */ X/* S72QKRE@TOWSONVX.BITNET */ X#include "mex.h" Xextern Panel_item rows_left_string; Xextern ring_bell(); Xextern Panel_item level_num; Xextern Panel_item score_string,rows_string; Xextern Panel_item level_string; Xextern Panel right_panel; Xextern Panel_item restart_button,start_button; Xextern void do_mex_look(); Xextern void read_in_scores(); Xextern void write_out_scores(); Xextern void insert_score(); Xextern void freeze_proc(); Xextern char **define_2d(); X Xextern Frame frame; Xextern Panel_item show_next; XPixfont *bold, *cour; Xextern Canvas game_canvas; X X Xstatic short box[] = { X#include "block1.icon" X}; Xmpr_static(block, block_icon_width, block_icon_height, 1, box); X Xstatic short box1[] = { X#include "block2.icon" X}; Xmpr_static(block2, block_icon_width, block_icon_height, 1, box1); X Xstatic short box2[] = { X#include "block3.icon" X}; Xmpr_static(block3, block_icon_width, block_icon_height, 1, box2); X Xstatic short box3[] = { X#include "block4.icon" X}; Xmpr_static(block4, block_icon_width, block_icon_height, 1, box3); X Xstatic short box4[] = { X#include "block5.icon" X}; Xmpr_static(block5, block_icon_width, block_icon_height, 1, box4); X Xstatic short box5[] = { X#include "block6.icon" X}; Xmpr_static(block6, block_icon_width, block_icon_height, 1, box5); X Xstatic short box6[] = { X#include "block7.icon" X}; Xmpr_static(block7, block_icon_width, block_icon_height, 1, box6); X Xstruct object_struct { X struct object_struct *next_pointer; X Pixrect *block_type; X char x[4]; X char y[4]; X}; X X#include "objects.h" X Xstruct object_struct *objects[7] = {<red_piece, <green_piece, X &yellow_piece, &blue_piece, X &white_piece, &red_piece, &green_piece X}; Xstruct object_struct *current_object; X Xint key=0; X Xchar black[char_width * char_width]; X Xstruct xy { X int x; X int y; X }; X Xstruct xy still_blocks[22]; Xint num_stationary; X Xstatic short still_box[] = { X#include "still_block.icon" X}; Xmpr_static(still_block_type, block_icon_width, block_icon_height, 1, still_box); X X X#include "screens.h" X Xchar **screen; XPixwin *pw; XPixwin *right_panel_pw; Xint frozen=0, top_of = 0, key_up = 0, fast = 0,score=0,level=0,sound_on=0; Xint c,rows_needed=0,num_rows=0,rows=0,restart=0,drop_score,DELAY,sun3_delay; Xint speed,speed_add=0,something_on_screen=0; XPixrect *black_pr; X X X/* /userb/shirley/icons/tetrix 64x64 */ X Xmain(argc,argv) Xint argc; Xchar **argv; X{ X int i, j; X Event event; X char num_str[5]; X Rect start; X X DELAY=5; X sun3_delay=0; X if(system("sparc")!=0) {sun3_delay=3; DELAY=1;} X X srand((int)time(0)); X X if (!(bold = pf_open("/usr/lib/fonts/fixedwidthfonts/gallant.r.19"))) X bold = pf_default(); X X if (!(cour = pf_open("/usr/lib/fonts/fixedwidthfonts/cour.r.24"))) X cour = pf_default(); X X for (i = 0; i < char_height * char_width; i++) X black[i] = 255; X X black_pr = mem_point(char_width, char_height, 1, black); X X X screen = define_2d(width + 2, height+1); X do_mex_look(&argc,argv); X for(i=1;i<argc;i++) X { X if(strcmp(argv[i],"-SUN3")==0 || strcmp(argv[i],"-sun3")==0) {sun3_delay=3; DELAY=1;} X if(strcmp(argv[i],"-so")==0) sound_on=1; X } X right_panel_pw=(Pixwin *)window_get(right_panel,WIN_PIXWIN); X window_set(frame,WIN_SHOW,TRUE,0); X X (void) notify_dispatch(); X restart=GAME_OVER; X do X { X while(restart!=GAME_OVER && restart!=EXIT_GAME) X { X restart=Do_game(); X if(restart==GAME_OVER) X insert_score(score,rows); X X panel_set(start_button,PANEL_SHOW_ITEM,TRUE,0); X panel_set(restart_button,PANEL_SHOW_ITEM,FALSE,0); X X } X restart=GAME_OVER; X (void) notify_dispatch(); X usleep(200); X } while(restart!=EXIT_GAME); X X free(*screen); X free(screen); X exit(0); X} X Xchar ** Xdefine_2d(wid, hei) X int wid, hei; X{ X char *a; X int i; X char **aa; X X a = (char *) calloc(wid * hei, sizeof(char)); X aa = (char **) calloc(hei, sizeof(char *)); X for (i = 0; i < hei; i++) { X aa[i] = a; X a += wid; X } X X return (aa); X} X X Xclear_screen() X{ X Rect r; X int x, y; X for (y = 0; y < height; y++) X for (x = 0; x < width+2; x++) X screen[y][x] = 0; X for (x = 0; x < width + 2; x++) X { X screen[height][x] = 1; X screen[0][x]=1; X } X X for (x = 0; x < height; x++) { X screen[x][width + 1] = 1; X screen[x][0] = 1; X } X X do_split_screen(); X something_on_screen=0; X top_of=255; X if(level==10) {level=0; speed_add++;} X x=level; X rows_needed=10; X speed=13; X X pw_batch_on(pw); X if(x==1 && speed_add>0) X { X do_GMK(); X speed=9; X rows_needed=17; X } X if(x==2 && speed_add>0) X { X do_CLW(); X speed=10; X rows_needed=16; X } X X if(x==3) X { X if(speed_add==0){ X num_stationary=do_columns(); X display_stationary_stuff(); X } X else do_SMILE(); X rows_needed=13; X speed=11; X } X X if(x==4) X { X num_stationary=pick_random_station_pos(4); X display_stationary_stuff(); X rows_needed=15; X speed=12; X } X if(x==5) X { X num_stationary=pick_random_station_pos(5); X display_stationary_stuff(); X speed=10; X rows_needed=12; X } X if(x==6) X { X do_triangle(); X rows_needed=11; X speed=10; X } X if(x==7) X { X do_screen10(); X rows_needed=13; X speed=10; X } X X if(x==8) X { X do_side_triangles(); X speed=8; X X } X if(x==9) X { X do_hex(); X } X X if(speed>speed_add) speed=(speed-(speed_add*2))+sun3_delay; X bump_level(0); X pw_batch_off(pw); X} X Xdo_split_screen() X{ Xregister i,x; XRect r; X pw_get_region_rect(pw,&r); X Xif(something_on_screen) X { X x=r.r_width >> 1; X for(i=0;i<x;i++) X { X pw_batch_on(pw); X pw_copy(pw,0,0,x-i-1,r.r_height,PIX_SRC,pw,1,0); X pw_copy(pw,x+i+1,0,r.r_width-(x+i)-1,r.r_height,PIX_SRC,pw,x+i,0); X pw_batch_off(pw); X } X } X X pw_batch_on(pw); X pw_writebackground(pw,0,0,r.r_width,r.r_height,PIX_SRC); X pw_vector(pw, 14, 0, 14, height * char_height, PIX_SRC, 3); X pw_vector(pw, (width + 1) * char_width, 0, (width + 1) * char_width, height * char_height, PIX_SRC, 3); X X pw_replrop(pw, char_width, (height-1) * char_height, X (width) * char_width, char_height, X PIX_SRC , black_pr, 0, 0); X pw_batch_off(pw); X/* Clear Show Next space in right panel */ X pw_writebackground(right_panel_pw,20,25, X char_width*object_width,char_height*object_height,PIX_SRC); X} X Xinit_screen() X{ Xint x; X X X score=num_rows=level=rows=0; X speed_add=0; /* change this one now man */ X level=(int)panel_get_value(level_num); X clear_screen(); X X bump_rows(0); X bump_score(0); X bump_level(0); X bump_rows_left(); X X restart=RUNNING; X X X} X X X Xcheck_rot(x, y) X int x, y; X{ X int ob_x; X X for (ob_x = 0; ob_x < object_width; ob_x++) X if (screen[1+y + current_object->next_pointer->y[ob_x]] X [x + current_object->next_pointer->x[ob_x]] == 1) X return (0); X return (1); X} X X Xcheck_left(x, y) X int x, y; X{ X int ob_x; X X for (ob_x = 0; ob_x < object_width; ob_x++) X if (screen[1+y + current_object->y[ob_x]][x + current_object->x[ob_x] - 1] == 1) X return (0); X return (1); X} X Xcheck_right(x, y) X int x, y; X{ X int ob_x; X X for (ob_x = 0; ob_x < object_width; ob_x++) X if (screen[1+y + current_object->y[ob_x]][x + current_object->x[ob_x] + 1] == 1) X return (0); X return (1); X} X Xvoid my_directions(win,my_event) XWindow win; XEvent *my_event; X{ Xint id=event_id(my_event); X X X if ((id==MS_LEFT || id=='j') && X event_is_down(my_event)) { X key = 1; X } else if ((id==MS_RIGHT || id=='l') && X event_is_down(my_event)) { X key = 2; X } else if ((id==MS_MIDDLE || id=='k') && X event_is_down(my_event)) { X key = 3; X } else if (id==' ' && X event_is_down(my_event)) { X key = 4; X } X} X Xint Xcheck_keys(x, y) X int x, y; X{ X int key_up; X X for(key_up=0;key_up<(speed)*DELAY;key_up++) (void)notify_dispatch(); X X if (key == 1) { X key=0; X key_up = 1; X if (check_left(x, y)) X x--; X } else if (key == 2) { X key=0; X key_up = 1; X if (check_right(x, y)) X x++; X } else if (key == 3) { X key=0; X key_up = 1; X if (check_rot(x, y)) X current_object = current_object->next_pointer; X } else if(key==4) { X key=0; X fast=1; X drop_score=height-y; X key_up=1; X } X while(frozen) X { X notify_dispatch(); X usleep(200); X } X X return (x); X} X X XDo_game() X{ X register x,y,ob_y,ob_x; X unsigned int time_up, q, hit, value; X struct object_struct *already_got; X struct pr_subregion bound; X X panel_set(start_button,PANEL_SHOW_ITEM,FALSE,0); X panel_set(restart_button,PANEL_SHOW_ITEM,TRUE,0); X pw = canvas_pixwin(game_canvas); X X init_screen(); X srand(rand()); X already_got = objects[rand() % 7]; X while (1) { X fast = hit = 0; X drop_score=1; X X current_object = already_got; X already_got = objects[rand() % 7]; X y = 0-current_object->y[0]; X x = width >> 1; X value = (int) panel_get(show_next, PANEL_TOGGLE_VALUE, 0); X if (value) X for (ob_x = 0; ob_x < object_width; ob_x++) X pw_write(right_panel_pw, X 20+( already_got->x[ob_x]*char_width) , X 25 +(already_got->y[ob_x]*char_height), X block_icon_width, block_icon_height, X PIX_SRC | PIX_DST, X already_got->block_type, 0, 0); X X if (!check_left(x+1, y)) X break; X X for (ob_x = 0; ob_x < object_width; ob_x++) X pw_write(pw, X (x + current_object->x[ob_x]) * char_width, X (y + current_object->y[ob_x]) * char_height, X block_icon_width, block_icon_height, X PIX_SRC | PIX_DST, X current_object->block_type, 0, 0); X X X while (!hit) { X time_up = 0; X while (time_up < MOVES_PER_ROW && !hit) { X time_up++; X if ((time_up == MOVES_PER_ROW) && (hit = yadd(x, y))) X break; X pw_batch_on(pw); X /* blink_stationary_stuff(); */ X for (ob_x = 0; ob_x < object_width; ob_x++) X pw_write(pw, X (x + current_object->x[ob_x]) * char_width, X (y + current_object->y[ob_x]) * char_height, X block_icon_width, block_icon_height, X PIX_SRC ^ PIX_DST, X current_object->block_type, 0, 0); X X if(restart==NEW_GAME) X return(NEW_GAME); X if(restart==EXIT_GAME) X return(EXIT_GAME); X X if ((!fast) && time_up == MOVES_PER_ROW) { X y++; X } X if (fast) X y++; X else X x = check_keys(x, y); X if(fast) X time_up=MOVES_PER_ROW-1; X for (ob_x = 0; ob_x < object_width; ob_x++) { X pw_write(pw, (x + current_object->x[ob_x]) * char_width, (y + current_object->y[ob_x]) * char_height, X block_icon_width, block_icon_height, X PIX_SRC | PIX_DST, current_object->block_type, 0, 0); X } X X pw_batch_off(pw); X X } X X } X X if (top_of > y+current_object->y[0]) X top_of = y+current_object->y[0]; X bump_score(drop_score*5); X fill_in_pos(x, y); X X if(level>6 || speed_add>0) do_maybe_on_top(); X if(speed_add>0 || level>8) do_row_maybe(level); X ring_bell(50000,1); X if (value) X for (ob_x = 0; ob_x < object_width; ob_x++) X pw_write(right_panel_pw, X 20+( already_got->x[ob_x]*char_width) , X 25 +(already_got->y[ob_x]*char_height), X block_icon_width, block_icon_height, X PIX_NOT(PIX_SRC) & PIX_DST, already_got->block_type, 0, 0); X X } X pf_textbound(&bound,9,cour,"Game Over"); X X pw_writebackground(pw, 50+bound.pos.x, (height >> 1) * char_height+bound.pos.y, bound.size.x, bound.size.y,PIX_SRC); X pw_text(pw, 50, (height >> 1) * char_height, PIX_SRC, cour, "Game Over"); X return(GAME_OVER); X} X X Xyadd(x, y) X int x, y; X{ X int ob_x; X for (ob_x = 0; ob_x < object_width; ob_x++) X if ((screen[2 + y + current_object->y[ob_x]][x + current_object->x[ob_x]]) == 1) X return (1); X return (0); X} X X Xfill_in_pos(x, y) X int x, y; X{ X int ob_x, i1, i; X something_on_screen=1; X for (ob_x = 0; ob_x < object_width; ob_x++) { X screen[1+y + current_object->y[ob_x]][x + current_object->x[ob_x]] = 1; X } X check_rows(y); X} X Xbump_rows_left() X{ Xchar dummy[8]; Xsprintf(dummy,"%d",rows_needed); Xpanel_set_value(rows_left_string,dummy); X} Xbump_score(x) Xint x; X{ Xchar dummy[8]; Xscore+=x; Xsprintf(dummy,"%d",score); Xpanel_set_value(score_string,dummy); X} X Xbump_rows(x) Xint x; X{ Xchar dummy[8]; Xrows+=x; Xsprintf(dummy,"%d",rows); Xpanel_set_value(rows_string,dummy); X} X Xbump_level(x) Xint x; X{ Xchar dummy[8]; Xif(level!=MAX_LEVEL) Xlevel+=x; Xsprintf(dummy,"%d",(speed_add*10)+level+1); Xpanel_set_value(level_string,dummy); X} X Xmove_block_down(where) X int where; X{ X X unsigned int i, i1; X char *temp; X X X for (i = 0; i < 14; i++) { X pw_replrop(pw, char_width, where * char_height, X (width) * char_width, char_height, X PIX_SRC ^ PIX_DST, black_pr, 0, 0); X ring_bell(15000,1); X for (i1 = 0; i1 < 15000; i1++); X } X bump_rows(1); X bump_score(100); X pw_batch_on(pw); X for (i = where; i >= top_of; i--) { X pw_copy(pw, char_width, i * char_height, (width) * char_width, char_height, PIX_SRC, pw, char_width, (i - 1) * char_height); X } X pw_batch_off(pw); X X temp = screen[where+1]; X for (i = where+1; i > top_of+1; i--) X screen[i] = screen[i - 1]; X X screen[i] = temp; X X for (i1 = 0; i1 < width + 2; i1++) X screen[i][i1] = 0; X screen[i][0] = 1; X screen[i][width + 1] = 1; X top_of++; X if((--rows_needed)==0) X { X bump_rows_left(); X num_rows=0; X bump_level(1); X bump_score(top_of*5); X for (i = 0; i < top_of; i++) { X pw_replrop(pw, char_width, i * char_height, X (width) * char_width, char_height, X PIX_SRC ^ PIX_DST, black_pr, 0, 0); X for (i1 = 0; i1 < 10000; i1++); X } X X pw_text(pw, 1*char_width, (height >> 1) * char_height, X PIX_SRC^PIX_DST, cour, "Low Level Bonus"); X sleep(2); X pw_text(pw, 1*char_width, (height >> 1) * char_height, X PIX_SRC^PIX_DST, cour, "Low Level Bonus"); X for (i = top_of; i>0; i--) { X pw_replrop(pw, char_width, (i-1) * char_height, X (width) * char_width, char_height, X PIX_NOT(PIX_SRC) & PIX_DST, black_pr, 0, 0); X for (i1 = 0; i1 < 10000; i1++); X } X clear_screen(); X } X bump_rows_left(); X X X} X X Xcheck_rows(y) X int y; X{ X int got_one,i, x, ob_x, where; X where = 999; X got_one=0; X for (ob_x = 0; ob_x < object_width && top_of!=255; ob_x++) { X if (where != current_object->y[ob_x] + y) { X where = current_object->y[ob_x] + y; X for (x = 0; (x < width + 2) && (screen[where+1][x] == 1); x++); X if (x == width + 2) X { X move_block_down(where); X got_one++; X } X } X } X if(got_one>1) { X bump_score(got_one*20); X } X X} X Xdisplay_stationary_stuff() X{ Xint i; Xsomething_on_screen=1; Xfor(i=0;i<num_stationary;i++) X { X pw_write(pw, (still_blocks[i].x) * char_width, X (still_blocks[i].y) * char_height, X block_icon_width, block_icon_height, X PIX_SRC,&still_block_type, 0, 0); X if(top_of>still_blocks[i].y) top_of=still_blocks[i].y; X screen[still_blocks[i].y+1][still_blocks[i].x]=1; X } X} X X Xpick_random_station_pos(x) Xint x; X{ Xint i,i1,per_row; Xi1=0; X Xfor(i=0;i<x;i++) X{ X for(per_row=0;per_row<3;per_row++) X { X still_blocks[i1].x=2+((rand()>>8) % width-1); X still_blocks[i1++].y=(height-2)-i; X } X} Xreturn(i1); X} X Xint do_columns() X{ Xint i,i1; Xi1=0; X for(i=height-2;i>height-8;i--) X { X still_blocks[i1].x=1; X still_blocks[i1++].y=i; X still_blocks[i1].x=width; X still_blocks[i1++].y=i; X X } Xreturn(i1); X} X Xdo_triangle() X{ Xdo_read_in(screen9); X} X Xdo_random_insert() X{ Xint insert_row; Xchar *temp; Xint i,i1; X Xif (top_of<10 || top_of>height-3) return; X insert_row=((rand()>> 8) % ((height-1)-top_of))+top_of; X pw_batch_on(pw); X temp = screen[top_of]; X for (i =top_of ; i <= insert_row; i++) { X pw_copy(pw, char_width, (i-1) * char_height, (width) * char_width, char_height, PIX_SRC, pw, char_width, (i) * char_height); X screen[i] = screen[i + 1]; X } X screen[i] = temp; X pw_writebackground(pw, char_width, (i-1) * char_height, (width) * char_width, char_height,PIX_SRC) ; X pw_batch_off(pw); X X X for (i1 = 0; i1 < width + 2; i1++) X screen[i][i1] = 0; X screen[i][0] = 1; X screen[i][width+1]=1; X for(i=0;i<6;i++) X { X still_blocks[0].x=1+(rand() % (width-1)); X still_blocks[0].y=insert_row; X num_stationary=1; X (void)display_stationary_stuff(); X } X for (i = 0; i < 14; i++) { X pw_replrop(pw, char_width, insert_row * char_height, X (width) * char_width, char_height, X PIX_SRC ^ PIX_DST, black_pr, 0, 0); X ring_bell(15000,1); X for (i1 = 0; i1 < 15000; i1++); X } X top_of--; X} Xdo_row_maybe(x) Xint x; X{ Xif(((rand()>> 8)%50)<(speed_add+1)*2) do_random_insert(); X} X Xdo_maybe_on_top() X{ Xif(((rand()>> 8)%25)<(speed_add+1)*3) do_add_on_top(); X} X Xdo_add_on_top() X{ Xint x,i,i1,column; Xcolumn=1+((rand()>>8)%(width-1)); Xi=1; Xwhile(screen[(++i)][column]==0); Xstill_blocks[0].x=column; Xstill_blocks[0].y=i-2; Xnum_stationary=1; X(void)display_stationary_stuff(); X for (x = 0; x < 14; x++) { X pw_replrop(pw, column*char_width, (i-2) * char_height, X char_width, char_height, X PIX_SRC ^ PIX_DST, black_pr, 0, 0); X ring_bell(15000,1); X for (i1 = 0; i1 < 23000; i1++); X } Xfor (x = 0; (x < width + 2) && (screen[i-1][x] == 1); x++); X if(x==width+2) move_block_down(i-2); X} X Xdo_side_triangles() X{ Xdo_read_in(screen4); X} X Xdo_hex() X{ Xdo_read_in(screen5); X} X Xdo_screen10() X{ Xdo_read_in(screen10); X} Xdo_GMK() X{ Xdo_read_in(screen6); X} X Xdo_CLW() X{ Xdo_read_in(screen7); X} X Xdo_SMILE() X{ Xdo_read_in(screen8); X} X Xdo_read_in(x) Xchar x[][width]; X{ Xint i,y; Xy=0;i=0; X Xwhile(x[y][0]!='e') X{ X for(i=0;i<width;i++) X { X if(x[y][i]=='x') { X still_blocks[0].x=i+1; X still_blocks[0].y=y+(height-6); X num_stationary=1; X display_stationary_stuff(); X } X } X y++; X X} X X} X X X END_OF_FILE if test 17519 -ne `wc -c <'mex.c'`; then echo shar: \"'mex.c'\" unpacked with wrong size! fi # end of 'mex.c' fi if test -f 'mex_look.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mex_look.c'\" else echo shar: Extracting \"'mex_look.c'\" \(14168 characters\) sed "s/^X//" >'mex_look.c' <<'END_OF_FILE' X/* ALL code in this program may be used for personal use */ X/* and this program may be distributed as long as this copyright */ X/* heading is attached to each source code file. Distribution must */ X/* be done FREE of charge................ */ X/* Glenn Kreisel */ X/* glenn@midget.towson.edu */ X/* S72QKRE@TOWSONVX.BITNET */ X#include "mex.h" X#include <suntool/textsw.h> X Xstatic short mex_image[]={ X#include "mex.icon" X}; XDEFINE_ICON_FROM_IMAGE(mex_icon,mex_image); X Xstatic short hiscore_image[]={ X#include "hiscore.icon" X}; Xmpr_static(hiscore_icon,64,64,1,hiscore_image); X Xextern int sound_on; Xextern read_in_scores(); Xextern int restart; Xextern int frozen; Xextern struct each_player hiscore_list[KEEP_SCORES]; Xextern Pixfont *bold; Xextern void my_directions(); XCanvas game_canvas; XFrame frame,hiscore_popup,show_scores_frame,info_frame; XPanel right_panel,bottom_panel,hiscore_panel,show_scores; XPanel_item hiscores_item[KEEP_SCORES]; X XTextsw info_message; X X XPanel_item resume_button,freeze_button,score_string,level_string,name_field, X level_num,show_next,restart_button,start_button, X hiscore_button,take_away_button,rows_string,rows_left_string; X Xint still_type; X Xvoid hi_scores_proc(item,event) XPanel_item item; XEvent *event; X{ Xif(!(int)window_get(show_scores_frame,WIN_SHOW)) X{ Xread_in_scores(); Xupdate_hiscore_window(); Xpanel_set(hiscore_button,PANEL_SHOW_ITEM,FALSE,0); Xpanel_set(take_away_button,PANEL_SHOW_ITEM,TRUE,0); X X} Xelse X{ Xwindow_set(show_scores_frame,WIN_SHOW,FALSE,0); Xpanel_set(take_away_button,PANEL_SHOW_ITEM,FALSE,0); Xpanel_set(hiscore_button,PANEL_SHOW_ITEM,TRUE,0); X} X X X} X Xhiscore_done_proc(frame) XFrame frame; X{ Xwindow_set(show_scores_frame,WIN_SHOW,FALSE,0); Xpanel_set(take_away_button,PANEL_SHOW_ITEM,FALSE,0); Xpanel_set(hiscore_button,PANEL_SHOW_ITEM,TRUE,0); X} X X Xring_bell(on,off) Xunsigned int on,off; X{ X int bell; X int bell_on = KBD_CMD_BELL; X int bell_off = KBD_CMD_NOBELL; X X if(!sound_on) return; X X bell = open("/dev/kbd",1); X ioctl(bell, KIOCCMD, &bell_on); X usleep(on); X ioctl(bell, KIOCCMD, &bell_off); X usleep(off); X close(bell); X X} X Xupdate_hiscore_window() X{ Xchar wholething[140]; Xint i; X Xi=0; Xwhile(hiscore_list[i].score!=-1 && i<KEEP_SCORES) X { X sprintf(wholething,"%2d) %-30s%8d %4d %26s",i+1,hiscore_list[i].name,hiscore_list[i].score,hiscore_list[i].rows,hiscore_list[i].date); X panel_set(hiscores_item[i],PANEL_LABEL_STRING,wholething,0); X i++; X } Xwhile(i<KEEP_SCORES) X panel_set(hiscores_item[i++],PANEL_LABEL_STRING,"",0); Xwindow_fit(show_scores); Xwindow_fit(show_scores_frame); Xwindow_set(show_scores_frame,WIN_SHOW,TRUE,0); X} X Xchar * get_user_name() X{ X char *s; X struct passwd *p; X if (s = (char *)getlogin()) X return (s); X p = (struct passwd *)getpwuid(getuid()); X return (p->pw_name); X} X Xchar * Xget_player_name() X{ Xchar *s; Xpanel_set(name_field,PANEL_VALUE,"",0); Xwindow_set(hiscore_popup,WIN_SHOW,TRUE, X 0); Xwindow_set(hiscore_panel,WIN_GRAB_ALL_INPUT,TRUE,0); X Xwindow_bell(hiscore_popup); Xstill_type=1; Xwhile(still_type) Xnotify_dispatch(); X X Xwindow_set(hiscore_panel,WIN_GRAB_ALL_INPUT,FALSE,0); Xwindow_set(hiscore_popup,WIN_SHOW,FALSE,0); Xs=(char *)panel_get_value(name_field); Xif(s[0]=='\0') return(get_user_name()); Xreturn(s); X} X X Xvoid freeze_proc(item,event) XPanel_item item; XEvent *event; X{ Xif(restart!=GAME_OVER){ Xpanel_set(freeze_button,PANEL_SHOW_ITEM,FALSE,0); Xpanel_set(resume_button,PANEL_SHOW_ITEM,TRUE,0); Xfrozen=1; X} X X} X Xvoid static resume_proc(item,event) XPanel_item item; XEvent *event; X{ Xif(restart!=GAME_OVER){ Xpanel_set(resume_button,PANEL_SHOW_ITEM,FALSE,0); Xpanel_set(freeze_button,PANEL_SHOW_ITEM,TRUE,0); Xfrozen=0; X} X X} X Xvoid static restart_proc(item,event) XPanel_item item; XEvent *event; X{ Xrestart=NEW_GAME; Xresume_proc(item,event); X} X Xint do_confirmer() X{ Xreturn(1); X} X Xstatic Notify_value destroy_game(frame,status) XFrame frame; XDestroy_status status; X{ X if(status==DESTROY_CHECKING) { X if(do_confirmer()) X { X restart=EXIT_GAME; X (void)notify_veto_destroy(frame); X return(NOTIFY_DONE); X } X } X return(notify_next_destroy_func(frame,status)); X} X X Xvoid static exit_proc(item,event) XPanel_item item; XEvent *event; X{ Xrestart=EXIT_GAME; Xresume_proc(item,event); X} X Xvoid static info_done_proc(frame) XFrame frame; X{ Xwindow_set(info_frame,WIN_SHOW,FALSE,0); Xwindow_set(info_message,WIN_SHOW,FALSE,0); X} X X Xvoid static info_proc(item,event) XPanel_item item; XEvent *event; X{ Xwindow_set(info_frame,WIN_SHOW,(char)window_get(info_frame,WIN_SHOW)^TRUE,0); Xwindow_set(info_message,WIN_SHOW,(char)window_get(info_message,WIN_SHOW)^TRUE,0); X} X X X Xstatic Panel_setting quit_text_input(item,event) XPanel_item item; XEvent *event; X{ Xstill_type=0; Xreturn(panel_text_notify(item,event)); X} X X Xvoid static get_hiscore_info(item,event) XPanel_item item; XEvent *event; X{ Xprintf("%d WAS the name selected\n ",(int)panel_get(item,PANEL_CLIENT_DATA)); X} X X XNotify_value my_frame_interposer(frame,event,arg,type) XFrame frame; XEvent *event; XNotify_arg arg; XNotify_event_type type; X{ Xint closed_initial,closed_current; XNotify_value value; X Xclosed_initial=(int)window_get(frame,FRAME_CLOSED); X Xvalue=notify_next_event_func(frame,event,arg,type); Xclosed_current=(int)window_get(frame,FRAME_CLOSED); X X X Xif(event_id(event)==WIN_RESIZE) X { X if(closed_current) { X if((int)window_get(show_scores_frame,WIN_SHOW)) X hi_scores_proc(); X freeze_proc(); X } X } X Xif(closed_initial!=closed_current){ X if(closed_current) X resume_proc(); X } X Xreturn(value); X} X Xleave_pause(win,event) XWindow win; XEvent *event; X{ X if(event_id(event)==LOC_WINEXIT || event_id(event)==LOC_RGNEXIT) X freeze_proc((Panel_item)0,event); X} X X X X Xdo_mex_look(argc,argv) Xint *argc; Xchar **argv; X X{ Xint i; X frame = window_create(0, FRAME, X FRAME_ARGC_PTR_ARGV,argc,argv, X FRAME_LABEL, "->> MEX <<- Ver 1.6 by Glenn Kreisel (c) 1989", X FRAME_SHOW_LABEL,TRUE, X FRAME_EMBOLDEN_LABEL, TRUE, X FRAME_SUBWINDOWS_ADJUSTABLE,FALSE, X WIN_X,400,WIN_Y,270, X FRAME_ICON,&mex_icon, X 0); X (void)notify_interpose_event_func(frame,my_frame_interposer,NOTIFY_SAFE); X (void)notify_interpose_destroy_func(frame,destroy_game); X X/* Do game canvas now */ X game_canvas=window_create(frame,CANVAS, X WIN_WIDTH,(width+2)*char_width, X WIN_HEIGHT,height*char_height, X WIN_CONSUME_PICK_EVENTS,WIN_NO_EVENTS, X WIN_MOUSE_BUTTONS, X LOC_DRAG, X LOC_MOVE, X WIN_IN_TRANSIT_EVENTS, X 0, X WIN_CONSUME_KBD_EVENTS,WIN_ASCII_EVENTS, X KEY_LEFT(7),KEY_LEFT(5), X 0, X WIN_EVENT_PROC,my_directions, X CANVAS_FAST_MONO,TRUE, X 0); X X X i=(int)window_get(game_canvas,WIN_DEVICE_NUMBER); X X right_panel = window_create(frame, PANEL, X WIN_FONT, bold, X WIN_RIGHT_OF,game_canvas, X PANEL_LAYOUT,PANEL_VERTICAL, X WIN_CONSUME_KBD_EVENTS,WIN_NO_EVENTS,0, X WIN_CONSUME_PICK_EVENTS, X WIN_MOUSE_BUTTONS,0, X WIN_INPUT_DESIGNEE,i, X 0); X X bottom_panel= window_create(frame,PANEL, X PANEL_FONT,bold, X WIN_BELOW,game_canvas, X PANEL_LAYOUT,PANEL_HORIZONTAL, X WIN_FIT_HEIGHT,TRUE, X WIN_CONSUME_KBD_EVENTS,WIN_NO_EVENTS,0, X WIN_CONSUME_PICK_EVENTS, X WIN_MOUSE_BUTTONS,0, X WIN_WIDTH,WIN_EXTEND_TO_EDGE, X WIN_INPUT_DESIGNEE,i, X 0); X X X X/* Do right panel now */ X show_next = panel_create_item(right_panel, X PANEL_TOGGLE, X PANEL_LABEL_STRING, "Show Next", X PANEL_LAYOUT, PANEL_HORIZONTAL, X PANEL_CHOICE_STRINGS, "", 0, X 0); X X score_string=panel_create_item(right_panel, X PANEL_TEXT, X PANEL_LAYOUT,PANEL_VERTICAL, X PANEL_LABEL_STRING,"Score:", X PANEL_VALUE,"0", X PANEL_VALUE_DISPLAY_LENGTH,8, X PANEL_VALUE_FONT,bold, X PANEL_ITEM_X,10, X PANEL_ITEM_Y,80+panel_get(show_next,PANEL_ITEM_Y,0), X 0); X X level_string=panel_create_item(right_panel, X PANEL_TEXT, X PANEL_LABEL_STRING,"Level:", X PANEL_VALUE,"0", X PANEL_VALUE_DISPLAY_LENGTH,8, X PANEL_LAYOUT,PANEL_VERTICAL, X PANEL_VALUE_FONT,bold, X PANEL_ITEM_X,10, X PANEL_ITEM_Y,60+panel_get(score_string,PANEL_ITEM_Y,0), X 0); X X rows_string=panel_create_item(right_panel, X PANEL_TEXT, X PANEL_LABEL_STRING,"Rows Completed", X PANEL_VALUE,"0", X PANEL_VALUE_DISPLAY_LENGTH,8, X PANEL_LAYOUT,PANEL_VERTICAL, X PANEL_VALUE_FONT,bold, X PANEL_ITEM_X,10, X PANEL_ITEM_Y,60+panel_get(level_string,PANEL_ITEM_Y,0), X 0); X X rows_left_string=panel_create_item(right_panel, X PANEL_TEXT, X PANEL_LABEL_STRING,"Rows In Level:", X PANEL_VALUE,"0", X PANEL_VALUE_DISPLAY_LENGTH,8, X PANEL_LAYOUT,PANEL_VERTICAL, X PANEL_VALUE_FONT,bold, X PANEL_ITEM_X,10, X PANEL_ITEM_Y,60+panel_get(rows_string,PANEL_ITEM_Y,0), X 0); X resume_button=panel_create_item(right_panel, X PANEL_BUTTON, X PANEL_LABEL_IMAGE, X panel_button_image(right_panel,"Resume",6,0), X PANEL_SHOW_ITEM,FALSE, X PANEL_NOTIFY_PROC,resume_proc, X PANEL_ITEM_X,14, X PANEL_ITEM_Y,60+panel_get(rows_left_string,PANEL_ITEM_Y,0), X 0); X X freeze_button=panel_create_item(right_panel, X PANEL_BUTTON, X PANEL_LABEL_IMAGE, X panel_button_image(right_panel,"Freeze",6,0), X PANEL_NOTIFY_PROC,freeze_proc, X PANEL_ITEM_X,(int)panel_get(resume_button,PANEL_ITEM_X), X PANEL_ITEM_Y,(int)panel_get(resume_button,PANEL_ITEM_Y), X 0); X X panel_create_item(right_panel, X PANEL_BUTTON, X PANEL_LABEL_IMAGE, X panel_button_image(right_panel,"Info..",6,0), X PANEL_NOTIFY_PROC,info_proc, X PANEL_ITEM_X,14, X PANEL_ITEM_Y,30+panel_get(freeze_button,PANEL_ITEM_Y,0), X 0); Xwindow_fit(right_panel); Xwindow_set(right_panel,WIN_HEIGHT,WIN_EXTEND_TO_EDGE,0); Xwindow_set(right_panel,WIN_WIDTH,WIN_EXTEND_TO_EDGE,0); X/* End of right panel */ X X/* Start of bottom panel */ X X X Xpanel_create_item(bottom_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X panel_button_image(bottom_panel, "Exit", 5, 0), X PANEL_NOTIFY_PROC, exit_proc, X 0); X Xstart_button=panel_create_item(bottom_panel, X PANEL_BUTTON, X PANEL_LABEL_IMAGE, panel_button_image(bottom_panel, "Start", 5, 0), X PANEL_NOTIFY_PROC, restart_proc, X 0); Xrestart_button=panel_create_item(bottom_panel, X PANEL_BUTTON, X PANEL_LABEL_IMAGE, panel_button_image(bottom_panel, "Restart", 7, 0), X PANEL_SHOW_ITEM,FALSE, X PANEL_NOTIFY_PROC, restart_proc, X 0); X Xhiscore_button=panel_create_item(bottom_panel, X PANEL_BUTTON, X PANEL_LABEL_IMAGE, &hiscore_icon, X PANEL_NOTIFY_PROC, hi_scores_proc, X 0); X Xtake_away_button=panel_create_item(bottom_panel, X PANEL_BUTTON, X PANEL_LABEL_IMAGE, panel_button_image(bottom_panel, "Hide Scores", 13, 0), X PANEL_NOTIFY_PROC, hi_scores_proc, X PANEL_ITEM_X,(int)panel_get(hiscore_button,PANEL_ITEM_X), X PANEL_ITEM_Y,(int)panel_get(hiscore_button,PANEL_ITEM_Y), X PANEL_SHOW_ITEM,FALSE, X 0); X level_num=panel_create_item(bottom_panel, X PANEL_CYCLE, X PANEL_LABEL_STRING,"Level", X PANEL_CHOICE_STRINGS,"Novice","Intermediate", X "Expert","Extra Special","Super Special",0, X PANEL_ITEM_X,0, X PANEL_ITEM_Y,30+panel_get(restart_button,PANEL_ITEM_Y,0), X 0); Xwindow_fit(bottom_panel); Xwindow_fit(frame); X/* enter hi_score popup */ X Xhiscore_popup=window_create(frame,FRAME, X FRAME_LABEL,"You've made it onto the HIGH SCORE LIST", X FRAME_SHOW_LABEL,TRUE, X WIN_X,29,WIN_Y,-210, X 0); Xhiscore_panel=window_create(hiscore_popup,PANEL, X PANEL_LAYOUT,PANEL_VERTICAL, X WIN_CONSUME_KBD_EVENTS,WIN_ASCII_EVENTS, X KEY_LEFT(7),KEY_LEFT(5), X 0, X 0); X name_field=panel_create_item(hiscore_panel, X PANEL_TEXT, X PANEL_LABEL_STRING,"Please Enter Your Name:(pretty please)", X PANEL_VALUE,"", X PANEL_VALUE_DISPLAY_LENGTH,40, X PANEL_VALUE_STORED_LENGTH,60, X PANEL_NOTIFY_LEVEL,PANEL_SPECIFIED, X PANEL_NOTIFY_STRING,"\15", X PANEL_NOTIFY_PROC,quit_text_input, X 0); X Xwindow_fit(hiscore_panel); Xwindow_fit(hiscore_popup); X X X/* frame for printing hiscores */ Xshow_scores_frame=window_create(frame,FRAME, X FRAME_LABEL,"********** Mex's wonderful HIGH SCORES ***********", X FRAME_SHOW_LABEL,TRUE, X WIN_X,-100,WIN_Y,-250, X FRAME_DONE_PROC,hiscore_done_proc, X 0); Xshow_scores=window_create(show_scores_frame,PANEL, X PANEL_LAYOUT,PANEL_VERTICAL, X 0); Xpanel_create_item(show_scores,PANEL_MESSAGE, X PANEL_LABEL_STRING, X" Name Score #Rows Date", X PANEL_FONT,bold, X PANEL_ITEM_X,0, X PANEL_ITEM_Y,0, X PANEL_SHOW_ITEM,TRUE, X 0); Xfor(i=0;i<KEEP_SCORES;i++) X{ Xhiscores_item[i]=panel_create_item(show_scores,PANEL_MESSAGE, X PANEL_LABEL_STRING,"", X PANEL_FONT,bold, X PANEL_ITEM_X,0, X PANEL_ITEM_Y,(i+1)*20, X PANEL_NOTIFY_PROC,get_hiscore_info, X PANEL_CLIENT_DATA,(int)i, X PANEL_SHOW_ITEM,TRUE, X 0); X} X X X info_frame=window_create(frame,FRAME, X FRAME_LABEL,"------ Drinking and driving don't Mex ------", X FRAME_SHOW_LABEL,TRUE, X WIN_X,9,WIN_Y,-250, X WIN_HEIGHT, 320, X WIN_WIDTH, 520, X FRAME_DONE_PROC,info_done_proc, X 0); X X info_message=window_create(info_frame, TEXTSW, X WIN_ERROR_MSG, "I cannot find the 'info.file'" , X WIN_X, 0, X WIN_Y, 0, X WIN_HEIGHT, 300, X WIN_WIDTH, 500, X TEXTSW_FONT, bold, X TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, X TEXTSW_AUTO_INDENT, TRUE, X TEXTSW_BROWSING, TRUE, X TEXTSW_DISABLE_LOAD, TRUE, X TEXTSW_DISABLE_CD, TRUE, X TEXTSW_FILE, INFO_FILE, X WIN_SHOW,FALSE, X 0); X X X X X X window_set(bottom_panel,WIN_MOUSE_XY,460,550,0); X/* X window_set(bottom_panel,WIN_MOUSE_XY,20+panel_get(start_button,PANEL_ITEM_X,0), X 5+panel_get(start_button,PANEL_ITEM_Y,0),0); X */ X X} X END_OF_FILE if test 14168 -ne `wc -c <'mex_look.c'`; then echo shar: \"'mex_look.c'\" unpacked with wrong size! fi # end of 'mex_look.c' fi if test -f 'mex_scores.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mex_scores.c'\" else echo shar: Extracting \"'mex_scores.c'\" \(2564 characters\) sed "s/^X//" >'mex_scores.c' <<'END_OF_FILE' X/* ALL code in this program may be used for personal use */ X/* and this program may be distributed as long as this copyright */ X/* heading is attached to each source code file. Distribution must */ X/* be done FREE of charge................ */ X/* Glenn Kreisel */ X/* glenn@midget.towson.edu */ X#include "mex.h" X#include <unistd.h> Xextern char *get_player_name(); Xextern update_hiscore_window(); Xextern Frame show_scores_frame; Xstruct each_player hiscore_list[KEEP_SCORES]; XFILE *hi_file; X X Xread_in_scores() X{ X Xif((hi_file=fopen(HISCORE_FILE,"r+"))==NULL) X clear_hiscores(); Xelse read_in(); X X} X Xwrite_out_scores() X{ X Xif((hi_file=fopen(HISCORE_FILE,"w"))==NULL) X printf("Error writing hiscore file!!!!!\n"); Xelse write_out(); X} X X X Xclear_hiscores() X{ Xint i=0; Xfor(i=0;i<KEEP_SCORES;i++) Xhiscore_list[i].score=(-1); Xwrite_out_scores(); Xchmod(HISCORE_FILE,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); X X} X X Xwrite_out() X{ X Xint i=0; X X/*lockf(fileno(hi_file),F_LOCK,0); */ X Xwhile(hiscore_list[i].score!=-1 && i<KEEP_SCORES) X{ X fprintf(hi_file,"\02"); X fprintf(hi_file,"%s\02%d %d%s",hiscore_list[i].name,hiscore_list[i].score, hiscore_list[i].rows, X hiscore_list[i].date); X i++; X} Xfprintf(hi_file,"\01\n\n"); Xfclose(hi_file); Xclose(fileno(hi_file)); X X} X X X Xread_in() X{ Xchar c; Xint x,i=0,i1; X/* lockf(fileno(hi_file),F_LOCK,0); */ X c=fgetc(hi_file); Xdo X{ X if(c=='\01'|| feof(hi_file)) break; X hiscore_list[i].name[0]='\0'; X for(i1=0;(c=fgetc(hi_file))!='\02' && (!feof(hi_file));i1++) X { X X hiscore_list[i].name[i1]=c; X } X hiscore_list[i].name[i1]='\0'; X X fscanf(hi_file,"%d %d",&hiscore_list[i].score,&hiscore_list[i].rows); X X hiscore_list[i].date[0]='\0'; X for(i1=0;(c=fgetc(hi_file))!='\02' && (c!='\01') && (!feof(hi_file));i1++) X { X hiscore_list[i].date[i1]=c; X } X i++; X X} while((!feof(hi_file)) && (i<KEEP_SCORES)); X Xif(i<KEEP_SCORES) Xhiscore_list[i].score=(-1); Xfclose(hi_file); Xclose(fileno(hi_file)); X X} X X Xinsert_score(score,rows) Xint score,rows; X{ Xchar *name; Xint i=0,x; Xlong t; Xread_in_scores(); Xif(score!=0) X{ Xwhile(hiscore_list[i].score>score && i++<KEEP_SCORES); Xif(i<KEEP_SCORES) X { X name=get_player_name(); X for(x=KEEP_SCORES-1;x!=i;x--) X { X hiscore_list[x]=hiscore_list[x-1]; X } X X hiscore_list[i].rows=rows; X strcpy(hiscore_list[i].name,name,strlen(name)); X hiscore_list[i].score=score; X t=time(0); X strcpy(hiscore_list[i].date,ctime(&t),strlen(ctime(&t))); X if((int)window_get(show_scores_frame,WIN_SHOW)) X update_hiscore_window(); X write_out_scores(); X } X} X X} X END_OF_FILE if test 2564 -ne `wc -c <'mex_scores.c'`; then echo shar: \"'mex_scores.c'\" unpacked with wrong size! fi # end of 'mex_scores.c' fi if test -f 'still_block.icon' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'still_block.icon'\" else echo shar: Extracting \"'still_block.icon'\" \(193 characters\) sed "s/^X//" >'still_block.icon' <<'END_OF_FILE' X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16 X */ X 0x3778,0x5DDE,0xBBBB,0xEEEE,0x7777,0xDDDD,0xBBBB,0xEEEE, X 0x7777,0xDDDD,0xBBBB,0xEEEE,0x7777,0xDDDD,0x7BBA,0x2EEC END_OF_FILE if test 193 -ne `wc -c <'still_block.icon'`; then echo shar: \"'still_block.icon'\" unpacked with wrong size! fi # end of 'still_block.icon' fi echo shar: End of archive 1 \(of 2\). cp /dev/null ark1isdone MISSING="" for I in 1 2 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked both archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0