Программа для перевода (sys/iso)linux.cfg в lst-файлы
В одной теме меня спросили, как я "перевожу" конфигурационные файлы syslinux'а в lst-файлы. Я описал алгоритм и подумал, что он достаточно прост, чтобы его можно было автоматизировать. AutoIt3 - язык достаточно простой, поэтому уже через час программа была готова. Её можно скачать в уже скомпилированном виде, вот здесь: http://narod.ru/disk/7398902000/menulst.exe.html. Некоторые антивирусы ругаются на AutoIt-програмы (он запаковывает их UPX'ом, которого антивирусы почему-то боятся), поэтому, чтобы Вы не волновались, можете скомпилировать самостоятельно, скачав компилятор здесь. Вот исходный код программы: Code ; программа для перевода (sys/iso)linux.cfg в .lst файлы от grub4dos ; написана 5 апреля 2009 года ; допускаются любые виды распространения и использования #NoTrayIcon $file = FileOpenDialog("Выберите конфигурационный файл sys/isolinux", @WorkingDir, "Syslinux(syslinux.cfg)|Isolinux(isolinux.cfg)|Все файлы(*.*)") If @error Then Exit $hndl = FileOpen($file, 0) If $hndl = -1 Then MsgBox(16, "Ошибка", "Не удалось открыть файл!") Exit EndIf $l = 1 Dim $data[1024] Dim $ndata[1024] $kernel = InputBox("Введите путь к ядру","Введите полный путь к файлу kernel относительно корня флешки, например, /slax/boot/kernel") If @error Then Exit $initrd = InputBox("Введите путь к initrd","Введите полный путь к файлу initrd отностельно корня флешки, например, /slax/boot/initrd.gz") If @error Then Exit
; сообщить о чтании данных SplashTextOn("","Чтение даных из файла...","300","20","-1","-1",1,"","","")
While 1 $data[$l] = FileReadLine($hndl,$l) If @error = -1 Then ExitLoop $l = $l + 1 WEnd
; сообщить об обработке данных SplashTextOn("","Обработка данных...","200","20","-1","-1",3,"","","")
For $i = 1 To $l Select Case StringInStr($data[$i],"#") > 0 $ndata[$i] = $data[$i] Case StringInStr($data[$i],"label") > 0 $ndata[$i] = Label($data[$i],$i) Case StringInStr($data[$i],"kernel") > 0 $ndata[$i] = Kernel($data[$i],$i) Case StringInStr($data[$i],"append") > 0 $ndata[$i] = Append($data[$i],$i) Case Else $ndata[$i] = "#"&$data[$i] EndSelect Next
Func Label($text,$number) $cut = StringInStr($data[$number],"label")+5 Return "title "&StringTrimLeft($text,$cut) EndFunc
Func Kernel($text,$number) $cut = StringInStr($data[$number + 1],"append")+6 Return "kernel "&$kernel&" "&StringTrimLeft($data[$number + 1],$cut) EndFunc
Func Append($text,$number) Return "initrd "&$initrd EndFunc
$nfile = $file&".lst" $nhnd = FileOpen($nfile,1)
; сообщить о записи данных SplashTextOn("","Запись данных в файл "&$nfile&"...","250","20","-1","-1",3,"","","")
For $i = 1 To $l FileWriteLine($nhnd,$ndata[$i]&@CRLF) Next
MsgBox(64,"Обработка завершена","Перевод завершён, результаты записаны в файл "&$nfile)
|