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

...
  • 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 10097 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).
    The Glass is Always Half Full! :mrgreen:
  • JohnXenox wrote:Меня текущее расширение устраивает.
    Аналогично.
    Вполне подходящее расширение.
    Я против переименования только лишь ради переименования.
    Leency wrote:Сейчас SHELL ассоциирован с расширением .sh, что может ввести в заблуждение ибо наш SHELL с этими скриптами не совместим, т.к. требует в начале файла четыре символа "#SHS" без которых скрипт работать не будет.
    Ты какую-то ерунду пишешь :)
    Если скрипт написан для SHELL — он с ним совместим.
    Пример для компиляции с помощью Oberon-07 и fasm http://board.kolibrios.org/viewtopic.ph ... 949#p70951
    Разумеется, можно написать заведомо несовместимый скрипт и потом на это жаловаться — виноват в этом только использующий такой скрипт не по назначению.

    C таким же успехом можно быть недовольным расширением obj, потому что
    wikipedia wrote:OBJ (or .OBJ) is a geometry definition file format first developed by Wavefront Technologies for its Advanced Visualizer animation package.
    а не только MSCOFF.

    Не надо искать проблему там, где её нет — достаточно понимать что и для чего ты делаешь, либо без понимания не делать этого вовсе.
  • Who is online

    Users browsing this forum: No registered users and 2 guests