Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 8826 → Rev 8827

/programs/system/shell/compile_eng.bat
File deleted
/programs/system/shell/start.asm
File deleted
/programs/system/shell/compile_rus.bat
File deleted
/programs/system/shell/compile_test_asm.bat
File deleted
\ No newline at end of file
/programs/system/shell/.makefile
File deleted
/programs/system/shell/compile_test.bat
File deleted
/programs/system/shell/History.txt
1,228 → 1,267
Shell 0.8.2 // 13.06.2021 // rgimad
* use libj.obj instead of built-in "libc"
* big refactoring:
- fix indentation
- string constants moved to locale/.../globals.h files
* add new command - kfetch
it is like neofetch for KolibriOS
prints logo and main system information.
* other fixes
 
Shell 0.8.1 // 14.04.2020 - 01.04.2021 // rgimad, turbocat, Kenshin
rgimad:
* fixed bug with ctrl+v
* added navigation in current string by Home, End
* directory highlighting in ls command output
* Now for incorrect scripts (which doesnt start with #SHS) shell says
that they are incorrect, not "File not found".
Also, translated comments from russian to english in two files.
* added mv command
* added ren command
* now ls works also with relative pathes
* fixed bug in strrchr
* fixed bug with cd ../
* fixed cd . and cd ./ behavior
* added output redirection to file (> >>) for echo command
e.g. echo "<html>">123.txt ; echo a b c >> y.txt
 
turbocat:
* Added new API: SC_GET_PID
* Fixed data type pid - unsigned int.
* Fixed cmd_ps output pid;
* Added new SC_PING api
* Renamed from SC_GET_PID to SC_PID
* added pkill command
 
Kenshin:
* shell.inc now suports sc_ping & sc_pid functions
* update docs
 
Shell 0.7.7 // 06.02.2017 // Leency
* help ⥯¥àì ¢ë¢®¤¨â ᯨ᮪ ª®¬¬ ­¤ ¢ âਠª®«®­ª¨
* ps ⥯¥àì ¢ë¢®¤¨â à §¬¥à Ž‡“, ¨á¯®«ì§ã¥¬ë© ¯à®æ¥áᮬ
* ls ⥯¥àì ¢ë¢®¤¨â ¢á¥ ä ©«ë ­¥ ¢ ®¤­ã,   ¢ ­¥áª®«ìª® ª®«®­®ª
à §¬¥à ª®«®­®ª à áç¨â뢠¥âáï ¨áå®¤ï ¨§ á ¬®£® ¤«¨­­®£® ¨¬¥­¨ ä ©«  ¢ ¯ ¯ª¥
áâ àë© ¢ë¢®¤ ᯨ᪮¬ ¯® ¯à¥¦­¥¬ã ¤®áâ㯥­ ç¥à¥§ ª«îç '-1'
* help теперь выводит список комманд в три колонки
* ps теперь выводит размер ОЗУ, используемый процессом
* ls теперь выводит все файлы не в одну, а в несколько колонок
размер колонок расчитывается исходя из самого длинного имени файла в папке
старый вывод списком по прежнему доступен через ключ '-1'
 
Shell 0.7.6 // 06.02.2017 // Siemargl
* ” ©«®¢ë¥ ®¯¥à æ¨¨ ¨á¯®«ì§ãîâ 64-bit à §¬¥àë ä ©«®¢.
cp <file> <dest> ⥯¥àì ¯®­¨¬ ¥â, ¥á«¨ <dest> - ª â «®£
cp ¨á¯®«ì§ã¥â ¡ãä¥à 1Œ¡, ¨«¨ ­¥ ¡®«¥¥ ¯®«®¢¨­ë ᢮¡®¤­®© ¯ ¬ïâ¨
* Файловые операции используют 64-bit размеры файлов.
cp <file> <dest> теперь понимает, если <dest> - каталог
cp использует буфер 1Мб, или не более половины свободной памяти
 
Shell 0.7.5 // 06.01.2017 // Siemargl
* Œ¥«ª¨¥ ¡ £ä¨ªáë, ¨§¬¥­¥­  «®£¨ª  ®¡à ¡®âª¨ áâ५®ª ¢¢¥àå/¢­¨§, çâ®¡ë ª ª ã ¢á¥å
„®¡ ¢«¥­  ª®¬ ­¤  waitfor ¨ ¢ à¨ ­â ps á ¯ à ¬¥â஬
* Мелкие багфиксы, изменена логика обработки стрелок вверх/вниз, чтобы как у всех
Добавлена команда waitfor и вариант ps с параметром
 
Shell 0.7.4 // 23.01.2014 // Albom
*  ¡®â  á ¡ãä¥à®¬ ®¡¬¥­  (ª®¯¨à®¢ ­¨¥ Ctrl+C ¨ ¢áâ ¢ª  Ctrl+V áâப¨ 楫¨ª®¬)
* Работа с буфером обмена (копирование Ctrl+C и вставка Ctrl+V строки целиком)
 
 
Shell 0.7.3 // 28.11.2013 // Albom
* ˆá¯à ¢«¥­  ®è¨¡ª  á ᨬ¢®«®¬ % ¢ ¨áâ®à¨¨ ª®¬ ­¤
* Исправлена ошибка с символом % в истории команд
 
 
Shell 0.7.2 // 26.10.2013 // Albom
* ” ©« .shell ¯¥à¥­¥á¥­ ¢ /sys/settings/
* ˆá¯à ¢«¥­  ª®¬ ­¤  "cd .."
* Файл .shell перенесен в /sys/settings/
* Исправлена команда "cd .."
 
 
Shell 0.7.1 // 19.10.2013 // Albom
* ˆá¯à ¢«¥­  ®è¨¡ª , á¢ï§ ­­ ï á § ¢¨á ­¨¥¬ ¯à¨ ¯®¯ë⪥ ç⥭¨ï ¯ãá⮩ ¨áâ®à¨¨ ª®¬ ­¤ (¯® ª« ¢¨è ¬ Up ¨ Down)
* Исправлена ошибка, связанная с зависанием при попытке чтения пустой истории команд (по клавишам Up и Down)
 
 
Shell 0.7.0 // 13.10.2013 // Albom
* ¥à¥à ¡®â ­ ¬®¤ã«ì ¢¢®¤  ª®¬ ­¤ë (¤®¡ ¢«¥­  ®¡à ¡®âª  ª« ¢¨è "¢«¥¢®", "¢¯à ¢®", Del)
* Œ¥«ª¨¥ ¨á¯à ¢«¥­¨ï
* Переработан модуль ввода команды (добавлена обработка клавиш "влево", "вправо", Del)
* Мелкие исправления
 
 
Shell 0.6.4 // 09.10.2013 // Leency
* ®¤¤¥à¦ª  ®â­®á¨â¥«ì­ëå ¯ã⥩ ¢ áªà¨¯â å
* Поддержка относительных путей в скриптах
 
 
Shell 0.6.3 // 20.09.2013 // Albom
* msvc-style  âਡãâë ¤«ï ®âª«î祭¨ï ¢ëà ¢­¨¢ ­¨ï ¢ áâàãªâãà å (ᯠᨡ® CleverMouse ¨ Kirakishou!)
* msvc-style атрибуты для отключения выравнивания в структурах (спасибо CleverMouse и Kirakishou!)
 
 
Shell 0.6.2 // 24.02.2013 // Albom
* „®¡ ¢«¥­  ®¡à ¡®âª  ã¯à ¢«ïîé¨å ᨬ¢®«®¢ (\n, \t, \", \', \\, \?)
* Œ¥«ª¨¥ ¨á¯à ¢«¥­¨ï
* Добавлена обработка управляющих символов (\n, \t, \", \', \\, \?)
* Мелкие исправления
 
 
Shell 0.6.1 // 17.02.2013 // Albom
* à®áâ ï ®¡à ¡®âª  ®è¨¡®ª ¢­ãâ७­¨å ª®¬ ­¤
* Š®¬ ­¤  killall âà ­áä®à¬¨à®¢ ­  ¢ ¯ à ¬¥âà all ª®¬ ­¤ë kill
* ˆ§¬¥­¥­  ª®¤¨à®¢ª  ä ©«  History.txt á 1251 ­  866
* Простая обработка ошибок внутренних команд
* Команда killall трансформирована в параметр all команды kill
* Изменена кодировка файла History.txt с 1251 на 866
 
 
Shell 0.6 // 16.02.2013 // Albom
+ „®¡ ¢«¥­  ¢®§¬®¦­®áâì § ¯ã᪠âì ¯à®£à ¬¬ë, ¨¬¥­  ª®â®àëå ¨«¨ ¯ãâì ª ª®â®àë¬ á®¤¥à¦ â ¯à®¡¥«ë. ˆ¬ï ¯à®£à ¬¬ë (¢®§¬®¦­® á ¯ãâñ¬ ª ­¥©) ¤«ï í⮣® ­¥®¡å®¤¨¬® § ª«îç âì ¢ ª ¢ë窨. ’.¥. ­ ª®­¥æ-â® ¬®¦­® § ¯ãáâ¨âì ¯à®£à ¬¬ã ¨§ /rd/1/File managers, ­¥ ¯¥à¥å®¤ï ¢ ­¥ñ
+ „®¡ ¢«¥­  äã­ªæ¨ï à §¤¥«¥­¨ï áâப®¢®© ¯¥à¥¬¥­­®© ­  int argc, char* argv[], çâ® ®§­ ç ¥â ¢®§¬®¦­®áâì ã«ãç襭¨ï ª®¬ ­¤ (®¡à ¡®âª  ­¥áª®«ìª¨å ¯ à ¬¥â஢)
+ „®¡ ¢«¥­  ª®¬ ­¤  cp (ª®¯¨à®¢ ­¨¥ ä ©« ). à¨­¨¬ ¥â ®¡ï§ â¥«ì­® ¤¢  ¯ à ¬¥âà  - ¨¬ï ä ©« -¨áâ®ç­¨ª  ¨ ¨¬ï ä ©« -१ã«ìâ â . ˆ¬¥­  ¬®£ãâ ¡ëâì ªà âª¨¬¨ (¢ ⥪ã饬 ª â «®£¥), â ª ¨ á ¯®«­ë¬ ¯ãâñ¬ (¤®«¦­ë ­ ç¨­ âìáï á /). Ž£à ­¨ç¥­¨¥ ­  à §¬¥à ä ©«  - 4 ƒ¡ ©â 
* ˆá¯à ¢«¥­  ª®¤¨à®¢ª  ¢ á®®¡é¥­¨¨ ®¡ ®è¨¡ª¥ ¢ ª®­á®«ì­®¬ ¯à¨«®¦¥­¨¨
* Š« ¢¨è¨ ¨áâ®à¨¨ (¢¢¥àå ¨ ¢­¨§) ¯®¬¥­ï­ë ¬¥¦¤ã ᮡ®©
* Š®«¨ç¥á⢮ ª®¬ ­¤ ¢ ¨áâ®à¨¨ 㢥«¨ç¥­® á ¯ï⨠¤® ¤¥áïâ¨
* “¬¥­ì襭® ª®«¨ç¥á⢮ ¯à¥¤ã¯à¥¦¤¥­¨© ¯à¨ ª®¬¯¨«ï樨
* Š®¬ ­¤  ccpuid ¯à¥®¡à §®¢ ­  ¢ ¯ à ¬¥âà cpu ª®¬ ­¤ë ver
* ˆá¯à ¢«¥­¨ï ¢ ¯ ª¥â­ëå ä ©« å ᡮન
+ „®¡ ¢«¥­ ¯à¨¬¥à ª®­á®«ì­®£® ¯à¨«®¦¥­¨ï ­   áᥬ¡«¥à¥ ¨ ¯ ª¥â­ë© ä ©« ¤«ï ¥£® ᡮન
+ Добавлена возможность запускать программы, имена которых или путь к которым содержат пробелы. Имя программы (возможно с путём к ней) для этого необходимо заключать в кавычки. Т.е. наконец-то можно запустить программу из /rd/1/File managers, не переходя в неё
+ Добавлена функция разделения строковой переменной на int argc, char* argv[], что означает возможность улучшения команд (обработка нескольких параметров)
+ Добавлена команда cp (копирование файла). Принимает обязательно два параметра - имя файла-источника и имя файла-результата. Имена могут быть краткими (в текущем каталоге), так и с полным путём (должны начинаться с /). Ограничение на размер файла - 4 Гбайта
* Исправлена кодировка в сообщении об ошибке в консольном приложении
* Клавиши истории (вверх и вниз) поменяны между собой
* Количество команд в истории увеличено с пяти до десяти
* Уменьшено количество предупреждений при компиляции
* Команда ccpuid преобразована в параметр cpu команды ver
* Исправления в пакетных файлах сборки
+ Добавлен пример консольного приложения на ассемблере и пакетный файл для его сборки
 
 
Shell 0.5.4 // 04.06.2012 // Albom
=======================================
* ˆá¯à ¢«¥­ ¨­â¥àä¥©á ¨á¯®«­ï¥¬ëå ª®­á®«ì­ëå ¯à¨«®¦¥­¨©. ’¥¯¥àì ®­¨ ¤®«¦­ë ᮧ¤ ¢ âì ¡ãä¥à á ¨¬¥­¥¬ pid-SHELL, £¤¥ pid - ¨¤¥­â¨ä¨ª â®à ¯à®æ¥áá  ¡¥§ § £« ¢­ëå ­ã«¥©
* ¥¨­ª à­¨à®¢ ­ë ª®¬ ­¤ë ccpuid, free, killall
+ „®¡ ¢«¥­  ª®¬ ­¤  history
* Исправлен интерфейс исполняемых консольных приложений. Теперь они должны создавать буфер с именем pid-SHELL, где pid - идентификатор процесса без заглавных нулей
* Реинкарнированы команды ccpuid, free, killall
+ Добавлена команда history
 
 
Shell 0.5.3 // 19.04.2012 // Albom
=======================================
* ˆá¯à ¢«¥­¨¥ ¢ ª®¬ ­¤¥ pwd
* Исправление в команде pwd
 
 
Shell 0.5.2 // 16.04.2012 // Albom
=======================================
* ˆá¯à ¢«¥­¨¥ ¢ ª®¬ ­¤¥ ls
* ¥§­ ç¨â¥«ì­ë¥ ¤à㣨¥ ¨á¯à ¢«¥­¨ï
* Исправление в команде ls
* Незначительные другие исправления
 
 
Shell 0.5.1 // 15.04.2012 // Albom
=======================================
* ¥ª®â®àë¥ ­¥§­ ç¨â¥«ì­ë¥ ¨á¯à ¢«¥­¨ï
* Некоторые незначительные исправления
 
 
Shell 0.5 // 23.03.2012 // Albom
=======================================
* „®¡ ¢«¥­  ¯®¤¤¥à¦ª  ª®­á®«ì­ëå ¯à¨«®¦¥­¨©, ª®â®àë¥ ®¡é îâáï á 襫«®¬ ç¥à¥§ ¨¬¥­®¢ ­­ãî ®¡« áâì
* Добавлена поддержка консольных приложений, которые общаются с шеллом через именованную область
 
 
Shell 0.4.6 // 30.01.2011 // Albom
=======================================
* ‚६¥­­® 㤠«¥­ë ª®¬ ­¤ë killall ¨ ccpuid (çâ®¡ë ¢¥à­ãâì, ­¥®¡å®¤¨¬® à áª®¬¬¥­â¨à®¢ âì 2 áâà®çª¨)
* ˆá¯à ¢«¥­¨ï ¢ ⥪á⮢ëå áâப å
* Временно удалены команды killall и ccpuid (чтобы вернуть, необходимо раскомментировать 2 строчки)
* Исправления в текстовых строках
 
 
Shell 0.4.52 // 25.10.2010 // Pterox
=======================================
* „®¡ ¢«¥­  ª®¬ ­¤  "killall" - 㡨¢ ¥â ¢á¥ ¯à®æ¥ááë ªà®¬¥ OS/IDLE.
* ”¨ªáë
* Добавлена команда "killall" - убивает все процессы кроме OS/IDLE.
* Фиксы
 
 
Shell 0.4.51 // 21.10.2010 // Pterox
=======================================
* Š®¬ ­¤  "turnoff" ¯¥à¥¨¬¥­®¢ ­  ¢ "shutdown", "kerver" 㤠«¥­  - ⥯¥àì ¥ñ § ¬¥­ï¥â "ver kernel"; 䨪áë.
* Команда "turnoff" переименована в "shutdown", "kerver" удалена - теперь её заменяет "ver kernel"; фиксы.
 
 
Shell 0.4.5 // 19.10.2010 // Pterox
=======================================
à®£à ¬¬  ⥯¥àì ¬­®£®ï§ëª®¢ ï ( ­£«¨©áª¨©, ¨ àãá᪨© ï§ëª). à®£à ¬¬  ¯®«­®áâìî àãá¨ä¨æ¨à®¢ ­­ .
* Š®¬ ­¤  "free" ¯¥à¥¨¬¥­®¢ ­  ¢ "memory" - ¤«ï â®ç­®áâ¨.
* „®¡ ¢«¥­ë ª®¬ ­¤ë turnoff (¢ëª«îç¨âì ª®¬¯ìîâ¥à), kerver (¢¥àá¨ï ï¤à  KolibriOS), uptime; reboot ⥯¥àì ¬®¦¥â ¯¥à¥§ £à㦠âì ï¤à® ("reboot kernel")
Программа теперь многоязыковая (английский, и русский язык). Программа полностью русифицированна.
* Команда "free" переименована в "memory" - для точности.
* Добавлены команды turnoff (выключить компьютер), kerver (версия ядра KolibriOS), uptime; reboot теперь может перезагружать ядро ("reboot kernel")
 
 
Shell 0.4.4 // 20.08.2010 // Albom
=======================================
1) 襫« ª®à४⭮ § ¢¥àè ¥âáï ¯à¨ § ªàë⨨ ®ª­ 
2) ¨á¯à ¢«¥­® ¥éñ 2 ®è¨¡ª¨
3) ¤®¡ ¢«¥­ë 2 ª®¬ ­¤ë:
* sleep - ¦¤ âì. ¯ à ¬¥âà - ¢à¥¬ï ¢ á®âëå ç áâïå ᥪ㭤ë. ⮫쪮 楫®¥ ç¨á«®.
* ccpuid - ¢ë¢®¤ ¢ ª®­á®«ì ¨­ä®à¬ æ¨¨ (¯®ª  áªã¤­®) ® ¯à®æ¥áá®à¥. ¯®«ì§ë ¬ «®, ­® ¤ ¢­® å®â¥« á ª®¬ ­¤®© cpuid à §®¡à âìáï (¢ á«¥¤ãî饬 ᥬ¥áâॠ¡ã¤ã áâ㤥­â ¬ ªãàá ç¨â âì, ¢ª«î稫 à §¡®à ª®¬ ­¤ë ¢ ¯à®£à ¬¬ã).
1) шелл корректно завершается при закрытии окна
2) исправлено ещё 2 ошибки
3) добавлены 2 команды:
* sleep - ждать. параметр - время в сотых частях секунды. только целое число.
* ccpuid - вывод в консоль информации (пока скудно) о процессоре. пользы мало, но давно хотел с командой cpuid разобраться (в следующем семестре буду студентам курс читать, включил разбор команды в программу).
 
