Еще не встречал нигде подобной реализации - сам додумался несколько недель назад, но поделиться было некогда. Все видели текстовое загрузочное меню на 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 можно - это я вкурсе) Но для какой такой необходимости усложнять задачу?
sergeysvirid, я больше из спортивного интереса хотел это дело осуществить. До того как Joker-2013 спросил, я и не думал об этом
Текущее время: 26-Апр 16:48
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы