From ea76b6988ccafaa6a4d4ed90f2489d0e49e1f180 Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Sat, 5 Sep 2015 09:32:30 -0400 Subject: Imported Upstream version 0.40.24 --- g_src/interface.cpp | 1777 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1777 insertions(+) create mode 100755 g_src/interface.cpp (limited to 'g_src/interface.cpp') diff --git a/g_src/interface.cpp b/g_src/interface.cpp new file mode 100755 index 0000000..11d0464 --- /dev/null +++ b/g_src/interface.cpp @@ -0,0 +1,1777 @@ +#include "platform.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "svector.h" +using std::string; + +#include "endian.h" + +#include "files.h" + +#include "enabler.h" + +#include "textlines.h" + +#include "find_files.h" + +#include "basics.h" + +#include "g_basics.h" + +#include "music_and_sound_g.h" + +#include "graphics.h" + +#include "init.h" + +#include "keybindings.h" +#include "interface.h" +#include "KeybindingScreen.h" +#include "ttf_manager.hpp" + +#include +#include + +void dwarf_end_announcements(); +void dwarf_remove_screen(); +void dwarf_option_screen(); +void drawborder(const char *str,char style,const char *colorstr); + + +inline void CHECK_ERR(int err, const char* msg) +{ + if (err != Z_OK) + { + MessageBox(NULL, "One of the compressed files on disk has errors in it. Restore from backup if you are able.", 0, 0); + exit(1); + } +} + +using std::fstream; +using std::ios; +using std::list; +using std::set; + +extern interfacest gview; +extern enablerst enabler; +extern graphicst gps; +extern initst init; +#ifndef NO_FMOD +extern musicsoundst musicsound; +#endif + +extern GameMode gamemode; +extern GameType gametype; + +extern int32_t movie_version; + + + + +void viewscreen_movieplayerst::help() +{ + if(is_playing)return; + + viewscreenst::help(); +} + +void interfacest::finish_movie() +{ + supermovie_on=0; + currentblocksize=0; + nextfilepos=0; + supermovie_pos=0; + viewscreen_movieplayerst::create(INTERFACE_PUSH_AT_BACK); +} + +void interfacest::use_movie_input() +{ + if(supermovie_on)handlemovie(1); + finish_movie(); +} + +viewscreen_movieplayerst *viewscreen_movieplayerst::create(char pushtype,viewscreenst *scr) +{ + viewscreen_movieplayerst *newv=new viewscreen_movieplayerst(); + gview.addscreen(newv,pushtype,scr); + + return newv; +} + +void viewscreen_movieplayerst::force_play(const string &file) +{ + force_file=file; + is_forced_play=1; +} + +void viewscreen_movieplayerst::logic() +{ + enabler.flag&=~ENABLERFLAG_MAXFPS; + + enabler.flag|=ENABLERFLAG_RENDER; + + if(!force_file.empty()&&!is_playing&&!quit_if_no_play&&is_forced_play) + { + is_playing=1; + quit_if_no_play=1; + gview.movie_file=force_file; + gview.supermovie_on=0; + gview.currentblocksize=0; + gview.nextfilepos=0; + gview.supermovie_pos=0; + maxmoviepos=0; + } + + if(!is_playing&&quit_if_no_play) + { + breakdownlevel=INTERFACE_BREAKDOWN_STOPSCREEN; + return; + } + + //LOAD A MOVIE BUFFER BY BUFFER + if(is_playing) + { + if(gview.supermovie_pos>=MOVIEBUFFSIZE||gview.currentblocksize==0) + { + gview.read_movie_chunk(maxmoviepos,is_playing); + } + + if(is_playing) + { + int half_frame_size=init.display.grid_x*init.display.grid_y; + +#ifndef NO_FMOD + //PLAY ANY RELEVANT SOUNDS + if(gview.supermovie_delaystep==gview.supermovie_delayrate) + { + int fr=gview.supermovie_pos/(half_frame_size*2); + if(fr>=0&&fr<200) + { + int c,sd; + for(c=0;c<16;c++) + { + sd=gview.supermovie_sound_time[fr][c]; + if(sd>=0&&sd=maxmoviepos&& + maxmoviepos+half_frame_size*20) + { + int32_t half_frame_size=init.display.grid_x*init.display.grid_y; + + //PRINT THE NEXT FRAME AND ADVANCE POSITION + drawborder(NULL,-1); + + int32_t curp=gview.supermovie_pos; + //HANG ON THE LAST FRAME TO AVOID POSSIBLE OVERRUNS + if(gview.supermovie_pos>=MOVIEBUFFSIZE-half_frame_size*2) + { + curp=MOVIEBUFFSIZE-half_frame_size*4; + } + short x2,y2; + for(x2=0;x2>3, + (gview.supermoviebuffer[curp+half_frame_size] & 64)); + + gps.addchar(gview.supermoviebuffer[curp]); + } + } + } + } + else if(loading) + { + int scroll=selfile/21*21; + int l; + for(l=scroll;ldat); + } + + int frame=gview.supermovie_pos/4000,sd; + for(e=0;e=0&&sddat); + else + { + gps.addst("-----------------"); + } + gps.changecolor(4,0,1); + gps.locate(e-scroll,(init.display.grid_x-1)); + gps.addst("X"); + } + } + else + { + drawborder(NULL,-1); + + int curp=gview.supermovie_pos; + int x2,y2; + for(x2=0;x2<80;x2++) + { + for(y2=0;y2<25;y2++) + { + gps.locate(y2,x2); + + gps.changecolor((gview.supermoviebuffer[curp+2000] & 7), + (gview.supermoviebuffer[curp+2000] & 56)>>3, + (gview.supermoviebuffer[curp+2000] & 64)); + + gps.addchar(gview.supermoviebuffer[curp]); + + curp++; + } + } + + if(enabler.mouse_y<150)gps.locate(24,0); + else gps.locate(0,0); + gps.changecolor(2,0,1); + gps.addst("Frame: "); + string num; + convert_long_to_string(gview.supermovie_pos/4000+1,num); + gps.addst(num); + + if(enabler.mouse_y<150)gps.locate(24,20); + else gps.locate(0,20); + gps.changecolor(3,0,1); + gps.addst("Copy From: "); + convert_long_to_string(editing_copy_from/4000+1,num); + gps.addst(num); + + if(enabler.mouse_y<150)gps.locate(24,40); + else gps.locate(0,40); + gps.changecolor(4,0,1); + gps.addst("Ends At: "); + convert_long_to_string(end_frame_pos/4000+1,num); + gps.addst(num); + + if(enabler.mouse_y<150)gps.locate(24,60); + else gps.locate(0,60); + int sx,sy; + gps.get_mouse_text_coords(sx,sy); + gps.changecolor(7,0,1); + gps.addst("("); + convert_long_to_string(sx,num); + gps.addst(num); + gps.addst(","); + convert_long_to_string(sy,num); + gps.addst(num); + gps.addst(")"); + } + } +#endif + else + { + gps.changecolor(7,0,1); + gps.locate(2,2); + gview.print_interface_token(INTERFACEKEY_MOVIE_RECORD); + gps.addst(": Start recording (active record is erased, stops when you return here)"); + gps.locate(3,2); + gview.print_interface_token(INTERFACEKEY_MOVIE_PLAY); + gps.addst(": Play the active moving record"); + gps.locate(4,2); + gview.print_interface_token(INTERFACEKEY_MOVIE_SAVE); + gps.addst(": Save the active moving record (you will be prompted for a name)"); + gps.locate(5,2); + gview.print_interface_token(INTERFACEKEY_MOVIE_LOAD); + gps.addst(": Load a moving record"); + +#ifdef DEBUG_MOVIE_EDIT + gps.locate(7,2); + gps.addst("E: Edit"); +#endif + + if(saving) + { + gps.locate(10,2); + gps.addst("Name: "); + gps.addst(savename); + } + } +} + +void viewscreen_movieplayerst::feed(std::set &events) +{ + if(events.count(INTERFACEKEY_LEAVESCREEN)) + { + events.clear(); + + if(is_playing) + { + is_playing=0; + enabler.release_grid_size(); + if (gview.original_fps) + enabler.set_fps(gview.original_fps); + gview.supermovie_on=0; + gview.currentblocksize=0; + gview.nextfilepos=0; + gview.supermovie_pos=0; + maxmoviepos=0; + +#ifndef NO_FMOD + musicsound.stop_sound(); +#endif + } + else if(saving)saving=0; + else if(loading)loading=0; +#ifdef DEBUG_MOVIE_EDIT + else if(editing)editing=0; +#endif + else + { + is_playing=0; + enabler.release_grid_size(); + if (gview.original_fps) + enabler.set_fps(gview.original_fps); + gview.supermovie_on=0; + gview.currentblocksize=0; + gview.nextfilepos=0; + gview.supermovie_pos=0; + maxmoviepos=0; + + breakdownlevel=INTERFACE_BREAKDOWN_STOPSCREEN; + return; + } + } + else if(saving) + { + standardstringentry(savename,39,STRINGENTRY_LETTERS|STRINGENTRY_SPACE|STRINGENTRY_NUMBERS|STRINGENTRY_SYMBOLS,events); + + if(events.count(INTERFACEKEY_SELECT)) + { + string filename; + filename="data/movies/"; + filename+=savename; + filename+=".cmv"; + + copy_file(gview.movie_file,filename); + saving=0; + } + } + else if(loading) + { + if(events.count(INTERFACEKEY_SELECT)) + { + string filename; + filename="data/movies/"; + filename+=filelist[selfile]; + + if(filename!=gview.movie_file) + { + copy_file(filename,gview.movie_file); + } + loading=0; + } + + standardscrolling(events,selfile,0,filelist.size()-1,21); + } +#ifdef DEBUG_MOVIE_EDIT + else if(editing) + { + char entering=0; + + if(editing_menu) + { + if(enabler.mouse_lbut&&enabler.tracking_on) + { + int sx,sy; + gps.get_mouse_text_coords(sx,sy); + + if(sx>=0&&sx<80&&sy>=0&&sy<25) + { + if(sx>=0&&sx<16&&sy>=0&&sy<16) + { + editing_char=sx+sy*16; + } + if(sx>=16&&sx<24&&sy>=0&&sy<16) + { + editing_screenf=sy%8; + editing_screenb=sx-16; + editing_screenbright=sy/8; + } + if(sx>=26&&sx<=51&&sy>=0&&sy=52&&sx<=78&&sy>=0&&sy=0&&sy=0&&editing_selected_sounddat,26,STRINGENTRY_LETTERS|STRINGENTRY_SPACE|STRINGENTRY_NUMBERS|STRINGENTRY_SYMBOLS); + entering=1; + } + } + else + { + if(gview.c== '#')gview.supermovie_sound.add_string("new_sound"); + if(gview.c== '+')gview.supermovie_delayrate++; + if(gview.c== '-')gview.supermovie_delayrate--; + if(gview.c== 'T')text_mode=1-text_mode; + } + if(gview.supermovie_delayrate<0)gview.supermovie_delayrate=0; + if(gview.supermovie_delayrate>10)gview.supermovie_delayrate=10; + } + else + { + if(text_mode) + { + if(gview.c!=0) + { + int sx,sy; + gps.get_mouse_text_coords(sx,sy); + + if(sx>=0&&sx<80&&sy>=0&&sy<25) + { + int curpos=gview.supermovie_pos+sy+sx*25; + gview.supermoviebuffer[curpos]=gview.c; + gview.supermoviebuffer[curpos+2000]=(editing_screenf&7)+((editing_screenb&7)<<3); + if(editing_screenbright)gview.supermoviebuffer[curpos+2000]+=64; + } + } + } + else + { + if(gview.c== 'a') + { + int x2,y2; + for(x2=0;x2<80;x2++) + { + for(y2=0;y2<25;y2++) + { + if(x2>0) + { + gview.supermoviebuffer[gview.supermovie_pos+y2+(x2-1)*25]=gview.supermoviebuffer[gview.supermovie_pos+y2+x2*25]; + gview.supermoviebuffer[gview.supermovie_pos+y2+(x2-1)*25+2000]=gview.supermoviebuffer[gview.supermovie_pos+y2+x2*25+2000]; + } + if(x2==(init.display.grid_x-1))gview.supermoviebuffer[gview.supermovie_pos+y2+x2*25]=0; + } + } + } + if(gview.c== 'd') + { + int x2,y2; + for(x2=(init.display.grid_x-1);x2>=0;x2--) + { + for(y2=0;y2<(init.display.grid_y-1);y2++) + { + if(x2<(init.display.grid_x-1)) + { + gview.supermoviebuffer[gview.supermovie_pos+y2+(x2+1)*25]=gview.supermoviebuffer[gview.supermovie_pos+y2+x2*25]; + gview.supermoviebuffer[gview.supermovie_pos+y2+(x2+1)*25+2000]=gview.supermoviebuffer[gview.supermovie_pos+y2+x2*25+2000]; + } + if(x2==0)gview.supermoviebuffer[gview.supermovie_pos+y2+x2*25]=0; + } + } + } + if(gview.c== 'E')end_frame_pos=gview.supermovie_pos; + if(gview.c== 'c')editing_copy_from=gview.supermovie_pos; + if(gview.c== 'p') + { + int i; + for(i=0;i<4000;i++) + { + gview.supermoviebuffer[gview.supermovie_pos+i]=gview.supermoviebuffer[editing_copy_from+i]; + } + } + if(gview.c== '+')gview.supermovie_pos+=4000; + if(gview.c== '-')gview.supermovie_pos-=4000; + if(gview.c== '/')gview.supermovie_pos-=40000; + if(gview.c== '*')gview.supermovie_pos+=40000; + if(gview.supermovie_pos<0)gview.supermovie_pos=0; + if(gview.supermovie_pos>=MOVIEBUFFSIZE)gview.supermovie_pos=MOVIEBUFFSIZE-4000; + } + + if(enabler.mouse_lbut&&enabler.tracking_on) + { + int sx,sy; + gps.get_mouse_text_coords(sx,sy); + + if(sx>=0&&sx<80&&sy>=0&&sy<25) + { + int curpos=gview.supermovie_pos+sy+sx*25; + gview.supermoviebuffer[curpos]=editing_char; + gview.supermoviebuffer[curpos+2000]=(editing_screenf&7)+((editing_screenb&7)<<3); + if(editing_screenbright)gview.supermoviebuffer[curpos+2000]+=64; + } + } + if(enabler.mouse_rbut&&enabler.tracking_on) + { + editing_menu=1; + enabler.mouse_rbut=0; + } + } + + if(!entering&&gview.c== 'S') + { + int opos=gview.supermovie_pos; + gview.first_movie_write=1; + gview.supermovie_pos=end_frame_pos+4000; + + gview.write_movie_chunk(); + + gview.supermovie_pos=opos; + } + } +#endif + else + { + if(is_playing) + { + } + else + { +#ifdef DEBUG_MOVIE_EDIT + if(gview.c== 'E') + { + editing=1; + gview.supermovie_pos=0; + } +#endif + + if(events.count(INTERFACEKEY_MOVIE_RECORD)) + { + //TURN ON THE MOVIE RECORDER + is_playing=0; + enabler.release_grid_size(); + if (gview.original_fps) + enabler.set_fps(gview.original_fps); + gview.supermovie_on=1; + gview.currentblocksize=0; + gview.nextfilepos=0; + gview.supermovie_pos=0; + gview.supermovie_delayrate=0; + gview.first_movie_write=1; + maxmoviepos=0; + + breakdownlevel=INTERFACE_BREAKDOWN_STOPSCREEN; + } + if(events.count(INTERFACEKEY_MOVIE_PLAY)) + { + is_playing=1; + gview.supermovie_on=0; + gview.currentblocksize=0; + gview.nextfilepos=0; + gview.supermovie_pos=0; + maxmoviepos=0; + } + if(events.count(INTERFACEKEY_MOVIE_SAVE)) + { + savename.erase(); + saving=1; + } + if(events.count(INTERFACEKEY_MOVIE_LOAD)) + { + selfile=0; + + clearfilelist(); + + find_files_by_pattern("data/movies/*.cmv",filelist); + + if(filelist.size()>0)loading=1; + } + } + } +} + +void viewscreen_movieplayerst::clearfilelist() +{ + int f; + for(f=0;fchild=child; + scr->parent=child->parent; + + if(scr->parent!=NULL)scr->parent->child=scr; + child->parent=scr; +} + +void interfacest::insertscreen_as_child(viewscreenst *scr,viewscreenst *parent) +{ + if(parent==NULL) + { + insertscreen_at_back(scr); + return; + } + + scr->child=parent->child; + scr->parent=parent; + + if(scr->child!=NULL)scr->child->parent=scr; + parent->child=scr; +} + +void interfacest::insertscreen_at_back(viewscreenst *scr) +{ + //GRAB CURRENT SCREEN AT THE END OF THE LIST + viewscreenst *currentscreen=&view; + while(currentscreen->child!=NULL)currentscreen=currentscreen->child; + + //PUT IT ON TO THE BACK SCREEN + insertscreen_as_child(scr,currentscreen); +} + +void interfacest::insertscreen_at_front(viewscreenst *scr) +{ + //PUT IT ON TO THE BASE + insertscreen_as_child(scr,&view); +} + +viewscreenst *interfacest::grab_lastscreen() { + viewscreenst *currentscreen = &view; + while (currentscreen->child) currentscreen = currentscreen->child; + return currentscreen; +} + +char interfacest::loop() { + //NO INTERFACE LEFT, QUIT + if(view.child==0)return 1; + + //GRAB CURRENT SCREEN AT THE END OF THE LIST + viewscreenst *currentscreen = grab_lastscreen(); + //MOVE SCREENS BACK + switch(currentscreen->breakdownlevel) { + case INTERFACE_BREAKDOWN_NONE: { + + currentscreen->logic(); + + if(currentscreen->movies_okay()) + { + //HANDLE MOVIES + handlemovie(0); + } + + const Time now = SDL_GetTicks(); + // Process as much input as possible. Some screens can't handle multiple input events + // per logic call (retain_nonzero_input, and any alteration to the window setup + // requires us to stop until the next logic call. + for (;;) { + if (currentscreen->child || currentscreen->breakdownlevel != INTERFACE_BREAKDOWN_NONE) + break; // Some previous input or logic had the effect of switching screens + + if (flag & INTERFACEFLAG_RETAIN_NONZERO_INPUT) { + flag&=~INTERFACEFLAG_RETAIN_NONZERO_INPUT; + break; + } else { + set era = enabler.get_input(now); + if (era.size() == 0) { + if(enabler.mouse_lbut || enabler.mouse_rbut) currentscreen->feed(era); + break; + } + + if (era.count(INTERFACEKEY_OPTIONS)&&!currentscreen->key_conflict(INTERFACEKEY_OPTIONS)) { + //PEEL BACK ALL SCREENS TO THE CURRENT OPTION SCREEN IF THERE IS ONE + //UNLESS THERE IS A BLOCKING SCREEN LIKE THE REGION MAKER + viewscreenst *opscreen=&view; + while(opscreen!=NULL) { + if(opscreen->is_option_screen()) { + opscreen->option_key_pressed=1; + while(opscreen->child!=NULL) { + if(opscreen->child->is_option_screen()==2) { + opscreen->child->option_key_pressed=1; + opscreen->option_key_pressed=0; + break; + } + removescreen(opscreen->child); + } + break; + } + opscreen = opscreen->child; + } + //NEED A NEW OPTIONS SCREEN? + if(opscreen==NULL) dwarf_option_screen(); + + era.clear(); + continue; + } + //DO MOVIE COMMANDS + if (era.count(INTERFACEKEY_MOVIES)&&!currentscreen->key_conflict(INTERFACEKEY_MOVIES)) + if(currentscreen->movies_okay()) use_movie_input(); + if (era.count(INTERFACEKEY_HELP)&&!currentscreen->key_conflict(INTERFACEKEY_HELP)) + currentscreen->help(); + // Prefix commands + // Most prefix commands we don't want to touch game management commands, + // i.e. what's in here. Macro playback is a notable exception. + if (era.count(INTERFACEKEY_PREFIX)) + enabler.prefix_toggle(); + int repeats = 1; // If this input ends a prefix command, we'll want to repeat it. + if (enabler.prefix_building()) { + // TODO: OMGWTFBBQ + char c = 0; + if (era.count(INTERFACEKEY_STRING_A048)) c = '0'; + else if (era.count(INTERFACEKEY_STRING_A049)) c = '1'; + else if (era.count(INTERFACEKEY_STRING_A050)) c = '2'; + else if (era.count(INTERFACEKEY_STRING_A051)) c = '3'; + else if (era.count(INTERFACEKEY_STRING_A052)) c = '4'; + else if (era.count(INTERFACEKEY_STRING_A053)) c = '5'; + else if (era.count(INTERFACEKEY_STRING_A054)) c = '6'; + else if (era.count(INTERFACEKEY_STRING_A055)) c = '7'; + else if (era.count(INTERFACEKEY_STRING_A056)) c = '8'; + else if (era.count(INTERFACEKEY_STRING_A057)) c = '9'; + + if (c) { + enabler.prefix_add_digit(c); + era.clear(); + } else { + repeats = enabler.prefix_end(); + } + } + // TTF toggle + if (era.count(INTERFACEKEY_TOGGLE_TTF)) { + if (init.font.use_ttf == ttf_auto) { + // Do whatever produces a visible result. + if (ttf_manager.ttf_active()) + init.font.use_ttf = ttf_off; + else + init.font.use_ttf = ttf_on; + } else if (init.font.use_ttf == ttf_on) { + init.font.use_ttf = ttf_off; + } else { + init.font.use_ttf = ttf_on; + } + gps.force_full_display_count++; + } + // Zoom commands + if (era.count(INTERFACEKEY_ZOOM_IN)) + enabler.zoom_display(zoom_in); + if (era.count(INTERFACEKEY_ZOOM_OUT)) + enabler.zoom_display(zoom_out); + if (era.count(INTERFACEKEY_ZOOM_RESET)) + enabler.zoom_display(zoom_reset); + // Macro commands + if (era.count(INTERFACEKEY_RECORD_MACRO)) { + if (enabler.is_recording()) + enabler.record_stop(); + else + enabler.record_input(); + } + if (era.count(INTERFACEKEY_PLAY_MACRO)) { + for (int i = 0; i < repeats; i++) + enabler.play_macro(); + } + if (era.count(INTERFACEKEY_SAVE_MACRO)) + gview.addscreen(new MacroScreenSave(), INTERFACE_PUSH_AT_BACK, NULL); + if (era.count(INTERFACEKEY_LOAD_MACRO)) + gview.addscreen(new MacroScreenLoad(), INTERFACE_PUSH_AT_BACK, NULL); + // Feed input + for (int i = 0; i < repeats; i++) + currentscreen->feed(era); + if (era.count(INTERFACEKEY_TOGGLE_FULLSCREEN)) { + enabler.toggle_fullscreen(); + } + if (era.count(INTERFACEKEY_FPS_UP)) { + int fps = enabler.get_fps(); + enabler.set_fps(fps + fps/10); + enabler.clear_fps(); + } + if (era.count(INTERFACEKEY_FPS_DOWN)) { + int fps = enabler.get_fps(); + enabler.set_fps(fps - fps/10); + enabler.clear_fps(); + } + } + } + break; + } // case INTERFACE_BREAKDOWN_NONE + + case INTERFACE_BREAKDOWN_QUIT: + { + handlemovie(1); + return 1; + } + case INTERFACE_BREAKDOWN_STOPSCREEN: + if(currentscreen->movies_okay()) + { + //HANDLE MOVIES + handlemovie(0); + } + + removescreen(currentscreen); + break; + case INTERFACE_BREAKDOWN_TOFIRST: + if(currentscreen->movies_okay()) + { + //HANDLE MOVIES + handlemovie(0); + } + + remove_to_first(); + break; + } + + return 0; +} + +void interfacest::remove_to_first() +{ + //GRAB LAST SCREEN AT THE END OF THE LIST + viewscreenst *lastscreen=&view; + while(lastscreen->child!=NULL)lastscreen=lastscreen->child; + + //NO INTERFACE LEFT + if(lastscreen==&view)return; + + //GO AHEAD + while(lastscreen->parent!=&view) + { + viewscreenst *par=lastscreen->parent; + removescreen(lastscreen); + lastscreen=par; + } +} + +void interfacest::removescreen(viewscreenst *scr) +{ + //THE MINIMAP IS EXPENSIVE, SO WE REFRESH IT WHENEVER INTERFACE GETS IN THE WAY + if(gamemode==GAMEMODE_DWARF)dwarf_remove_screen(); + + //FIX LINKS + if(scr->parent!=NULL)scr->parent->child=scr->child; + if(scr->child!=NULL)scr->child->parent=scr->parent; + + //WASTE SCREEN + delete scr; +} + +int interfacest::write_movie_chunk() +{ + int inputsize=supermovie_pos; + if(inputsize>MOVIEBUFFSIZE)inputsize=MOVIEBUFFSIZE; + + //DUMP CURRENT BUFFER INTO A COMPRESSION STREAM + z_stream c_stream; + int err; + + c_stream.zalloc = (alloc_func)0; + c_stream.zfree = (free_func)0; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, 9); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_out = (Bytef*)supermoviebuffer_comp; + c_stream.avail_out = COMPMOVIEBUFFSIZE; + + c_stream.next_in = (Bytef*)supermoviebuffer; + c_stream.avail_in = inputsize; + + while (c_stream.total_in != inputsize && c_stream.total_out < COMPMOVIEBUFFSIZE) { + //c_stream.avail_in = c_stream.avail_out = 1; // force small buffers + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + } + + // Finish the stream, still forcing small buffers: + for (;;) { + err = deflate(&c_stream, Z_FINISH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "deflate"); + } + + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); + + int length=0; + + if(c_stream.total_out>0) + { + if(first_movie_write) + { + //GET RID OF ANY EXISTING MOVIES IF THIS IS THE FIRST TIME THROUGH + unlink(movie_file.c_str()); + } + + //OPEN UP THE MOVIE FILE AND APPEND + std::fstream f; + f.open(movie_file.c_str(), fstream::out | fstream::binary | fstream::app); + + if(f.is_open()) + { + //WRITE A HEADER + if(first_movie_write) + { + int swp_l=byteswap(movie_version); + f.write((const char *)&swp_l,sizeof(int)); + + + cursesmovie_headerst cmh; + cmh.dimx=init.display.grid_x; + cmh.dimy=init.display.grid_y; + cmh.delayrate=supermovie_delayrate; + cmh.dimx=byteswap(cmh.dimx); + cmh.dimy=byteswap(cmh.dimy); + cmh.delayrate=byteswap(cmh.delayrate); + f.write((const char *)&cmh,sizeof(cursesmovie_headerst)); + + int s; + s=byteswap(gview.supermovie_sound.str.size()); + f.write((const char *)&s,sizeof(int)); + char buf[50]; + for(s=0;sdat.c_str()); + f.write(buf,sizeof(char)*50); + } + + int i1,i2; + for(i1=0;i1<200;i1++) + { + for(i2=0;i2movie_version)fail=1; + + cursesmovie_headerst cmh; + f.read((char *)&cmh,sizeof(cursesmovie_headerst)); + cmh.dimx=byteswap(cmh.dimx); + cmh.dimy=byteswap(cmh.dimy); + cmh.delayrate=byteswap(cmh.delayrate); + + enabler.override_grid_size(cmh.dimx, cmh.dimy); + if (!gview.original_fps) + gview.original_fps = enabler.get_fps(); + enabler.set_fps(100); + + gview.supermovie_delayrate=cmh.delayrate; + gview.supermovie_delaystep=cmh.delayrate; + + gview.supermovie_sound.clean(); + if(loadversion>=10001) + { + int num; + f.read((char *)&num,sizeof(int)); + num=byteswap(num); + gview.nextfilepos+=sizeof(int); + char buf[50]; + int s; + for(s=0;sdat; + filename+=".ogg"; + + musicsound.set_sound(filename,s); + } +#endif + } + + if(!fail) + { + //READ IT + f.read((char *)&gview.currentblocksize,sizeof(int)); + gview.currentblocksize=byteswap(gview.currentblocksize); + f.read((char *)gview.supermoviebuffer_comp,gview.currentblocksize); + + gview.nextfilepos+=gview.currentblocksize+sizeof(int); + + //UNCOMPRESS IT + z_stream d_stream; // decompression stream + + d_stream.zalloc = (alloc_func)0; + d_stream.zfree = (free_func)0; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = (Bytef*)gview.supermoviebuffer_comp; + d_stream.avail_in = gview.currentblocksize; + + int err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + d_stream.next_out = gview.supermoviebuffer; + d_stream.avail_out = MOVIEBUFFSIZE; + + while (d_stream.total_out < MOVIEBUFFSIZE && d_stream.total_in < gview.currentblocksize) { + //d_stream.avail_in = d_stream.avail_out = 1; // force small buffers + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "inflate"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + gview.supermovie_pos=0; + maxmoviepos=d_stream.total_out; + } + else + { + is_playing=0; + enabler.release_grid_size(); + if (gview.original_fps) + enabler.set_fps(gview.original_fps); + } + } + else + { + is_playing=0; + enabler.release_grid_size(); + if (gview.original_fps) + enabler.set_fps(gview.original_fps); + } + + f.close(); + } + else + { + is_playing=0; + enabler.release_grid_size(); + if (gview.original_fps) + enabler.set_fps(gview.original_fps); + } +} + +void interfacest::handlemovie(char flushall) +{ + //SAVE A MOVIE FRAME INTO THE CURRENT MOVIE BUFFER + if(supermovie_on==1) + { + if(supermovie_delaystep>0&&!flushall)supermovie_delaystep--; + else + { + if(!flushall)supermovie_delaystep=supermovie_delayrate; + + if(!flushall||supermovie_delaystep==0) + { + //SAVING CHARACTERS, THEN COLORS + short x2,y2; + for(x2=0;x2=MOVIEBUFFSIZE||flushall) + { + int length=write_movie_chunk(); + + if(length>5000000) + { + finish_movie(); + } + else supermovie_pos=0; + } + } + } +} + +void interfacest::print_interface_token(InterfaceKey key,justification just) +{ + short o_screenf=gps.screenf,o_screenb=gps.screenb,o_screenbright=gps.screenbright; + gps.changecolor(2,0,1); + string tok = enabler.GetKeyDisplay(key); + gps.addst(tok,just); + gps.changecolor(o_screenf,o_screenb,o_screenbright); +} + +char standardstringentry(char *str,int maxlen,unsigned int flag,std::set &events) +{ + string str2; + str2=str; + char ret=standardstringentry(str2,maxlen,flag,events); + strcpy(str,str2.c_str()); + return ret; +} + +char standardstringentry(string &str,int maxlen,unsigned int flag,std::set &events) +{ + unsigned char entry=255; + if(flag & STRINGENTRY_LETTERS) + { + if(events.count(INTERFACEKEY_STRING_A097))entry='a'; + if(events.count(INTERFACEKEY_STRING_A098))entry='b'; + if(events.count(INTERFACEKEY_STRING_A099))entry='c'; + if(events.count(INTERFACEKEY_STRING_A100))entry='d'; + if(events.count(INTERFACEKEY_STRING_A101))entry='e'; + if(events.count(INTERFACEKEY_STRING_A102))entry='f'; + if(events.count(INTERFACEKEY_STRING_A103))entry='g'; + if(events.count(INTERFACEKEY_STRING_A104))entry='h'; + if(events.count(INTERFACEKEY_STRING_A105))entry='i'; + if(events.count(INTERFACEKEY_STRING_A106))entry='j'; + if(events.count(INTERFACEKEY_STRING_A107))entry='k'; + if(events.count(INTERFACEKEY_STRING_A108))entry='l'; + if(events.count(INTERFACEKEY_STRING_A109))entry='m'; + if(events.count(INTERFACEKEY_STRING_A110))entry='n'; + if(events.count(INTERFACEKEY_STRING_A111))entry='o'; + if(events.count(INTERFACEKEY_STRING_A112))entry='p'; + if(events.count(INTERFACEKEY_STRING_A113))entry='q'; + if(events.count(INTERFACEKEY_STRING_A114))entry='r'; + if(events.count(INTERFACEKEY_STRING_A115))entry='s'; + if(events.count(INTERFACEKEY_STRING_A116))entry='t'; + if(events.count(INTERFACEKEY_STRING_A117))entry='u'; + if(events.count(INTERFACEKEY_STRING_A118))entry='v'; + if(events.count(INTERFACEKEY_STRING_A119))entry='w'; + if(events.count(INTERFACEKEY_STRING_A120))entry='x'; + if(events.count(INTERFACEKEY_STRING_A121))entry='y'; + if(events.count(INTERFACEKEY_STRING_A122))entry='z'; + if(events.count(INTERFACEKEY_STRING_A065))entry='A'; + if(events.count(INTERFACEKEY_STRING_A066))entry='B'; + if(events.count(INTERFACEKEY_STRING_A067))entry='C'; + if(events.count(INTERFACEKEY_STRING_A068))entry='D'; + if(events.count(INTERFACEKEY_STRING_A069))entry='E'; + if(events.count(INTERFACEKEY_STRING_A070))entry='F'; + if(events.count(INTERFACEKEY_STRING_A071))entry='G'; + if(events.count(INTERFACEKEY_STRING_A072))entry='H'; + if(events.count(INTERFACEKEY_STRING_A073))entry='I'; + if(events.count(INTERFACEKEY_STRING_A074))entry='J'; + if(events.count(INTERFACEKEY_STRING_A075))entry='K'; + if(events.count(INTERFACEKEY_STRING_A076))entry='L'; + if(events.count(INTERFACEKEY_STRING_A077))entry='M'; + if(events.count(INTERFACEKEY_STRING_A078))entry='N'; + if(events.count(INTERFACEKEY_STRING_A079))entry='O'; + if(events.count(INTERFACEKEY_STRING_A080))entry='P'; + if(events.count(INTERFACEKEY_STRING_A081))entry='Q'; + if(events.count(INTERFACEKEY_STRING_A082))entry='R'; + if(events.count(INTERFACEKEY_STRING_A083))entry='S'; + if(events.count(INTERFACEKEY_STRING_A084))entry='T'; + if(events.count(INTERFACEKEY_STRING_A085))entry='U'; + if(events.count(INTERFACEKEY_STRING_A086))entry='V'; + if(events.count(INTERFACEKEY_STRING_A087))entry='W'; + if(events.count(INTERFACEKEY_STRING_A088))entry='X'; + if(events.count(INTERFACEKEY_STRING_A089))entry='Y'; + if(events.count(INTERFACEKEY_STRING_A090))entry='Z'; + } + if(flag & STRINGENTRY_SPACE) + { + if(events.count(INTERFACEKEY_STRING_A032))entry=' '; + } + if(events.count(INTERFACEKEY_STRING_A000))entry='\x0'; + if(flag & STRINGENTRY_NUMBERS) + { + if(events.count(INTERFACEKEY_STRING_A048))entry='0'; + if(events.count(INTERFACEKEY_STRING_A049))entry='1'; + if(events.count(INTERFACEKEY_STRING_A050))entry='2'; + if(events.count(INTERFACEKEY_STRING_A051))entry='3'; + if(events.count(INTERFACEKEY_STRING_A052))entry='4'; + if(events.count(INTERFACEKEY_STRING_A053))entry='5'; + if(events.count(INTERFACEKEY_STRING_A054))entry='6'; + if(events.count(INTERFACEKEY_STRING_A055))entry='7'; + if(events.count(INTERFACEKEY_STRING_A056))entry='8'; + if(events.count(INTERFACEKEY_STRING_A057))entry='9'; + } + if(flag & STRINGENTRY_SYMBOLS) + { + if(events.count(INTERFACEKEY_STRING_A000))entry=0; + if(events.count(INTERFACEKEY_STRING_A001))entry=1; + if(events.count(INTERFACEKEY_STRING_A002))entry=2; + if(events.count(INTERFACEKEY_STRING_A003))entry=3; + if(events.count(INTERFACEKEY_STRING_A004))entry=4; + if(events.count(INTERFACEKEY_STRING_A005))entry=5; + if(events.count(INTERFACEKEY_STRING_A006))entry=6; + if(events.count(INTERFACEKEY_STRING_A007))entry=7; + if(events.count(INTERFACEKEY_STRING_A008))entry=8; + if(events.count(INTERFACEKEY_STRING_A009))entry=9; + if(events.count(INTERFACEKEY_STRING_A010))entry=10; + if(events.count(INTERFACEKEY_STRING_A011))entry=11; + if(events.count(INTERFACEKEY_STRING_A012))entry=12; + if(events.count(INTERFACEKEY_STRING_A013))entry=13; + if(events.count(INTERFACEKEY_STRING_A014))entry=14; + if(events.count(INTERFACEKEY_STRING_A015))entry=15; + if(events.count(INTERFACEKEY_STRING_A016))entry=16; + if(events.count(INTERFACEKEY_STRING_A017))entry=17; + if(events.count(INTERFACEKEY_STRING_A018))entry=18; + if(events.count(INTERFACEKEY_STRING_A019))entry=19; + if(events.count(INTERFACEKEY_STRING_A020))entry=20; + if(events.count(INTERFACEKEY_STRING_A021))entry=21; + if(events.count(INTERFACEKEY_STRING_A022))entry=22; + if(events.count(INTERFACEKEY_STRING_A023))entry=23; + if(events.count(INTERFACEKEY_STRING_A024))entry=24; + if(events.count(INTERFACEKEY_STRING_A025))entry=25; + if(events.count(INTERFACEKEY_STRING_A026))entry=26; + if(events.count(INTERFACEKEY_STRING_A027))entry=27; + if(events.count(INTERFACEKEY_STRING_A028))entry=28; + if(events.count(INTERFACEKEY_STRING_A029))entry=29; + if(events.count(INTERFACEKEY_STRING_A030))entry=30; + if(events.count(INTERFACEKEY_STRING_A031))entry=31; + if(events.count(INTERFACEKEY_STRING_A032))entry=32; + if(events.count(INTERFACEKEY_STRING_A033))entry=33; + if(events.count(INTERFACEKEY_STRING_A034))entry=34; + if(events.count(INTERFACEKEY_STRING_A035))entry=35; + if(events.count(INTERFACEKEY_STRING_A036))entry=36; + if(events.count(INTERFACEKEY_STRING_A037))entry=37; + if(events.count(INTERFACEKEY_STRING_A038))entry=38; + if(events.count(INTERFACEKEY_STRING_A039))entry=39; + if(events.count(INTERFACEKEY_STRING_A040))entry=40; + if(events.count(INTERFACEKEY_STRING_A041))entry=41; + if(events.count(INTERFACEKEY_STRING_A042))entry=42; + if(events.count(INTERFACEKEY_STRING_A043))entry=43; + if(events.count(INTERFACEKEY_STRING_A044))entry=44; + if(events.count(INTERFACEKEY_STRING_A045))entry=45; + if(events.count(INTERFACEKEY_STRING_A046))entry=46; + if(events.count(INTERFACEKEY_STRING_A047))entry=47; + if(events.count(INTERFACEKEY_STRING_A048))entry=48; + if(events.count(INTERFACEKEY_STRING_A049))entry=49; + if(events.count(INTERFACEKEY_STRING_A050))entry=50; + if(events.count(INTERFACEKEY_STRING_A051))entry=51; + if(events.count(INTERFACEKEY_STRING_A052))entry=52; + if(events.count(INTERFACEKEY_STRING_A053))entry=53; + if(events.count(INTERFACEKEY_STRING_A054))entry=54; + if(events.count(INTERFACEKEY_STRING_A055))entry=55; + if(events.count(INTERFACEKEY_STRING_A056))entry=56; + if(events.count(INTERFACEKEY_STRING_A057))entry=57; + if(events.count(INTERFACEKEY_STRING_A058))entry=58; + if(events.count(INTERFACEKEY_STRING_A059))entry=59; + if(events.count(INTERFACEKEY_STRING_A060))entry=60; + if(events.count(INTERFACEKEY_STRING_A061))entry=61; + if(events.count(INTERFACEKEY_STRING_A062))entry=62; + if(events.count(INTERFACEKEY_STRING_A063))entry=63; + if(events.count(INTERFACEKEY_STRING_A064))entry=64; + if(events.count(INTERFACEKEY_STRING_A065))entry=65; + if(events.count(INTERFACEKEY_STRING_A066))entry=66; + if(events.count(INTERFACEKEY_STRING_A067))entry=67; + if(events.count(INTERFACEKEY_STRING_A068))entry=68; + if(events.count(INTERFACEKEY_STRING_A069))entry=69; + if(events.count(INTERFACEKEY_STRING_A070))entry=70; + if(events.count(INTERFACEKEY_STRING_A071))entry=71; + if(events.count(INTERFACEKEY_STRING_A072))entry=72; + if(events.count(INTERFACEKEY_STRING_A073))entry=73; + if(events.count(INTERFACEKEY_STRING_A074))entry=74; + if(events.count(INTERFACEKEY_STRING_A075))entry=75; + if(events.count(INTERFACEKEY_STRING_A076))entry=76; + if(events.count(INTERFACEKEY_STRING_A077))entry=77; + if(events.count(INTERFACEKEY_STRING_A078))entry=78; + if(events.count(INTERFACEKEY_STRING_A079))entry=79; + if(events.count(INTERFACEKEY_STRING_A080))entry=80; + if(events.count(INTERFACEKEY_STRING_A081))entry=81; + if(events.count(INTERFACEKEY_STRING_A082))entry=82; + if(events.count(INTERFACEKEY_STRING_A083))entry=83; + if(events.count(INTERFACEKEY_STRING_A084))entry=84; + if(events.count(INTERFACEKEY_STRING_A085))entry=85; + if(events.count(INTERFACEKEY_STRING_A086))entry=86; + if(events.count(INTERFACEKEY_STRING_A087))entry=87; + if(events.count(INTERFACEKEY_STRING_A088))entry=88; + if(events.count(INTERFACEKEY_STRING_A089))entry=89; + if(events.count(INTERFACEKEY_STRING_A090))entry=90; + if(events.count(INTERFACEKEY_STRING_A091))entry=91; + if(events.count(INTERFACEKEY_STRING_A092))entry=92; + if(events.count(INTERFACEKEY_STRING_A093))entry=93; + if(events.count(INTERFACEKEY_STRING_A094))entry=94; + if(events.count(INTERFACEKEY_STRING_A095))entry=95; + if(events.count(INTERFACEKEY_STRING_A096))entry=96; + if(events.count(INTERFACEKEY_STRING_A097))entry=97; + if(events.count(INTERFACEKEY_STRING_A098))entry=98; + if(events.count(INTERFACEKEY_STRING_A099))entry=99; + if(events.count(INTERFACEKEY_STRING_A100))entry=100; + if(events.count(INTERFACEKEY_STRING_A101))entry=101; + if(events.count(INTERFACEKEY_STRING_A102))entry=102; + if(events.count(INTERFACEKEY_STRING_A103))entry=103; + if(events.count(INTERFACEKEY_STRING_A104))entry=104; + if(events.count(INTERFACEKEY_STRING_A105))entry=105; + if(events.count(INTERFACEKEY_STRING_A106))entry=106; + if(events.count(INTERFACEKEY_STRING_A107))entry=107; + if(events.count(INTERFACEKEY_STRING_A108))entry=108; + if(events.count(INTERFACEKEY_STRING_A109))entry=109; + if(events.count(INTERFACEKEY_STRING_A110))entry=110; + if(events.count(INTERFACEKEY_STRING_A111))entry=111; + if(events.count(INTERFACEKEY_STRING_A112))entry=112; + if(events.count(INTERFACEKEY_STRING_A113))entry=113; + if(events.count(INTERFACEKEY_STRING_A114))entry=114; + if(events.count(INTERFACEKEY_STRING_A115))entry=115; + if(events.count(INTERFACEKEY_STRING_A116))entry=116; + if(events.count(INTERFACEKEY_STRING_A117))entry=117; + if(events.count(INTERFACEKEY_STRING_A118))entry=118; + if(events.count(INTERFACEKEY_STRING_A119))entry=119; + if(events.count(INTERFACEKEY_STRING_A120))entry=120; + if(events.count(INTERFACEKEY_STRING_A121))entry=121; + if(events.count(INTERFACEKEY_STRING_A122))entry=122; + if(events.count(INTERFACEKEY_STRING_A123))entry=123; + if(events.count(INTERFACEKEY_STRING_A124))entry=124; + if(events.count(INTERFACEKEY_STRING_A125))entry=125; + if(events.count(INTERFACEKEY_STRING_A126))entry=126; + if(events.count(INTERFACEKEY_STRING_A128))entry=128; + if(events.count(INTERFACEKEY_STRING_A129))entry=129; + if(events.count(INTERFACEKEY_STRING_A130))entry=130; + if(events.count(INTERFACEKEY_STRING_A131))entry=131; + if(events.count(INTERFACEKEY_STRING_A132))entry=132; + if(events.count(INTERFACEKEY_STRING_A133))entry=133; + if(events.count(INTERFACEKEY_STRING_A134))entry=134; + if(events.count(INTERFACEKEY_STRING_A135))entry=135; + if(events.count(INTERFACEKEY_STRING_A136))entry=136; + if(events.count(INTERFACEKEY_STRING_A137))entry=137; + if(events.count(INTERFACEKEY_STRING_A138))entry=138; + if(events.count(INTERFACEKEY_STRING_A139))entry=139; + if(events.count(INTERFACEKEY_STRING_A140))entry=140; + if(events.count(INTERFACEKEY_STRING_A141))entry=141; + if(events.count(INTERFACEKEY_STRING_A142))entry=142; + if(events.count(INTERFACEKEY_STRING_A143))entry=143; + if(events.count(INTERFACEKEY_STRING_A144))entry=144; + if(events.count(INTERFACEKEY_STRING_A145))entry=145; + if(events.count(INTERFACEKEY_STRING_A146))entry=146; + if(events.count(INTERFACEKEY_STRING_A147))entry=147; + if(events.count(INTERFACEKEY_STRING_A148))entry=148; + if(events.count(INTERFACEKEY_STRING_A149))entry=149; + if(events.count(INTERFACEKEY_STRING_A150))entry=150; + if(events.count(INTERFACEKEY_STRING_A151))entry=151; + if(events.count(INTERFACEKEY_STRING_A152))entry=152; + if(events.count(INTERFACEKEY_STRING_A153))entry=153; + if(events.count(INTERFACEKEY_STRING_A154))entry=154; + if(events.count(INTERFACEKEY_STRING_A155))entry=155; + if(events.count(INTERFACEKEY_STRING_A156))entry=156; + if(events.count(INTERFACEKEY_STRING_A157))entry=157; + if(events.count(INTERFACEKEY_STRING_A158))entry=158; + if(events.count(INTERFACEKEY_STRING_A159))entry=159; + if(events.count(INTERFACEKEY_STRING_A160))entry=160; + if(events.count(INTERFACEKEY_STRING_A161))entry=161; + if(events.count(INTERFACEKEY_STRING_A162))entry=162; + if(events.count(INTERFACEKEY_STRING_A163))entry=163; + if(events.count(INTERFACEKEY_STRING_A164))entry=164; + if(events.count(INTERFACEKEY_STRING_A165))entry=165; + if(events.count(INTERFACEKEY_STRING_A166))entry=166; + if(events.count(INTERFACEKEY_STRING_A167))entry=167; + if(events.count(INTERFACEKEY_STRING_A168))entry=168; + if(events.count(INTERFACEKEY_STRING_A169))entry=169; + if(events.count(INTERFACEKEY_STRING_A170))entry=170; + if(events.count(INTERFACEKEY_STRING_A171))entry=171; + if(events.count(INTERFACEKEY_STRING_A172))entry=172; + if(events.count(INTERFACEKEY_STRING_A173))entry=173; + if(events.count(INTERFACEKEY_STRING_A174))entry=174; + if(events.count(INTERFACEKEY_STRING_A175))entry=175; + if(events.count(INTERFACEKEY_STRING_A176))entry=176; + if(events.count(INTERFACEKEY_STRING_A177))entry=177; + if(events.count(INTERFACEKEY_STRING_A178))entry=178; + if(events.count(INTERFACEKEY_STRING_A179))entry=179; + if(events.count(INTERFACEKEY_STRING_A180))entry=180; + if(events.count(INTERFACEKEY_STRING_A181))entry=181; + if(events.count(INTERFACEKEY_STRING_A182))entry=182; + if(events.count(INTERFACEKEY_STRING_A183))entry=183; + if(events.count(INTERFACEKEY_STRING_A184))entry=184; + if(events.count(INTERFACEKEY_STRING_A185))entry=185; + if(events.count(INTERFACEKEY_STRING_A186))entry=186; + if(events.count(INTERFACEKEY_STRING_A187))entry=187; + if(events.count(INTERFACEKEY_STRING_A188))entry=188; + if(events.count(INTERFACEKEY_STRING_A189))entry=189; + if(events.count(INTERFACEKEY_STRING_A190))entry=190; + if(events.count(INTERFACEKEY_STRING_A191))entry=191; + if(events.count(INTERFACEKEY_STRING_A192))entry=192; + if(events.count(INTERFACEKEY_STRING_A193))entry=193; + if(events.count(INTERFACEKEY_STRING_A194))entry=194; + if(events.count(INTERFACEKEY_STRING_A195))entry=195; + if(events.count(INTERFACEKEY_STRING_A196))entry=196; + if(events.count(INTERFACEKEY_STRING_A197))entry=197; + if(events.count(INTERFACEKEY_STRING_A198))entry=198; + if(events.count(INTERFACEKEY_STRING_A199))entry=199; + if(events.count(INTERFACEKEY_STRING_A200))entry=200; + if(events.count(INTERFACEKEY_STRING_A201))entry=201; + if(events.count(INTERFACEKEY_STRING_A202))entry=202; + if(events.count(INTERFACEKEY_STRING_A203))entry=203; + if(events.count(INTERFACEKEY_STRING_A204))entry=204; + if(events.count(INTERFACEKEY_STRING_A205))entry=205; + if(events.count(INTERFACEKEY_STRING_A206))entry=206; + if(events.count(INTERFACEKEY_STRING_A207))entry=207; + if(events.count(INTERFACEKEY_STRING_A208))entry=208; + if(events.count(INTERFACEKEY_STRING_A209))entry=209; + if(events.count(INTERFACEKEY_STRING_A210))entry=210; + if(events.count(INTERFACEKEY_STRING_A211))entry=211; + if(events.count(INTERFACEKEY_STRING_A212))entry=212; + if(events.count(INTERFACEKEY_STRING_A213))entry=213; + if(events.count(INTERFACEKEY_STRING_A214))entry=214; + if(events.count(INTERFACEKEY_STRING_A215))entry=215; + if(events.count(INTERFACEKEY_STRING_A216))entry=216; + if(events.count(INTERFACEKEY_STRING_A217))entry=217; + if(events.count(INTERFACEKEY_STRING_A218))entry=218; + if(events.count(INTERFACEKEY_STRING_A219))entry=219; + if(events.count(INTERFACEKEY_STRING_A220))entry=220; + if(events.count(INTERFACEKEY_STRING_A221))entry=221; + if(events.count(INTERFACEKEY_STRING_A222))entry=222; + if(events.count(INTERFACEKEY_STRING_A223))entry=223; + if(events.count(INTERFACEKEY_STRING_A224))entry=224; + if(events.count(INTERFACEKEY_STRING_A225))entry=225; + if(events.count(INTERFACEKEY_STRING_A226))entry=226; + if(events.count(INTERFACEKEY_STRING_A227))entry=227; + if(events.count(INTERFACEKEY_STRING_A228))entry=228; + if(events.count(INTERFACEKEY_STRING_A229))entry=229; + if(events.count(INTERFACEKEY_STRING_A230))entry=230; + if(events.count(INTERFACEKEY_STRING_A231))entry=231; + if(events.count(INTERFACEKEY_STRING_A232))entry=232; + if(events.count(INTERFACEKEY_STRING_A233))entry=233; + if(events.count(INTERFACEKEY_STRING_A234))entry=234; + if(events.count(INTERFACEKEY_STRING_A235))entry=235; + if(events.count(INTERFACEKEY_STRING_A236))entry=236; + if(events.count(INTERFACEKEY_STRING_A237))entry=237; + if(events.count(INTERFACEKEY_STRING_A238))entry=238; + if(events.count(INTERFACEKEY_STRING_A239))entry=239; + if(events.count(INTERFACEKEY_STRING_A240))entry=240; + if(events.count(INTERFACEKEY_STRING_A241))entry=241; + if(events.count(INTERFACEKEY_STRING_A242))entry=242; + if(events.count(INTERFACEKEY_STRING_A243))entry=243; + if(events.count(INTERFACEKEY_STRING_A244))entry=244; + if(events.count(INTERFACEKEY_STRING_A245))entry=245; + if(events.count(INTERFACEKEY_STRING_A246))entry=246; + if(events.count(INTERFACEKEY_STRING_A247))entry=247; + if(events.count(INTERFACEKEY_STRING_A248))entry=248; + if(events.count(INTERFACEKEY_STRING_A249))entry=249; + if(events.count(INTERFACEKEY_STRING_A250))entry=250; + if(events.count(INTERFACEKEY_STRING_A251))entry=251; + if(events.count(INTERFACEKEY_STRING_A252))entry=252; + if(events.count(INTERFACEKEY_STRING_A253))entry=253; + if(events.count(INTERFACEKEY_STRING_A254))entry=254; + if(events.count(INTERFACEKEY_STRING_A255))entry=255; + } + + if(entry!=255) + { + if(entry=='\x0') + { + if(str.length()>0)str.resize(str.length()-1); + } + else + { + int cursor=str.length(); + if(cursor>=maxlen)cursor=maxlen-1; + if(cursor<0)cursor=0; + + if(str.length()='a'&&entry<='z'&&(flag & STRINGENTRY_CAPS))str[cursor]=entry+'A'-'a'; + else str[cursor]=entry; + } + + + return 1; + } + + return 0; +} + +//To Do +//get the gview.c references inside the DEBUG_MOVIE defines +//make scrolling and stringentry use newer pressed functions for better speed -- cgit v1.2.3