¥áâì ¬­®£® ¨¤¥©. ­¥ª®â®àë¥ «¥£ª® ॠ«¨§ãîâáï, ­¥ª®â®àë¥ á«®¦­¥¥. ¥á«¨ ¨­â¥à¥á­®:
1) ¤®¡ ¢¨âì ¯¥à¥¬¥­­ãî (®¤­ã!), ¢ ª®â®àãî ¡ã¤¥â १ã«ìâ â ¢ ⥪á⮢®© ä®à¬¥ (­¥ â® çâ® ¢®§¢à é ¥â äã­ªæ¨ï) § ¯¨á뢠âìáï. á ­¥© ¬®¦­® ¡ã¤¥â à ¡®â âì ¨§ ª®¬ ­¤­®© áâப¨
2) ¢­¥¤à¨âì ¯à®áâãî á⥪®¢ãî ¬ è¨­ã ¤«ï ¢ëç¨á«¥­¨© á ¢¥é¥á⢥­­ë¬¨ ç¨á« ¬¨
есть много идей. некоторые легко реализуются, некоторые сложнее. если интересно:
1) добавить переменную (одну!), в которую будет результат в текстовой форме (не то что возвращает функция) записываться. с ней можно будет работать из командной строки
2) внедрить простую стековую машину для вычислений с вещественными числами
 
 
Shell 0.4.3 // 20.08.2010 // Albom
=======================================
* ‘¬¥áì ¢¥àᨩ 0.4.1 ¨ 0.4.2. ’¥¯¥àì ¢  à娢¥ ¢á¥ ¨á室­ë¥ ä ©«ë, ­¥®¡å®¤¨¬ë¥ ¤«ï ª®¬¯¨«ï樨 (à ­ìè¥ ¨á¯®«ì§®¢ «¨áì ®¡ê¥ªâ­¨ª¨ á ¬®¨¬¨ ®¡ñà⪠¬¨, ¨á室­¨ª¨ ï á 襫«®¬ ­¥ ¢ëª« ¤ë¢ «)
* Смесь версий 0.4.1 и 0.4.2. Теперь в архиве все исходные файлы, необходимые для компиляции (раньше использовались объектники с моими обёртками, исходники я с шеллом не выкладывал)
 
 
Shell 0.4.2 // 28.08.2009 // diamond
=======================================
* „®¡ ¢¨« ª®à४⭮¥ § ¢¥à襭¨¥ à ¡®âë ¯à¨ § ªàë⨨ ®ª­  ª®­á®«¨, à ¡®â ¥â ⮫쪮 ­ ç¨­ ï á ¯®á«¥¤­¥© ­  ¤ ­­ë© ¬®¬¥­â ¢¥àᨥ© ¡¨¡«¨®â¥ª¨ («¥¦¨â ­  svn, ¢ª«î祭  ¢ ­®ç­ãî á¡®àªã). ¥à¥ª®¬¯¨«¨à®¢ « ¢ VS2008 á LTCG, ¥éñ ¯®è ¬ ­¨« á ®¯â¨¬¨§ æ¨¥© ¯® à §¬¥àã
* Добавил корректное завершение работы при закрытии окна консоли, работает только начиная с последней на данный момент версией библиотеки (лежит на svn, включена в ночную сборку). Перекомпилировал в VS2008 с LTCG, ещё пошаманил с оптимизацией по размеру
 
 
Shell 0.4.1 // 16.03.2009 // Albom
=======================================
* ¢¥àá¨ï á ¨á¯à ¢«¥­­ë¬¨ ®è¨¡ª ¬¨.
* à ¡®â ¥â ª®¬ ­¤  alias, ¤®¡ ¢«¥­  ª®¬ ­¤  clear.
* версия с исправленными ошибками.
* работает команда alias, добавлена команда clear.
 
 
Shell 0.4 // 12.08.2008 // Albom
=======================================
1)  ¡®â ¥â á奬  ¯á¥¢¤®­¨¬®¢ (¤® 256 ª®¬ ­¤)
- ¯à®á¬®âà ¯® ª®¬ ­¤¥ alias (¡¥§ ¯ à ¬¥â஢)
- ¤®¡ ¢«¥­¨¥ ¯á¥¢¤®­¨¬  ª®¬ ­¤ë á ª« ¢¨ âãàë ¨«¨ ¢ áªà¨¯â¥ (¢ ⮬ ç¨á«¥ ¨ .shell): alias ­®¢ ï ª®¬ ­¤  = áâ à ï ª®¬ ­¤ 
- ª®¬ ­¤ë ॣ¨áâ஧ ¢¨á¨¬ë¥, ¯®í⮬㠯®ª«®­­¨ª ¬ „Ž‘ ¯à¨¤ñâáï ¢­¥á⨠¢ .shell áâப¨ â ª®£® ¢¨¤ 
1) Работает схема псевдонимов (до 256 команд)
- просмотр по команде alias (без параметров)
- добавление псевдонима команды с клавиатуры или в скрипте (в том числе и .shell): alias новая команда = старая команда
- команды регистрозависимые, поэтому поклонникам ДОС придётся внести в .shell строки такого вида
alias dir = ls
alias DIR = ls
alias Dir = ls
alias DIr = ls
¨ â.¤.
- ¢áâ஥­­ë¥ ª®¬ ­¤ë ¯¥à¥­ §¢ âì ­¥¢®§¬®¦­®, ­ ¯à¨¬¥à, ¡¥áá¬ëá«¥­­  ª®¬ ­¤ :
и т.д.
- встроенные команды переназвать невозможно, например, бессмысленна команда:
alias ls=somecommand
- ¯à¨ ®â« ¤ª¥ ¯®«ãç « áâà ­­ãî ¨­ä®à¬ æ¨î, ­® â ª ª ª ã ¬¥­ï ¢áñ à ¡®â ¥â, â® ¯®ª  ¨§¬¥­¥­¨© ¢­®á¨âì ­¥ ¯« ­¨àãî
- при отладке получал странную информацию, но так как у меня всё работает, то пока изменений вносить не планирую
 
2) ’¥¯¥àì 襫« ¬®¦­® § ¯ã᪠âì á ¯ à ¬¥â஬ (¨§ á ¬®£® ᥡï, ­ ¯à¨¬¥à)
- ᨭ⠪á¨á:
shell ª®¬ ­¤ 
- ¯à¨¬¥à:
2) Теперь шелл можно запускать с параметром (из самого себя, например)
- синтаксис:
shell команда
- пример:
shell /sys/somescript
- ¯à¨ í⮬ .shell ­¥ § ¯ã᪠¥âáï
- при этом .shell не запускается
 
3) ¥ «¨§®¢ ­  ª®¬ ­¤  more
- ¯à®á¬®âà ⥪á⮢ëå ¨ ¡¨­ à­ëå ä ©«®¢ (¢à®¤¥ ¡ë § ¤ ç  ¯à®áâ ï, ­® ¯à¨è«®áì ¯®¢®§¨âìáï á ã¯à ¢«ïî騬¨ ᨬ¢®« ¬¨)
- ®ç¥­ì ­¥ ४®¬¥­¤ã¥âáï ¯à®á¬ âਢ âì ¡®«ì訥 ä ©«ë
3) Реализована команда more
- просмотр текстовых и бинарных файлов (вроде бы задача простая, но пришлось повозиться с управляющими символами)
- очень не рекомендуется просматривать большие файлы
 
 
Shell 0.3 // 07.08.2008 // Albom
=======================================
1) ‚®§¬®¦­®áâì § ¯ã᪠ áªà¨¯â®¢
* ª ¦¤ ï áâப  ¤®«¦­  ¯à¥¤áâ ¢«ï¥â ᮡ®© ª®¬ ­¤ã
* áâப®© áç¨â ¥âáï ­ ¡®à ᨬ¢®«®¢, ª®â®àë© § ª ­ç¨¢ ¥âáï CR+LF (Windows) ¨«¨ LF(UNIX) ¨«¨ CR(Mac)
* ¥á«¨ áâப  ­ ç¨­ ¥âáï á #, â® ¢áï áâப  (â.¥. ª®¬¬¥­â à¨©) ¨£­®à¨àã¥âáï
* áªà¨¯â ¤®«¦¥­ ­ ç¨â âìáï á #SHS
* ¯à¨ § ¯ã᪥ 襫«   ¢â®¬ â¨ç¥áª¨ § ¯ã᪠¥âáï áªà¨¯â .shell
1) Возможность запуска скриптов
* каждая строка должна представляет собой команду
* строкой считается набор символов, который заканчивается CR+LF (Windows) или LF(UNIX) или CR(Mac)
* если строка начинается с #, то вся строка (т.е. комментарий) игнорируется
* скрипт должен начитаться с #SHS
* при запуске шелла автоматически запускается скрипт .shell
 
2) ˆáâ®à¨ï ¨§ 5 (¬®¦­® ¨§¬¥­¨âì ¯à¨ ª®¬¯¨«ï樨) ¢¢¥¤ñ­­ëå ª®¬ ­¤
* ¯¥à¥¬¥é¥­¨¥ ¯® ¨áâ®à¨¨ - UP/DOWN
2) История из 5 (можно изменить при компиляции) введённых команд
* перемещение по истории - UP/DOWN
 
3) Š®¬ ­¤  alias, ª®â®à ï ¯®§¢®«ï¥â ¢¢®¤¨âì ᨭ®­¨¬ë ¤«ï ª®¬ ­¤
* ¤® 256 (¬®¦­® ¨§¬¥­¨âì ¯à¨ ª®¬¯¨«ï樨) ᨭ®­¨¬®¢
* ¯®ª  à ¡®â ¥â ⮫쪮 ¤®¡ ¢«¥­¨¥ ¨ ¯à®á¬®âà ᨭ®­¨¬®¢,   ®âà ¡®âª  ¯®ª  ­¥ ॠ«¨§®¢ ­ 
3) Команда alias, которая позволяет вводить синонимы для команд
* до 256 (можно изменить при компиляции) синонимов
* пока работает только добавление и просмотр синонимов, а отработка пока не реализована
 
 
Shell 0.2 // 04.08.2008 // Albom
=======================================
* ¤®¡ ¢¨« ­®¢ë¥ ä㭪樨
* ­ ¯¨á « ᮡá⢥­­ãî ¯à®æ¥¤ãàã ¢¢®¤  ª®¬ ­¤ë
* добавил новые функции
* написал собственную процедуру ввода команды
 
 
Shell 0.11 // 01.08.2008 // Albom
=======================================
* „®¡ ¢¨« ª®¬ ­¤ë free ¨ reboot, ¢­ñá ­¥ª®â®àë¥ ¨§¬¥­¥­¨ï, ¨á¯à ¢¨« ­ ©¤¥­­ë¥ ®è¨¡ª¨
* Добавил команды free и reboot, внёс некоторые изменения, исправил найденные ошибки
 
 
Shell 0.1 // 29.07.2008 // Albom
=======================================
* ¥ «¨§®¢ ­ë (­¥ ¯®«­®áâìî) ª®¬ ­¤ë: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver
* à¨ § ¯ã᪥ ¯à®£à ¬¬ë (¥á«¨ ­¥ 㪠§ ­ ¯®«­ë© ¯ãâì) ®­  ¨é¥âáï ¢ ª â «®£¥ /rd/1 ¨ ⥪ã饬 ª â «®£¥
* Реализованы (не полностью) команды: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver
* При запуске программы (если не указан полный путь) она ищется в каталоге /rd/1 и текущем каталоге
 
 
Shell 0.02 // 27.07.2008 // Albom
=======================================
* ¥ «¨§®¢ « ª®¬ ­¤ë:
exit - ¢ë室
ls (á ¯ à ¬¥â஬ ¨ ¡¥§) - ¢ë¢®¤ ᯨ᪠ ¤¨à¥ªâ®à¨¨
pwd - ⥪ã騩 ª â «®£
ps - ᯨ᮪ ¯à®æ¥áᮢ ¨ ¨å PID
kill - § ¢¥àè¨âì ¯à®æ¥áá ¯® PID
help (á ¯ à ¬¥â஬ ¨ ¡¥§) - ¯®¬®éì
* Реализовал команды:
exit - выход
ls (с параметром и без) - вывод списка директории
pwd - текущий каталог
ps - список процессов и их PID
kill - завершить процесс по PID
help (с параметром и без) - помощь
 
Shell 0.01 // 27.07.2008 // Albom
=======================================
* ¥è¨« ­ ¯¨á âì ä㭪樮­ «ì­ë© 襫« ­  ‘¨ á ¨á¯®«ì§®¢ ­¨¥¬ console.obj
* ®ª  ᤥ« « äã­ªæ¨î ®â¤¥«¥­¨ï ª®¬ ­¤ë ¨ ¯ à ¬¥â஢,   â ª¦¥ ॠ«¨§®¢ « ª®¬ ­¤ë help (¯®ª  ¡¥§ ¯ à ¬¥â஢), ver ¨ exit
* Решил написать функциональный шелл на Си с использованием console.obj
* Пока сделал функцию отделения команды и параметров, а также реализовал команды help (пока без параметров), ver и exit
 
/programs/system/shell/Tupfile.lua
1,26 → 1,10
if tup.getconfig("NO_FASM") ~= "" or tup.getconfig("NO_GCC") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_gcc.lua")
LDFLAGS = LDFLAGS .. " -T kolibri.ld"
-- compile shell
if tup.getconfig("LANG") == "ru"
then C_LANG = "LANG_RUS"
else C_LANG = "LANG_ENG" -- this includes default case without config
end
if tup.getconfig("NO_TCC") ~= "" then return end
 
if tup.getconfig("TUP_PLATFORM") == "win32"
-- on win32 '#' is not a special character, but backslash and quotes would be printed as is
then tup.rule('echo #define ' .. C_LANG .. ' 1 > %o', {"lang.h"})
-- on unix '#' should be escaped
else tup.rule('echo "#define" ' .. C_LANG .. ' 1 > %o', {"lang.h"})
end
tup.append_table(OBJS, tup.rule("start.asm", "fasm %f %o", "start.o"))
compile_gcc{"shell.c", "system/kolibri.c", "system/stdlib.c", "system/string.c", "system/ctype.c", extra_inputs = {"lang.h"}}
link_gcc("shell")
TCC="kos32-tcc"
CFLAGS = "-I../../develop/ktcc/trunk/libc.obj/include"
LDFLAGS = "-nostdlib ../../develop/ktcc/trunk/bin/lib/crt0.o -L../../develop/ktcc/trunk/bin/lib"
 
-- compile ASM test
tup.rule("test.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "asmtest")
-- compile C test
OBJS = {"start.o", "kolibri.o", "stdlib.o", "string.o", "ctype.o"} -- remove shell.o
compile_gcc{"test.c"}
link_gcc("ctest")
LIBS = "-ltcc -lc.obj"
COMMAND=string.format("%s %s %s %s %s", TCC, CFLAGS, LDFLAGS , "%f -o %o", LIBS)
 
tup.rule("shell.c", COMMAND .. tup.getconfig("KPACK_CMD"), "shell")
/programs/system/shell/all.h
8,10 → 8,37
 
#include "system/boolean.h"
#include "system/kolibri.h"
#include "system/stdlib.h"
#include "system/string.h"
#include "system/ctype.h"
//#include "system/stdlib.h"
//#include "system/string.h"
//#include "system/ctype.h"
//#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/ksys.h>
//--------
int strnicmp(const char* string1, const char* string2, unsigned count)
{
int pc = 0;
while (1)
{
if (toupper(*string1)<toupper(*string2))
return -1;
if (toupper(*string1)>toupper(*string2))
return 1;
 
if (*string1=='\0' || pc == count)
return 0;
 
string1++;
string2++;
pc++;
}
}
//--------
 
extern int _FUNC(sprintf)(char* buffer, const char* format, ...);
 
#include "globals.h"
#include "prototypes.h"
 
18,8 → 45,32
// from main file (shell.c). TODO - in future move to library
void get_file_dir_loc(char *filepath, char *dir_path);
 
#include "system/console.c"
//#include "system/console.c"
#include <conio.h>
#define con_exit (*con_exit)
#define con_set_title (*con_set_title)
#define con_write_asciiz (*con_write_asciiz)
#define con_write_string (*con_write_string)
#define con_printf (*con_printf)
#define con_get_flags (*con_get_flags)
#define con_set_flags (*con_set_flags)
#define con_get_font_height (*con_get_font_height)
#define con_get_cursor_height (*con_get_cursor_height)
#define con_set_cursor_height (*con_set_cursor_height)
#define con_getch (*con_getch)
#define con_getch2 (*con_getch2)
#define con_kbhit (*con_kbhit)
#define con_gets (*con_gets)
#define con_gets2_callback (* con_gets2_callback)
#define con_gets2 (*con_gets2)
#define con_cls (*con_cls)
#define con_get_cursor_pos (*con_get_cursor_pos)
#define con_set_cursor_pos (*con_set_cursor_pos)
 
#define printf con_printf
#define gets con_gets
#define getch con_getch2
 
#include "cmd/cmd_about.c"
#include "cmd/cmd_help.c"
#include "cmd/cmd_ver.c"
45,6 → 96,7
#include "cmd/cmd_shutdown.c"
#include "cmd/cmd_uptime.c"
#include "cmd/cmd_history.c"
#include "cmd/cmd_kfetch.c"
#include "cmd/cmd_cp.c"
#include "cmd/cmd_mv.c"
#include "cmd/cmd_ren.c"
58,6 → 110,5
#include "modules/module_alias.c"
#include "modules/module_parameters.c"
 
typedef unsigned int size_t;
//typedef unsigned int size_t;
 
/// ===========================================================
/programs/system/shell/build.sh
0,0 → 1,2
../../develop/ktcc/trunk/source/kos32-tcc -I../../develop/ktcc/trunk/libc.obj/include -nostdlib ../../develop/ktcc/trunk/bin/lib/crt0.o -L../../develop/ktcc/trunk/bin/lib shell.c system/kolibri.c -o shell -ltcc -lc.obj
../../other/kpack/linux/kpack shell
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/programs/system/shell/cmd/cmd_info.c
File deleted
/programs/system/shell/cmd/cmd_about.c
1,10 → 1,6
 
int cmd_about(char param[])
{
 
char message[] = {"Shell %s\n\r"};
 
printf(message, SHELL_VERSION);
int cmd_about(char param[]) {
printf(CMD_ABOUT_MSG, SHELL_VERSION);
return TRUE;
}
 
/programs/system/shell/cmd/cmd_alias.c
1,11 → 1,8
 
int cmd_alias(char arg[])
{
 
int cmd_alias(char arg[]) {
int result;
 
if (NULL == arg || '\0' == arg[0])
{
if (NULL == arg || '\0' == arg[0]) {
alias_list();
return TRUE;
}
/programs/system/shell/cmd/cmd_cd.c
1,18 → 1,11
 
 
int cmd_cd(char dir[])
{
 
char temp[256];
unsigned result;
 
if (NULL == dir)
{
#if LANG_ENG
printf(" cd <directory>\n\r");
#elif LANG_RUS
printf(" cd <¤¨à¥ªâ®à¨ï>\n\r");
#endif
if (NULL == dir) {
printf(CMD_CD_USAGE);
return TRUE;
}
 
19,8 → 12,7
if ( 0 == strcmp(dir, ".") || 0 == strcmp(dir, "./") )
return TRUE;
 
if ( ( 0 == strcmp(dir, "..") || 0 == strcmp(dir, "../") ) && ( 0 != strcmp(cur_dir, "/")) )
{
if ( ( 0 == strcmp(dir, "..") || 0 == strcmp(dir, "../") ) && ( 0 != strcmp(cur_dir, "/")) ) {
cur_dir[strlen(cur_dir)-1]='\0';
dir_truncate(cur_dir);
set_cwd(cur_dir);
27,8 → 19,7
return TRUE;
}
 
if ( '/' == dir[0])
{
if ( '/' == dir[0]) {
if ( dir_check(dir) )
{
strcpy(cur_dir, dir);
37,15 → 28,13
}
return FALSE;
}
else
{
else {
strcpy(temp, cur_dir);
if (cur_dir[strlen(cur_dir)-1] != '/')
strcat(temp, "/");
strcat(temp, dir);
 
if ( dir_check(temp) )
{
if ( dir_check(temp) ) {
 
strcpy(cur_dir, temp);
set_cwd(cur_dir);
/programs/system/shell/cmd/cmd_clear.c
1,6 → 1,5
 
int cmd_clear(char param[])
{
int cmd_clear(char param[]) {
con_cls();
return TRUE;
}
/programs/system/shell/cmd/cmd_cp.c
19,11 → 19,7
 
if (argc != 2)
{
#if LANG_ENG
printf(" cp <file_in> <file_out>\n\r");
#elif LANG_RUS
printf(" cp <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r");
#endif
printf(CMD_CP_USAGE);
parameters_free(argc, argv);
return TRUE;
}
/programs/system/shell/cmd/cmd_date.c
1,5 → 1,4
 
 
int cmd_date(char param[])
{
unsigned date;
6,11 → 5,7
unsigned time;
 
date = kol_system_date_get();
#if LANG_ENG
printf(" Date [dd.mm.yy]: %x%x.%x%x.%x%x",
#elif LANG_RUS
printf(" „ â  [¤¤.¬¬.££]: %x%x.%x%x.%x%x",
#endif
printf(CMD_DATE_DATE_FMT,
(date&0xf00000)>>20, (date&0xf0000)>>16, // day
(date&0xf000)>>12, (date&0xf00)>>8, //month
(date&0xf0)>>4, (date&0xf) ); // year
17,12 → 12,7
 
 
time = kol_system_time_get();
 
#if LANG_ENG
printf("\n\r Time [hh:mm:ss]: %x%x:%x%x:%x%x\n\r",
#elif LANG_RUS
printf("\n\r ‚६ï [çç:¬¬:áá]: %x%x:%x%x:%x%x\n\r",
#endif
printf(CMD_DATE_TIME_FMT,
(time&0xf0)>>4, (time&0xf), // hours
(time&0xf000)>>12, (time&0xf00)>>8, // minutes
(time&0xf00000)>>20, (time&0xf0000)>>16 ); // seconds
/programs/system/shell/cmd/cmd_exit.c
2,7 → 2,7
int cmd_exit(char param[])
{
free(ALIASES);
_exit(1);
con_exit(1);
kol_exit();
return TRUE;
}
/programs/system/shell/cmd/cmd_free.c
7,11 → 7,7
free = kol_system_memfree();
used = total - free;
 
#if LANG_ENG
printf (" Total [kB / MB / %%]: %-7d / %-5d / 100\n\r Free [kB / MB / %%]: %-7d / %-5d / %d\n\r Used [kB / MB / %%]: %-7d / %-5d / %d\n\r",
#elif LANG_RUS
printf (" ‚ᥣ® [Š / Œ / %%]: %-7d / %-5d / 100\n\r ‘¢®¡®¤­® [Š / Œ / %%]: %-7d / %-5d / %d\n\r ˆá¯®«ì§ã¥âáï [Š / Œ / %%]: %-7d / %-5d / %d\n\r",
#endif
printf (CMD_FREE_FMT,
total, total/1024, free, free/1024, (free*100)/total, used, total/1024-free/1024, 100-(free*100)/total );
return TRUE;
/programs/system/shell/cmd/cmd_help.c
1,21 → 1,11
 
int cmd_help(char cmd[])
{
 
int cmd_help(char cmd[]) {
int i;
 
#if LANG_ENG
char available[]={" %d commands available:\n\r"};
#elif LANG_RUS
char available[]={" Š®«¨ç¥á⢮ ¤®áâ㯭ëå ª®¬ ­¤: %d\n\r"};
#endif
 
if ( !strlen(cmd) )
{
if ( !strlen(cmd) ) {
int columns_max=3;
printf (available, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++)
{
printf (CMD_HELP_AVAIL, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++) {
printf(" %-12s", COMMANDS[i].name);
if ((i) && ((i+1)%columns_max == 0)) printf("\n\r");
}
22,21 → 12,15
if ((i)%columns_max != 0) printf("\n\r");
return TRUE;
}
else
{
else {
for (i=0; i<NUM_OF_CMD; i++)
if ( !strcmp(cmd, COMMANDS[i].name) )
{
if ( !strcmp(cmd, COMMANDS[i].name) ) {
printf(COMMANDS[i].help);
return TRUE;
}
 
#if LANG_ENG
printf (" Command \'%s\' not found.\n\r", cmd);
#elif LANG_RUS
printf (" Š®¬ ­¤  \'%s\' ­¥ ­ ©¤¥­ .\n\r", cmd);
#endif
printf (available, NUM_OF_CMD);
printf (CMD_HELP_CMD_NOT_FOUND, cmd);
printf (CMD_HELP_AVAIL, NUM_OF_CMD);
for (i = 0; i < NUM_OF_CMD; i++)
printf(" %s\n\r", COMMANDS[i].name);
}
/programs/system/shell/cmd/cmd_history.c
1,14 → 1,9
 
int cmd_history(char arg[])
{
 
int cmd_history(char arg[]) {
int i;
 
for (i = CMD_HISTORY_NUM_REAL - 1; i >= 0; i--)
{
for (i = CMD_HISTORY_NUM_REAL - 1; i >= 0; i--) {
printf("%s\n", CMD_HISTORY[i]);
}
 
return TRUE;
}
 
/programs/system/shell/cmd/cmd_kfetch.c
0,0 → 1,53
 
void get_str_meminfo(char *str) {
unsigned mem_all_mib = kol_system_mem() / 1024;
unsigned mem_free_mib = kol_system_memfree() / 1024;
sprintf(str, "%uMiB / %uMiB", mem_all_mib - mem_free_mib, mem_all_mib);
}
 
int cmd_kfetch(char param[]) {
char *str_krnl_ver = malloc(64);
get_str_kernel_version(str_krnl_ver, "%d.%d.%d.%d. SVN-rev.: %d");
char *str_uptime = malloc(64);
get_str_uptime(str_uptime, "%d day(s), %d:%d:%d.%d");
char *str_resolution = malloc(24);
ksys_pos_t resol = _ksys_screen_size();
sprintf(str_resolution, "%u x %u", resol.x + 1, resol.y + 1);
char *str_cpu_info = malloc(16);
get_str_cpu_info(str_cpu_info);
char *str_meminfo = malloc(24);
get_str_meminfo(str_meminfo);
printf(/*"\033[0;34;40m \033[0m\n\r"*/
/*"\033[0;34;40m \033[0m\n\r"*/
/*"\033[0;34;40m \033[0m\n\r"*/
"\033[0;34;40m .\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m t\033[0;1;30;40m@\033[0;34;40m.\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m ;8\033[0;1;30;40m8\033[0;34;40m8\033[0;1;30;40m8\033[0;32;40m.\033[0;34;40m.\033[0;32;40m \033[0;34;40m \033[0;31;40m.\033[0;34;40mS\033[0;1;30;46m88\033[0;1;35;47m8\033[0;35;44mX\033[0;34;40m;\033[0;32;40m.:\033[0;5;30;40mX\033[0;1;30;46mX8\033[0;34;40m8\033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m t\033[0;5;36;40m8\033[0;5;36;46m@ \033[0;5;37;46m%%\033[0;5;37;47m.\033[0;5;37;46m@\033[0;34;46m8\033[0;31;40mt\033[0;34;40m.\033[0;32;40m.\033[0;34;40m \033[0;31;40m \033[0;1;30;40m8\033[0;1;36;46m%%\033[0;5;37;46m8\033[0;5;1;35;44m8\033[0;1;34;45m8\033[0;30;44m8\033[0;32;40m;;\033[0;5;36;40m8\033[0;37;46m@\033[0;5;37;44m8\033[0;5;35;44m:\033[0;1;30;45m8\033[0;5;34;40m8\033[0m\n\r"
"\033[0;34;40m@\033[0;5;35;40m8\033[0;1;30;44m8\033[0;5;35;40m8\033[0;35;44m8\033[0;1;30;45m@\033[0;35;44m8\033[0;1;30;45m8\033[0;34;45m8\033[0;1;30;45m8\033[0;1;34;45m8\033[0;1;37;47mt\033[0;5;37;46m@\033[0;1;30;46m8S\033[0;5;37;46m8X\033[0;5;36;46m.t\033[0;1;30;44m8\033[0;31;40m \033[0;32;40m \033[0;34;40m:\033[0;5;36;40m8\033[0;1;30;46m@\033[0;1;34;47m8\033[0;5;37;45m8\033[0;5;35;44m \033[0;1;30;45m8\033[0;1;30;46m88\033[0;36;47m@\033[0;5;37;44m8\033[0;5;35;44m \033[0;5;35;45m;\033[0;5;35;44m.\033[0;37;45m8\033[0;1;30;44mX\033[0;32;40m \033[0m %s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m.\033[0;32;40m.\033[0;34;40m;S@\033[0;5;30;40m8\033[0;33;41m8\033[0;1;33;43m;\033[0;5;33;43m \033[0;1;33;47m8\033[0;5;33;43m \033[0;1;33;43mt\033[0;36;47m8\033[0;5;36;46m \033[0;1;36;46m%%\033[0;5;34;40m8\033[0;1;30;46m%%8\033[0;5;37;46mX\033[0;5;36;46m%%\033[0;5;35;45m.\033[0;5;36;44m.\033[0;37;46m8\033[0;1;34;47m@\033[0;1;36;47mX\033[0;5;1;35;44m8\033[0;5;37;44m8\033[0;5;1;34;45m8\033[0;1;35;45m:\033[0;1;34;47m8\033[0;1;30;45m8\033[0;5;34;40m8\033[0;31;40m: \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m.::\033[0;34;40m.\033[0;31;40m;\033[0;1;30;43m8\033[0;5;1;33;41m8\033[0;5;33;43m \033[0;5;33;41m \033[0;5;37;43mX\033[0;5;36;46m8:\033[0;1;36;46mS.\033[0;5;36;46m;@\033[0;1;34;45m88\033[0;1;34;46m8\033[0;1;37;47m.\033[0;5;1;34;45m8\033[0;5;37;45m8\033[0;5;1;34;45m8\033[0;1;35;47m8\033[0;5;1;35;44m8\033[0;5;35;44m \033[0;35;47m8\033[0;35;44m%%\033[0;34;40m;. \033[0;31;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m .\033[0;31;40m;\033[0;1;30;41m@\033[0;5;31;41mS\033[0;5;33;41m \033[0;5;1;31;43m8\033[0;1;30;43m8\033[0;5;36;46m88\033[0;5;37;46mX\033[0;1;36;47m@\033[0;1;36;46mS\033[0;1;34;47m@\033[0;1;35;47m@\033[0;5;37;44m8\033[0;5;1;34;45m8\033[0;5;35;44m;\033[0;1;34;45m8\033[0;5;35;44m;\033[0;35;47m8\033[0;5;1;35;44m8\033[0;1;30;45m8\033[0;5;35;40m8\033[0;34;40m%%\033[0;32;40m \033[0;34;40m \033[0;31;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m:\033[0;5;33;40mS\033[0;1;32;46m8\033[0;37;43mS\033[0;1;32;47m8\033[0;37;46mS\033[0;5;37;42m8\033[0;5;36;46mX\033[0;36;47m8\033[0;1;30;46m8\033[0;5;35;44mX\033[0;1;34;45m88\033[0;1;30;45m8\033[0;37;45m@\033[0;1;34;45m8\033[0;1;30;45m8\033[0;1;30;44m@\033[0;34;40m8\033[0;32;40m%%\033[0;34;40m; \033[0;32;40m \033[0;34;40m \033[0;31;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m .\033[0;32;40m.@\033[0;1;36;46m%%\033[0;5;36;42m;\033[0;1;33;47mX\033[0;5;37;46m8\033[0;5;37;42m8\033[0;5;33;43m \033[0;5;36;46m8\033[0;1;34;46m8\033[0;1;30;45m8\033[0;34;45m8\033[0;1;30;45m8\033[0;5;34;44m.\033[0;1;30;45m8\033[0;5;34;40m@\033[0;34;40mS:\033[0;32;40m;\033[0;34;40m: \033[0;32;40m \033[0m %s%s\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m.\033[0;31;40m;\033[0;5;36;40m8\033[0;1;36;46mt\033[0;5;36;42m.\033[0;1;33;47m@\033[0;5;36;42m \033[0;1;36;46m@X\033[0;5;36;46mX\033[0;1;36;46mS\033[0;1;30;46mX\033[0;5;34;44m8\033[0;5;35;40m;\033[0;1;30;44mS\033[0;34;40m \033[0;32;40m.\033[0;34;40m.\033[0;31;40m \033[0;34;40m \033[0;32;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m .\033[0;1;30;40mX\033[0;1;30;46m@\033[0;1;36;46m%%\033[0;5;36;42mt\033[0;5;37;43m@\033[0;1;32;47m8\033[0;5;36;46m;\033[0;1;36;46m%%S\033[0;1;30;46m@t\033[0;5;36;40m8\033[0;34;40m. \033[0;31;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m :;\033[0;5;32;40m8\033[0;1;30;46mS\033[0;32;46m8\033[0;5;32;42m.\033[0;1;32;43m8\033[0;5;37;42m88\033[0;1;36;46mX\033[0;1;30;46m.\033[0;5;36;40mX\033[0;30;44m8\033[0;31;40m:\033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;31;40m \033[0;34;40m \033[0;32;40m;\033[0;5;32;40m8\033[0;5;36;40m8\033[0;32;46m8\033[0;5;36;40mt \033[0;1;30;46m8\033[0;5;35;44m8\033[0;37;45m@\033[0;5;35;44m%%\033[0;5;35;40m8\033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;32;40m \033[0;31;40m \033[0;34;40m .\033[0;31;40m \033[0;5;34;40mX\033[0;1;30;45m8\033[0;34;45m8\033[0;1;30;45m8\033[0;5;34;44m8\033[0;1;30;45m8\033[0;1;35;47m8\033[0;5;36;44m8\033[0;1;30;40m8\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;31;40m \033[0;30;44m8\033[0;1;34;45m88\033[0;1;30;45m8\033[0;5;35;44m%%\033[0;1;34;45m8\033[0;5;35;44m;\033[0;5;37;45m8\033[0;34;45m@\033[0;34;40m@\033[0;32;40m.\033[0;31;40m.\033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;32;40m \033[0;34;40m \033[0;31;40m :\033[0;5;35;40m8\033[0;1;34;45m8\033[0;1;30;45m8\033[0;5;35;44m%%\033[0;37;45m@\033[0;5;35;44m:\033[0;5;35;45mS\033[0;5;35;44m%%\033[0;35;47m8\033[0;1;30;44m8\033[0;31;40m.\033[0;34;40m.\033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;30;44m8\033[0;1;34;45m888\033[0;5;37;45m@\033[0;35;47m8\033[0;5;35;44mt\033[0;35;47m8\033[0;5;35;44mt\033[0;5;35;45m;\033[0;30;44m8\033[0;32;40m;\033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;31;40m.\033[0;1;30;40m8\033[0;5;37;45m@\033[0;5;35;44m:\033[0;1;30;45m8\033[0;5;34;44m \033[0;5;35;45m \033[0;1;34;44m8\033[0;1;35;45m.\033[0;5;34;40mX\033[0;34;40m@\033[0;32;40mS\033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;31;40m \033[0;34;40m.;\033[0;1;30;40m8\033[0;1;30;44m8\033[0;34;40m8\033[0;5;34;40m8\033[0;32;40m%%\033[0;34;40m8;\033[0;32;40m;\033[0;31;40m.\033[0;32;40m \033[0;31;40m \033[0;34;40m \033[0m\n\r"
"\033[0;34;40m \033[0;31;40m \033[0;34;40m \033[0;32;40m .\033[0;31;40m .:\033[0;32;40m.\033[0;31;40m.\033[0;32;40m.\033[0;31;40m.\033[0;32;40m.\033[0;31;40m \033[0;32;40m \033[0;34;40m \033[0m\n\r",
"\033[0;36mOS\033[0m: KolibriOS", "\033[0;36mKernel\033[0m: ", str_krnl_ver, "\033[0;36mUptime\033[0m: ", str_uptime, "\033[0;36mResolution\033[0m: ", str_resolution, "\033[0;36mCPU\033[0m: ", str_cpu_info, "\033[0;36mMemory\033[0m: ", str_meminfo);
 
free(str_krnl_ver);
free(str_uptime);
free(str_resolution);
free(str_cpu_info);
free(str_meminfo);
return TRUE;
}
/programs/system/shell/cmd/cmd_kill.c
1,31 → 1,24
 
 
int cmd_kill(char param[])
{
 
unsigned process;
int result;
int i;
 
if ( strlen(param) == 0 )
{
printf(" kill <PID>\n\r");
if ( strlen(param) == 0 ) {
printf(CMD_KILL_USAGE);
return TRUE;
}
 
if (!strcmp(param, "all"))
{
for (i = 2;i<256;i++)
{
if (!strcmp(param, "all")) {
for (i = 2;i<256;i++) {
kol_kill_process(i);
}
return TRUE;
}
else
{
process = _atoi(param);
if ( 0 != process )
{
else {
process = atoi(param);
if ( 0 != process ) {
result = kol_process_kill_pid(process);
if (result < 0)
return FALSE;
/programs/system/shell/cmd/cmd_ls.c
1,6 → 1,5
 
int cmd_ls(char dir[])
{
int cmd_ls(char dir[]) {
 
kol_struct70 k70;
unsigned *n;
/programs/system/shell/cmd/cmd_mkdir.c
1,24 → 1,15
 
int cmd_mkdir(char dir[])
{
 
int cmd_mkdir(char dir[]) {
char temp[FILENAME_MAX];
kol_struct70 k70;
unsigned result;
 
if (NULL == dir)
{
#if LANG_ENG
printf(" mkdir <directory>\n\r");
#elif LANG_RUS
printf(" mkdir <¤¨à¥ªâ®à¨ï>\n\r");
#endif
if (NULL == dir) {
printf(CMD_MKDIR_USAGE);
return TRUE;
}
 
 
if ( 0 == strcmp(dir, ".") || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
{
if ( 0 == strcmp(dir, ".") || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) {
return FALSE;
}
 
31,8 → 22,7
 
if ( '/' == dir[0])
k70.p21 = dir;
else
{
else {
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
/programs/system/shell/cmd/cmd_more.c
1,22 → 1,16
 
int cmd_more(char file[])
{
int cmd_more(char file[]) {
 
kol_struct70 k70;
kol_struct_BDVK bdvk;
unsigned result, i;
unsigned long long filesize, pos;
char buf[81]; //¡ãä¥à
char buf[81]; //����
char temp[FILENAME_MAX];
unsigned flags;
 
if (strlen(file)<1)
{
#if LANG_ENG
printf (" more <filename>\n\r");
#elif LANG_RUS
printf (" more <¨¬ï ä ©« >\n\r");
#endif
if (strlen(file)<1) {
printf (CMD_MORE_USAGE);
return TRUE;
}
 
51,11 → 45,11
k70.p20 = 0;
k70.p21 = temp;
 
result = kol_file_70(&k70); // ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ® ä ©«¥
result = kol_file_70(&k70); // ����砥� ���ଠ�� � 䠩��
if ( 0 != result )
return FALSE;
 
filesize = bdvk.p32; // ¯®«ãç ¥¬ à §¬¥à ä ©« 
filesize = bdvk.p32; // ����砥� ࠧ��� 䠩��
 
buf[80]=0;
flags = con_get_flags();
73,7 → 67,7
k70.p20 = 0;
k70.p21 = temp;
 
result = kol_file_70(&k70); // ç⥭¨¥ 80 ᨬ¢®«®¢
result = kol_file_70(&k70); // �⥭�� 80 ᨬ�����
for (i=0; i<80; i++)
{
 
/programs/system/shell/cmd/cmd_mv.c
24,11 → 24,7
 
if (argc != 2)
{
#if LANG_ENG
printf(" mv <file_in> <file_out>\n\r");
#elif LANG_RUS
printf(" mv <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r");
#endif
printf(CMD_MV_USAGE);
parameters_free(argc, argv);
return TRUE;
}
/programs/system/shell/cmd/cmd_pkill.c
1,3 → 1,4
 
int cmd_pkill(char param[])
{
int i=1, n=0; int process_count=0;
4,21 → 5,8
char *buf1k=NULL;
unsigned PID=0;
#ifdef LANG_RUS
#define PKILL_HELP " pkill <¨¬ï_¯à®æ¥áá >\n\r"
#define PKILL_KILL " PID: %u - 㡨â\n"
#define PKILL_NOT_KILL " PID: %u - ­¥ 㡨â\n"
#define PKILL_NOT_FOUND " à®æ¥áᮢ á â ª¨¬ ¨¬¥­¥¬ ­¥ ­ ©¤¥­®!\n"
#else
#define PKILL_HELP " pkill <process_name>\n\r"
#define PKILL_KILL " PID: %u - killed\n"
#define PKILL_NOT_KILL " PID: %u - not killed\n"
#define PKILL_NOT_FOUND " No processes with this name were found!\n"
#endif
 
 
if(!strlen(param)){
printf(PKILL_HELP);
printf(CMD_PKILL_HELP);
return TRUE;
}
32,9 → 20,9
if(!strnicmp(buf1k+10, param, 10)){
memcpy(&PID, buf1k+30 ,sizeof(unsigned));
if(kol_process_kill_pid(PID)){
printf(PKILL_NOT_KILL, PID);
printf(CMD_PKILL_NOT_KILL, PID);
}else{
printf(PKILL_KILL, PID);
printf(CMD_PKILL_KILL, PID);
}
process_count++;
}
42,7 → 30,7
}
 
if(!process_count){
printf(PKILL_NOT_FOUND);
printf(CMD_PKILL_NOT_FOUND);
}
 
free(buf1k);
/programs/system/shell/cmd/cmd_ps.c
15,18 → 15,14
 
printf (" PID NAME RAM KB\n\r", PID, buf1k+10);
 
for (i = 1;;i++)
{
for (i = 1;;i++) {
n = kol_process_info(i, buf1k);
memcpy(&PID, buf1k+30 ,sizeof(unsigned));
STATE = *(buf1k+50);
if (9 != STATE)
{
if (!sel || 0 == strnicmp(param, buf1k+10, 10))
{
if (9 != STATE) {
if (!sel || 0 == strnicmp(param, buf1k+10, 10)) {
printf (" %7u %11s %d\n\r", PID, buf1k+10, (*(int*)(buf1k+26)+1)/1024);
if (sel)
{
if (sel) {
LAST_PID = PID;
int cpu_tck = kol_system_cpufreq() / 100;
printf (" CPU %d%% RAM %d\n\r", *(int*)buf1k / cpu_tck , *(int*)(buf1k+26)+1);
/programs/system/shell/cmd/cmd_pwd.c
1,6 → 1,5
 
int cmd_pwd(char param[])
{
int cmd_pwd(char param[]) {
printf (" %s%c\n\r", cur_dir, cur_dir[strlen(cur_dir)-1]=='/'?' ':'/' );
return TRUE;
}
/programs/system/shell/cmd/cmd_reboot.c
1,6 → 1,5
 
int cmd_reboot(char param[])
{
int cmd_reboot(char param[]) {
if (!strcmp(param, "kernel"))
kol_system_end(4);
else
/programs/system/shell/cmd/cmd_ren.c
1,6 → 1,5
 
int cmd_ren(char param[])
{
int cmd_ren(char param[]) {
char* argv[100];
int argc;
/*
9,19 → 8,14
*/
 
argc = parameters_prepare(param, argv);
if (argc != 2)
{
#if LANG_ENG
printf(" ren <file> <new_name>\n\r");
#elif LANG_RUS
printf(" ren <ä ©«> <­®¢®¥_¨¬ï>\n\r");
#endif
if (argc != 2) {
printf(CMD_REN_USAGE);
parameters_free(argc, argv);
return TRUE;
}
char *x;
if (x = strrchr(argv[1], '/') != 0) // argv[1] must be file name, not path
{
//char *x;
// argv[1] must be file name, not path
if (strrchr(argv[1], '/') != NULL) {
//printf("%d %s", x, argv[1]);
return FALSE;
}
/programs/system/shell/cmd/cmd_rm.c
1,18 → 1,12
 
int cmd_rm(char file[])
{
int cmd_rm(char file[]) {
 
kol_struct70 k70;
char temp[FILENAME_MAX];
unsigned result;
 
if (NULL == file || strlen(file) == 0)
{
#if LANG_ENG
printf (" rm <filename>\n\r");
#elif LANG_RUS
printf (" rm <¨¬ï ä ©« >\n\r");
#endif
if (NULL == file || strlen(file) == 0) {
printf (CMD_RM_USAGE);
return TRUE;
}
 
/programs/system/shell/cmd/cmd_rmdir.c
1,23 → 1,15
 
int cmd_rmdir(char dir[])
{
 
int cmd_rmdir(char dir[]) {
char temp[FILENAME_MAX];
kol_struct70 k70;
unsigned result;
 
if (NULL == dir || strlen(dir) == 0)
{
#if LANG_ENG
printf(" rmdir <directory>\n\r");
#elif LANG_RUS
printf(" rmdir <¤¨à¥ªâ®à¨ï>\n\r");
#endif
if (NULL == dir || strlen(dir) == 0) {
printf(CMD_RMDIR_USAGE);
return TRUE;
}
 
if ( ( 0 == strcmp(dir, ".") ) || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
{
if ( ( 0 == strcmp(dir, ".") ) || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) {
return FALSE;
}
 
30,8 → 22,7
 
if ( '/' == dir[0])
k70.p21 = dir;
else
{
else {
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
/programs/system/shell/cmd/cmd_shutdown.c
1,6 → 1,5
 
int cmd_shutdown(char param[])
{
int cmd_shutdown(char param[]) {
kol_system_end(2);
return TRUE;
}
/programs/system/shell/cmd/cmd_sleep.c
1,19 → 1,11
 
int cmd_sleep(char param[])
{
int cmd_sleep(char param[]) {
int delay;
 
if (!strlen(param))
{
#if LANG_ENG
printf(" sleep <time in the 1/100 of second>\n\r");
#elif LANG_RUS
printf(" sleep <¨­â¥à¢ « ¢ á®âëå ¤®«ïx ᥪ㭤ë>\n\r");
#endif
if (!strlen(param)) {
printf(CMD_SLEEP_USAGE);
return TRUE;
}
 
delay = _atoi(param);
delay = atoi(param);
kol_sleep((unsigned)delay);
return TRUE;
}
/programs/system/shell/cmd/cmd_touch.c
1,28 → 1,20
 
int cmd_touch(char file[])
{
 
kol_struct70 k70;
char temp[FILENAME_MAX];
unsigned result;
 
if (NULL == file || strlen(file) == 0)
{
#if LANG_ENG
printf(" touch <filename>\n\r");
#elif LANG_RUS
printf(" touch <¨¬ï ä ©« >\n\r");
#endif
if (NULL == file || strlen(file) == 0) {
printf(CMD_TOUCH_USAGE);
return TRUE;
}
 
if ( ( 0 == strcmp(file, ".") ) || ( 0 == strcmp(file, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
{
if ( ( 0 == strcmp(file, ".") ) || ( 0 == strcmp(file, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) {
return FALSE;
}
 
if ( '/' == file[0])
{
if ( '/' == file[0]) {
strcpy(temp, file);
 
if ( !file_check(temp) )
29,9 → 21,7
k70.p00 = 2;
else
k70.p00 = 3;
}
else
{
} else {
strcpy(temp, cur_dir);
if (temp[strlen(temp)-1] != '/')
strcat(temp, "/"); // add slash
/programs/system/shell/cmd/cmd_uptime.c
1,6 → 1,5
 
int cmd_uptime(char param[])
{
void get_str_uptime(char *str, const char *fmt) {
unsigned time_tick, up_days, up_hours, up_minutes, up_seconds, up_millisecs;
 
time_tick = kol_time_tick();
10,11 → 9,12
up_seconds = (time_tick/100)%60;
up_millisecs = (time_tick*10)%100;
 
#if LANG_ENG
printf (" Uptime: %d day(s), %d:%d:%d.%d\n\r", up_days, up_hours, up_minutes, up_seconds, up_millisecs);
#elif LANG_RUS
printf (" Uptime: %d ¤­¥©, %d:%d:%d.%d\n\r", up_days, up_hours, up_minutes, up_seconds, up_millisecs);
#endif
sprintf (str, fmt, up_days, up_hours, up_minutes, up_seconds, up_millisecs);
}
 
int cmd_uptime(char param[]) {
get_str_uptime(tmpstr, CMD_UPTIME_FMT);
printf(tmpstr);
return TRUE;
}
 
/programs/system/shell/cmd/cmd_ver.c
1,9 → 1,5
 
int cmd_ver(char param[])
{
 
if (!strcmp(param, "kernel"))
{
void get_str_kernel_version(char *str, const char *fmt) {
char *kvbuf;
char *vA, *vB, *vC, *vD;
unsigned *Rev;
16,24 → 12,14
vD = kvbuf+3;
Rev = (unsigned*)(kvbuf + 5);
 
#if LANG_ENG
printf (" KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r", *vA, *vB, *vC, *vD, *Rev);
#elif LANG_RUS
printf (" KolibriOS v%d.%d.%d.%d. SVN-ॢ. ï¤à : %d\n\r", *vA, *vB, *vC, *vD, *Rev);
#endif
sprintf (str, fmt, *vA, *vB, *vC, *vD, *Rev);
 
free(kvbuf);
 
return TRUE;
}
 
if (!strcmp(param, "cpu"))
{
void get_str_cpu_info(char *str) {
unsigned a, b, c, d;
char str[13];
 
str[12] = '\0';
 
asm ("cpuid" :
"=a" (a),
"=b" (b),
55,12 → 41,23
str[9] = (c&0x0000ff00) >> 8;
str[10] = (c&0x00ff0000) >> 16;
str[11] = (c&0xff000000) >> 24;
str[12] = '\0';
}
 
int cmd_ver(char param[]) {
if (!strcmp(param, "kernel")) {
get_str_kernel_version(tmpstr, CMD_VER_FMT1);
printf(tmpstr);
return TRUE;
}
 
if (!strcmp(param, "cpu")) {
char str[13];
get_str_cpu_info(str);
printf("%s\n\r", str);
return TRUE;
}
 
 
printf (" Shell v%s\n\r", SHELL_VERSION);
return TRUE;
}
/programs/system/shell/cmd/cmd_waitfor.c
1,8 → 1,6
 
int cmd_waitfor(char param[])
// waits for LASTPID or pid in param
{
 
/* waits for LASTPID or pid in param */
int cmd_waitfor(char param[]) {
int i, n, sel, sel_pid;
char *buf1k;
unsigned PID;
10,27 → 8,19
 
sel = param && strlen(param) > 0;
sel_pid = LAST_PID;
if (sel)
{
sel_pid = _atoi(param);
if (sel) {
sel_pid = atoi(param);
}
if (0 == sel_pid)
return FALSE;
if (0 == sel_pid) return FALSE;
 
#if LANG_ENG
printf(" Awaing finish PID %d\n\r", sel_pid);
#elif LANG_RUS
printf(" Ž¦¨¤ ¥¬ § ¢¥à襭¨ï PID %d\n\r", sel_pid);
#endif
printf(CMD_WAITFOR_FMT, sel_pid);
 
buf1k = malloc(1024);
if (NULL == buf1k)
return FALSE;
 
while(1)
{
for (i = 1;;i++)
{
while(1) {
for (i = 1;;i++) {
n = kol_process_info(i, buf1k);
PID = *(buf1k+30);
STATE = *(buf1k+50);
/programs/system/shell/globals.h
1,9 → 1,10
 
#define SHELL_VERSION "0.8.1"
#define SHELL_VERSION "0.8.2"
 
extern char PATH[256];
extern char PARAM[256];
char cmdline[256];
 
char tmpstr[64];
 
char title[64];
char cur_dir[FILENAME_MAX];
 
67,6 → 68,7
int cmd_uptime(char param[]);
int cmd_killall(char process_name[]);
int cmd_history(char arg[]);
int cmd_kfetch(char param[]);
int cmd_cp(char param[]);
int cmd_mv(char param[]);
int cmd_ren(char param[]);
/programs/system/shell/locale/eng/globals.h
14,6 → 14,7
{"free", " Displays total, free and used memory\n\r", &cmd_memory},
{"help", " Gives help on commands. Usage:\n\r help ;it lists all builtins\n\r help <command> ;help on command\n\r", &cmd_help},
{"history", " Lists used commands\n\r", &cmd_history},
{"kfetch", " Prints logo and information about system.\n\r", &cmd_kfetch},
{"kill", " Stops a running process. Usage:\n\r kill <PID of process>\n\r kill all\n\r", &cmd_kill},
{"pkill", " Kills all processes by name. Usage:\n\r pkill <process_name>\n\r", &cmd_pkill},
{"ls", " Lists the files in a directory. Usage:\n\r ls ;lists the files in current directory\n\r ls <directory> ;lists the files at specified folder\n\r ls -1 ;lists the files in a single column\n\r", &cmd_ls},
32,3 → 33,35
{"waitfor", " Stops console waiting while process finish. Usage:\n\r waitfor ;waiting previous started executable LASTPID\n\r waitfor <PID>;awaiting PID finish\n\r", &cmd_waitfor},
};
 
#define CMD_ABOUT_MSG "Shell %s\n\r"
#define CMD_CD_USAGE " cd <directory>\n\r"
#define CMD_CP_USAGE " cp <file_in> <file_out>\n\r"
#define CMD_DATE_DATE_FMT " Date [dd.mm.yy]: %x%x.%x%x.%x%x"
#define CMD_DATE_TIME_FMT "\n\r Time [hh:mm:ss]: %x%x:%x%x:%x%x\n\r"
#define CMD_FREE_FMT " Total [kB / MB / %%]: %-7d / %-5d / 100\n\r Free [kB / MB / %%]: %-7d / %-5d / %d\n\r Used [kB / MB / %%]: %-7d / %-5d / %d\n\r"
#define CMD_HELP_AVAIL " %d commands available:\n\r"
#define CMD_HELP_CMD_NOT_FOUND " Command \'%s\' not found.\n\r"
 
#define CMD_KILL_USAGE " kill <PID>\n\r"
#define CMD_MKDIR_USAGE " mkdir <directory>\n\r"
#define CMD_MORE_USAGE " more <filename>\n\r"
#define CMD_MV_USAGE " mv <file_in> <file_out>\n\r"
 
#define CMD_PKILL_HELP " pkill <process_name>\n\r"
#define CMD_PKILL_KILL " PID: %u - killed\n"
#define CMD_PKILL_NOT_KILL " PID: %u - not killed\n"
#define CMD_PKILL_NOT_FOUND " No processes with this name were found!\n"
 
#define CMD_REN_USAGE " ren <file> <new_name>\n\r"
#define CMD_RM_USAGE " rm <filename>\n\r"
#define CMD_RMDIR_USAGE " rmdir <directory>\n\r"
#define CMD_SLEEP_USAGE " sleep <time in the 1/100 of second>\n\r"
#define CMD_TOUCH_USAGE " touch <filename>\n\r"
#define CMD_UPTIME_FMT " Uptime: %d day(s), %d:%d:%d.%d\n\r"
#define CMD_VER_FMT1 " KolibriOS v%d.%d.%d.%d. Kernel SVN-rev.: %d\n\r"
#define CMD_WAITFOR_FMT " Awaing finish PID %d\n\r"
#define EXEC_STARTED_FMT " '%s' started. PID = %d\n\r"
#define EXEC_SCRIPT_ERROR_FMT "Error in '%s' : script must start with #SHS line\n\r"
#define UNKNOWN_CMD_ERROR " Error!\n\r"
#define CON_APP_ERROR " Error in console application.\n\r"
#define FILE_NOT_FOUND_ERROR " File '%s' not found.\n\r"
/programs/system/shell/locale/rus/globals.h
1,3 → 1,4
/* WARNING: SAVE ONLY IN CP866 ENCODING! */
 
const command_t COMMANDS[]=
{
14,6 → 15,7
{"free", " ®ª §ë¢ ¥â ®¡êñ¬ ®¯¥à â¨¢­®© ¯ ¬ïâ¨: ¢á¥©, ᢮¡®¤­®© ¨ ¨á¯®«ì§ã¥¬®©\n\r", &cmd_memory},
{"help", " ‘¯à ¢ª  ¯® ª®¬ ­¤ ¬. ˆá¯®«ì§®¢ ­¨¥:\n\r help ;ᯨ᮪ ¢á¥å ª®¬ ­¤\n\r help <ª®¬ ­¤ > ;á¯à ¢ª  ¯® ª®¬ ­¤¥\n\r", &cmd_help},
{"history", " ‘¯¨á®ª ¨á¯®«ì§®¢ ­­ëå ª®¬ ­¤\n\r", &cmd_history},
{"kfetch", " ¥ç â ¥â «®£® ¨ ¨­ä®à¬ æ¨î ® á¨á⥬¥.\n\r", &cmd_kfetch},
{"kill", " “¡¨¢ ¥â ¯à®æ¥áá. ˆá¯®«ì§®¢ ­¨¥:\n\r kill <PID ¯à®æ¥áá >\n\r kill all\n\r", &cmd_kill},
{"pkill", " “¡¨¢ ¥â ¢á¥ ¯à®æ¥ááë ¯® ¨¬¥­¨. ˆá¯®«ì§®¢ ­¨¥:\n\r pkill <¨¬ï_¯à®æ¥áá >\n\r", &cmd_pkill},
{"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ­¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ­­®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls},
32,3 → 34,34
{"waitfor", " à¨®áâ ­ ¢«¨¢ ¥â ¢ë¯®«­¥­¨¥ ª®¬ ­¤. ˆá¯®«ì§®¢ ­¨¥:\n\r waitfor ;®¦¨¤ ¥¬ ¯à¥¤ë¤ã騩 § ¯ã饭­ë© ¯à®æ¥áá LASTPID\n\r waitfor <PID>;¦¤¥¬ § ¢¥à襭¨ï ¯à®æ¥áá  á 㪠§ ­­ë¬ PID\n\r", &cmd_waitfor},
};
 
#define CMD_ABOUT_MSG "Shell %s\n\r"
#define CMD_CD_USAGE " cd <¤¨à¥ªâ®à¨ï>\n\r"
#define CMD_CP_USAGE " cp <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r"
#define CMD_DATE_DATE_FMT " „ â  [¤¤.¬¬.££]: %x%x.%x%x.%x%x"
#define CMD_DATE_TIME_FMT "\n\r ‚६ï [çç:¬¬:áá]: %x%x:%x%x:%x%x\n\r"
#define CMD_FREE_FMT " ‚ᥣ® [Š / Œ / %%]: %-7d / %-5d / 100\n\r ‘¢®¡®¤­® [Š / Œ / %%]: %-7d / %-5d / %d\n\r ˆá¯®«ì§ã¥âáï [Š / Œ / %%]: %-7d / %-5d / %d\n\r"
#define CMD_HELP_AVAIL " Š®«¨ç¥á⢮ ¤®áâ㯭ëå ª®¬ ­¤: %d\n\r"
#define CMD_HELP_CMD_NOT_FOUND " Š®¬ ­¤  \'%s\' ­¥ ­ ©¤¥­ .\n\r"
 
#define CMD_KILL_USAGE " kill <PID>\n\r"
#define CMD_MKDIR_USAGE " mkdir <¤¨à¥ªâ®à¨ï>\n\r"
#define CMD_MORE_USAGE " more <¨¬ï ä ©« >\n\r"
#define CMD_MV_USAGE " mv <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r"
#define CMD_PKILL_HELP " pkill <¨¬ï ¯à®æ¥áá >\n\r"
#define CMD_PKILL_KILL " PID: %u - 㡨â\n"
#define CMD_PKILL_NOT_KILL " PID: %u - ­¥ 㡨â\n"
#define CMD_PKILL_NOT_FOUND " à®æ¥áᮢ á â ª¨¬ ¨¬¥­¥¬ ­¥ ­ ©¤¥­®!\n"
 
#define CMD_REN_USAGE " ren <ä ©«> <­®¢®¥ ¨¬ï>\n\r"
#define CMD_RM_USAGE " rm <¨¬ï ä ©« >\n\r"
#define CMD_RMDIR_USAGE " rmdir <¤¨à¥ªâ®à¨ï>\n\r"
#define CMD_SLEEP_USAGE " sleep <¨­â¥à¢ « ¢ á®âëå ¤®«ïx ᥪ㭤ë>\n\r"
#define CMD_TOUCH_USAGE " touch <¨¬ï ä ©« >\n\r"
#define CMD_UPTIME_FMT " Uptime: %d ¤­¥©, %d:%d:%d.%d\n\r"
#define CMD_VER_FMT1 " KolibriOS v%d.%d.%d.%d. SVN-ॢ. ï¤à : %d\n\r"
#define CMD_WAITFOR_FMT " Ž¦¨¤ ¥¬ § ¢¥à襭¨ï PID %d\n\r"
#define EXEC_STARTED_FMT " '%s' § ¯ã饭. PID = %d\n\r"
#define EXEC_SCRIPT_ERROR_FMT "Žè¨¡ª  ¢ '%s' : áªà¨¯â ¤®«¦¥­ ­ ç¨­ âìáï á® áâà®çª¨ #SHS\n\r"
#define UNKNOWN_CMD_ERROR " Žè¨¡ª !\n\r"
#define CON_APP_ERROR " Žè¨¡ª  ¢ ª®­á®«ì­®¬ ¯à¨«®¦¥­¨¨.\n\r"
#define FILE_NOT_FOUND_ERROR " ” ©« '%s' ­¥ ­ ©¤¥­.\n\r"
/programs/system/shell/modules/module_command.c
1,9 → 1,5
 
/// ===========================================================
 
void command_history_add()
{
 
void command_history_add() {
int i;
 
if ('\0' == CMD[0]) return;
23,8 → 19,8
CMD_HISTORY_NUM_REAL++;
 
}
// ============================================================
 
 
char * insert_string( char s1[], unsigned int pos, const char s2[] )
{
unsigned int n1 = strlen( s1 );
48,8 → 44,8
return s1;
}
 
/// ===========================================================
 
 
void command_get()
{
unsigned key;
63,14 → 59,11
char* clipBuf; // clipboard buffer
char clipCopy[255+12];
 
for (;;)
{
for (;;) {
key = getch();
if ( 0 != (key & 0xff) )
{
if ( 0 != (key & 0xff) ) {
key &= 0xff;
switch (key)
{
switch (key) {
case 27: // ESC
for (i = cmdPos; i < cmdLen; i++)
printf(" ");
113,10 → 106,10
case 22: // Ctrl+V
clipNum = kol_clip_num();
clipNum = _ksys_clip_num();
if (clipNum > 0)
{
clipBuf = kol_clip_get(clipNum-1);
clipBuf = _ksys_clip_get(clipNum-1);
// printf("Length: %d, Type: %d, Encoding: %d\n", (int) *clipBuf, (int)*(clipBuf+4), (int)*(clipBuf+8));
if ( (int) *clipBuf > 0 ) // is clipboard empty?
{
155,7 → 148,7
for (i = 0; i <= cmdLen; i++)
*(clipCopy+12+i) = CMD[i];
kol_clip_set(12+cmdLen, clipCopy);
_ksys_clip_set(12+cmdLen, clipCopy);
}
break;
164,8 → 157,8
default:
if (cmdLen < 255)
{
if ( kol_key_control() & 0x40 ) // ¥á«¨ ¢ª«îçñ­ CapsLock
if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // ¥á«¨ ­ ¦ âë è¨äâë
if ( kol_key_control() & 0x40 ) // �᫨ ������ CapsLock
if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // �᫨ ������ ����
key = tolower(key);
else
key = toupper(key);
298,14 → 291,13
case 0: // console window closed
cmd_exit(NULL);
 
}
} // switch end
} // if end
} // for end
 
}
}
 
}
 
/// ===========================================================
 
int command_get_cmd(char cmd[])
{
353,12 → 345,12
}
}
 
/// ===========================================================
 
 
typedef int (*handler1_t)(char* arg);
 
/// ===========================================================
 
 
void command_execute()
{
char cmd[256];
376,26 → 368,17
strcpy(args, CMD+arg);
trim(args);
 
for (i = 0; i < NUM_OF_CMD; i++)
{
if (!strcmp(cmd, COMMANDS[i].name))
{
for (i = 0; i < NUM_OF_CMD; i++) {
if (!strcmp(cmd, COMMANDS[i].name)) {
result = ((handler1_t)COMMANDS[i].handler)(args);
if (result == FALSE)
{
#if LANG_ENG
printf(" Error!\n\r");
#elif LANG_RUS
printf(" Žè¨¡ª !\n\r");
#endif
if (result == FALSE) {
printf(UNKNOWN_CMD_ERROR);
}
return;
}
}
 
 
if ( -1 != alias_search(CMD) )
{
if ( -1 != alias_search(CMD) ) {
strcpy(CMD, ALIASES+64*1024+256*alias_search(CMD));
command_execute();
return;
404,6 → 387,3
executable_run(cmd, args);
 
}
 
/// ===========================================================
 
/programs/system/shell/modules/module_executable.c
1,9 → 1,5
 
/// ===========================================================
 
int executable_run(char cmd[], char args[])
{
 
int executable_run(char cmd[], char args[]) {
char exec[FILENAME_MAX];
int result;
 
15,9 → 11,7
file_not_found(cmd);
return FALSE;
}
}
else
{
} else {
strcpy(exec, cur_dir); // check file in current directory
if (exec[strlen(exec)-1] != '/')
strcat(exec, "/"); // add slash
39,31 → 33,19
 
// try to run as a program
result = program_run(exec, args);
if (result > 0)
{
if ( !program_console(result) )
{
if (result > 0) {
if ( !program_console(result) ) {
LAST_PID = result;
#if LANG_ENG
printf (" '%s' started. PID = %d\n\r", cmd, result);
#elif LANG_RUS
printf (" '%s' § ¯ã饭. PID = %d\n\r", cmd, result);
#endif
printf (EXEC_STARTED_FMT, cmd, result);
}
return TRUE;
}
else
{
} else {
if ( script_check(exec) ) // if file is a valid script
{
return script_run(exec, args);
} else
{
#if LANG_ENG
printf ("Error in '%s' : script must start with #SHS line\n\r", cmd);
#elif LANG_RUS
printf ("Žè¨¡ª  ¢ '%s' : áªà¨¯â ¤®«¦¥­ ­ ç¨­ âìáï á® áâà®çª¨ #SHS\n\r", cmd);
#endif
printf (EXEC_SCRIPT_ERROR_FMT, cmd);
return FALSE;
}
}
70,5 → 52,3
 
}
 
/// ===========================================================
 
/programs/system/shell/modules/module_parameters.c
1,9 → 1,5
 
/// ===========================================================
 
int parameters_prepare(char *param, char* argv[])
{
 
int parameters_prepare(char *param, char* argv[]) {
int i, param_len;
int argc = 1;
int quote = 0;
16,16 → 12,11
argv[0] = (char*) malloc(4096);
 
argv_len = 0;
for (i = 0; i < param_len; i++)
{
switch (param[i])
{
 
for (i = 0; i < param_len; i++) {
switch (param[i]) {
case '\\':
if (param[i+1]!='\0')
{
switch(param[i+1])
{
if (param[i+1]!='\0') {
switch(param[i+1]) {
 
case 'n':
argv[argc-1][argv_len] = '\n';
56,8 → 47,7
case '"':
if (quote == 0)
quote = 1;
else
{
else {
quote = 0;
argv[argc-1][argv_len] = '\0';
argc++;
69,12 → 59,9
 
case 9:
case 32:
if (quote == 0)
{
if ( ( param[i+1] != 32) || ( param[i+1] != 9) )
{
if (argv_len != 0)
{
if (quote == 0) {
if ( ( param[i+1] != 32) || ( param[i+1] != 9) ) {
if (argv_len != 0) {
argv[argc-1][argv_len] = '\0';
argc++;
argv[argc-1] = (char*) malloc(4096);
82,27 → 69,22
argv_len = 0;
}
}
}
else
{
} else {
argv[argc-1][argv_len] = param[i];
argv_len++;
}
 
break;
 
default:
argv[argc-1][argv_len] = param[i];
argv_len++;
break;
 
};
}
}; // switch end
} // for end
 
argv[argc-1][argv_len] = '\0';
 
if ( strlen(argv[argc-1]) == 0 )
{
if ( strlen(argv[argc-1]) == 0 ) {
free(argv[argc-1]);
argc--;
}
110,17 → 92,9
return argc;
}
 
/// ===========================================================
 
void parameters_free(int argc, char* argv[])
{
 
void parameters_free(int argc, char* argv[]) {
int i;
 
for (i = 0; i < argc; i++)
free(argv[i]);
 
for (i = 0; i < argc; i++) free(argv[i]);
}
 
/// ===========================================================
 
/programs/system/shell/modules/module_program_console.c
2,9 → 2,7
#include "../program_console.h"
 
 
int program_console(int pid)
{
 
int program_console(int pid) {
char name[32];
char *buffer;
char *buf1k;
20,8 → 18,7
buffer = NULL;
buf1k = NULL;
 
for (i = 0; i < 30; i++)
{
for (i = 0; i < 30; i++) {
result = kol_buffer_open(name, SHM_OPEN | SHM_WRITE, 0, &buffer);
if (buffer != NULL)
break;
35,13 → 32,10
size = result;
 
is_end = 0;
for (;;)
{
 
for (;;) {
command = *(buffer);
switch (command)
{
switch (command) {
case SC_EXIT:
*buffer = SC_OK;
is_end = 1;
89,20 → 83,14
break;
default:
#if LANG_ENG
printf (" Error in console application.\n\r");
#elif LANG_RUS
printf (" Žè¨¡ª  ¢ ª®­á®«ì­®¬ ¯à¨«®¦¥­¨¨.\n\r");
#endif
printf (CON_APP_ERROR);
return 0;
};
if (is_end)
{
if (is_end) {
printf("\n\r");
return 1;
}
}
 
} // for end
return 9;
}
 
/programs/system/shell/modules/module_script.c
1,9 → 1,6
 
/// ===========================================================
 
int script_check(char file[])
{
 
int script_check(char file[]) {
kol_struct70 k70;
char buf[4];
 
23,11 → 20,8
return FALSE;
}
 
/// ===========================================================
 
int script_run(char exec[], char args[])
{
 
int script_run(char exec[], char args[]) {
kol_struct70 k70;
kol_struct_BDVK bdvk;
unsigned result, i;
72,7 → 66,6
 
for (;;) // script processing
{
 
if (pos > filesize)
break;
 
101,6 → 94,3
free(buf);
return TRUE;
}
 
/// ===========================================================
 
/programs/system/shell/prototypes.h
8,7 → 8,6
int iswhite(char c);
void trim(char string[]);
void execute();
void kol_main();
 
int executable_run(char cmd[], char args[]);
 
/programs/system/shell/shell.c
1,8 → 1,6
 
#include "all.h"
 
/// ===========================================================
 
int dir_check(char dir[])
/// just checks, if dir[] is really a directory
{
28,8 → 26,6
 
}
 
/// ===========================================================
 
void dir_truncate(char dir[])
{
int i;
41,7 → 37,6
break;
}
}
/// ===========================================================
 
void get_file_dir_loc(char *filepath, char *dir_path)
{
56,7 → 51,6
dir_path[pos] = '\0';
}
 
/// ===========================================================
 
int file_check(char file[])
{
79,26 → 73,14
return FALSE;
}
 
/// ===========================================================
 
void file_not_found(char file[])
{
#if LANG_ENG
printf (" File '%s' not found.\n\r", file);
#elif LANG_RUS
printf (" ” ©« '%s' ­¥ ­ ©¤¥­.\n\r", file);
#endif
void file_not_found(char file[]) {
printf (FILE_NOT_FOUND_ERROR, file);
}
 
/// ===========================================================
 
int iswhite(char c)
{
return ((' ' == c) || ('\t' == c) || (13 == c) || (10 == c));
}
int iswhite(char c) {return ((' ' == c) || ('\t' == c) || (13 == c) || (10 == c)); }
 
/// ===========================================================
 
void trim(char string[])
{
int i, j;
125,24 → 107,29
break;
}
 
/// ===========================================================
 
void kol_main()
// entry point
int main(int argc, char **argv)
{
int i; for (i = 1; i < argc; i++) {
strcat(cmdline, argv[i]);
if (i != argc - 1) {
strcat(cmdline, " ");
}
}
 
NUM_OF_CMD = sizeof(COMMANDS)/sizeof(COMMANDS[0]);
 
strcpy(title, "SHELL ");
strcat(title, SHELL_VERSION);
CONSOLE_INIT(title);
con_init_opt(-1, -1, -1, -1, title);
 
if (sizeof (kol_struct70) != 25)
{
//printf("argc = %d\ncmdline = '%s'\n", argc, cmdline);
 
if (sizeof (kol_struct70) != 25) {
printf("Invalid struct align kol_struct70, need to fix compile options\n\r");
kol_exit();
}
 
 
//strcpy(cur_dir, PATH);
//dir_truncate(cur_dir);
getcwd(cur_dir, sizeof cur_dir);
152,28 → 139,25
 
ALIASES = malloc(128*1024);
 
if (!PARAM || PARAM[0] == 0)
{
strcpy(CMD, PATH);
if (!cmdline || cmdline[0] == 0) {
strcpy(CMD, argv[0]);
dir_truncate(CMD);
strcat(CMD, ".shell");
if ( !file_check(CMD) )
strcpy(CMD, "/sys/settings/.shell");
}
else
else {
if (cmdline[0] == '/')
{
if (PARAM[0] == '/')
{
strcpy(cur_dir, PARAM);
strcpy(cur_dir, cmdline);
*(strrchr(cur_dir, '/')+1)=0;
}
strcpy(CMD, PARAM);
strcpy(CMD, cmdline);
}
 
command_execute();
 
for (;;)
{
for (;;) {
//printf("\033[32;1m");
printf ("# ");
//printf("\033[0m");
181,8 → 165,6
command_execute();
}
 
_exit(0);
con_exit(0);
kol_exit();
}
 
/// ===========================================================
/programs/system/shell/system/string.c
File deleted
/programs/system/shell/system/string.h
File deleted
/programs/system/shell/system/ctype.c
File deleted
/programs/system/shell/system/stdlib.c
File deleted
/programs/system/shell/system/stdlib.h
File deleted
/programs/system/shell/system/ctype.h
File deleted
/programs/system/shell/system/console.c
File deleted
/programs/system/shell/system/kolibri.c
354,13 → 354,13
 
 
 
void kol_screen_get_size(unsigned *w, unsigned *h)
/*void kol_screen_get_size(unsigned *w, unsigned *h)
{
unsigned size;
asm volatile ("int $0x40":"=a"(size):"a"(14));
*w = size / 65536;
*h = size % 65536;
}
}*/
 
 
 
422,7 → 422,7
asm volatile ("int $0x40"::"a"(68), "b"(23), "c"(name));
}
 
int kol_clip_num()
/*int kol_clip_num()
{
asm volatile ("int $0x40"::"a"(54), "b"(0));
}
435,7 → 435,7
int kol_clip_set(int n, char buffer[])
{
asm volatile ("int $0x40"::"a"(54), "b"(2), "c"(n), "d"(buffer));
}
}*/
 
void set_cwd(const char* cwd)
{
/programs/system/shell/system/kolibri.h
100,7 → 100,7
void kol_path_file2dir(char *dir, char *fname);
void kol_path_full(char *full, char *fname);
void kol_screen_wait_rr();
void kol_screen_get_size(unsigned *w, unsigned *h);
//void kol_screen_get_size(unsigned *w, unsigned *h);
unsigned kol_skin_height();
unsigned kol_thread_start(unsigned start, unsigned stack);
unsigned kol_time_tick();
111,9 → 111,9
int kol_kill_process(unsigned process);
int kol_buffer_open(char name[], int mode, int size, char **buf);
void kol_buffer_close(char name[]);
int kol_clip_num();
char* kol_clip_get(int n);
int kol_clip_set(int n, char buffer[]);
//int kol_clip_num();
//char* kol_clip_get(int n);
//int kol_clip_set(int n, char buffer[]);
void set_cwd(const char* cwd);
int getcwd(char *buf, unsigned size);