Очень функциональный шелл

...
  • shell.inc
    В функцию shell.wait нужно добавить выход по тайм-ауту, иначе программа зависает в случае, если она была вызвана не из shell.
  • Вроде в ту тему попал. Почему, когда я вставляю копированную строку с путём к файлу перед командой cd в shell, то при вставке, удаляется команда cd? Можно ли это как-то исправить? :roll:
    The Glass is Always Half Full! :mrgreen:
  • JohnXenox wrote:Вроде в ту тему попал. Почему, когда я вставляю копированную строку с путём к файлу перед командой cd в shell, то при вставке, удаляется команда cd? Можно ли это как-то исправить? :roll:
    Конечно можно.

    Если сам заинтересован, могу подсказать где - шелл одна из самых простых программ Колибри, и написана на С. Нужно?
  • Siemargl wrote: Если сам заинтересован, могу подсказать где - шелл одна из самых простых программ Колибри, и написана на С. Нужно?
    Я бы не прочь поправить, но к сожалению, не умею программировать на С, только мальца на bash shell. :oops:
    The Glass is Always Half Full! :mrgreen:
  • Shell 0.7.7
    * help теперь выводит список комманд в три колонки
    * ps теперь выводит размер ОЗУ, используемый процессом
    * ls теперь выводит все файлы не в одну, а в несколько колонок, размер колонок расчитывается исходя из самого длинного имени файла в папке, старый вывод списком по прежнему доступен через ключ '-1'

    Я почти уверен, что в файле http://websvn.kolibrios.org/filedetails ... 2Fstring.c в функции strnicmp ошибка.
    Оно требует количество символов на 1 меньше. Т.е. в коде сейчас strnicmp(param, "-1", 1), хотя я думаю что нужно 2, но с ним не работает.
    Буду рад, если кто-то подтвердит или опровергнет.

    Вообще очень нравится SHELL из-за простоты сборки.

    Приму замечанию по коду.
    Attachments
    shel_077.png
    shel_077.png (15.94 KiB)
    Viewed 10435 times
    Из хаоса в космос
  • Я почти уверен, что в файле http://websvn.kolibrios.org/filedetails ... 2Fstring.c в функции strnicmp ошибка.
    Оно требует количество символов на 1 меньше.
    думаю что pc++; нужно перенести перед проверкой if (*string1=='\0' || pc == count) может так получится

    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;
    }
    
    Ray, unsigned не бывает отрицательным
  • Думаю, можно сделать по аналогии
    http://bxr.su/OpenBSD/sys/lib/libkern/strncasecmp.c
    http://bxr.su/OpenBSD/lib/libc/string/strcasecmp.c
    Как впрочем и всё остальное.
  • Привет,

    Сейчас SHELL ассоциирован с расширением .sh, что может ввести в заблуждение ибо наш SHELL с этими скриптами не совместим, т.к. требует в начале файла четыре символа "#SHS" без которых скрипт работать не будет.

    Вопрос: может стоит нашему шеллу дать свое родное расширение? Например, .shs или .ksh.
    Из хаоса в космос
  • Leency wrote:Вообще очень нравится SHELL из-за простоты сборки.
    Вот кстати, может кто-нибудь объяснить, для чего необходим тулчейн от Serge (kos32-gcc kos32-ld), если обычный gcc тоже может собирать проекты, подобные этому? Какие задачи решал Serge, создавая свой тулчейн?

    Я пробовал компилировать 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))
    Вот мой make_eng.sh
    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/
  • На сколько я понимаю, тулчейн от Сержа это порт новой библиотеки Си. Он имеет несравнимо больше функций, чем библиотеки Шелла и следовательно им можно компилировать (портировать) большие проекты.
    Из хаоса в космос
  • Leency wrote:Привет,

    Сейчас SHELL ассоциирован с расширением .sh, что может ввести в заблуждение ибо наш SHELL с этими скриптами не совместим, т.к. требует в начале файла четыре символа "#SHS" без которых скрипт работать не будет.

    Вопрос: может стоит нашему шеллу дать свое родное расширение? Например, .shs или .ksh.
    .shs будет ассоциироваться c форматом системного файла в Windows, .ksh будет ассоциироваться с Korn shell.

    Меня текущее расширение устраивает. Но, я бы предложил такие расширения: .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).