#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