|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 14168 (0x3758)
Types: TextFile
Names: »mex_look.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/Sun/Mex/mex_look.c«
/* 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);
*/
}