Skip to content
Snippets Groups Projects
Select Git revision
  • dd_msg_reader_list_personal_email_in_reverse_choose_msg_fix
  • dailybuild_linux-x64
  • dailybuild_win32
  • master default protected
  • sqlite
  • rip_abstraction
  • dailybuild_macos-armv8
  • dd_file_lister_filanem_in_desc_color
  • mode7
  • dd_msg_reader_are_you_there_warning_improvement
  • c23-playing
  • syncterm-1.3
  • syncterm-1.2
  • test-build
  • hide_remote_connection_with_telgate
  • 638-can-t-control-c-during-a-file-search
  • add_body_to_pager_email
  • mingw32-build
  • cryptlib-3.4.7
  • ree/mastermind
  • sbbs320d
  • syncterm-1.6
  • syncterm-1.5
  • syncterm-1.4
  • sbbs320b
  • syncterm-1.3
  • syncterm-1.2
  • syncterm-1.2rc6
  • syncterm-1.2rc5
  • push
  • syncterm-1.2rc4
  • syncterm-1.2rc2
  • syncterm-1.2rc1
  • sbbs319b
  • sbbs318b
  • goodbuild_linux-x64_Sep-01-2020
  • goodbuild_win32_Sep-01-2020
  • goodbuild_linux-x64_Aug-31-2020
  • goodbuild_win32_Aug-31-2020
  • goodbuild_win32_Aug-30-2020
40 results

menu.js

Blame
  • menu.js 2.66 KiB
    // menu.js
    
    // $Id$
    
    // Execute a Synchronet menu (.menu) file
    
    load("sbbsdefs.js");
    load("menulib.js");
    
    var menu_stack = new Array();
    var pop_count = 0;
    
    exec_menu(argv[0]);
    
    function isdigit(ch)
    {
    	var val = ascii(ch.toUpperCase());
    
    	return(val>=ascii('0') && val<=ascii('9'));
    }
    
    function exec_menu(fname)
    {
    	if(!fname) {
    		alert(log(LOG_WARNING,"!No menu file specified"));
    		return(false);
    	}
    
    	if(!file_getext(fname))
    		fname += ".menu";
    
    	// Is menu already running (on stack)? If so, pop contexts to return to it
    	for(var i in menu_stack)
    		if(menu_stack[i].toUpperCase()==fname.toUpperCase()) {
    			pop_count=menu_stack.length-(i+1);
    			return;
    		}
    
    	log("Reading menu file" + fname);
    	var menu;
    	if((menu=read_menu(fname))==undefined)
    		return(false);
    
    	menu_stack.push(fname);
    
    	var done = false;
    
    	while(bbs.online && !done) {
    		if(pop_count) {
    			pop_count--;
    			break;
    		}
    		var cmd_keys="";
    		var cmd_list=new Array();
    		if(menu.hotkey_ext)
    			cmd_keys+=menu.hotkey_ext;
    		for(i in menu.command) {
    			if(menu.command[i].ars && !user.compare_ars(menu.command[i].ars))
    				continue;
    			cmd_keys+=menu.command[i].key;
    			cmd_list.push(menu.command[i]);
    		}
    		log("menu.show: " + menu.show);
    		
    		if(menu.show || !menu.expert || !(user.settings&USER_EXPERT)) {
    			if(menu.file)	/* static menu */
    				bbs.menu(menu.file);
    			else {			/* dynamic menu */
    				var column=0;
    				for(var i in cmd_list) {
    					if(cmd_list[i].description) {
    						if(column+menu.colwidth>=console.screen_columns)
    							console.crlf(), column=0;
    						var str=format(menu.fmt
    							,menu.reverse ? cmd_list[i].description : cmd_list[i].key.toUpperCase()
    							,menu.reverse ? cmd_list[i].key.toUpperCase() : cmd_list[i].description);
    						console.putmsg(str);
    						console.right(menu.colwidth-console.strlen(str));
    						if(console.strlen(str)>menu.colwidth)
    							column+=console.strlen(str);
    						else
    							column+=menu.colwidth;
    					}
    				}
    			}
    			menu.show = false;
    		}
    		bbs.nodesync();
    		console.aborted=false;
    		if(menu.exec)
    			eval(menu.exec);
    
    		if(menu.prompt)
    			console.putmsg(eval(menu.prompt));
    
    		var cmd;
    		if(menu.hotkeys)
    			console.write(cmd=console.getkey(K_UPPER));
    		else
    			cmd=console.getstr(K_UPPER);
    
    		if(cmd==undefined)
    			continue;
    
    		log("menu.num_exec = " + menu.num_exec);
    		log("menu.maxnum = " + menu.maxnum);
    		if(isdigit(cmd) && menu.num_exec) {
    			if(parseInt(cmd)*10 <= menu.maxnum)
    				eval(menu.num_exec);
    			continue;
    		}
    
    		if(menu.hotkeys && cmd.toUpperCase()==menu.hotkey_ext)
    			cmd+=console.getkey();
    
    		print();
    
    		for(var i in cmd_list)
    			if(cmd_list[i].key.toUpperCase() == String(cmd).toUpperCase())
    				eval(cmd_list[i].exec);
    	}
    
    	menu_stack.pop();
    }
    
    log("exiting");