diff -Naur syslinux-3.07/menu/Makefile syslinux-3.07.archie/menu/Makefile --- syslinux-3.07/menu/Makefile 2004-02-25 08:48:05.000000000 +0200 +++ syslinux-3.07.archie/menu/Makefile 2005-04-12 03:18:12.000000000 +0300 @@ -14,7 +14,7 @@ LIBMENU = main.o16 biosio.o16 string.o16 menu.o16 syslinux.o16 heap.o16 -MENUS = simple.com complex.com +MENUS = simple.com complex.com archie_menu.com .SUFFIXES: .c .s .s16 .o16 .elf .com diff -Naur syslinux-3.07/menu/archie_menu.c syslinux-3.07.archie/menu/archie_menu.c --- syslinux-3.07/menu/archie_menu.c 1970-01-01 02:00:00.000000000 +0200 +++ syslinux-3.07.archie/menu/archie_menu.c 2005-04-12 03:18:12.000000000 +0300 @@ -0,0 +1,329 @@ +/* -*- c -*- ------------------------------------------------------------- * + * + * + * startup menu system for the Archie project + * hacked by z4ziggy@user-contributions.org + * + * original code by + * Copyright 2004 Murali Krishnan Ganapathy - All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, Inc., 53 Temple Place Ste 330, + * Boston MA 02111-1307, USA; either version 2 of the License, or + * (at your option) any later version; incorporated herein by reference. + * + * + * ----------------------------------------------------------------------- */ + +#include "archie_menu.h" + +/* + * string.x function(s) + */ + +//using xstrcpy since using -Os in gcc gets strcpy to be replaced with memcpy with long src strings +char *xstrcpy(char *dest, const char *src) +{ + while (*src) *dest++ = *src++; + *dest = '\0'; + return dest; +} + +char *strncpy(char *dest, const char *src, int length) +{ + while (length--) *dest++ = *src++; + *dest = '\0'; + return dest; +} + +char *strncat(char *dest, const char *src, int length) +{ + if (*dest) while (*(dest+1)) *dest++; + while (length--) *dest++ = *src++; + *dest = '\0'; + return dest; +} + +/* + * biosio.x function(s) + */ + +/* we want to know which key was pressed so we use our own asm_checkkbdbuf */ +static inline unsigned char asm_checkkbdbuf1() +{ + unsigned char al; + asm volatile("movw $0x1100,%%ax ; int $0x16" : "=a" (al)); + return al; +} + +/* + * archie_menu private functions + */ + +/* + Clears keyboard buffer and then + wait for stepsize*numsteps milliseconds for user to press any key + checks for keypress every stepsize milliseconds. + Returns: key if user pressed a key, + 0 if time elapsed +*/ +int checkkeypress(int stepsize, int numsteps) +{ + int i; + char c; + char dummy[5] = "[x]\r"; + clearkbdbuf(); + for (i=0; i < numsteps; i++) + { + csprint("Press [ESC] for Archie options or any other key to start Archie... ",0x01); + dummy[1]=(((numsteps-i)/10)+48); //convert to ASCII + csprint(dummy ,0x07); + c=asm_checkkbdbuf1(); + if (c) return c; + sleep(stepsize); + } + return 0; +} + +void prep_bootcmd() +{ + strcpy (bootcmd,"archie "); + if (initrdcli->itemdata.checked) + { + strcat(bootcmd,"initrdcli "); + } + if (rootnest->itemdata.checked) + { + strcat(bootcmd,"rootnest="); + strcat(bootcmd,rootnest_part); + strcat(bootcmd," "); + + } + if (homenest->itemdata.checked) + { + strcat(bootcmd,"homenest="); + strcat(bootcmd,homenest_part); + strcat(bootcmd," "); + } + if (!search4nest->itemdata.checked) + { + strcat(bootcmd,search4nest->data); + } + if (xlang_item->extra_data) + { + strcat(bootcmd,"language="); + strcat(bootcmd, xlang_item->data); + strcat(bootcmd," "); +/* + strcat(bootcmd,"xkbLayout="); + strcat(bootcmd, xlang_item->data); + strcat(bootcmd," "); +*/ + strcat(bootcmd,"lang="); + strcat(bootcmd, xlang_item->extra_data); + strcat(bootcmd," "); + } + if (videomode->data) + { + strcat(bootcmd,"video="); + strcat(bootcmd,(char *)(((t_menuitem *)videomode->data)->data)); + } + if (*ipaddr) + { + strcat(bootcmd,"ipaddr="); + strcat(bootcmd,ipaddr); + strcat(bootcmd," "); + } + else if (network->data) + { + //strcat(bootcmd,"network="); + strcat(bootcmd,(char *)(((t_menuitem *)network->data)->data)); + } + if (startupmode->data) + { + strcat(bootcmd,(char *)(((t_menuitem *)startupmode->data)->data)); + } +} + +void msys_handler(t_menusystem *ms, t_menuitem *mi) +{ + char nc; + nc = getnumcols(); // Get number of columns + (void)mi; /* Unused */ + + //clear line + gotoxy(LINE_BOOTCMD,0,ms->menupage); + cprint(' ',0x07,nc,ms->menupage); + gotoxy(LINE_BOOTCMD+1,0,ms->menupage); + cprint(' ',0x07,nc,ms->menupage); + //set cmdline parameters + prep_bootcmd(); + //print cmdline + gotoxy(LINE_BOOTCMD,0,ms->menupage); + csprint("boot: ",0x07); + gotoxy(LINE_BOOTCMD,6,ms->menupage); + csprint(bootcmd,0x07); + return; +} + +void radio_lang_handler(t_menusystem *ms, t_menuitem *mi) +{ + (void)ms; /* Unused */ + if ((mi->data) && (((t_menuitem *)mi->data)->data)) + { + xlang_item->data = ((t_menuitem *)mi->data)->data; + xlang_item->extra_data = ((t_menuitem *)mi->data)->extra_data; + xstrcpy(lang_title, "anguage ["); + if (strlen(((t_menuitem *)mi->data)->item) > 16) + { + strncat(lang_title, ((t_menuitem *)mi->data)->item, 12); + strcat(lang_title, "..."); + } + else strcat(lang_title, ((t_menuitem *)mi->data)->item); + strcat(lang_title, "]"); + xlang_item->item = lang_title; + xlang_item_dsp->item = lang_title; + } +} + +void radio_handler(t_menusystem *ms, t_menuitem *mi) +{ + (void)ms; /* Unused */ + if (mi->data) mi->item = ((t_menuitem *)mi->data)->extra_data; +} + +int menumain(char *cmdline) +{ + int i; + char nc; + unsigned char keypressed; + pt_menusystem ms; + t_menuitem *curr; + + (void)cmdline; /* Not used */ + + ms = init_menusystem("..:: Archie startup configuration ::.."); + set_window_size(1,1,21,78); // Leave some space around + + reg_handler(&msys_handler); + + initmenu = add_menu(" Startup mode "); + for (i=sizeof(startup_opt)/sizeof(startup_opt[0]); i--;) + add_item(startup_opt[i][1],startup_opt[i][2],OPT_RADIOITEM,startup_opt[i][3],0)->extra_data=(void*)startup_opt[i][0]; + + nestmenu = add_menu(" Nesting options "); + rootnest = add_item("Nest oot (/)","Nest root (/) directory",OPT_CHECKBOX,"rootnest",0); + homenest = add_item("Nest ome (/home)","Nest home (/home) directory",OPT_CHECKBOX,"homenest",0); + add_sep(); + search4nest = add_item("earch nested","Search for nested partitions on startup",OPT_CHECKBOX,"nonestsearch ",1); + + xvideomenu = add_menu(" X Video modes "); + for (i=sizeof(xvideomodes_opt)/sizeof(xvideomodes_opt[0]); i--;) + add_item(xvideomodes_opt[i][1],xvideomodes_opt[i][2],OPT_RADIOITEM,xvideomodes_opt[i][3],0)->extra_data=(void*)xvideomodes_opt[i][0]; + + xlanglistmenu[0] = add_menu(langs_sub_opt[0][0]); + set_menu_pos(4,45); + for (i=0; i < (int)(sizeof(languages_a_b_opt)/sizeof(languages_a_b_opt[0])); i++) + add_item(languages_a_b_opt[i][0],languages_a_b_opt[i][0],OPT_RADIOITEM,languages_a_b_opt[i][1],0)->extra_data=(void*)languages_a_b_opt[i][2]; + + xlanglistmenu[1] = add_menu(langs_sub_opt[1][0]); + set_menu_pos(4,45); + for (i=0; i < (int)(sizeof(languages_c_e_opt)/sizeof(languages_c_e_opt[0])); i++) + add_item(languages_c_e_opt[i][0],languages_c_e_opt[i][0],OPT_RADIOITEM,languages_c_e_opt[i][1],0)->extra_data=(void*)languages_c_e_opt[i][2]; + + xlanglistmenu[2] = add_menu(langs_sub_opt[2][0]); + set_menu_pos(4,45); + for (i=0; i < (int)(sizeof(languages_f_h_opt)/sizeof(languages_f_h_opt[0])); i++) + add_item(languages_f_h_opt[i][0],languages_f_h_opt[i][0],OPT_RADIOITEM,languages_f_h_opt[i][1],0)->extra_data=(void*)languages_f_h_opt[i][2]; + + xlanglistmenu[3] = add_menu(langs_sub_opt[3][0]); + set_menu_pos(4,45); + for (i=0; i < (int)(sizeof(languages_i_l_opt)/sizeof(languages_i_l_opt[0])); i++) + add_item(languages_i_l_opt[i][0],languages_i_l_opt[i][0],OPT_RADIOITEM,languages_i_l_opt[i][1],0)->extra_data=(void*)languages_i_l_opt[i][2]; + + xlanglistmenu[4] = add_menu(langs_sub_opt[4][0]); + set_menu_pos(4,45); + for (i=0; i < (int)(sizeof(languages_m_o_opt)/sizeof(languages_m_o_opt[0])); i++) + add_item(languages_m_o_opt[i][0],languages_m_o_opt[i][0],OPT_RADIOITEM,languages_m_o_opt[i][1],0)->extra_data=(void*)languages_m_o_opt[i][2]; + + xlanglistmenu[5] = add_menu(langs_sub_opt[5][0]); + set_menu_pos(4,45); + for (i=0; i < (int)(sizeof(languages_p_t_opt)/sizeof(languages_p_t_opt[0])); i++) + add_item(languages_p_t_opt[i][0],languages_p_t_opt[i][0],OPT_RADIOITEM,languages_p_t_opt[i][1],0)->extra_data=(void*)languages_p_t_opt[i][2]; + + xlanglistmenu[6] = add_menu(langs_sub_opt[6][0]); + set_menu_pos(4,45); + for (i=0; i < (int)(sizeof(languages_u_z_opt)/sizeof(languages_u_z_opt[0])); i++) + add_item(languages_u_z_opt[i][0],languages_u_z_opt[i][0],OPT_RADIOITEM,languages_u_z_opt[i][1],0)->extra_data=(void*)languages_u_z_opt[i][2]; + + xlangmenu = add_menu(" X Language "); + ms->menus[(int)xlangmenu]->menuwidth = 25; + for (i=0; i < (int)(sizeof(langs_sub_opt)/sizeof(langs_sub_opt[0])) ;i++) + add_item(langs_sub_opt[i][0],langs_sub_opt[i][1],OPT_RADIOMENU,NULL,xlanglistmenu[i])->handler = &radio_lang_handler; + add_sep(); + xlang_item_dsp = add_item("anguage","Display currently selected language",OPT_INACTIVE,NULL,0); + + netmenu = add_menu(" Init Network "); + for (i=0; i < (int)(sizeof(network_opt)/sizeof(network_opt[0])); i++) + add_item(network_opt[i][1],network_opt[i][2],OPT_RADIOITEM,network_opt[i][3],0)->extra_data=(void*)network_opt[i][0]; + + mainmenu = add_menu(" Main Menu "); + startupmode = add_item(startup_opt[2][0],"Select startup init mode (graphics/text/single)",OPT_RADIOMENU,NULL,initmenu); + startupmode->handler = &radio_handler; + network = add_item(network_opt[0][0],"How to initialise network device?",OPT_RADIOMENU,NULL,netmenu); + network->handler = &radio_handler;; + videomode = add_item(xvideomodes_opt[5][0],"Select Video mode for X",OPT_RADIOMENU,NULL,xvideomenu); + videomode->handler = &radio_handler; + xlang_item = add_item("anguage","Select your local language",OPT_SUBMENU,NULL,xlangmenu); + nesting = add_item("esting","Use local partitions as your root (/) or home (/home) directory",OPT_SUBMENU,NULL,nestmenu); + add_sep(); + initrdcli = add_item("nitrd prompt","Drop into initrd (ramdrive) command line prompt",OPT_CHECKBOX,"initrdcli",0); + add_sep(); + add_item("Boot

