|
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); */ }