rem: typemenu.hotkeys=KEY_LEFT+KEY_RIGHT+"\b\x7f\x1b"; 
add: typemenu.hotkeys=KEY_LEFT+KEY_RIGHT+"\b\x7f\x1b"+ctrl('O')+ctrl('U')+ctrl('T')+ctrl('K')+ctrl('P'); 
context: function show_filemenu(){	var cur=1;	var nd=false;	while(1) {		var filemenu=new Filemenu();		var ret;		var i;		var j;		filemenu.nodraw=nd;		filemenu.current=cur;		ret=filemenu.getval();		if(ret==KEY_RIGHT) {			if(filemenu.items[filemenu.current].text.substr(-2,2)==' >')				ret=filemenu.items[filemenu.current].retval;		}		file: switch(ret) {			case KEY_LEFT:				cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);				main_left();				return;			case '\b':			case '\x7f':			case '\x1b':				cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);				return;			case KEY_RIGHT:				cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);				main_right();				return;			case 'C':				clear_screen();				changedir: do {					if(!file_area.lib_list.length)						break changedir;					while(1) {						var orig_lib=bbs.curlib;						i=0;						j=0;						if(file_area.lib_list.length>1) {							if(file_exists(system.text_dir+"menu/libs.*"))								bbs.menu("libs");							else {								console.putmsg(bbs.text(CfgLibLstHdr),P_SAVEATR);								for(i=0; i<file_area.lib_list.length; i++) {									if(i==bbs.curlib)										console.putmsg('*',P_SAVEATR);									else										console.putmsg(' ',P_SAVEATR);									if(i<9)										console.putmsg(' ',P_SAVEATR);									if(i<99)										console.putmsg(' ',P_SAVEATR);									// We use console.putmsg to expand ^A, @, etc									console.putmsg(format(bbs.text(CfgLibLstFmt),i+1,file_area.lib_list[i].description),P_SAVEATR);								}							}							console.mnemonics(format(bbs.text(JoinWhichLib),bbs.curlib+1));							j=console.getnum(file_area.lib_list.length,false);							if(j<0)								break changedir;							if(!j)								j=bbs.curlib;							else								j--;						}						bbs.curlib=j;						if(file_exists(system.text_dir+"menu/dirs"+(bbs.curlib+1)))							bbs.menu("dirs"+(bbs.curlib+1));						else {							 console.clear();							 console.putmsg(format(bbs.text(DirLstHdr), file_area.lib_list[j].description),P_SAVEATR);							 for(i=0; i<file_area.lib_list[j].dir_list.length; i++) {								if(i==bbs.curdir)									console.putmsg('*',P_SAVEATR);								else									console.putmsg(' ',P_SAVEATR);								if(i<9)									console.putmsg(' ',P_SAVEATR);								if(i<99)									console.putmsg(' ',P_SAVEATR);								console.putmsg(format(bbs.text(DirLstFmt),i+1, file_area.lib_list[j].dir_list[i].description,"",todo_getfiles(j,i)),P_SAVEATR);							}						}						console.mnemonics(format(bbs.text(JoinWhichDir),bbs.curdir+1));						i=console.getnum(file_area.lib_list[j].dir_list.length);						if(i==-1) {							if(file_area.lib_list.length==1) {								bbs.curlib=orig_lib;								break changedir;							}							continue;						}						if(!i)							i=bbs.curdir;						else							i--;						bbs.curdir=i;						break changedir;					}				} while(0);				draw_main(true);				break;			case 'L':				clear_screen();				bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number);				console.pause();				draw_main(true);				break;			case 'N':				var typemenu=new Filedirmenu(filemenu.xpos+filemenu.items[0].text.length, filemenu.current+1, true);				while(1) {					switch(typemenu.getval()) {						case 'A':							clear_screen();							console.putmsg("\r\nchNew File Scan (All)\r\n");							bbs.scan_dirs(FL_ULTIME,true);							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'L':							/* Scan this lib only */							clear_screen();							console.putmsg("\r\nchNew File Scan (Lib)\r\n");							for(i=0; i<file_area.lib_list[bbs.curlib].dir_list.length; i++)								bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[i].number,FL_ULTIME);							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'D':							/* Scan this dir only */							clear_screen();							console.putmsg("\r\nchNew File Scan (Dir)\r\n");							bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number,FL_ULTIME);							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'N':							// ToDo: Don't clear screen here, just do one line							clear_screen();							bbs.new_file_time=bbs.get_newscantime(bbs.new_file_time);							draw_main(true);							filemenu.draw();							break;						case KEY_RIGHT:							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);							main_right();							return;						default:	// Anything else will escape.							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							filemenu.nodraw=true;							break file;					}				}				break;			case 'F':				var typemenu=new Filedirmenu(filemenu.xpos+filemenu.items[0].text.length, filemenu.current+1, false);				while(1) {					switch(typemenu.getval()) {						case 'A':							clear_screen();							console.putmsg("\r\nchSearch for Filename(s) (All)\r\n");							var spec=bbs.get_filespec();							for(i=0; i<file_area.lib_list.length; i++) {								for(j=0;j<file_area.lib_list[i].dir_list.length;j++)									bbs.list_files(file_area.lib_list[i].dir_list[j].number,spec,0);							}							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'L':							/* Scan this lib only */							clear_screen();								console.putmsg("\r\nchSearch for Filename(s) (Lib)\r\n");							var spec=bbs.get_filespec();							for(j=0;j<file_area.lib_list[bbs.curlib].dir_list.length;j++)								bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[j].number,spec,0);							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'D':							/* Scan this dir only */							clear_screen();							console.putmsg("\r\nchSearch for Filename(s) (Dir)\r\n");							var spec=bbs.get_filespec();							bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number,spec,0);							console.pause();							draw_main(true);							filemenu.draw();							break;						case KEY_RIGHT:							cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							main_right();							return;						default:	// Anything else will escape.							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							filemenu.nodraw=true;							break file;					}				}				break;			case 'T':				var typemenu=new Filedirmenu(filemenu.xpos+filemenu.items[0].text.length, filemenu.current+1, false);				while(1) {					switch(typemenu.getval()) {						case 'A':							clear_screen();							console.putmsg("\r\nchSearch for Text in Description(s) (All)\r\n");							console.putmsg(bbs.text(SearchStringPrompt));							var spec=console.getstr(40,K_LINE|K_UPPER);							for(i=0; i<file_area.lib_list.length; i++) {								for(j=0;j<file_area.lib_list[i].dir_list.length;j++)									bbs.list_files(file_area.lib_list[i].dir_list[j].number,spec,FL_FINDDESC);							}							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'L':							/* Scan this lib only */							clear_screen();							console.putmsg("\r\nchSearch for Text in Description(s) (Lib)\r\n");							console.putmsg(bbs.text(SearchStringPrompt));							var spec=console.getstr(40,K_LINE|K_UPPER);							for(j=0;j<file_area.lib_list[bbs.curlib].dir_list.length;j++)								bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[j].number,spec,FL_FINDDESC);							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'D':							/* Scan this dir only */							clear_screen();							console.putmsg("\r\nchSearch for Text in Description(s) (Dir)\r\n");							console.putmsg(bbs.text(SearchStringPrompt));							var spec=console.getstr(40,K_LINE|K_UPPER);							bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number,spec,FL_FINDDESC);							console.pause();							draw_main(true);							filemenu.draw();							break;						case KEY_RIGHT:							cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							main_right();							return;						default:	// Anything else will escape.							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							filemenu.nodraw=true;							break file;					}				}				break;			case 'D':				var typemenu=new Lightbar;				typemenu.xpos=filemenu.xpos+filemenu.items[0].text.length;				typemenu.ypos=filemenu.current+1;				typemenu.lpadding="\xb3";				typemenu.rpadding="\xb3";				typemenu.hotkeys=KEY_LEFT+KEY_RIGHT+"\b\x7f\x1b";				typemenu.add(top_bar(17),undefined,undefined,"","");				typemenu.add('|Batch','B',17,undefined,undefined,bbs.batch_dnload_total<=0);				typemenu.add('By |Name/File spec','N',17);				typemenu.add('From |User','U',17);				typemenu.add(bottom_bar(17),undefined,undefined,"","");				typemenu.timeout=100;				typemenu.callback=message_callback;				while(1) {					switch(typemenu.getval()) {						case 'B':							clear_screen();							bbs.batch_download();							/* Redraw just in case */							draw_main(true);							filemenu.draw();							break;						case 'N':							clear_screen();							var spec=bbs.get_filespec();							bbs.list_file_info(bbs.curdir,spec,FI_DOWNLOAD);							draw_main(true);							filemenu.draw();							break;						case 'U':							clear_screen();							bbs.list_file_info(bbs.curdir,spec,FI_USERXFER);							draw_main(true);							filemenu.draw();							break;						case KEY_RIGHT:							cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							main_right();							return;						default:							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							filemenu.nodraw=true;							break file;					}				}				break;			case 'U':				var typemenu=new Lightbar;				var width=19;				typemenu.xpos=filemenu.xpos+filemenu.items[0].text.length;				typemenu.ypos=filemenu.current+1;				typemenu.lpadding="\xb3";				typemenu.rpadding="\xb3";				typemenu.hotkeys=KEY_LEFT+KEY_RIGHT+"\b\x7f\x1b";				if(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].can_upload || file_area.upload_dir==undefined) {					if(width<9+file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].name.length)						width=9+file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].name.length;				}				typemenu.add(top_bar(width),undefined,undefined,"","");				if(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].can_upload || file_area.upload_dir==undefined) {					typemenu.add('To |Dir ('+file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].name+')','C',width,undefined,undefined,!file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].can_upload);				}				else {					typemenu.add('To Upload |Dir','P',width);				}				typemenu.add('To |Sysop Only','S',width,undefined,undefined,file_area.sysop_dir==undefined);				typemenu.add('To Specific |User(s)','U',width,undefined,undefined,file_area.user_dir==undefined);				typemenu.add(bottom_bar(width),undefined,undefined,"","");				typemenu.timeout=100;				typemenu.callback=message_callback;				while(1) {					switch(typemenu.getval()) {						case 'C':	// Current dir							clear_screen();							bbs.upload_file(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number);							draw_main(true);							filemenu.draw();							break;						case 'P':	// Upload dir							clear_screen();							bbs.upload_file(file_area.upload_dir);							draw_main(true);							filemenu.draw();							break;						case 'S':	// Sysop dir							clear_screen();							bbs.upload_file(file_area.sysop_dir);							draw_main(true);							filemenu.draw();							break;						case 'U':	// To user							clear_screen();							bbs.upload_file(file_area.user_dir);							draw_main(true);							filemenu.draw();						case KEY_RIGHT:							cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							main_right();							return;						default:							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							filemenu.nodraw=true;							break file;					}				}				break;			case 'R':				clear_screen();				fileremove: do {					console.putmsg("\r\nchRemove/Edit File(s)\r\n");					str=bbs.get_filespec();					if(str==null)						break fileremove;					if(!bbs.list_file_info(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number, str, FI_REMOVE)) {						var s=0;						console.putmsg(bbs.text(SearchingAllDirs));						for(i=0; i<file_area.lib_list[bbs.curlib].dir_list.length; i++) {							if(i!=bbs.curdir &&									(s=bbs.list_file_info(file_area.lib_list[bbs.curlib].dir_list[i].number, str, FI_REMOVE))!=0) {								if(s==-1 || str.indexOf('?')!=-1 || str.indexOf('*')!=-1) {									break fileremove;								}							}						}						console.putmsg(bbs.text(SearchingAllLibs));						for(i=0; i<file_area.lib_list.length; i++) {							if(i==bbs.curlib)								continue;							for(j=0; j<file_area.lib_list[i].dir_list.length; j++) {								if((s=bbs.list_file_info(file_area.lib_list[i].dir_list[j].number, str, FI_REMOVE))!=0) {									if(s==-1 || str.indexOf('?')!=-1 || str.indexOf('*')!=-1) {										break fileremove;									}								}							}						}					}				} while(0);				draw_main(true);				break;			case 'B':				console.attributes=LBShell_Attr;				clear_screen();				bbs.batch_menu();				draw_main(true);				break;			case 'V':				var typemenu=new Lightbar;				var width=32;				typemenu.xpos=filemenu.xpos+filemenu.items[0].text.length;				typemenu.ypos=filemenu.current+1;				typemenu.lpadding="\xb3";				typemenu.rpadding="\xb3";				typemenu.hotkeys=KEY_LEFT+KEY_RIGHT+"\b\x7f\x1b";				typemenu.add(top_bar(width),undefined,undefined,"","");				typemenu.add('File |Contents','C',width);				typemenu.add('File |Information','I',width);				typemenu.add('File Transfer |Policy','P',width);				typemenu.add('|Directory Info','D',width);				typemenu.add('|Users with Access to Dir','U',width);				typemenu.add('Your File Transfer |Statistics','S',width);				typemenu.add(bottom_bar(width),undefined,undefined,"","");				typemenu.timeout=100;				typemenu.callback=message_callback;				while(1) {					switch(typemenu.getval()) {						case 'C':							clear_screen();							console.putmsg("\r\nchView File(s)\r\n");							str=bbs.get_filespec();							if(str!=null) {								if(!bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number, str, FL_VIEW)) {									console.putmsg(bbs.text(SearchingAllDirs));									for(i=0; i<file_area.lib_list[bbs.curlib].dir_list.length; i++) {										if(i==bbs.curdir)											continue;										if(bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[i].number, str, FL_VIEW))											break;									}									if(i<file_area.lib_list[bbs.curlib].dir_list.length)										break file;									console.putmsg(bbs.text(SearchingAllLibs));									libloop: for(i=0; i<file_area.lib_list.length; i++) {										if(i==bbs.curlib)											continue;										for(j=0; j<file_area.lib_list[i].dir_list.length; j++) {											if(bbs.list_files(file_area.lib_list[i].dir_list[j].number, str, FL_VIEW))											break libloop;										}									}								}							}							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'I':							clear_screen();							console.putmsg("\r\nchView File Information\r\n");							str=bbs.get_filespec();							if(str!=null) {								if(!bbs.list_file_info(file_area.lib_list[bbs.curlib].dir_list[bbs.curdir].number, str, FI_INFO)) {									console.putmsg(bbs.text(SearchingAllDirs));									for(i=0; i<file_area.lib_list[bbs.curlib].dir_list.length; i++) {										if(i==bbs.curdir)											continue;										if(bbs.list_files(file_area.lib_list[bbs.curlib].dir_list[i].number, str, FI_INFO))											break;									}									if(i<file_area.lib_list[bbs.curlib].dir_list.length)										break file;									console.putmsg(bbs.text(SearchingAllLibs));									libloop: for(i=0; i<file_area.lib_list.length; i++) {										if(i==bbs.curlib)											continue;										for(j=0; j<file_area.lib_list[i].dir_list.length; j++) {											if(bbs.list_files(file_area.lib_list[i].dir_list[j].number, str, FI_INFO))											break libloop;										}									}								}							}							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'P':							clear_screen();							bbs.xfer_policy();							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'D':							clear_screen();							bbs.dir_info();							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'U':							clear_screen();							bbs.list_users(UL_DIR);							console.pause();							draw_main(true);							filemenu.draw();							break;						case 'S':							break;						case KEY_RIGHT:							cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							main_right();							return;						default:							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							filemenu.nodraw=true;							break file;					}				}				break;			case 'S':				var cur=1;				while(1) {					var typemenu=new Lightbar;					var width=28;					if(user.settings&USER_EXTDESC)						width++;					typemenu.xpos=filemenu.xpos+filemenu.items[0].text.length;					typemenu.ypos=filemenu.current+1;					typemenu.lpadding="\xb3";					typemenu.rpadding="\xb3";					typemenu.hotkeys=KEY_LEFT+KEY_RIGHT+"\b\x7f\x1b";					typemenu.add(top_bar(width),undefined,undefined,"","");					typemenu.add('Set Batch Flagging '+(user.settings&USER_BATCHFLAG?'Off':'On'),'B',width);					typemenu.add('Set Extended Descriptions '+(user.settings&USER_EXTDESC?'Off':'On'),'S',width);					typemenu.add(bottom_bar(width),undefined,undefined,"","");					typemenu.current=cur;					typemenu.timeout=100;					typemenu.callback=message_callback;					switch(typemenu.getval()) {						case 'B':							user.settings ^= USER_BATCHFLAG;							break;						case 'S':							/* Need to clear for shorter menu */							if(user.settings & USER_EXTDESC)								cleararea(typemenu.xpos+typemenu.items[0].text.length-1,typemenu.ypos,1,typemenu.items.length,true);							user.settings ^= USER_EXTDESC;							break;						case KEY_RIGHT:							cleararea(filemenu.xpos,filemenu.ypos,filemenu.items[0].text.length,filemenu.items.length,true);							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							main_right();							return;						default:							cleararea(typemenu.xpos,typemenu.ypos,typemenu.items[0].text.length,typemenu.items.length,true);							filemenu.nodraw=true;							break file;					}					cur=typemenu.current;				}				break;		}		cur=filemenu.current;		nd=filemenu.nodraw;	}}
meta: 9592	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/9592/70493357eaef9b883fc33977a03652d408e20d61/lbshell.js/buggy/lbshell.js