DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦0cb0551b8⟧ TextFile

    Length: 14168 (0x3758)
    Types: TextFile
    Names: »mex_look.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/Sun/Mex/mex_look.c« 

TextFile

/*   ALL code in this program may be used for personal use */
/*   and this program may be distributed as long as this copyright */
/*   heading is attached to each source code file.  Distribution must  */
/*   be done FREE of charge................ */
/*                                           Glenn Kreisel */
/*				             glenn@midget.towson.edu */		
/*					     S72QKRE@TOWSONVX.BITNET */				
#include "mex.h"
#include <suntool/textsw.h>

static short mex_image[]={
#include "mex.icon"
};
DEFINE_ICON_FROM_IMAGE(mex_icon,mex_image);

static short hiscore_image[]={
#include "hiscore.icon"
};
mpr_static(hiscore_icon,64,64,1,hiscore_image);

extern int sound_on;
extern read_in_scores();
extern int restart;
extern int frozen;
extern struct each_player hiscore_list[KEEP_SCORES];
extern Pixfont *bold;
extern void my_directions();
Canvas game_canvas;
Frame frame,hiscore_popup,show_scores_frame,info_frame;
Panel right_panel,bottom_panel,hiscore_panel,show_scores;
Panel_item hiscores_item[KEEP_SCORES];

Textsw info_message;


Panel_item resume_button,freeze_button,score_string,level_string,name_field,
			level_num,show_next,restart_button,start_button,
			hiscore_button,take_away_button,rows_string,rows_left_string;

int still_type;

void hi_scores_proc(item,event)
Panel_item item;
Event *event;
{
if(!(int)window_get(show_scores_frame,WIN_SHOW))
{
read_in_scores();
update_hiscore_window();
panel_set(hiscore_button,PANEL_SHOW_ITEM,FALSE,0);
panel_set(take_away_button,PANEL_SHOW_ITEM,TRUE,0);

}
else 
{
window_set(show_scores_frame,WIN_SHOW,FALSE,0);
panel_set(take_away_button,PANEL_SHOW_ITEM,FALSE,0);
panel_set(hiscore_button,PANEL_SHOW_ITEM,TRUE,0);
}


}

hiscore_done_proc(frame)
Frame frame;
{
window_set(show_scores_frame,WIN_SHOW,FALSE,0);
panel_set(take_away_button,PANEL_SHOW_ITEM,FALSE,0);
panel_set(hiscore_button,PANEL_SHOW_ITEM,TRUE,0);
}

     
ring_bell(on,off)
unsigned int on,off;
{
   int bell;
   int bell_on = KBD_CMD_BELL;
   int bell_off = KBD_CMD_NOBELL;

   if(!sound_on) return;
     
   bell = open("/dev/kbd",1);
   ioctl(bell, KIOCCMD, &bell_on);
   usleep(on);
   ioctl(bell, KIOCCMD, &bell_off);
   usleep(off);
   close(bell);
     
} 

update_hiscore_window()
{
char wholething[140];
int i;

i=0;
while(hiscore_list[i].score!=-1 && i<KEEP_SCORES)
	{
	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);
	panel_set(hiscores_item[i],PANEL_LABEL_STRING,wholething,0);
	i++;
	}
while(i<KEEP_SCORES)
	panel_set(hiscores_item[i++],PANEL_LABEL_STRING,"",0);
window_fit(show_scores);
window_fit(show_scores_frame);
window_set(show_scores_frame,WIN_SHOW,TRUE,0);
}

char * get_user_name()
{
	char *s;
	struct passwd *p;
	if (s = (char *)getlogin())
	return (s);
	p = (struct passwd *)getpwuid(getuid());
	return (p->pw_name);
}

char *
get_player_name()
{
char *s;
panel_set(name_field,PANEL_VALUE,"",0);
window_set(hiscore_popup,WIN_SHOW,TRUE,
		0);
window_set(hiscore_panel,WIN_GRAB_ALL_INPUT,TRUE,0);

window_bell(hiscore_popup);
still_type=1;
while(still_type)
notify_dispatch();


window_set(hiscore_panel,WIN_GRAB_ALL_INPUT,FALSE,0);
window_set(hiscore_popup,WIN_SHOW,FALSE,0);
s=(char *)panel_get_value(name_field);
if(s[0]=='\0') return(get_user_name());
return(s);
}


void freeze_proc(item,event)
Panel_item item;
Event *event;
{
if(restart!=GAME_OVER){
panel_set(freeze_button,PANEL_SHOW_ITEM,FALSE,0);
panel_set(resume_button,PANEL_SHOW_ITEM,TRUE,0);
frozen=1;
}

}

void static resume_proc(item,event)
Panel_item item;
Event *event;
{
if(restart!=GAME_OVER){
panel_set(resume_button,PANEL_SHOW_ITEM,FALSE,0);
panel_set(freeze_button,PANEL_SHOW_ITEM,TRUE,0);
frozen=0;
}

}

void static restart_proc(item,event)
Panel_item item;
Event *event;
{
restart=NEW_GAME;
resume_proc(item,event);
}

int do_confirmer()
{
return(1);
}

static Notify_value destroy_game(frame,status)
Frame frame;
Destroy_status status;
{
	if(status==DESTROY_CHECKING) {
		if(do_confirmer())
		{
			restart=EXIT_GAME;
			(void)notify_veto_destroy(frame);
			return(NOTIFY_DONE);
		}
	}
	return(notify_next_destroy_func(frame,status));
}


void static exit_proc(item,event)
Panel_item item;
Event *event;
{
restart=EXIT_GAME;
resume_proc(item,event);
}

void static info_done_proc(frame)
Frame frame;
{
window_set(info_frame,WIN_SHOW,FALSE,0); 
window_set(info_message,WIN_SHOW,FALSE,0); 
}


void static info_proc(item,event)
Panel_item item;
Event *event;
{
window_set(info_frame,WIN_SHOW,(char)window_get(info_frame,WIN_SHOW)^TRUE,0); 
window_set(info_message,WIN_SHOW,(char)window_get(info_message,WIN_SHOW)^TRUE,0); 
}



static Panel_setting quit_text_input(item,event)
Panel_item item;
Event *event;
{
still_type=0;
return(panel_text_notify(item,event));
}


void static get_hiscore_info(item,event)
Panel_item item;
Event *event;
{
printf("%d WAS the name selected\n ",(int)panel_get(item,PANEL_CLIENT_DATA));
}


Notify_value my_frame_interposer(frame,event,arg,type)
Frame frame;
Event *event;
Notify_arg arg;
Notify_event_type type;
{
int closed_initial,closed_current;
Notify_value value;

closed_initial=(int)window_get(frame,FRAME_CLOSED);

value=notify_next_event_func(frame,event,arg,type);
closed_current=(int)window_get(frame,FRAME_CLOSED);



if(event_id(event)==WIN_RESIZE)	
		{
	if(closed_current) { 
		if((int)window_get(show_scores_frame,WIN_SHOW))
		hi_scores_proc();
		freeze_proc();
		} 
		}

if(closed_initial!=closed_current){
	if(closed_current)
		resume_proc();
	}

return(value);
}

leave_pause(win,event)
Window win;
Event *event;
{
 if(event_id(event)==LOC_WINEXIT || event_id(event)==LOC_RGNEXIT)
	freeze_proc((Panel_item)0,event);
}




do_mex_look(argc,argv)
int *argc;
char **argv;

