176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* -*- c -*- ------------------------------------------------------------- * 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright 2004-2006 Murali Krishnan Ganapathy - All Rights Reserved 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is free software; you can redistribute it and/or modify 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * it under the terms of the GNU General Public License as published by 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the Free Software Foundation, Inc., 53 Temple Place Ste 330, 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Boston MA 02111-1307, USA; either version 2 of the License, or 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * (at your option) any later version; incorporated herein by reference. 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ----------------------------------------------------------------------- */ 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef NULL 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define NULL ((void *) 0) 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "cmenu.h" 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "help.h" 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "passwords.h" 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "com32io.h" 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <string.h> 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdlib.h> 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <unistd.h> 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_CMD_LINE_LENGTH 514 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct s_xtra { 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman long ipappend; // Stores the ipappend flag to send (useful for PXELINUX only) 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *argsmenu; // Stores the name of menu which contains options for the given RUN item 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *perms; // stores the permissions required to activate the item 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} t_xtra; 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef t_xtra *pt_xtra; // Pointer to extra datastructure 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Types of dot commands for which caller takes responsibility of handling 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// In some case some commands may not make sense, it is up to the caller 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// to handle cases which do not make sense 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef enum {QUIT_CMD, REPEAT_CMD, ENTER_CMD, ESCAPE_CMD} t_dotcmd; 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*----------------- Global Variables */ 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// default user 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define GUEST_USER "guest" 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// for local commands. return value of execdotcmd 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define QUIT_CMD 0 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define RPT_CMD 1 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar username[12]; // Name of user currently using the system 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint PWD_ROW; // Line number where user authentication happens 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint EDIT_ROW; // row where User Tab 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar loginstr[] = "<L>ogin "; 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar logoutstr[30]; 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint vmode; // The video mode we want to be in 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar timeoutcmd[MAX_CMD_LINE_LENGTH]; // Command to execute on timeout 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar totaltimeoutcmd[MAX_CMD_LINE_LENGTH]; // Command to execute on totaltimeout 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar QUITSTR[] = ".quit"; // same as exit 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar IGNORESTR[]=".ignore"; // same as repeat, wait 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*---------------- End globals */ 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// returns pointer to first non-space char 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// and advances end of str by removing trailing spaces 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar * strip(char *str) 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *p,*s,*e; 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!str) return NULL; 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman p = str; 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s = NULL; 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman e = NULL; 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while (*p) { 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*p != ' ') { 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // mark start of string or record the last visited non-space char 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!s) s=p; else e=p; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman p++; 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *(++e)='\0'; // kill string earlier 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return s; 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// executes a list of % separated commands 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// non-dot commands are assumed to be syslinux commands 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// All syslinux commands are appended with the contents of kerargs 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// If it fails (kernel not found) then the next one is tried in the 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// list 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// returns QUIT_CMD or RPT_CMD 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmant_dotcmd execdotcmd(const char *cmd, char *defcmd, const char *kerargs) 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char cmdline[MAX_CMD_LINE_LENGTH]; 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char dotcmd[MAX_CMD_LINE_LENGTH]; 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *curr,*next,*p,*args; 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char ctr; 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(dotcmd,cmd); 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman next = dotcmd; 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cmdline[0] = '\0'; 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while (*next) { // if something to do 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = next; 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman p = strchr(next,'%'); 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (p) { 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *p--='\0'; next=p+2; 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while (*p == ' ') p--; 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *(++p)='\0'; // remove trailing spaces 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } else { 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*defcmd) { // execute defcmd next 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman next=defcmd; 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman defcmd=NULL; // exec def cmd only once 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } else next=NULL; 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // now we just need to execute the command "curr" 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = strip(curr); 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (curr[0] != '.') { // just run the kernel 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(cmdline,curr); 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (kerargs) strcat(cmdline,kerargs); 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman runsyslinuximage(cmdline,0); // No IPAppend 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } else { // We have a DOT command 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // split command into command and args (may be empty) 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman args = curr; 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while ( (*args != ' ') && (*args != '\0') ) args++; 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*args) { // found a space 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *args++ = '\0'; 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while (*args == ' ') args++; // skip over spaces 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( (strcmp(curr,".exit")==0) || 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (strcmp(curr,".quit")==0) 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ) 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return QUIT_CMD; 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( (strcmp(curr,".repeat")==0) || 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (strcmp(curr,".ignore")==0) || 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (strcmp(curr,".wait")==0) 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ) 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return RPT_CMD; 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (strcmp(curr,".beep")==0) { 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ((args) && ('0' <= args[0]) && (args[0] <= '9')) 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ctr = args[0]-'0'; 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman else ctr=1; 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (;ctr>0; ctr--) beep(); 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (strcmp(curr,".help")==0) runhelp(args); 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return RPT_CMD; // by default we do not quit 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanTIMEOUTCODE timeout(const char *cmd) 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t_dotcmd c; 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman c = execdotcmd(cmd,".wait",NULL); 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman switch(c) { 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman case ENTER_CMD: 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return CODE_ENTER; 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman case ESCAPE_CMD: 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return CODE_ESCAPE; 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman default: 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return CODE_WAIT; 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanTIMEOUTCODE ontimeout(void) 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return timeout(timeoutcmd); 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17176d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanTIMEOUTCODE ontotaltimeout(void) 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return timeout(totaltimeoutcmd); 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid keys_handler(t_menusystem * ms __attribute__ (( unused )), t_menuitem * mi, int scancode) 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int nc, nr; 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (getscreensize(1, &nr, &nc)) { 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Unknown screen size? */ 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman nc = 80; 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman nr = 24; 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( (scancode == KEY_F1) && (mi->helpid != 0xFFFF) ) { // If scancode of F1 and non-trivial helpid 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman runhelpsystem(mi->helpid); 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // If user hit TAB, and item is an "executable" item 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // and user has privileges to edit it, edit it in place. 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ((scancode == KEY_TAB) && (mi->action == OPT_RUN) && 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (EDIT_ROW < nr) && (EDIT_ROW > 0) && 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (isallowed(username,"editcmd") || isallowed(username,"root"))) { 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // User typed TAB and has permissions to edit command line 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman gotoxy(EDIT_ROW,1); 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman csprint("Command line:",0x07); 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman editstring(mi->data,ACTIONLEN); 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman gotoxy(EDIT_ROW,1); 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cprint(' ',0x07,nc-1); 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmant_handler_return login_handler(t_menusystem *ms, t_menuitem *mi) 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (void)mi; // Unused 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char pwd[40]; 20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char login[40]; 20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int nc, nr; 21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t_handler_return rv; 21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (void)ms; 21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman rv = ACTION_INVALID; 21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (PWD_ROW < 0) return rv; // No need to authenticate 21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (mi->item == loginstr) { /* User wants to login */ 21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (getscreensize(1, &nr, &nc)) { 21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Unknown screen size? */ 22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman nc = 80; 22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman nr = 24; 22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman gotoxy(PWD_ROW,1); 22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman csprint("Enter Username: ",0x07); 22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman getstring(login, sizeof username); 22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman gotoxy(PWD_ROW,1); 22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cprint(' ',0x07,nc); 22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman csprint("Enter Password: ",0x07); 23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman getpwd(pwd, sizeof pwd); 23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman gotoxy(PWD_ROW,1); 23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cprint(' ',0x07,nc); 23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (authenticate_user(login,pwd)) 23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { 23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(username,login); 23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(logoutstr,"<L>ogout "); 23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcat(logoutstr,username); 23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mi->item = logoutstr; // Change item to read "Logout" 24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman rv.refresh = 1; // refresh the screen (as item contents changed) 24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman else strcpy(username,GUEST_USER); 24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman else // User needs to logout 24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { 24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(username,GUEST_USER); 24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(logoutstr,""); 24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mi->item = loginstr; 24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return rv; 25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmant_handler_return check_perms(t_menusystem *ms, t_menuitem *mi) 25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *perms; 25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pt_xtra x; 25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (void) ms; // To keep compiler happy 26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman x = (pt_xtra) mi->extra_data; 26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman perms = ( x ? x->perms : NULL); 26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!perms) return ACTION_VALID; 26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (isallowed(username,"root") || isallowed(username,perms)) // If allowed 26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return ACTION_VALID; 26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman else return ACTION_INVALID; 26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Compute the full command line to add and if non-trivial 27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// prepend the string prepend to final command line 27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Assume cmdline points to buffer long enough to hold answer 27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid gencommand(pt_menuitem mi, char *cmdline) 27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pt_xtra x; 27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cmdline[0] = '\0'; 27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcat(cmdline,mi->data); 27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman x = (pt_xtra) mi->extra_data; 27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( (x) && (x->argsmenu)) gen_append_line(x->argsmenu,cmdline); 28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// run the given command together with additional options which may need passing 28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid runcommand(pt_menuitem mi) 28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *line; 28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pt_xtra x; 28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman long ipappend; 28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman line = (char *)malloc(sizeof(char)*MAX_CMD_LINE_LENGTH); 29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman gencommand(mi,line); 29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman x = (pt_xtra) mi->extra_data; 29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ipappend = (x ? x->ipappend : 0); 29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman runsyslinuximage(line,ipappend); 29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman free(line); 29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// set the extra info for the specified menu item. 30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid set_xtra(pt_menuitem mi, const char *argsmenu, const char *perms, unsigned int helpid, long ipappend) 30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pt_xtra xtra; 30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int bad_argsmenu, bad_perms, bad_ipappend; 30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mi->extra_data = NULL; // initalize 30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mi->helpid = helpid; // set help id 30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (mi->action != OPT_RUN) return; 30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman bad_argsmenu = bad_perms = bad_ipappend = 0; 31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( (argsmenu==NULL) || (strlen(argsmenu)==0)) bad_argsmenu = 1; 31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( (perms==NULL) || (strlen(perms)==0)) bad_perms = 1; 31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if ( ipappend==0) bad_ipappend = 1; 31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (bad_argsmenu && bad_perms && bad_ipappend) return; 31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman xtra = (pt_xtra) malloc(sizeof(t_xtra)); 31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mi->extra_data = (void *) xtra; 31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman xtra->argsmenu = xtra->perms = NULL; 32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman xtra->ipappend = ipappend; 32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!bad_argsmenu) { 32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman xtra->argsmenu = (char *) malloc(sizeof(char)*(strlen(argsmenu)+1)); 32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(xtra->argsmenu,argsmenu); 32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!bad_perms) { 32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman xtra->perms = (char *) malloc(sizeof(char)*(strlen(perms)+1)); 32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(xtra->perms,perms); 32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman mi->handler = &check_perms; 32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint main(void) 33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pt_menuitem curr; 33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char quit; 33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char exitcmd[MAX_CMD_LINE_LENGTH]; 33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char exitcmdroot[MAX_CMD_LINE_LENGTH]; 33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char onerrcmd[MAX_CMD_LINE_LENGTH]; 33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char startfile[MAX_CMD_LINE_LENGTH]; 34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *ecmd; // effective exit command or onerrorcmd 34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char skipbits; 34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char skipcmd[MAX_CMD_LINE_LENGTH]; 34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int timeout; // time in multiples of 0.1 seconds 34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int totaltimeout; // time in multiples of 0.1 seconds 34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman t_dotcmd dotrv; // to store the return value of execdotcmd 34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int temp; 34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(username,GUEST_USER); 34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---- Initializing menu system parameters --- */ 35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman vmode = 0xFF; 35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman skipbits = SHIFT_PRESSED | CAPSLOCK_ON; 35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PWD_ROW = 23; 35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EDIT_ROW = 23; 35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(onerrcmd,".beep 2 % % .help hlp00025.txt % .exit"); 35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(exitcmd,".exit"); 35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(exitcmdroot,""); 35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // If not specified exitcmdroot = exitcmd 35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (exitcmdroot[0] == '\0') strcpy(exitcmdroot,exitcmd); 35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // Timeout stuff 36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman timeout = 600; 36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(timeoutcmd,".wait"); 36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman totaltimeout = 0; 36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(totaltimeoutcmd,"chain.c32 hd 0"); 36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman strcpy(startfile,"hlp00026.txt"); 36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman init_help("/isolinux/help"); 36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman init_passwords("/isolinux/password"); 36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman init_menusystem(" COMBOOT Menu System "); 36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_window_size(1,1,21,79); 37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // Register the ontimeout handler, with a time out of 10 seconds 37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman reg_ontimeout(ontimeout,timeout*10,0); 37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman reg_ontotaltimeout(ontotaltimeout,totaltimeout*10); 37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // Register menusystem handlers 37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman reg_handler(HDLR_KEYS,&keys_handler); 37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ---- End of initialization --- */ 37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ------- MENU netmenu ----- */ 38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman add_named_menu("netmenu"," Init Network ",-1); 38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<N>one","Dont start network",OPT_RADIOITEM,"network=no",0); 38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<d>hcp","Use DHCP",OPT_RADIOITEM,"network=dhcp",0); 38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ------- MENU testing ----- */ 39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman add_named_menu("testing"," Testing ",-1); 39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<M>emory Test","Perform extensive memory testing",OPT_RUN,"memtest",0); 39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",25,3); // Set associated extra info 39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<I>nvisible","You dont see this",OPT_INVISIBLE,"",0); 39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<E>xit menu","Go one level up",OPT_EXITMENU,"",0); 40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 40376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 40476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ------- MENU rescue ----- */ 40676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman add_named_menu("rescue"," Rescue Options ",-1); 40776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<L>inux Rescue","Run linresc",OPT_RUN,"linresc",0); 40976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 41076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 41176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 41276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<D>os Rescue","dosresc",OPT_RUN,"dosresc",0); 41376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 41476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 41576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 41676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<W>indows Rescue","winresc",OPT_RUN,"winresc",0); 41776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 41876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 41976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<E>xit this menu","Go one level up",OPT_EXITMENU,"",0); 42176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 42276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 42376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ------- MENU prep ----- */ 42576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman add_named_menu("prep"," Prep options ",-1); 42676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<b>aseurl by IP?","Specify gui baseurl by IP address",OPT_CHECKBOX,"baseurl=http://192.168.0.1",0); 42876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 42976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 43076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<m>ountcd?","Mount the cdrom drive?",OPT_CHECKBOX,"mountcd",0); 43276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 43376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 43476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("Network Initialization","How to initialise network device?",OPT_RADIOMENU,"netmenu",0); 43676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 43776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 43876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("","",OPT_SEP,"",0); 44076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 44176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 44276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 44376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("Reinstall <w>indows","Re-install the windows side of a dual boot setup",OPT_CHECKBOX,"repair=win",0); 44476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 44576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 44676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 44776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("Reinstall <l>inux","Re-install the linux side of a dual boot setup",OPT_CHECKBOX,"repair=lin",0); 44876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 44976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 45076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 45176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("","",OPT_SEP,"",0); 45276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 45376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 45476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 45576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<R>un prep now","Execute prep with the above options",OPT_RUN,"prep",0); 45676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"prep","",65535,0); // Set associated extra info 45776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 45876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 45976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<E>xit this menu","Go up one level",OPT_EXITMENU,"",0); 46076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 46176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 46276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 46376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ------- MENU main ----- */ 46476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman add_named_menu("main"," Main Menu ",-1); 46576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 46676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item(loginstr,"Login/Logout of authentication system",OPT_RUN,NULL,0); 46776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr->helpid = 65535; 46876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr->handler = &login_handler; 46976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 47076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<P>repare","prep",OPT_RUN,"prep",0); 47176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 47276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 47376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 47476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<P>rep options...","Options for prep",OPT_SUBMENU,"prep",0); 47576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 47676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 47776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 47876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<R>escue options...","Troubleshoot a system",OPT_SUBMENU,"rescue",0); 47976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",26,0); // Set associated extra info 48076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 48176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 48276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<T>esting...","Options to test hardware",OPT_SUBMENU,"testing",0); 48376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 48476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 48576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 48676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = add_item("<E>xit to prompt","Exit the menu system",OPT_EXITMENU,"",0); 48776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_xtra(curr,"","",65535,0); // Set associated extra info 48876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman set_shortcut(-1); 48976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ------- END OF MENU declarations ----- */ 49076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Check if we should skip the menu altogether 49276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman quit = 0; // Dont skip the menu 49376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (getshiftflags() & skipbits) { // we must skip the menu altogther and execute skipcmd 49476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman dotrv = execdotcmd(skipcmd,".beep%.exit",NULL); // Worst case we beep and exit 49576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (dotrv == QUIT_CMD) quit = 1; 49676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 49776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Switch vide mode if required 49976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (vmode != 0xFF) setvideomode(vmode); 50076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Do we have a startfile to display? 50276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (startfile[0] != '\0') runhelp(startfile); 50376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// The main loop 50576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while (quit == 0) { // As long as quit is zero repeat 50676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman curr = showmenus(find_menu_num("main")); // Initial menu is the one called "main" 50776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (curr) { 50976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (curr->action == OPT_RUN) { 51076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ecmd = (char *)malloc(sizeof(char)*MAX_CMD_LINE_LENGTH); 51176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman gencommand(curr,ecmd); 51276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman temp = (curr->extra_data ? ((pt_xtra)curr->extra_data)->ipappend : 0); 51376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman runsyslinuximage(ecmd,temp); 51476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // kernel not found so execute the appropriate dot command 51576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman dotrv = execdotcmd(onerrcmd,".quit",ecmd); // pass bad cmdline as arg 51676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (dotrv== QUIT_CMD) quit = 1; 51776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman free(ecmd); ecmd = NULL; 51876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 51976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman else csprint("Error in programming!",0x07); 52076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } else { 52176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // find effective exit command 52276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ecmd = ( isallowed(username,"root") ? exitcmdroot : exitcmd); 52376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman dotrv = execdotcmd(ecmd,".repeat",NULL); 52476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman quit = (dotrv == QUIT_CMD ? 1 : 0); // should we exit now 52576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 52676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 52776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 52876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Deallocate space used and quit 52976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman close_passwords(); 53076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman close_help(); 53176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman close_menusystem(); 53276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return 0; 53376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 53476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 535