Очень функциональный шелл
-
Не переход на tup, а переход с gcc3 на gcc4. И не поломал, а показал, что код неправильный и выходит за границы массива. Локальные переменные немного по-другому легли, и там, где был нуль, стала буква "p". r5207Сделаем мир лучше!
shell.inc
В функцию shell.wait нужно добавить выход по тайм-ауту, иначе программа зависает в случае, если она была вызвана не из shell.
В функцию shell.wait нужно добавить выход по тайм-ауту, иначе программа зависает в случае, если она была вызвана не из shell.
Вроде в ту тему попал. Почему, когда я вставляю копированную строку с путём к файлу перед командой cd в shell, то при вставке, удаляется команда cd? Можно ли это как-то исправить?
The Glass is Always Half Full!
Конечно можно.JohnXenox wrote:Вроде в ту тему попал. Почему, когда я вставляю копированную строку с путём к файлу перед командой cd в shell, то при вставке, удаляется команда cd? Можно ли это как-то исправить?
Если сам заинтересован, могу подсказать где - шелл одна из самых простых программ Колибри, и написана на С. Нужно?
Я бы не прочь поправить, но к сожалению, не умею программировать на С, только мальца на bash shell.Siemargl wrote: Если сам заинтересован, могу подсказать где - шелл одна из самых простых программ Колибри, и написана на С. Нужно?
The Glass is Always Half Full!
Shell 0.7.7
* help теперь выводит список комманд в три колонки
* ps теперь выводит размер ОЗУ, используемый процессом
* ls теперь выводит все файлы не в одну, а в несколько колонок, размер колонок расчитывается исходя из самого длинного имени файла в папке, старый вывод списком по прежнему доступен через ключ '-1'
Я почти уверен, что в файле http://websvn.kolibrios.org/filedetails ... 2Fstring.c в функции strnicmp ошибка.
Оно требует количество символов на 1 меньше. Т.е. в коде сейчас strnicmp(param, "-1", 1), хотя я думаю что нужно 2, но с ним не работает.
Буду рад, если кто-то подтвердит или опровергнет.
Вообще очень нравится SHELL из-за простоты сборки.
Приму замечанию по коду.
* help теперь выводит список комманд в три колонки
* ps теперь выводит размер ОЗУ, используемый процессом
* ls теперь выводит все файлы не в одну, а в несколько колонок, размер колонок расчитывается исходя из самого длинного имени файла в папке, старый вывод списком по прежнему доступен через ключ '-1'
Я почти уверен, что в файле http://websvn.kolibrios.org/filedetails ... 2Fstring.c в функции strnicmp ошибка.
Оно требует количество символов на 1 меньше. Т.е. в коде сейчас strnicmp(param, "-1", 1), хотя я думаю что нужно 2, но с ним не работает.
Буду рад, если кто-то подтвердит или опровергнет.
Вообще очень нравится SHELL из-за простоты сборки.
Приму замечанию по коду.
- Attachments
-
-
shel_077.png (15.94 KiB)Viewed 10500 times
-
Из хаоса в космос
думаю что pc++; нужно перенести перед проверкой if (*string1=='\0' || pc == count) может так получитсяЯ почти уверен, что в файле http://websvn.kolibrios.org/filedetails ... 2Fstring.c в функции strnicmp ошибка.
Оно требует количество символов на 1 меньше.
Code: Select all
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;
pc++;
if (*string1=='\0' || pc == count)
return 0;
string1++;
string2++;
}
}
и проверку исправить наIgorA wrote:думаю что pc++; нужно перенести перед проверкой if (*string1=='\0' || pc == count) может так получится
if (*string1=='\0' || pc >= count)
Иначе получится бесконечный цикл, если 3 параметр <= 0.
Code: Select all
int _strnicmp(const char* string1, const char* string2, unsigned count)
{
unsigned pc = 0;
while (pc < count)
{
if (toupper(*string1)<toupper(*string2))
return -1;
if (toupper(*string1)>toupper(*string2))
return 1;
if (*string1=='\0')
break;
string1++;
string2++;
pc++;
}
return 0;
}
Думаю, можно сделать по аналогии
http://bxr.su/OpenBSD/sys/lib/libkern/strncasecmp.c
http://bxr.su/OpenBSD/lib/libc/string/strcasecmp.c
Как впрочем и всё остальное.
http://bxr.su/OpenBSD/sys/lib/libkern/strncasecmp.c
http://bxr.su/OpenBSD/lib/libc/string/strcasecmp.c
Как впрочем и всё остальное.
Привет,
Сейчас SHELL ассоциирован с расширением .sh, что может ввести в заблуждение ибо наш SHELL с этими скриптами не совместим, т.к. требует в начале файла четыре символа "#SHS" без которых скрипт работать не будет.
Вопрос: может стоит нашему шеллу дать свое родное расширение? Например, .shs или .ksh.
Сейчас SHELL ассоциирован с расширением .sh, что может ввести в заблуждение ибо наш SHELL с этими скриптами не совместим, т.к. требует в начале файла четыре символа "#SHS" без которых скрипт работать не будет.
Вопрос: может стоит нашему шеллу дать свое родное расширение? Например, .shs или .ksh.
Из хаоса в космос
Вот кстати, может кто-нибудь объяснить, для чего необходим тулчейн от Serge (kos32-gcc kos32-ld), если обычный gcc тоже может собирать проекты, подобные этому? Какие задачи решал Serge, создавая свой тулчейн?Leency wrote:Вообще очень нравится SHELL из-за простоты сборки.
Я пробовал компилировать SHELL в следующих окружениях:
- x32 debian 8 gcc 4.9.2
- x64 Ubuntu 14.04 gcc 4.9.3
- x64 debian 9 gcc 6.3.0
Компилируется и работает. Пришлось, правда, добавить define для _stdcall, __stdcall и _cdecl:
Spoiler:
Code: Select all
#define _stdcall __attribute__((stdcall))
#define __stdcall __attribute__((stdcall))
#define _cdecl __attribute__((cdecl))
Spoiler:
Code: Select all
#!/bin/sh
echo "#define LANG_ENG 1" > lang.h
fasm start.asm start.o
gcc -m32 -c -fno-builtin -fno-stack-protector -fleading-underscore -fno-pie system/kolibri.c system/stdlib.c system/string.c system/ctype.c shell.c
ld -m elf_i386 -nostdlib -T kolibri.ld -o shell start.o kolibri.o stdlib.o string.o ctype.o shell.o
objcopy shell -O binary
rm lang.h start.o kolibri.o stdlib.o string.o ctype.o shell.o
#kpack shell
mv shell bin/eng/
cp locale/eng/.shell bin/eng/
На сколько я понимаю, тулчейн от Сержа это порт новой библиотеки Си. Он имеет несравнимо больше функций, чем библиотеки Шелла и следовательно им можно компилировать (портировать) большие проекты.
Из хаоса в космос
.shs будет ассоциироваться c форматом системного файла в Windows, .ksh будет ассоциироваться с Korn shell.Leency wrote:Привет,
Сейчас SHELL ассоциирован с расширением .sh, что может ввести в заблуждение ибо наш SHELL с этими скриптами не совместим, т.к. требует в начале файла четыре символа "#SHS" без которых скрипт работать не будет.
Вопрос: может стоит нашему шеллу дать свое родное расширение? Например, .shs или .ksh.
Меня текущее расширение устраивает. Но, я бы предложил такие расширения: .shell, .kshs (kolibri shell script), .ksc (kolibri shell commands), .kscs (kolibri shell commands script),.ksd (kolibri shell directives), .ksds (kolibri shell directives script) или .ksm (kolibri shell mnemonics).
The Glass is Always Half Full!
Аналогично.JohnXenox wrote:Меня текущее расширение устраивает.
Вполне подходящее расширение.
Я против переименования только лишь ради переименования.
Ты какую-то ерунду пишешьLeency wrote:Сейчас SHELL ассоциирован с расширением .sh, что может ввести в заблуждение ибо наш SHELL с этими скриптами не совместим, т.к. требует в начале файла четыре символа "#SHS" без которых скрипт работать не будет.
Если скрипт написан для SHELL — он с ним совместим.
Пример для компиляции с помощью Oberon-07 и fasm http://board.kolibrios.org/viewtopic.ph ... 949#p70951
Разумеется, можно написать заведомо несовместимый скрипт и потом на это жаловаться — виноват в этом только использующий такой скрипт не по назначению.
C таким же успехом можно быть недовольным расширением obj, потому что
а не только MSCOFF.wikipedia wrote:OBJ (or .OBJ) is a geometry definition file format first developed by Wavefront Technologies for its Advanced Visualizer animation package.
Не надо искать проблему там, где её нет — достаточно понимать что и для чего ты делаешь, либо без понимания не делать этого вовсе.
Who is online
Users browsing this forum: No registered users and 0 guests