{
int i;
	frame = window_create(0, FRAME,
				FRAME_ARGC_PTR_ARGV,argc,argv,
			      FRAME_LABEL, "->> MEX <<- Ver 1.6 by Glenn Kreisel  (c) 1989",
				FRAME_SHOW_LABEL,TRUE,
			      FRAME_EMBOLDEN_LABEL, TRUE,
			      FRAME_SUBWINDOWS_ADJUSTABLE,FALSE,
			      WIN_X,400,WIN_Y,270,
			      FRAME_ICON,&mex_icon,
			      0);
	(void)notify_interpose_event_func(frame,my_frame_interposer,NOTIFY_SAFE);
	(void)notify_interpose_destroy_func(frame,destroy_game);

/* Do game canvas now */
	game_canvas=window_create(frame,CANVAS,
				WIN_WIDTH,(width+2)*char_width, 
				WIN_HEIGHT,height*char_height,
                		WIN_CONSUME_PICK_EVENTS,WIN_NO_EVENTS,
				WIN_MOUSE_BUTTONS,
                                LOC_DRAG,
                                LOC_MOVE,
				WIN_IN_TRANSIT_EVENTS,
                                0,
         		       WIN_CONSUME_KBD_EVENTS,WIN_ASCII_EVENTS,
			       KEY_LEFT(7),KEY_LEFT(5),
                                0,
				WIN_EVENT_PROC,my_directions,
				CANVAS_FAST_MONO,TRUE,
				0);


	i=(int)window_get(game_canvas,WIN_DEVICE_NUMBER);

	right_panel = window_create(frame, PANEL,
			      WIN_FONT, bold,
		      	WIN_RIGHT_OF,game_canvas,
			      PANEL_LAYOUT,PANEL_VERTICAL,
			      WIN_CONSUME_KBD_EVENTS,WIN_NO_EVENTS,0,
			      WIN_CONSUME_PICK_EVENTS,
			      WIN_MOUSE_BUTTONS,0,
			      WIN_INPUT_DESIGNEE,i,
			      0);

	bottom_panel= window_create(frame,PANEL,
				PANEL_FONT,bold,
			WIN_BELOW,game_canvas,
				PANEL_LAYOUT,PANEL_HORIZONTAL,
				WIN_FIT_HEIGHT,TRUE, 
				WIN_CONSUME_KBD_EVENTS,WIN_NO_EVENTS,0,
			      WIN_CONSUME_PICK_EVENTS,
			      WIN_MOUSE_BUTTONS,0,
				 WIN_WIDTH,WIN_EXTEND_TO_EDGE, 
				 WIN_INPUT_DESIGNEE,i,
				0);



/* Do right panel now */
	show_next = panel_create_item(right_panel,
				      PANEL_TOGGLE,
				      PANEL_LABEL_STRING, "Show Next",
				      PANEL_LAYOUT, PANEL_HORIZONTAL,
				      PANEL_CHOICE_STRINGS, "", 0,
				      0);

	score_string=panel_create_item(right_panel,
					PANEL_TEXT,
					PANEL_LAYOUT,PANEL_VERTICAL,
					PANEL_LABEL_STRING,"Score:",
					PANEL_VALUE,"0",
					PANEL_VALUE_DISPLAY_LENGTH,8,
					PANEL_VALUE_FONT,bold,
					PANEL_ITEM_X,10,
					PANEL_ITEM_Y,80+panel_get(show_next,PANEL_ITEM_Y,0),
					0);

	level_string=panel_create_item(right_panel,
					PANEL_TEXT,
					PANEL_LABEL_STRING,"Level:",
					PANEL_VALUE,"0",
					PANEL_VALUE_DISPLAY_LENGTH,8,
					PANEL_LAYOUT,PANEL_VERTICAL,
					PANEL_VALUE_FONT,bold,
					PANEL_ITEM_X,10,
					PANEL_ITEM_Y,60+panel_get(score_string,PANEL_ITEM_Y,0),
					0);

	rows_string=panel_create_item(right_panel,
					PANEL_TEXT,
					PANEL_LABEL_STRING,"Rows Completed",
					PANEL_VALUE,"0",
					PANEL_VALUE_DISPLAY_LENGTH,8,
					PANEL_LAYOUT,PANEL_VERTICAL,
					PANEL_VALUE_FONT,bold,
					PANEL_ITEM_X,10,
					PANEL_ITEM_Y,60+panel_get(level_string,PANEL_ITEM_Y,0),
					0);

	rows_left_string=panel_create_item(right_panel,
					PANEL_TEXT,
					PANEL_LABEL_STRING,"Rows In Level:",
					PANEL_VALUE,"0",
					PANEL_VALUE_DISPLAY_LENGTH,8,
					PANEL_LAYOUT,PANEL_VERTICAL,
					PANEL_VALUE_FONT,bold,
					PANEL_ITEM_X,10,
					PANEL_ITEM_Y,60+panel_get(rows_string,PANEL_ITEM_Y,0),
					0);
	resume_button=panel_create_item(right_panel,
					PANEL_BUTTON,
					PANEL_LABEL_IMAGE,
					panel_button_image(right_panel,"Resume",6,0),
					PANEL_SHOW_ITEM,FALSE,
					PANEL_NOTIFY_PROC,resume_proc,
					PANEL_ITEM_X,14,
					PANEL_ITEM_Y,60+panel_get(rows_left_string,PANEL_ITEM_Y,0),
					0);

	freeze_button=panel_create_item(right_panel,
				PANEL_BUTTON,
				PANEL_LABEL_IMAGE,
				panel_button_image(right_panel,"Freeze",6,0),
				PANEL_NOTIFY_PROC,freeze_proc,
			PANEL_ITEM_X,(int)panel_get(resume_button,PANEL_ITEM_X),
				PANEL_ITEM_Y,(int)panel_get(resume_button,PANEL_ITEM_Y),
				0);

	panel_create_item(right_panel,
					PANEL_BUTTON,
					PANEL_LABEL_IMAGE,
				panel_button_image(right_panel,"Info..",6,0),
					PANEL_NOTIFY_PROC,info_proc,
					PANEL_ITEM_X,14,
					PANEL_ITEM_Y,30+panel_get(freeze_button,PANEL_ITEM_Y,0),
					0);
window_fit(right_panel); 
window_set(right_panel,WIN_HEIGHT,WIN_EXTEND_TO_EDGE,0);
window_set(right_panel,WIN_WIDTH,WIN_EXTEND_TO_EDGE,0);
/* End of right panel */

/* Start of bottom panel */

				
				
panel_create_item(bottom_panel, PANEL_BUTTON,
		PANEL_LABEL_IMAGE,
		panel_button_image(bottom_panel, "Exit", 5, 0),
		PANEL_NOTIFY_PROC, exit_proc,
		0);

start_button=panel_create_item(bottom_panel,
			  PANEL_BUTTON,
		PANEL_LABEL_IMAGE, panel_button_image(bottom_panel, "Start", 5, 0),
			  PANEL_NOTIFY_PROC, restart_proc,
			  0);
restart_button=panel_create_item(bottom_panel,
			  PANEL_BUTTON,
		PANEL_LABEL_IMAGE, panel_button_image(bottom_panel, "Restart", 7, 0),
			PANEL_SHOW_ITEM,FALSE,
			  PANEL_NOTIFY_PROC, restart_proc,
			  0);

hiscore_button=panel_create_item(bottom_panel,
			  PANEL_BUTTON,
		PANEL_LABEL_IMAGE, &hiscore_icon,
		  PANEL_NOTIFY_PROC, hi_scores_proc,
			  0);

take_away_button=panel_create_item(bottom_panel,
			  PANEL_BUTTON,
		PANEL_LABEL_IMAGE, panel_button_image(bottom_panel, "Hide Scores", 13, 0),
		  PANEL_NOTIFY_PROC, hi_scores_proc,
			PANEL_ITEM_X,(int)panel_get(hiscore_button,PANEL_ITEM_X),
			PANEL_ITEM_Y,(int)panel_get(hiscore_button,PANEL_ITEM_Y),
			PANEL_SHOW_ITEM,FALSE,
			  0);
	level_num=panel_create_item(bottom_panel,
			PANEL_CYCLE,
			PANEL_LABEL_STRING,"Level",
			PANEL_CHOICE_STRINGS,"Novice","Intermediate",
			"Expert","Extra Special","Super Special",0,
			PANEL_ITEM_X,0,
			PANEL_ITEM_Y,30+panel_get(restart_button,PANEL_ITEM_Y,0),
			0);
window_fit(bottom_panel);
window_fit(frame);
/* enter hi_score popup */

hiscore_popup=window_create(frame,FRAME,
		FRAME_LABEL,"You've made it onto the HIGH SCORE LIST",
				FRAME_SHOW_LABEL,TRUE,
				WIN_X,29,WIN_Y,-210,
				0);
hiscore_panel=window_create(hiscore_popup,PANEL,
				PANEL_LAYOUT,PANEL_VERTICAL,
         		       WIN_CONSUME_KBD_EVENTS,WIN_ASCII_EVENTS,
			       KEY_LEFT(7),KEY_LEFT(5),
                                0,
				0);
 name_field=panel_create_item(hiscore_panel,
			PANEL_TEXT,
			PANEL_LABEL_STRING,"Please Enter Your Name:(pretty please)",
			PANEL_VALUE,"",
			PANEL_VALUE_DISPLAY_LENGTH,40,
			PANEL_VALUE_STORED_LENGTH,60,
			PANEL_NOTIFY_LEVEL,PANEL_SPECIFIED,
			PANEL_NOTIFY_STRING,"\15",
			PANEL_NOTIFY_PROC,quit_text_input,
			0);

window_fit(hiscore_panel);
window_fit(hiscore_popup);


/* frame for printing hiscores */
show_scores_frame=window_create(frame,FRAME,
				FRAME_LABEL,"********** Mex's wonderful HIGH SCORES ***********",
				FRAME_SHOW_LABEL,TRUE,
				WIN_X,-100,WIN_Y,-250,
				FRAME_DONE_PROC,hiscore_done_proc,
				0);
show_scores=window_create(show_scores_frame,PANEL,
				PANEL_LAYOUT,PANEL_VERTICAL,
				0);
panel_create_item(show_scores,PANEL_MESSAGE,
				PANEL_LABEL_STRING,
"                Name                 Score  #Rows           Date",
				PANEL_FONT,bold,
				PANEL_ITEM_X,0,
				PANEL_ITEM_Y,0,
				PANEL_SHOW_ITEM,TRUE,
				0);
for(i=0;i<KEEP_SCORES;i++)
{
hiscores_item[i]=panel_create_item(show_scores,PANEL_MESSAGE,
				PANEL_LABEL_STRING,"",
				PANEL_FONT,bold,
				PANEL_ITEM_X,0,
				PANEL_ITEM_Y,(i+1)*20,
				PANEL_NOTIFY_PROC,get_hiscore_info,
				PANEL_CLIENT_DATA,(int)i,
				PANEL_SHOW_ITEM,TRUE,
				0);
}

 
	info_frame=window_create(frame,FRAME,
				FRAME_LABEL,"------ Drinking and driving don't Mex ------",
				FRAME_SHOW_LABEL,TRUE,
				WIN_X,9,WIN_Y,-250,
                WIN_HEIGHT,             320,
                WIN_WIDTH,              520,
				FRAME_DONE_PROC,info_done_proc,
				0);

    info_message=window_create(info_frame, TEXTSW,
                WIN_ERROR_MSG,          "I cannot find the 'info.file'" ,
                WIN_X,                  0,
                WIN_Y,                  0,
                WIN_HEIGHT,             300,
                WIN_WIDTH,              500,
                TEXTSW_FONT,           bold,
                TEXTSW_IGNORE_LIMIT,    TEXTSW_INFINITY,
                TEXTSW_AUTO_INDENT,     TRUE,
                TEXTSW_BROWSING,        TRUE,
                TEXTSW_DISABLE_LOAD,    TRUE,
                TEXTSW_DISABLE_CD,      TRUE,
                TEXTSW_FILE,            INFO_FILE,
		WIN_SHOW,FALSE,
                0);


     
     

	window_set(bottom_panel,WIN_MOUSE_XY,460,550,0);
/*
	window_set(bottom_panel,WIN_MOUSE_XY,20+panel_get(start_button,PANEL_ITEM_X,0),
			5+panel_get(start_button,PANEL_ITEM_Y,0),0);
			*/

}