rompt", "Prompt for manual boot command line", OPT_EXITMENU, "archie", 0); + add_item("Start rchie", "Start Archie with selected configuration settings", OPT_RUN, "archie", 0); + + keypressed = checkkeypress(100,50); + + nc = getnumcols(); // Get number of columns + cprint(' ',0x07,nc,0); // and clear the line... + + if (keypressed != 27) goto exit_menu; + else clearkbdbuf(); // Just in case user pressed something important + + curr = showmenus(mainmenu); + + if (network->data && !strcmp("static ", ((t_menuitem *)network->data)->data)) + { + csprint("Enter IP address: ",0x09); + strcpy(ipaddr,"192.168.1.1"); + editstring(ipaddr, sizeof ipaddr); + } + if (rootnest->itemdata.checked) + { + csprint("Enter rootnest (/) partition: ",0x09); + strcpy(rootnest_part,"/dev/hda1"); + editstring(rootnest_part, sizeof rootnest_part); + } + if (homenest->itemdata.checked) + { + csprint("Enter homenest (/home) partition: ",0x09); + strcpy(homenest_part,"/dev/hda1"); + editstring(homenest_part, sizeof homenest_part); + } + prep_bootcmd(); + + // if user pressed escape from main-menu, lets let him edit the cmdline... + if (!curr) + { + csprint("Edit boot parameters and press [ENTER] when done:\r\n",0x09); + editstring(bootcmd, sizeof bootcmd); + } + + if (syslinux) runcommand(bootcmd); + else csprint(bootcmd,0x07); + +exit_menu: + csprint("\r\nStarting Archie...\r\n",0x0f); + return 1; +} diff -Naur syslinux-3.07/menu/archie_menu.h syslinux-3.07.archie/menu/archie_menu.h --- syslinux-3.07/menu/archie_menu.h 1970-01-01 02:00:00.000000000 +0200 +++ syslinux-3.07.archie/menu/archie_menu.h 2005-04-12 03:18:12.000000000 +0300 @@ -0,0 +1,167 @@ +/* + * + * archie_menu variables and stuff... + * + */ + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#include "menu.h" +#include "biosio.h" +#include "string.h" +#include "syslinux.h" + +#define LINE_BOOTCMD 23 // line to display boot command parameters + +// options format : 4 strings, +// 1 = parent menu text +// 2 = text +// 3 = "statusline" description +// 4 = command line + +// Different network options +const char *network_opt[][4] = { + {"etwork [dhcp]","hcp","Use DHCP",""}, +// {"etwork [static]","tatic","Use static IP (to be manually entered later)","static "}, + {"etwork [none]","one","Dont start network","nodhcp "}, +}; +const char *startup_opt[][4] = { + {"tartup mode [single]","ingle user mode (1)","Boot into single user textual mode (init 1)","1 "}, + {"tartup mode [text]","ext mode (3)","Boot into textual mode (init 3)", "3 "}, + {"tartup mode [graphics]","raphics mode (5)","Boot into graphical mode (init 5)", "5 "}, +}; +const char *xvideomodes_opt[][4] = { + {"ideo mode [1600x1200]", "1600x1200", "Set X video mode to 1600x1200", "1600x1200 "}, + {"ideo mode [1400x1050]", "1400x1050", "Set X video mode to 1400x1050", "1400x1050 "}, + {"ideo mode [1280x1024]", "1280x1024", "Set X video mode to 1280x1024", "1280x1024 "}, + {"ideo mode [1280x960]","1280x960","Set X video mode to 1280x960","1280x960 "}, + {"ideo mode [1152x864]","1152x864","Set X video mode to 1152x864", "1152x864 "}, + {"ideo mode [1024x768]","1024x768","Set X video mode to 1024x768", "1024x768 "}, + {"ideo mode [800x600]","800x600","Set X video mode to 800x600","800x600 "}, + {"ideo mode [640x480]","640x480","Set X video mode to 640x480","640x480 "}, +}; +const char *languages_a_b_opt[][3] = { +// format: name, LANGUAGE/XkbLayout, LANG + { "Afar", "aa", "aa_DJ" }, + { "Afrikaans", "af", "af_ZA" }, + { "Albanian", "sq", "am_ET" }, + { "Arabic", "ar", "ar_AE" }, + { "Azerbaijani", "az", "az_AZ" }, + { "Basque", "eu", "eu_ES" }, + { "Belarusian", "be", "be_BY" }, + { "Bengali", "bn", "bn_IN" }, + { "Bosnian", "bs", "bs_BA" }, + { "Brazilian Portuguese", "pt_BR", "pt_BR" }, + { "Breton", "br", "br_FR" }, + { "British English", "en_GB", "en_GB" }, + { "Bulgarian", "bg", "bg_BG" }, +}; +const char *languages_c_e_opt[][3] = { + { "Catalan", "ca", "ca_ES" }, + { "Chinese Simplified", "zh_CN", "zh_CN" }, + { "Chinese Traditional", "zh_TW", "zh_TW" }, + { "Croatian", "hr", "hr_HR" }, + { "Czech", "cs", "cs_CZ" }, + { "Danish", "da", "da_DK" }, + { "Dutch", "nl", "nl_NL" }, + { "Dzongkha", "dz", "dz_BT" }, + { "English", "en", "en_US" }, + { "Esperanto", "eo", "eo" }, + { "Estonian", "et", "et_EE" }, +}; +const char *languages_f_h_opt[][3] = { + { "Faroese", "fo", "fo_FO" }, + { "Farsi (Persian)", "fa", "fa_IR" }, + { "Finnish", "fi", "fi_FI" }, + { "French", "fr", "fr_FR" }, + { "Frisian", "fy", "fy" }, + { "Galician", "gl", "gl_ES" }, + { "German", "de", "de_DE" }, + { "Georgian", "ka", "ka_GE" }, + { "Greek", "el", "el_GR" }, + { "Gujarati", "gu", "gu_IN" }, + { "Hebrew", "he", "he_IL" }, + { "Hindi", "hi", "hi_IN" }, + { "Hungarian", "hu", "hu_HU" }, +}; +const char *languages_i_l_opt[][3] = { + { "Icelandic", "is", "is_IS" }, + { "Indonesian", "id", "id_ID" }, + { "Irish Gaelic", "ga", "ga_IE" }, + { "Italian", "it", "it_IT" }, + { "Japanese", "ja", "ja_JP" }, + { "Kalaallisut", "kl", "kl_GL" }, + { "Kannada", "kn", "kn_IN" }, + { "Kazakh", "kk", "kk_KZ" }, + { "Kikongo", "kg", "kg" }, + { "Kiswahili", "sw", "sw" }, + { "Korean", "ko","ko_KR" }, + { "Lao", "lo", "lo_LA" }, + { "Latvian", "lv", "lv_LV" }, + { "Lithuanian", "lt", "lt_LT" }, +}; +const char *languages_m_o_opt[][3] = { + { "Macedonian", "mk", "mk_MK" }, + { "Malay", "ms", "ms_MY" }, + { "Malayalam", "ml", "ml_IN" }, + { "Maltese", "mt", "mt_MT" }, + { "Maori", "mi", "mi_NZ" }, + { "Marathi", "mr", "mr_IN" }, + { "Mongolian", "mn", "mn_MN" }, + { "Nepali", "ne", "ne_NP" }, + { "Northern Sami", "se", "se_NO" }, + { "Norwegian Bookmal", "nb", "nb_NO" }, + { "Norwegian Nynorsk", "nn", "nn_NO" }, + { "Occitan", "oc", "oc_FR" }, +}; +const char *languages_p_t_opt[][3] = { + { "Polish", "pl", "pl_PL" }, + { "Portuguese", "pt", "pt_PT" }, + { "Punjabi", "pa", "pa_IN" }, + { "Romanian", "ro", "ro_RO" }, + { "Russian", "ru", "ru_RU" }, + { "Slovak", "sk", "sk_SK" }, + { "Slovenian", "sl", "sl_SI" }, + { "Spanish", "es", "es_ES" }, + { "Swedish", "sv", "sv_SE" }, + { "Tagalog", "tl", "tl_PH" }, + { "Tajik", "tg", "tg_TJ" }, + { "Tamil", "ta", "ta_IN" }, + { "Thai", "th", "th_TH" }, + { "Turkish", "tr", "tr_TR" }, +}; +const char *languages_u_z_opt[][3] = { + { "Ukrainian", "uk", "uk_UA" }, + { "Urdu", "ur", "ur_PK" }, + { "Uzbek", "uz", "uz_UZ" }, + { "Vietnamese", "vi", "vi_VN" }, + { "Walloon", "wa", "wa_BE" }, + { "Welsh", "cy", "cy_GB" }, + { "Xhosa", "xh", "xh_ZA" }, + { "Yiddish", "yi", "yi_US" }, + { "Zulu", "zu", "zu_ZA" }, +}; + +const char *langs_sub_opt[][2] = { + {"A-B","Select languages from A to B"}, + {"C-E","Select languages from C to E"}, + {"F-H","Select languages from F to H"}, + {"I-L","Select languages from I to L"}, + {"M-O","Select languages from M to O"}, + {"P-T","Select languages from P to T"}, + {"U-Z","Select languages from U to Z"}, +}; + +// menus +char mainmenu,netmenu,initmenu,nestmenu,xcfgmenu,xlangmenu,xkbdmenu,xvideomenu,xlanglistmenu[7]; +// menu items +t_menuitem *network,*xlang_item,*xlang_item_dsp,*initrdcli,*startupmode,*homenest,*rootnest,*nesting,*videomode,*search4nest; +// global variables and default values +char bootcmd[160]; +char ipaddr[30]={0}; +char rootnest_part[50]="prompt"; +char homenest_part[50]="prompt"; +char lang_title[100]={0}; + diff -Naur syslinux-3.07/menu/biosio.c syslinux-3.07.archie/menu/biosio.c --- syslinux-3.07/menu/biosio.c 2004-12-31 02:40:26.000000000 +0200 +++ syslinux-3.07.archie/menu/biosio.c 2005-04-12 03:18:12.000000000 +0300 @@ -208,7 +208,7 @@ asm_putchar(*str, attr, page); ++col; } - if (col > getnumcols()) + if (col >= getnumcols()) { ++row; col=0; @@ -328,6 +328,55 @@ csprint("\r\n",GETSTRATTR); } +void editstring(char *str, unsigned int size) +{ + char c; + char nc; + char *p = str; + char page = asm_getdisppage(); + char row,col; + + nc = getnumcols(); + while (*p) { + asm_getpos(&row,&col,page); + asm_putchar(*p++, GETSTRATTR, page); + if (++col == nc) { asm_gotoxy(row+1,0,page); csprint("\r", GETSTRATTR); } + else asm_gotoxy(row,col,page); + } + while ( (c = asm_getchar()) != '\r' ) { + switch (c) { + case '\0': /* Extended char prefix */ + asm_getchar(); /* Drop */ + break; + case '\b': + if ( p > str ) { + asm_getpos(&row,&col,page); + if (col == 0) asm_gotoxy(row-1,nc,page); + p--; + csprint("\b \b",GETSTRATTR); + } + break; + case '\x15': /* Ctrl-U: kill input */ + while ( p > str ) { + p--; + csprint("\b \b",GETSTRATTR); + } + break; + default: + if ( c >= ' ' && (unsigned int)(p-str) < size-1 ) { + *p++ = c; + asm_getpos(&row,&col,page); + asm_putchar(c, GETSTRATTR, page); + if (++col == nc) { asm_gotoxy(row+1,0,page); csprint("\r", GETSTRATTR); } + else asm_gotoxy(row,col,page); + } + break; + } + } + *p = '\0'; + csprint("\r\n",GETSTRATTR); +} + static inline void asm_setvideomode(char mode) { /* This BIOS function is notoriously register-dirty, diff -Naur syslinux-3.07/menu/biosio.h syslinux-3.07.archie/menu/biosio.h --- syslinux-3.07/menu/biosio.h 2004-12-15 00:46:25.000000000 +0200 +++ syslinux-3.07.archie/menu/biosio.h 2005-04-12 03:18:12.000000000 +0300 @@ -51,6 +51,7 @@ void cursoron(void); /* Turns off cursor */ void getstring(char *str, unsigned int size); +void editstring(char *str, unsigned int size); static inline unsigned char readbiosb(unsigned short addr) { diff -Naur syslinux-3.07/menu/menu.c syslinux-3.07.archie/menu/menu.c --- syslinux-3.07/menu/menu.c 2004-12-15 00:46:25.000000000 +0200 +++ syslinux-3.07.archie/menu/menu.c 2005-04-12 03:18:12.000000000 +0300 @@ -614,7 +614,7 @@ return rv; } -void init_menusystem(const char *title) +pt_menusystem init_menusystem(const char *title) { int i; @@ -668,6 +668,8 @@ ms->numrows = getnumrows(); ms->maxcol = ms->numcols - 1; ms->maxrow = ms->numrows - 1; + + return ms; } void set_normal_attr(char normal, char selected, char inactivenormal, char inactiveselected) diff -Naur syslinux-3.07/menu/menu.h syslinux-3.07.archie/menu/menu.h --- syslinux-3.07/menu/menu.h 2004-12-15 00:46:25.000000000 +0200 +++ syslinux-3.07.archie/menu/menu.h 2005-04-12 03:18:12.000000000 +0300 @@ -114,8 +114,8 @@ */ // Attributes of the menu system -#define MAXMENUS 8 // Maximum number of menu's allowed -#define MAXMENUSIZE 12 // Maximum number of entries in each menu +#define MAXMENUS 20 // Maximum number of menu's allowed +#define MAXMENUSIZE 14 // Maximum number of entries in each menu // Upper bounds on lengths // Now that the onus of allocating space is with the user, these numbers @@ -129,7 +129,7 @@ #define MENUROW 3 // Row where menu is displayed (relative to window) #define MENUCOL 4 // Col where menu is displayed (relative to window) #define MENUPAGE 1 // show in display page 1 -#define STATLINE 23 // Line number where status line starts (relative to window) +#define STATLINE 24 // Line number where status line starts (relative to window) // Other Chars #define SUBMENUCHAR 175 // This is >> symbol @@ -239,7 +239,7 @@ pt_menuitem showmenus(char startmenu); -void init_menusystem(const char *title); // This pointer value is stored internally +pt_menusystem init_menusystem(const char *title); // This pointer value is stored internally void set_normal_attr(char normal, char selected, char inactivenormal, char inactiveselected);