Page 2 of 2

Re: Человеческие языки программирования

Posted: Sun Dec 23, 2007 8:09 am
by shamaz.mazum
int
bcmp(const void *ptr1, const void *ptr2, int length)
{
char a;
char b;

if (ptr1 == ptr2)
return 0;

if (ptr1 == 0 || ptr2 == 0)
return -1;

while (length)
{
a=*((const char *)ptr1);
b=*((const char *)ptr2);
if (a !=b) return length;

//if (*((char)ptr1)++ != *((char)ptr2)++)
// return length;
ptr1++;
ptr2++;
length--;
}

return 0;
}

ААААААААААА. Вот что хотел сделать автор, делая инкремент к строкам, мне следовало бы догадаться.
Теперь всё собирается

Re: Человеческие языки программирования

Posted: Sun Dec 23, 2007 3:37 pm
by shamaz.mazum
>---------------------------------------------------------
>Libraries for MenuetOS/KolibriOS were successfully built
>---------------------------------------------------------


>/home/vasily/bbb/menuetlibc_new/linuxtools/mld printftest.kex main.o -n -Map printftest.kex.map
>main.o: In function `test':
>main.c:(.text+0xf2): undefined reference to `__stack_chk_fail'
>/home/vasily/bbb/menuetlibc_new/lib/libc.a(putchar.o): In function `putchar':
>putchar.c:(.text+0x4): undefined reference to `console_init'
>putchar.c:(.text+0x18): undefined reference to `console_printf'
>/home/vasily/bbb/menuetlibc_new/lib/libc.a(printf.o): In function `printf':
>printf.c:(.text+0x6): undefined reference to `console_init'
>printf.c:(.text+0x44): undefined reference to `console_printf'
>/home/vasily/bbb/menuetlibc_new/lib/libc.a(ndoprnt.o): In function `_ndoprnt':
>ndoprnt.c:(.text+0xb26): undefined reference to `__stack_chk_fail'
>/home/vasily/bbb/menuetlibc_new/lib/libc.a(doprnt.o): In function `_doprnt':
>doprnt.c:(.text+0xa5e): undefined reference to `__stack_chk_fail'
>objcopy printftest.kex -O binary
>objcopy: 'printftest.kex': No such file
>make[2]: *** [printftest.kex] Error 1
>make[2]: Leaving directory `/home/vasily/bbb/menuetlibc_new/programs/binclock'
>make[1]: *** [all] Error 2
>make[1]: Leaving directory `/home/vasily/bbb/menuetlibc_new/programs'
>make: *** [all] Error 2
>vasily@vasily-desktop:~/bbb/menuetlibc_new$


Как видите, библы собрал, остались бонус-приблуды.
На стадии линковки чего-то там вышли одни undefined reference` ы + отсутствует файл.

Re: Человеческие языки программирования

Posted: Tue Dec 25, 2007 4:31 pm
by andrew_programmer
Я добавлял в menuetlibc новые функции. В частности putchar() printf(). Обе эти функции для вывода в консоль используют экспортируемые функции из файла console.o Сам console.asm написан на ассемблере и компилируется FASM-ом. Я почему-то забыл добавить в исходники menuetlibc файл console.asm .В общем вот этот файл(реализация не самая лучшая, но тогда мне это было не особо важно).

Code: Select all

format ELF
section '.text' executable

public console_init
public console_printf
public console_exit

align 4
console_init:

        pushad

        mov eax,[console_init_status]
        test eax,eax
        jnz console_initializated

        mov [console_init_status],1

        mov eax,68
        mov ebx,19
        mov ecx,console_path
        int 0x40

        test eax,eax
        jz console_not_loaded

                mov ebx,[eax+4]
                mov [con_start],ebx

                mov ebx,[eax+4+16]
                mov [con_init],ebx

                mov ebx,[eax+4+32]
                mov [con_printf],ebx

                push 1
                call [con_start]

                push caption
                push -1
                push -1
                push -1
                push -1
                call [con_init]

        console_not_loaded:

        console_initializated:

        popad

        ret

align 4
console_printf:

        pop [return_addres]

        call [con_printf]
        ;add esp,8

        push [return_addres]

        ret

align 4
console_exit:

        push 0
        call [con_exit]

        ret


;-----------------------------
console_path db '/sys/lib/console.obj',0
caption      db 'Console',0

align 4
con_start                 rd 1
con_init                  rd 1
con_printf                rd 1
con_exit                  rd 1
console_init_status       rd 1
return_addres             rd 1
нужно добавить его к статической библиотеке libc.a либо прописать в makefile, чтобы он компилировался и линковался к libc.a

Re: Человеческие языки программирования

Posted: Sat Dec 29, 2007 4:02 pm
by shamaz.mazum
Не было printf - кошмар. Реализация многих функций этой libc оставляет желать лучшего. Так что вам местный товарищи скажут спасибо. Хорошо.

Re: Человеческие языки программирования

Posted: Sat Dec 29, 2007 6:44 pm
by Leency
Что тут плохо а что хорошо, тут и так все прекрасно знают. А твоё редкое умение замечать очевидные вещи и так всех напрягает.
Я тебе повторю - хочешь лучше - напиши лучше.