Еще не встречал нигде подобной реализации - сам додумался несколько недель назад, но поделиться было некогда. Все видели текстовое загрузочное меню на G4D в подпунктами. Типа:
HDD утилиты LiveCD Установка Windows
Выбор любого из пунктов приводит к загрузке другого файла меню(lst) со своими подпунктами. Например configfile /GRUB/LiveCD.lst У такой структуры меню есть минусы: 1) На флешке хранится несколько файлов LST вместо одного, что создаёт "кашу" 2) Чтобы вернуться из меню Установка Windows в HDD утилиты нужно сначала перейти в основное menu.lst, а затем уже в нужное - лишние шаги. У многоуровневого древовидного меню таких минусов нет. Всё в одном файле и все подпункты всегда под рукой. Изначально оно имеет следующий вид: После раскрытия пункта: Ну и полностью "распахнутое" меню: Я использовал урезанный unicode шрифт с кириллицей (около 3 кб), в который добавил знаки ⊞, ⊟, ├ и └, чтобы облагородить менюшку. Файл MENU.LST тоже должен быть в кодировке unicode. Так же столкнулся с тем, что малое количество шрифтов Windows может отображать эти символы, а потому для своего редактора (Akelpad) я еще использовал шрифт Droid Sans Mono - он тоже есть в архиве, можете установить в систему и юзать его при редактировании меню. На флешке он конечно же не нужен. Выкладываю архив с необходимым минимумом для примера.Скачать с вирусами и СМС регистрациейВариант меню от nikzzzz с сохранением позиции курсора.Программка для автоматического создания меню от nikzzzz
Последний раз редактировалось: MBTY (2016-07-29 08:52), всего редактировалось 3 раз(а)
SunOK, утечки памяти? Вы про строку "configfile (md)4+8" ? Эта строка заставляет GRUB перечитать ранее загруженный configfile. Чтобы каждый раз не писать configfile /GRUB/menu.lst RAM всегда на скринах держится в 639Кб. Пробуйте, мне так очень нравится.
Это строка из меню HBCD и заполняется она поверх той надписи, которую хотите убрать. По идее если забить пробелами, то можно затереть... P.S. Как то так:
Немного доработал меню теперь при сворачивании-разворачивании сохраняется позиция курсора.
debug off font /GRUB/FONT graphicsmode -1 800 100:1000 24:32 #timeout 16 default %n% title Просто пункт меню 1\n rootnoverify (hd0,0) chainloader +1 iftitle [if not "%PUNKT2%"=="1"] ⊞ Пункт меню 2\n set PUNKT2=1 set n=2 set n2=4 configfile (md)4+8 boot iftitle [if "%PUNKT2%"=="1"] ⊟ Пункт меню 2\n set PUNKT2=0 set n=1 set n2=0 configfile (md)4+8 boot iftitle [if "%PUNKT2%"=="1"] ├ Подпункт 2.1\n frootnoverify (hd0,0) chainloader +1 iftitle [if "%PUNKT2%"=="1"] ├ Подпункт 2.2\n frootnoverify (hd0,0) chainloader +1 iftitle [if "%PUNKT2%"=="1"] ├ Подпункт 2.3\n frootnoverify (hd0,0) chainloader +1 iftitle [if "%PUNKT2%"=="1"] └ Последний подпункт 2.4\n frootnoverify (hd0,0) chainloader +1 title Пункт меню 3\n rootnoverify (hd0,0) chainloader +1 iftitle [if not "%PUNKT4%"=="1"] ⊞ Пункт меню 4\n set PUNKT4=1 set /a n=4+%n2%-0 set n4=2 configfile (md)4+8 boot iftitle [if "%PUNKT4%"=="1"] ⊟ Пункт меню 4\n set PUNKT4=0 set /a n=3+%n2%-0 set n4=0 configfile (md)4+8 boot iftitle [if "%PUNKT4%"=="1"] ├ Подпункт 4.1\n frootnoverify (hd0,0) chainloader +1 iftitle [if "%PUNKT4%"=="1"] └ Последний подпункт 4.2\n frootnoverify (hd0,0) chainloader +1 iftitle [if not "%ALLPUNKT%"=="1"] ⊞ Развернуть все подпункты ⊞\n set ALLPUNKT=1 set PUNKT2=1 set PUNKT4=1 set n2=4 set n4=2 set /a n=4+%n2%-0+%n4%-0 configfile (md)4+8 boot iftitle [if "%ALLPUNKT%"=="1"] -- Свернуть все подпункты --\n set ALLPUNKT=0 set PUNKT2=0 set PUNKT4=0 set n2=0 set n4=0 set n=4 configfile (md)4+8 boot title Перезагрузка\n reboot title Выключение ПК\n halt
Последний раз редактировалось: nikzzzz (2016-07-17 07:05), всего редактировалось 2 раз(а)
Написал программку для автоматического создания меню. пример работы исходное меню
## Создание свернутой группы #-begin Group 0 title -0 map --unmap=0:255 root (bd) chainloader /boot/ntldr title -1 map --unmap=0:255 root (bd) chainloader /boot/ntldr ## Конец группы #_end ## Создание развернутой группы #+begin Group 1 title -2 map --unmap=0:255 root (bd) chainloader /boot/ntldr title -3 map --unmap=0:255 root (bd) chainloader /boot/ntldr title -4 map --unmap=0:255 root (bd) chainloader /boot/ntldr ## Конец группы #_end title -5 map --unmap=0:255 root (bd) chainloader /boot/ntldr
результат
debug off font /boot/grub/font graphicsmode -1 800 100:1000 24:32 default %s% ## Создание свернутой группы #-begin Group 0 iftitle [if "%p0%"=="1"] ⊟ Group 0 set p0=0 set /a s=0 set l0=0 configfile (md)4+8 boot iftitle [if not "%p0%"=="1"] ⊞ Group 0 set p0=1 set /a s=1 set l0=2 configfile (md)4+8 boot iftitle [if "%p0%"=="1"] ├ -0 map --unmap=0:255 root (bd) chainloader /boot/ntldr iftitle [if "%p0%"=="1"] └ -1 map --unmap=0:255 root (bd) chainloader /boot/ntldr ## Конец группы #_end ## Создание развернутой группы #+begin Group 1 iftitle [if not "%p1%"=="1"] ⊟ Group 1 set p1=1 set /a s=%l0%-0+1 set l1=0 configfile (md)4+8 boot iftitle [if "%p1%"=="1"] ⊞ Group 1 set p1=0 set /a s=%l0%-0+2 set l1=3 configfile (md)4+8 boot iftitle [if not "%p1%"=="1"] ├ -2 map --unmap=0:255 root (bd) chainloader /boot/ntldr iftitle [if not "%p1%"=="1"] ├ -3 map --unmap=0:255 root (bd) chainloader /boot/ntldr iftitle [if not "%p1%"=="1"] └ -4 map --unmap=0:255 root (bd) chainloader /boot/ntldr ## Конец группы #_end title -5 map --unmap=0:255 root (bd) chainloader /boot/ntldr
Joker-2013, Вшить то думаю, можно, но там проблема - количество символов в меню сильно ограничено, хотя может в последних версиях его сняли, надо будет проверить.
Joker-2013, получилось банальным бинарным склеиванием. Файл LOADER - это GRUB без меню в себе Файл MENU - это menu.lst в кодировке UTF без BOM Файл FONT - файл шрифта В консоли выполняем copy /b LOADER + MENU !LDR! и на выходе получаем !LDR! - это загрузчик GRUB с меню. Попытался вшить внутрь и шрифт, убрал в меню строку подгрузки шрифта выполнил комманду (@copy /b LOADER + MENU + FONT !LDR!), вышла бяка. http://rgho.st/654v5B8nr - тут две папки. 1) Один скрипт сшивает груб+меню+шрифты (на флешке хватит файла !LDR!) 2) Второй сшивает груб+меню, а шрифты надо класть отдельно (на флешке должно быть два файла !LDR! и FONT) Может кто победит косяк с неправильным алфавитом в 1 варианте.
nikzzzz, не помогло. Причем 0-байт ставил и после меню (шрифты не подхватились вообще) и после шрифтов (никакого эффекта что с ним что без него) Не грузится около 8 последних строк шрифта. Если вшиваемое меню сделать из меньшего количества пунктов - все шрифты подхватываются. Если сделать меню из адовой кучи пунктов (брал 200) - меню грузится полностью, шрифты не подхватываются вообще. Разве что пихать шрифты в самое дно файла загрузчика, а потом как то мапить часть файла с определенного адреса в память и оттуда уже грузить. Хз как это делается.
nikzzzz, ну у меня только хватает фантазии запихнуть в GRLDR файл GZ, в котором будет храниться шрифт и основное меню. А вот что написать в GRLDR, чтобы он из себя прочёл этот архив с определенного HEX адреса и замапил это в память - не знаю.
MBTY, nikzzzz, Joker-2013, Приветствую! А зачем вообще вшивать содержимое menu.lst в GRLDR? И как потом "простому смертному" редактировать это меню? (ну то, что с помощью BootIce можно - это я вкурсе) Но для какой такой необходимости усложнять задачу?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы