Shell v0.6.1. Some minor improvements.

git-svn-id: svn://kolibrios.org@3247 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Albom 2013-02-17 15:22:51 +00:00
parent 629515a9f6
commit deca8b884f
34 changed files with 162 additions and 141 deletions

View File

@ -1,172 +1,178 @@
Shell 0.6.1 // 17.02.2013 // Albom
* <20>à®áâ ï ®¡à ¡®âª  ®è¨¡®ª ¢­ãâ७­¨å ª®¬ ­¤
* Š®¬ ­¤  killall âà ­áä®à¬¨à®¢ ­  ¢ ¯ à ¬¥âà all ª®¬ ­¤ë kill
* ˆ§¬¥­¥­  ª®¤¨à®¢ª  ä ©«  History.txt á 1251 ­  866
Shell 0.6 // 16.02.2013 // Albom Shell 0.6 // 16.02.2013 // Albom
+ Добавлена возможность запускать программы, имена которых или путь к которым содержат пробелы. Имя программы (возможно с путём к ней) для этого необходимо заключать в кавычки. Т.е. наконец-то можно запустить программу из /rd/1/File managers, не переходя в неё + „®¡ ¢«¥­  ¢®§¬®¦­®áâì § ¯ã᪠âì ¯à®£à ¬¬ë, ¨¬¥­  ª®â®àëå ¨«¨ ¯ãâì ª ª®â®àë¬ á®¤¥à¦ â ¯à®¡¥«ë. ˆ¬ï ¯à®£à ¬¬ë (¢®§¬®¦­® á ¯ãâñ¬ ª ­¥©) ¤«ï í⮣® ­¥®¡å®¤¨¬® § ª«îç âì ¢ ª ¢ë窨. .¥. ­ ª®­¥æ-â® ¬®¦­® § ¯ãáâ¨âì ¯à®£à ¬¬ã ¨§ /rd/1/File managers, ­¥ ¯¥à¥å®¤ï ¢ ­¥ñ
+ Добавлена функция разделения строковой переменной на int argc, char* argv[], что означает возможность улучшения команд (обработка нескольких параметров) + „®¡ ¢«¥­  äã­ªæ¨ï à §¤¥«¥­¨ï áâப®¢®© ¯¥à¥¬¥­­®© ­  int argc, char* argv[], çâ® ®§­ ç ¥â ¢®§¬®¦­®áâì ã«ãç襭¨ï ª®¬ ­¤ (®¡à ¡®âª  ­¥áª®«ìª¨å ¯ à ¬¥â஢)
+ Добавлена команда cp (копирование файла). Принимает обязательно два параметра - имя файла-источника и имя файла-результата. Имена могут быть краткими (в текущем каталоге), так и с полным путём (должны начинаться с /). Ограничение на размер файла - 4 Гбайта + „®¡ ¢«¥­  ª®¬ ­¤  cp (ª®¯¨à®¢ ­¨¥ ä ©« ). <20>ਭ¨¬ ¥â ®¡ï§ â¥«ì­® ¤¢  ¯ à ¬¥âà  - ¨¬ï ä ©« -¨áâ®ç­¨ª  ¨ ¨¬ï ä ©« -१ã«ìâ â . ˆ¬¥­  ¬®£ãâ ¡ëâì ªà âª¨¬¨ (¢ ⥪ã饬 ª â «®£¥), â ª ¨ á ¯®«­ë¬ ¯ãâñ¬ (¤®«¦­ë ­ ç¨­ âìáï á /). Ž£à ­¨ç¥­¨¥ ­  à §¬¥à ä ©«  - 4 ƒ¡ ©â 
* Исправлена кодировка в сообщении об ошибке в консольном приложении * ˆá¯à ¢«¥­  ª®¤¨à®¢ª  ¢ á®®¡é¥­¨¨ ®¡ ®è¨¡ª¥ ¢ ª®­á®«ì­®¬ ¯à¨«®¦¥­¨¨
* Клавиши истории (вверх и вниз) поменяны между собой * Š« ¢¨è¨ ¨áâ®à¨¨ (¢¢¥àå ¨ ¢­¨§) ¯®¬¥­ï­ë ¬¥¦¤ã ᮡ®©
* Количество команд в истории увеличено с пяти до десяти * Š®«¨ç¥á⢮ ª®¬ ­¤ ¢ ¨áâ®à¨¨ 㢥«¨ç¥­® á ¯ï⨠¤® ¤¥áïâ¨
* Уменьшено количество предупреждений при компиляции * “¬¥­ì襭® ª®«¨ç¥á⢮ ¯à¥¤ã¯à¥¦¤¥­¨© ¯à¨ ª®¬¯¨«ï樨
* Команда ccpuid преобразована в параметр cpu команды ver * Š®¬ ­¤  ccpuid ¯à¥®¡à §®¢ ­  ¢ ¯ à ¬¥âà cpu ª®¬ ­¤ë ver
* Исправления в пакетных файлах сборки * ˆá¯à ¢«¥­¨ï ¢ ¯ ª¥â­ëå ä ©« å ᡮન
+ Добавлен пример консольного приложения на ассемблере и пакетный файл для его сборки + „®¡ ¢«¥­ ¯à¨¬¥à ª®­á®«ì­®£® ¯à¨«®¦¥­¨ï ­   áᥬ¡«¥à¥ ¨ ¯ ª¥â­ë© ä ©« ¤«ï ¥£® ᡮન
Shell 0.5.4 // 04.06.2012 // Albom Shell 0.5.4 // 04.06.2012 // Albom
======================================= =======================================
* Исправлен интерфейс исполняемых консольных приложений. Теперь они должны создавать буфер с именем pid-SHELL, где pid - идентификатор процесса без заглавных нулей * ˆá¯à ¢«¥­ ¨­â¥àä¥©á ¨á¯®«­ï¥¬ëå ª®­á®«ì­ëå ¯à¨«®¦¥­¨©. ’¥¯¥àì ®­¨ ¤®«¦­ë ᮧ¤ ¢ âì ¡ãä¥à á ¨¬¥­¥¬ pid-SHELL, £¤¥ pid - ¨¤¥­â¨ä¨ª â®à ¯à®æ¥áá  ¡¥§ § £« ¢­ëå ­ã«¥©
* Реинкарнированы команды ccpuid, free, killall * <EFBFBD>¥¨­ª à­¨à®¢ ­ë ª®¬ ­¤ë ccpuid, free, killall
+ Добавлена команда history + „®¡ ¢«¥­  ª®¬ ­¤  history
Shell 0.5.3 // 19.04.2012 // Albom Shell 0.5.3 // 19.04.2012 // Albom
======================================= =======================================
* Исправление в команде pwd * ˆá¯à ¢«¥­¨¥ ¢ ª®¬ ­¤¥ pwd
Shell 0.5.2 // 16.04.2012 // Albom Shell 0.5.2 // 16.04.2012 // Albom
======================================= =======================================
* Исправление в команде ls * ˆá¯à ¢«¥­¨¥ ¢ ª®¬ ­¤¥ ls
* Незначительные другие исправления * <EFBFBD>¥§­ ç¨â¥«ì­ë¥ ¤à㣨¥ ¨á¯à ¢«¥­¨ï
Shell 0.5.1 // 15.04.2012 // Albom Shell 0.5.1 // 15.04.2012 // Albom
======================================= =======================================
* Некоторые незначительные исправления * <EFBFBD>¥ª®â®àë¥ ­¥§­ ç¨â¥«ì­ë¥ ¨á¯à ¢«¥­¨ï
Shell 0.5 // 23.03.2012 // Albom Shell 0.5 // 23.03.2012 // Albom
======================================= =======================================
* Добавлена поддержка консольных приложений, которые общаются с шеллом через именованную область * „®¡ ¢«¥­  ¯®¤¤¥à¦ª  ª®­á®«ì­ëå ¯à¨«®¦¥­¨©, ª®â®àë¥ ®¡é îâáï á 襫«®¬ ç¥à¥§ ¨¬¥­®¢ ­­ãî ®¡« áâì
Shell 0.4.6 // 30.01.2011 // Albom Shell 0.4.6 // 30.01.2011 // Albom
======================================= =======================================
* Временно удалены команды killall и ccpuid (чтобы вернуть, необходимо раскомментировать 2 строчки) * ‚६¥­­® 㤠«¥­ë ª®¬ ­¤ë killall ¨ ccpuid (çâ®¡ë ¢¥à­ãâì, ­¥®¡å®¤¨¬® à áª®¬¬¥­â¨à®¢ âì 2 áâà®çª¨)
* Исправления в текстовых строках * ˆá¯à ¢«¥­¨ï ¢ ⥪á⮢ëå áâப å
Shell 0.4.52 // 25.10.2010 // Pterox Shell 0.4.52 // 25.10.2010 // Pterox
======================================= =======================================
* Добавлена команда "killall" - убивает все процессы кроме OS/IDLE. * „®¡ ¢«¥­  ª®¬ ­¤  "killall" - 㡨¢ ¥â ¢á¥ ¯à®æ¥ááë ªà®¬¥ OS/IDLE.
* Фиксы * ”¨ªáë
Shell 0.4.51 // 21.10.2010 // Pterox 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 Shell 0.4.5 // 19.10.2010 // Pterox
======================================= =======================================
Программа теперь многоязыковая (английский, и русский язык). Программа полностью русифицированна. <EFBFBD>ணࠬ¬  ⥯¥àì ¬­®£®ï§ëª®¢ ï ( ­£«¨©áª¨©, ¨ àãá᪨© ï§ëª). <20>ணࠬ¬  ¯®«­®áâìî àãá¨ä¨æ¨à®¢ ­­ .
* Команда "free" переименована в "memory" - для точности. * Š®¬ ­¤  "free" ¯¥à¥¨¬¥­®¢ ­  ¢ "memory" - ¤«ï â®ç­®áâ¨.
* Добавлены команды turnoff (выключить компьютер), kerver (версия ядра KolibriOS), uptime; reboot теперь может перезагружать ядро ("reboot kernel") * „®¡ ¢«¥­ë ª®¬ ­¤ë turnoff (¢ëª«îç¨âì ª®¬¯ìîâ¥à), kerver (¢¥àá¨ï ï¤à  KolibriOS), uptime; reboot ⥯¥àì ¬®¦¥â ¯¥à¥§ £à㦠âì ï¤à® ("reboot kernel")
Shell 0.4.4 // 20.08.2010 // Albom Shell 0.4.4 // 20.08.2010 // Albom
======================================= =======================================
1) шелл корректно завершается при закрытии окна 1) 襫« ª®à४⭮ § ¢¥àè ¥âáï ¯à¨ § ªàë⨨ ®ª­ 
2) исправлено ещё 2 ошибки 2) ¨á¯à ¢«¥­® ¥éñ 2 ®è¨¡ª¨
3) добавлены 2 команды: 3) ¤®¡ ¢«¥­ë 2 ª®¬ ­¤ë:
* sleep - ждать. параметр - время в сотых частях секунды. только целое число. * sleep - ¦¤ âì. ¯ à ¬¥âà - ¢à¥¬ï ¢ á®âëå ç áâïå ᥪ㭤ë. ⮫쪮 楫®¥ ç¨á«®.
* ccpuid - вывод в консоль информации (пока скудно) о процессоре. пользы мало, но давно хотел с командой cpuid разобраться (в следующем семестре буду студентам курс читать, включил разбор команды в программу). * ccpuid - ¢ë¢®¤ ¢ ª®­á®«ì ¨­ä®à¬ æ¨¨ (¯®ª  áªã¤­®) ® ¯à®æ¥áá®à¥. ¯®«ì§ë ¬ «®, ­® ¤ ¢­® å®â¥« á ª®¬ ­¤®© cpuid à §®¡à âìáï (¢ á«¥¤ãî饬 ᥬ¥áâॠ¡ã¤ã áâ㤥­â ¬ ªãàá ç¨â âì, ¢ª«î稫 à §¡®à ª®¬ ­¤ë ¢ ¯à®£à ¬¬ã).
есть много идей. некоторые легко реализуются, некоторые сложнее. если интересно: ¥áâì ¬­®£® ¨¤¥©. ­¥ª®â®àë¥ «¥£ª® ॠ«¨§ãîâáï, ­¥ª®â®àë¥ á«®¦­¥¥. ¥á«¨ ¨­â¥à¥á­®:
1) добавить переменную (одну!), в которую будет результат в текстовой форме (не то что возвращает функция) записываться. с ней можно будет работать из командной строки 1) ¤®¡ ¢¨âì ¯¥à¥¬¥­­ãî (®¤­ã!), ¢ ª®â®àãî ¡ã¤¥â १ã«ìâ â ¢ ⥪á⮢®© ä®à¬¥ (­¥ â® çâ® ¢®§¢à é ¥â äã­ªæ¨ï) § ¯¨á뢠âìáï. á ­¥© ¬®¦­® ¡ã¤¥â à ¡®â âì ¨§ ª®¬ ­¤­®© áâப¨
2) внедрить простую стековую машину для вычислений с вещественными числами 2) ¢­¥¤à¨âì ¯à®áâãî á⥪®¢ãî ¬ è¨­ã ¤«ï ¢ëç¨á«¥­¨© á ¢¥é¥á⢥­­ë¬¨ ç¨á« ¬¨
Shell 0.4.3 // 20.08.2010 // Albom 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 Shell 0.4.2 // 28.08.2009 // diamond
======================================= =======================================
* Добавил корректное завершение работы при закрытии окна консоли, работает только начиная с последней на данный момент версией библиотеки (лежит на svn, включена в ночную сборку). Перекомпилировал в VS2008 с LTCG, ещё пошаманил с оптимизацией по размеру * „®¡ ¢¨« ª®à४⭮¥ § ¢¥à襭¨¥ à ¡®âë ¯à¨ § ªàë⨨ ®ª­  ª®­á®«¨, à ¡®â ¥â ⮫쪮 ­ ç¨­ ï á ¯®á«¥¤­¥© ­  ¤ ­­ë© ¬®¬¥­â ¢¥àᨥ© ¡¨¡«¨®â¥ª¨ («¥¦¨â ­  svn, ¢ª«î祭  ¢ ­®ç­ãî á¡®àªã). <20>¥à¥ª®¬¯¨«¨à®¢ « ¢ VS2008 á LTCG, ¥éñ ¯®è ¬ ­¨« á ®¯â¨¬¨§ æ¨¥© ¯® à §¬¥àã
Shell 0.4.1 // 16.03.2009 // Albom Shell 0.4.1 // 16.03.2009 // Albom
======================================= =======================================
* версия с исправленными ошибками. * ¢¥àá¨ï á ¨á¯à ¢«¥­­ë¬¨ ®è¨¡ª ¬¨.
* работает команда alias, добавлена команда clear. * à ¡®â ¥â ª®¬ ­¤  alias, ¤®¡ ¢«¥­  ª®¬ ­¤  clear.
Shell 0.4 // 12.08.2008 // Albom Shell 0.4 // 12.08.2008 // Albom
======================================= =======================================
1) Работает схема псевдонимов (до 256 команд) 1) <EFBFBD> ¡®â ¥â á奬  ¯á¥¢¤®­¨¬®¢ (¤® 256 ª®¬ ­¤)
- просмотр по команде alias (без параметров) - ¯à®á¬®âà ¯® ª®¬ ­¤¥ alias (¡¥§ ¯ à ¬¥â஢)
- добавление псевдонима команды с клавиатуры или в скрипте (в том числе и .shell): alias новая команда = старая команда - ¤®¡ ¢«¥­¨¥ ¯á¥¢¤®­¨¬  ª®¬ ­¤ë á ª« ¢¨ âãàë ¨«¨ ¢ áªà¨¯â¥ (¢ ⮬ ç¨á«¥ ¨ .shell): alias ­®¢ ï ª®¬ ­¤  = áâ à ï ª®¬ ­¤ 
- команды регистрозависимые, поэтому поклонникам ДОС придётся внести в .shell строки такого вида - ª®¬ ­¤ë ॣ¨áâ஧ ¢¨á¨¬ë¥, ¯®í⮬㠯®ª«®­­¨ª ¬ „Ž‘ ¯à¨¤ñâáï ¢­¥á⨠¢ .shell áâப¨ â ª®£® ¢¨¤ 
alias dir = ls alias dir = ls
alias DIR = ls alias DIR = ls
alias Dir = ls alias Dir = ls
alias DIr = ls alias DIr = ls
и т.д. ¨ â.¤.
- встроенные команды переназвать невозможно, например, бессмысленна команда: - ¢áâ஥­­ë¥ ª®¬ ­¤ë ¯¥à¥­ §¢ âì ­¥¢®§¬®¦­®, ­ ¯à¨¬¥à, ¡¥áá¬ëá«¥­­  ª®¬ ­¤ :
alias ls=somecommand alias ls=somecommand
- при отладке получал странную информацию, но так как у меня всё работает, то пока изменений вносить не планирую - ¯à¨ ®â« ¤ª¥ ¯®«ãç « áâà ­­ãî ¨­ä®à¬ æ¨î, ­® â ª ª ª ã ¬¥­ï ¢áñ à ¡®â ¥â, â® ¯®ª  ¨§¬¥­¥­¨© ¢­®á¨âì ­¥ ¯« ­¨àãî
2) Теперь шелл можно запускать с параметром (из самого себя, например) 2) ’¥¯¥àì 襫« ¬®¦­® § ¯ã᪠âì á ¯ à ¬¥â஬ (¨§ á ¬®£® ᥡï, ­ ¯à¨¬¥à)
- синтаксис: - ᨭ⠪á¨á:
shell команда shell ª®¬ ­¤ 
- пример: - ¯à¨¬¥à:
shell /sys/somescript shell /sys/somescript
- при этом .shell не запускается - ¯à¨ í⮬ .shell ­¥ § ¯ã᪠¥âáï
3) Реализована команда more 3) <EFBFBD>¥ «¨§®¢ ­  ª®¬ ­¤  more
- просмотр текстовых и бинарных файлов (вроде бы задача простая, но пришлось повозиться с управляющими символами) - ¯à®á¬®âà ⥪á⮢ëå ¨ ¡¨­ à­ëå ä ©«®¢ (¢à®¤¥ ¡ë § ¤ ç  ¯à®áâ ï, ­® ¯à¨è«®áì ¯®¢®§¨âìáï á ã¯à ¢«ïî騬¨ ᨬ¢®« ¬¨)
- очень не рекомендуется просматривать большие файлы - ®ç¥­ì ­¥ ४®¬¥­¤ã¥âáï ¯à®á¬ âਢ âì ¡®«ì訥 ä ©«ë
Shell 0.3 // 07.08.2008 // Albom Shell 0.3 // 07.08.2008 // Albom
======================================= =======================================
1) Возможность запуска скриптов 1) ‚®§¬®¦­®áâì § ¯ã᪠ áªà¨¯â®¢
* каждая строка должна представляет собой команду * ª ¦¤ ï áâப  ¤®«¦­  ¯à¥¤áâ ¢«ï¥â ᮡ®© ª®¬ ­¤ã
* строкой считается набор символов, который заканчивается CR+LF (Windows) или LF(UNIX) или CR(Mac) * áâப®© áç¨â ¥âáï ­ ¡®à ᨬ¢®«®¢, ª®â®àë© § ª ­ç¨¢ ¥âáï CR+LF (Windows) ¨«¨ LF(UNIX) ¨«¨ CR(Mac)
* если строка начинается с #, то вся строка (т.е. комментарий) игнорируется * ¥á«¨ áâப  ­ ç¨­ ¥âáï á #, â® ¢áï áâப  (â.¥. ª®¬¬¥­â à¨©) ¨£­®à¨àã¥âáï
* скрипт должен начитаться с #SHS * áªà¨¯â ¤®«¦¥­ ­ ç¨â âìáï á #SHS
* при запуске шелла автоматически запускается скрипт .shell * ¯à¨ § ¯ã᪥ 襫«   ¢â®¬ â¨ç¥áª¨ § ¯ã᪠¥âáï áªà¨¯â .shell
2) История из 5 (можно изменить при компиляции) введённых команд 2) ˆáâ®à¨ï ¨§ 5 (¬®¦­® ¨§¬¥­¨âì ¯à¨ ª®¬¯¨«ï樨) ¢¢¥¤ñ­­ëå ª®¬ ­¤
* перемещение по истории - UP/DOWN * ¯¥à¥¬¥é¥­¨¥ ¯® ¨áâ®à¨¨ - UP/DOWN
3) Команда alias, которая позволяет вводить синонимы для команд 3) Š®¬ ­¤  alias, ª®â®à ï ¯®§¢®«ï¥â ¢¢®¤¨âì ᨭ®­¨¬ë ¤«ï ª®¬ ­¤
* до 256 (можно изменить при компиляции) синонимов * ¤® 256 (¬®¦­® ¨§¬¥­¨âì ¯à¨ ª®¬¯¨«ï樨) ᨭ®­¨¬®¢
* пока работает только добавление и просмотр синонимов, а отработка пока не реализована * ¯®ª  à ¡®â ¥â ⮫쪮 ¤®¡ ¢«¥­¨¥ ¨ ¯à®á¬®âà ᨭ®­¨¬®¢,   ®âà ¡®âª  ¯®ª  ­¥ ॠ«¨§®¢ ­ 
Shell 0.2 // 04.08.2008 // Albom Shell 0.2 // 04.08.2008 // Albom
======================================= =======================================
* добавил новые функции * ¤®¡ ¢¨« ­®¢ë¥ ä㭪樨
* написал собственную процедуру ввода команды * ­ ¯¨á « ᮡá⢥­­ãî ¯à®æ¥¤ãàã ¢¢®¤  ª®¬ ­¤ë
Shell 0.11 // 01.08.2008 // Albom Shell 0.11 // 01.08.2008 // Albom
======================================= =======================================
* Добавил команды free и reboot, внёс некоторые изменения, исправил найденные ошибки * „®¡ ¢¨« ª®¬ ­¤ë free ¨ reboot, ¢­ñá ­¥ª®â®àë¥ ¨§¬¥­¥­¨ï, ¨á¯à ¢¨« ­ ©¤¥­­ë¥ ®è¨¡ª¨
Shell 0.1 // 29.07.2008 // Albom Shell 0.1 // 29.07.2008 // Albom
======================================= =======================================
* Реализованы (не полностью) команды: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver * <EFBFBD>¥ «¨§®¢ ­ë (­¥ ¯®«­®áâìî) ª®¬ ­¤ë: about, cd, date, echo, exit, help, kill, ls, ps, pwd, ver
* При запуске программы (если не указан полный путь) она ищется в каталоге /rd/1 и текущем каталоге * <EFBFBD>ਠ§ ¯ã᪥ ¯à®£à ¬¬ë (¥á«¨ ­¥ 㪠§ ­ ¯®«­ë© ¯ãâì) ®­  ¨é¥âáï ¢ ª â «®£¥ /rd/1 ¨ ⥪ã饬 ª â «®£¥
Shell 0.02 // 27.07.2008 // Albom Shell 0.02 // 27.07.2008 // Albom
======================================= =======================================
* Реализовал команды: * <EFBFBD>¥ «¨§®¢ « ª®¬ ­¤ë:
exit - выход exit - ¢ë室
ls (с параметром и без) - вывод списка директории ls (á ¯ à ¬¥â஬ ¨ ¡¥§) - ¢ë¢®¤ ᯨ᪠ ¤¨à¥ªâ®à¨¨
pwd - текущий каталог pwd - ⥪ã騩 ª â «®£
ps - список процессов и их PID ps - ᯨ᮪ ¯à®æ¥áᮢ ¨ ¨å PID
kill - завершить процесс по PID kill - § ¢¥àè¨âì ¯à®æ¥áá ¯® PID
help (с параметром и без) - помощь help (á ¯ à ¬¥â஬ ¨ ¡¥§) - ¯®¬®éì
Shell 0.01 // 27.07.2008 // Albom Shell 0.01 // 27.07.2008 // Albom
======================================= =======================================
* Решил написать функциональный шелл на Си с использованием console.obj * <EFBFBD>¥è¨« ­ ¯¨á âì ä㭪樮­ «ì­ë© 襫« ­  ‘¨ á ¨á¯®«ì§®¢ ­¨¥¬ console.obj
* Пока сделал функцию отделения команды и параметров, а также реализовал команды help (пока без параметров), ver и exit * <EFBFBD>®ª  ᤥ« « äã­ªæ¨î ®â¤¥«¥­¨ï ª®¬ ­¤ë ¨ ¯ à ¬¥â஢,   â ª¦¥ ॠ«¨§®¢ « ª®¬ ­¤ë help (¯®ª  ¡¥§ ¯ à ¬¥â஢), ver ¨ exit

View File

@ -40,7 +40,6 @@
#include "cmd/cmd_sleep.c" #include "cmd/cmd_sleep.c"
#include "cmd/cmd_shutdown.c" #include "cmd/cmd_shutdown.c"
#include "cmd/cmd_uptime.c" #include "cmd/cmd_uptime.c"
#include "cmd/cmd_killall.c"
#include "cmd/cmd_history.c" #include "cmd/cmd_history.c"
#include "cmd/cmd_cp.c" #include "cmd/cmd_cp.c"

View File

@ -12,7 +12,7 @@ if (NULL == dir)
#elif LANG_RUS #elif LANG_RUS
printf(" cd <äèðåêòîðèÿ>\n\r"); printf(" cd <äèðåêòîðèÿ>\n\r");
#endif #endif
return FALSE; return TRUE;
} }
if ( 0 == strcmp(dir, ".") ) if ( 0 == strcmp(dir, ".") )

View File

@ -1,15 +1,4 @@
void print_error(void)
{
#if LANG_ENG
printf(" Error!\n\r");
#elif LANG_RUS
printf(" Žè¨¡ª !\n\r");
#endif
}
int cmd_cp(char param[]) int cmd_cp(char param[])
{ {
@ -40,7 +29,7 @@ if (argc != 2)
parameters_free(argc, argv); parameters_free(argc, argv);
return FALSE; return TRUE;
} }
filename_in = (char*) malloc(4096); filename_in = (char*) malloc(4096);
@ -80,12 +69,10 @@ k70_in.p21 = filename_in;
result = kol_file_70(&k70_in); // ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ® ä ©«¥ result = kol_file_70(&k70_in); // ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ® ä ©«¥
if ( 0 != result ) if ( 0 != result )
{ {
print_error();
parameters_free(argc, argv); parameters_free(argc, argv);
free(filename_in); free(filename_in);
free(filename_out); free(filename_out);
return FALSE; return TRUE;
} }
filesize = bdvk.p32[0]; // ¯®«ãç ¥¬ à §¬¥à ä ©«  (®£à ­¨ç¥­¨¥ - 4 ƒ¡ ©â ) filesize = bdvk.p32[0]; // ¯®«ãç ¥¬ à §¬¥à ä ©«  (®£à ­¨ç¥­¨¥ - 4 ƒ¡ ©â )
@ -115,8 +102,6 @@ for ( i = 0; i < n; i++)
result = kol_file_70(&k70_in); // ç⥭¨¥ result = kol_file_70(&k70_in); // ç⥭¨¥
if (result != 0) if (result != 0)
{ {
print_error();
parameters_free(argc, argv); parameters_free(argc, argv);
free(filename_in); free(filename_in);
free(filename_out); free(filename_out);
@ -128,8 +113,6 @@ for ( i = 0; i < n; i++)
result = kol_file_70(&k70_out); // § ¯¨áì result = kol_file_70(&k70_out); // § ¯¨áì
if (result != 0) if (result != 0)
{ {
print_error();
parameters_free(argc, argv); parameters_free(argc, argv);
free(filename_in); free(filename_in);
free(filename_out); free(filename_out);
@ -152,8 +135,6 @@ if ( (filesize%4096) != 0 ) //
result = kol_file_70(&k70_in); // ç⥭¨¥ result = kol_file_70(&k70_in); // ç⥭¨¥
if (result != 0) if (result != 0)
{ {
print_error();
parameters_free(argc, argv); parameters_free(argc, argv);
free(filename_in); free(filename_in);
free(filename_out); free(filename_out);
@ -165,8 +146,6 @@ if ( (filesize%4096) != 0 ) //
result = kol_file_70(&k70_out); // § ¯¨áì result = kol_file_70(&k70_out); // § ¯¨áì
if (result != 0) if (result != 0)
{ {
print_error();
parameters_free(argc, argv); parameters_free(argc, argv);
free(filename_in); free(filename_in);
free(filename_out); free(filename_out);
@ -177,7 +156,6 @@ if ( (filesize%4096) != 0 ) //
} }
parameters_free(argc, argv); parameters_free(argc, argv);
free(filename_in); free(filename_in);
free(filename_out); free(filename_out);

View File

@ -29,3 +29,4 @@ time = kol_system_time_get();
return TRUE; return TRUE;
} }

View File

@ -4,3 +4,4 @@ int cmd_echo(char text[])
printf("%s\n\r", text); printf("%s\n\r", text);
return TRUE; return TRUE;
} }

View File

@ -6,3 +6,4 @@ _exit(1);
kol_exit(); kol_exit();
return TRUE; return TRUE;
} }

View File

@ -16,3 +16,4 @@ used = total - free;
return TRUE; return TRUE;
} }

View File

@ -38,3 +38,4 @@ else
return FALSE; return FALSE;
} }

View File

@ -11,3 +11,4 @@ for (i = 0; i < CMD_HISTORY_NUM_REAL; i++)
return TRUE; return TRUE;
} }

View File

@ -1,22 +1,32 @@
int cmd_kill(char process[]) int cmd_kill(char param[])
{ {
unsigned proc; unsigned process;
int result; int result;
int i;
if (NULL == process) if ( strlen(param) == 0 )
{ {
printf(" kill <PID>\n\r"); printf(" kill <PID>\n\r");
return FALSE; return TRUE;
}
if (!strcmp(param, "all"))
{
for (i = 2;i<256;i++)
{
kol_kill_process(i);
}
return TRUE;
} }
else else
{ {
proc = _atoi(process); process = _atoi(param);
if ( 0 != proc ) if ( 0 != process )
{ {
result = kol_process_kill_pid(proc); result = kol_process_kill_pid(process);
if (result < 0) if (result < 0)
return FALSE; return FALSE;
else else
@ -25,3 +35,4 @@ else
} }
} }

View File

@ -1,15 +0,0 @@
int cmd_killall(char process_name[])
{
unsigned i;
if (!strlen(process_name))
{
for (i = 2;i<256;i++)
{
kol_kill_process(i);
}
return TRUE;
}
return TRUE;
}

View File

@ -47,3 +47,4 @@ for (i = 0; i < num_of_file; i++)
free((void*)k70.p16); free((void*)k70.p16);
return TRUE; return TRUE;
} }

View File

@ -13,7 +13,7 @@ if (NULL == dir)
#elif LANG_RUS #elif LANG_RUS
printf(" mkdir <え爛<E38188><E7889B><EFBFBD>>\n\r"); printf(" mkdir <え爛<E38188><E7889B><EFBFBD>>\n\r");
#endif #endif
return FALSE; return TRUE;
} }
@ -46,3 +46,4 @@ else
return FALSE; return FALSE;
} }

View File

@ -16,7 +16,7 @@ if (strlen(file)<1)
#elif LANG_RUS #elif LANG_RUS
printf (" more <¨¬ï ä ©« >\n\r"); printf (" more <¨¬ï ä ©« >\n\r");
#endif #endif
return FALSE; return TRUE;
} }
if ( '/' == file[0]) if ( '/' == file[0])
@ -93,3 +93,4 @@ con_set_flags(flags);
printf ("\n\r"); printf ("\n\r");
return TRUE; return TRUE;
} }

View File

@ -26,3 +26,4 @@ free(buf1k);
return TRUE; return TRUE;
} }

View File

@ -4,3 +4,4 @@ int cmd_pwd(char param[])
printf (" %s%c\n\r", cur_dir, cur_dir[strlen(cur_dir)-1]=='/'?' ':'/' ); printf (" %s%c\n\r", cur_dir, cur_dir[strlen(cur_dir)-1]=='/'?' ':'/' );
return TRUE; return TRUE;
} }

View File

@ -7,3 +7,4 @@ else
kol_system_end(3); kol_system_end(3);
return TRUE; return TRUE;
} }

View File

@ -13,7 +13,7 @@ if (NULL == file)
#elif LANG_RUS #elif LANG_RUS
printf (" rm <¨¬ï ä ©« >\n\r"); printf (" rm <¨¬ï ä ©« >\n\r");
#endif #endif
return FALSE; return TRUE;
} }
if ( '/' == file[0]) if ( '/' == file[0])
@ -52,3 +52,4 @@ else
return FALSE; return FALSE;
} }

View File

@ -13,7 +13,7 @@ if (NULL == dir)
#elif LANG_ENG #elif LANG_ENG
printf(" rmdir <え爛<E38188><E7889B><EFBFBD>>\n\r"); printf(" rmdir <え爛<E38188><E7889B><EFBFBD>>\n\r");
#endif #endif
return FALSE; return TRUE;
} }
if ( ( 0 == strcmp(dir, ".") ) || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) if ( ( 0 == strcmp(dir, ".") ) || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
@ -48,3 +48,4 @@ else
return FALSE; return FALSE;
} }

View File

@ -4,3 +4,4 @@ int cmd_shutdown(char param[])
kol_system_end(2); kol_system_end(2);
return TRUE; return TRUE;
} }

View File

@ -4,9 +4,17 @@ int cmd_sleep(char param[])
int delay; int delay;
if (!strlen(param)) if (!strlen(param))
return FALSE; {
#if LANG_ENG
printf(" sleep <time in the 1/100 of second>\n\r");
#elif LANG_RUS
printf(" sleep <интервал в сотых доля секунды>\n\r");
#endif
return TRUE;
}
delay = _atoi(param); delay = _atoi(param);
kol_sleep((unsigned)delay); kol_sleep((unsigned)delay);
return TRUE; return TRUE;
} }

View File

@ -13,7 +13,7 @@ if (NULL == file)
#elif LANG_RUS #elif LANG_RUS
printf(" touch <¨¬ï ä ©« >\n\r"); printf(" touch <¨¬ï ä ©« >\n\r");
#endif #endif
return FALSE; return TRUE;
} }
if ( ( 0 == strcmp(file, ".") ) || ( 0 == strcmp(file, "..") ) || ( 0 == strcmp(cur_dir, "/")) ) if ( ( 0 == strcmp(file, ".") ) || ( 0 == strcmp(file, "..") ) || ( 0 == strcmp(cur_dir, "/")) )

View File

@ -17,3 +17,4 @@ up_millisecs = (time_tick*10)%100;
#endif #endif
return TRUE; return TRUE;
} }

View File

@ -1,6 +1,7 @@
int cmd_ver(char param[]) int cmd_ver(char param[])
{ {
if (!strcmp(param, "kernel")) if (!strcmp(param, "kernel"))
{ {
char *kvbuf; char *kvbuf;
@ -63,3 +64,4 @@ if (!strcmp(param, "cpu"))
printf (" Shell v%s\n\r", SHELL_VERSION); printf (" Shell v%s\n\r", SHELL_VERSION);
return TRUE; return TRUE;
} }

View File

@ -12,8 +12,7 @@ const command_t COMMANDS[]=
{"free", " Displays total, free and used memory\n\r", &cmd_memory}, {"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}, {"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}, {"history", " Lists used commands\n\r", &cmd_history},
{"kill", " Stops a running process. Usage:\n\r kill <PID of process>\n\r", &cmd_kill}, {"kill", " Stops a running process. Usage:\n\r kill <PID of process>\n\r kill all\n\r", &cmd_kill},
{"killall", " Kills all running processes\n\r", &cmd_killall},
{"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", &cmd_ls}, {"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", &cmd_ls},
{"mkdir", " Makes directory. Usage:\n\r mkdir <folder name> ;creates the folder in working directory\n\r mkdir <path><folder name> ;create folder by specified path\n\r", &cmd_mkdir}, {"mkdir", " Makes directory. Usage:\n\r mkdir <folder name> ;creates the folder in working directory\n\r mkdir <path><folder name> ;create folder by specified path\n\r", &cmd_mkdir},
{"more", " Displays a file data to the screen. Usage:\n\r more <file name>\n\r", &cmd_more}, {"more", " Displays a file data to the screen. Usage:\n\r more <file name>\n\r", &cmd_more},
@ -28,3 +27,4 @@ const command_t COMMANDS[]=
{"uptime", " Displays the uptime\n\r", &cmd_uptime}, {"uptime", " Displays the uptime\n\r", &cmd_uptime},
{"ver", " Displays version. Usage:\n\r ver ;Shell version\n\r ver kernel ;version of KolibriOS kernel\n\r ver cpu ;information about CPU\n\r", &cmd_ver}, {"ver", " Displays version. Usage:\n\r ver ;Shell version\n\r ver kernel ;version of KolibriOS kernel\n\r ver cpu ;information about CPU\n\r", &cmd_ver},
}; };

View File

@ -12,8 +12,7 @@ const command_t COMMANDS[]=
{"free", " <20>®ª §ë¢ ¥â ®¡êñ¬ ®¯¥à â¨¢­®© ¯ ¬ïâ¨: ¢á¥©, ᢮¡®¤­®© ¨ ¨á¯®«ì§ã¥¬®©\n\r", &cmd_memory}, {"free", " <20>®ª §ë¢ ¥â ®¡êñ¬ ®¯¥à â¨¢­®© ¯ ¬ïâ¨: ¢á¥©, ᢮¡®¤­®© ¨ ¨á¯®«ì§ã¥¬®©\n\r", &cmd_memory},
{"help", " ‘¯à ¢ª  ¯® ª®¬ ­¤ ¬. ˆá¯®«ì§®¢ ­¨¥:\n\r help ;ᯨ᮪ ¢á¥å ª®¬ ­¤\n\r help <ª®¬ ­¤ > ;á¯à ¢ª  ¯® ª®¬ ­¤¥\n\r", &cmd_help}, {"help", " ‘¯à ¢ª  ¯® ª®¬ ­¤ ¬. ˆá¯®«ì§®¢ ­¨¥:\n\r help ;ᯨ᮪ ¢á¥å ª®¬ ­¤\n\r help <ª®¬ ­¤ > ;á¯à ¢ª  ¯® ª®¬ ­¤¥\n\r", &cmd_help},
{"history", " ‘¯¨á®ª ¨á¯®«ì§®¢ ­­ëå ª®¬ ­¤\n\r", &cmd_history}, {"history", " ‘¯¨á®ª ¨á¯®«ì§®¢ ­­ëå ª®¬ ­¤\n\r", &cmd_history},
{"kill", " “¡¨¢ ¥â ¯à®æ¥áá. ˆá¯®«ì§®¢ ­¨¥:\n\r kill <PID ¯à®æ¥áá >\n\r", &cmd_kill}, {"kill", " “¡¨¢ ¥â ¯à®æ¥áá. ˆá¯®«ì§®¢ ­¨¥:\n\r kill <PID ¯à®æ¥áá >\n\r kill all\n\r", &cmd_kill},
{"killall", " “¡¨¢ ¥â ¢á¥ § ¯ã饭­ë¥ ¯à®æ¥ááë\n\r", &cmd_killall},
{"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ­¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ­­®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls}, {"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ­¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ­­®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls},
{"mkdir", " ‘®§¤ ¥â ª â «®£. ˆá¯®«ì§®¢ ­¨¥:\n\r mkdir <¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¢ ⥪ã饬 ª â «®£¥\n\r mkdir <¯ãâì><¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¯® 㪠§ ­­®¬ã ¯ãâ¨\n\r", &cmd_mkdir}, {"mkdir", " ‘®§¤ ¥â ª â «®£. ˆá¯®«ì§®¢ ­¨¥:\n\r mkdir <¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¢ ⥪ã饬 ª â «®£¥\n\r mkdir <¯ãâì><¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¯® 㪠§ ­­®¬ã ¯ãâ¨\n\r", &cmd_mkdir},
{"more", " ‚뢮¤¨â ᮤ¥à¦¨¬®¥ ä ©«  ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r more <¨¬ï ä ©« >\n\r", &cmd_more}, {"more", " ‚뢮¤¨â ᮤ¥à¦¨¬®¥ ä ©«  ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r more <¨¬ï ä ©« >\n\r", &cmd_more},
@ -28,3 +27,4 @@ const command_t COMMANDS[]=
{"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime}, {"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime},
{"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ­®¬¥à ॢ¨§¨¨ ï¤à  KolibriOS\n\r ver cpu ;¨­ä®à¬ æ¨ï ® ¯à®æ¥áá®à¥\n\r", &cmd_ver}, {"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ­®¬¥à ॢ¨§¨¨ ï¤à  KolibriOS\n\r ver cpu ;¨­ä®à¬ æ¨ï ® ¯à®æ¥áá®à¥\n\r", &cmd_ver},
}; };

View File

@ -124,3 +124,4 @@ return TRUE;
} }
/// =========================================================== /// ===========================================================

View File

@ -89,8 +89,8 @@ for (;;)
if (CMD_POS < 255) if (CMD_POS < 255)
{ {
if ( kol_key_control() & 0x40 ) // åñëè âêëþ÷¸í CapsLock if ( kol_key_control() & 0x40 ) // ¥á«¨ ¢ª«îçñ­ CapsLock
if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // åñëè íàæàòû øèôòû if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // ¥á«¨ ­ ¦ âë è¨äâë
key = tolower(key); key = tolower(key);
else else
key = toupper(key); key = toupper(key);
@ -102,7 +102,7 @@ for (;;)
break; break;
}; };
} }
else // îáðàáîòêà ðàñøèðåííûõ êëàâèø else // ®¡à ¡®âª  à áè¨à¥­­ëå ª« ¢¨è
{ {
key = (key>>8)&0xff; key = (key>>8)&0xff;
// printf ("%d\n\r", key); // printf ("%d\n\r", key);
@ -209,7 +209,7 @@ if (quote == 0)
/// =========================================================== /// ===========================================================
typedef void (*handler1_t)(char* arg); typedef int (*handler1_t)(char* arg);
/// =========================================================== /// ===========================================================
@ -219,6 +219,7 @@ char cmd[256];
char args[256]; char args[256];
unsigned arg; unsigned arg;
int i; int i;
int result;
trim(CMD); trim(CMD);
arg = command_get_cmd(cmd); arg = command_get_cmd(cmd);
@ -233,7 +234,15 @@ for (i = 0; i < NUM_OF_CMD; i++)
{ {
if (!strcmp(cmd, COMMANDS[i].name)) if (!strcmp(cmd, COMMANDS[i].name))
{ {
((handler1_t)COMMANDS[i].handler)(args); result = ((handler1_t)COMMANDS[i].handler)(args);
if (result != TRUE)
{
#if LANG_ENG
printf(" Error!\n\r");
#elif LANG_RUS
printf(" Žè¨¡ª !\n\r");
#endif
}
return; return;
} }
} }
@ -251,3 +260,4 @@ executable_run(cmd, args);
} }
/// =========================================================== /// ===========================================================

View File

@ -65,3 +65,4 @@ else
} }
/// =========================================================== /// ===========================================================

View File

@ -89,3 +89,4 @@ for (i = 0; i < argc; i++)
} }
/// =========================================================== /// ===========================================================

View File

@ -14,3 +14,4 @@ k70.p21 = cmd;
return kol_file_70(&k70); return kol_file_70(&k70);
} }

View File

@ -93,3 +93,4 @@ for (i = 0; i < 30; i++)
return 9; return 9;
} }

View File

@ -100,3 +100,4 @@ return TRUE;
} }
/// =========================================================== /// ===========================================================