Page 14 of 77

Re: Помогите новичку

Posted: Thu Nov 04, 2010 2:19 pm
by art_zh
Freeman :D ...и чтоб чирикала и крылышками махала...

Re: Помогите новичку

Posted: Thu Nov 04, 2010 5:14 pm
by Mario
art_zh wrote:и чтоб чирикала
Не чирикает. Чирикают воробьи, да еще гопнеги чирикают "Слышь, червонец одолжи а?" (червонец - чирик)

Re: Помогите новичку

Posted: Thu Nov 04, 2010 9:54 pm
by Freeman
art_zh wrote:и крылышками махала...
А в Колибри разве есть понятие курсора "песочные часы"? Всё и так летает, не?

Re: Помогите новичку

Posted: Thu Nov 04, 2010 9:59 pm
by Mario
Freeman wrote:
art_zh wrote:и крылышками махала...
А в Колибри разве есть понятие курсора "песочные часы"? Всё и так летает, не?
В Колибри есть понятие - слишком много жрущих процессорное время приложений запущено, либо одно, которое написал больной на голову программист, которое ушло в вечный цикл перерисовки своего окна. Но система естественно такое не отслеживает - сервиса такого не предусмотрено.

Re: Помогите новичку

Posted: Fri Nov 05, 2010 1:40 am
by Rock_maniak_forever
Freeman wrote:В порядке общего бреда: только мне грезится курсор в виде колибри?
Интересная идея, мне очень понравилась. :D Только врятли у меня получится нарисовать курсор в виде Колибри, но попробовать стоит. Image

Re: Помогите новичку

Posted: Fri Nov 05, 2010 8:00 am
by Freeman
Кто-то выкладывал на форуме векторный логотип. Из него и можно сделать. Только придётся развернуть в другую сторону. Стремление вперёд похвально, но мышиные стрелки пока ориентируется на правшей. :)

Re: Помогите новичку

Posted: Fri Nov 05, 2010 5:48 pm
by Rock_maniak_forever
Искать надо. Ну я пока фейс переделываю, а стрелку делать буду скорее всего в последнюю очередь, поэтому пока не срочно. :?

Re: Помогите новичку

Posted: Fri Nov 05, 2010 5:56 pm
by dunkaist
Freeman wrote:Кто-то выкладывал на форуме векторный логотип.
Rock_maniak_forever wrote:Искать надо.
Логотип (и не только) в этой теме.

Re: Помогите новичку

Posted: Fri Nov 05, 2010 9:49 pm
by Rock_maniak_forever
dunkaist wrote:Логотип (и не только) в этой теме.
Image

Re: Помогите новичку

Posted: Fri Feb 11, 2011 8:03 pm
by SoUrcerer
Вопросы по C и libc.
1) Имеется функция void __menuet__putimage(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,char * image).
Она принимает на вход изображение в формате BBGGRR, если судить по коду в libc и описанию 7й системной функции.
У меня имеется массив int m[300][300]. Я создаю переменную char data[300*300*3], и делаю вот так:

Code: Select all

for (x=0;x<300;x++) {for (y=0;y<300; y++) {if (m[x][y]!=1) {data[300*y+3*x]=0xFF; data[300*y+3*x+1]=0xFF; data[300*y+3*x+2]=0xFF;}}}
Как мне казалось, этот код должен был изменить атрибуты красной, синей и зеленой составляющих на FF для всех точек исходного массива, не равных 1. Но на самом деле этот код выводит кашу. Видимо, с структурой изображения нужно работать как-то по-другому. Вопрос - как?
И еще, наверное, вместо простого задания char data[300*300*3] правильнее работать через malloc? Как это нужно делать?

2) Если в коде программы есть fopen (да и другие операции с ФС), то она отказывается собираться:

Code: Select all

/home/sourcerer/projects/me/lib/libc.a(remove.o): In function `remove':
remove.c:(.text+0x9a): undefined reference to `__stack_chk_fail'
/home/sourcerer/projects/me/lib/libc.a(doprnt.o): In function `exponentl':
doprnt.c:(.text+0xbb): undefined reference to `__stack_chk_fail'
/home/sourcerer/projects/me/lib/libc.a(doprnt.o): In function `_doprnt':
doprnt.c:(.text+0x15d7): undefined reference to `__stack_chk_fail'
Это проблема моей сборки libc, или так и должно быть? Как тогда собирается doom?

Re: Помогите новичку

Posted: Fri Feb 11, 2011 8:48 pm
by Albom
К сожалению, ни одна libc для Колибри мне не нравится. Поэтому ими не пользуюсь и конкретно посоветовать ничего не могу. Код вроде правильный (зачем только столько скобочек? :)). Предположение - попробовать заменить тип data с char на unsigned char. И второе - поменять x и y в индексе массива data. Но без полного исходника, входных и выходных данных сказать точно не могу.

Re: Помогите новичку

Posted: Fri Feb 11, 2011 8:53 pm
by IgorA
Albom wrote:И второе - поменять x и y в индексе массива data
там просто нужно умножить координату Y на 3, т. е.

Code: Select all

300*y+3*x ---> 3*(300*y+x)
300*y+3*x+1 ---> 3*(300*y+x)+1
300*y+3*x+2 ---> 3*(300*y+x)+2

Re: Помогите новичку

Posted: Fri Feb 11, 2011 9:37 pm
by Foldl
Sorcerer wrote:2) Если в коде программы есть fopen (да и другие операции с ФС), то она отказывается собираться:
Не знаю точно что с libc, сам я ради интереса занимался велосипедостроением. Вот несколько функций для чтения/записи файлов, если нужно. Не фонтан, но работали.
Spoiler:

Code: Select all

#define FS_SUCCESS              (0)
#define FS_NO_DISK              (1)
#define FS_INCORRECT_OPERATION  (2)
#define FS_UNKNOWN_FS_TYPE      (3)
#define FS_RESERVED             (4)
#define FS_FILE_NOT_FOUND       (5)
#define FS_EOF                  (6)
#define FS_BUFFER_OVERFLOW      (7)
#define FS_DISK_FULL            (8)
#define FS_FAT_INVALID          (9)
#define FS_ACCESS_DENIED        (10)
#define FS_DISK_ERROR           (11)
#define FS_OUT_OF_MEMORY        (30)
#define FS_NOT_EXEC             (31)
#define FS_TO_MANY_PROCESSES    (32)

typedef struct __attribute__((packed)) {
    unsigned nfunc;
    unsigned posl;
    unsigned posh;
    unsigned nbytes;
    void *buf;
    char zero;
    char *name;
} ksys_file_info_t;

static void ksys_assign (ksys_file_info_t *fh, char *name) {
    fh->zero = 0;
    fh->name = name;
}

static int ksys_rewrite (ksys_file_info_t *fh) {
    fh->nfunc = 2;
    fh->posl = 0;
    fh->posh = 0;
    fh->nbytes = 0;
    fh->buf = 0;

    unsigned int n;
    int return_code;

    __asm__ __volatile__ (
        "int $0x40"
        : "=a"(return_code), "=b"(n)
        : "0"((unsigned)70), "1"((void*)fh)
    );

    return return_code;
}

static int ksys_write (ksys_file_info_t *fh, void *buf, unsigned int size, unsigned int *err) {
    fh->nfunc = 3;
    fh->nbytes = size;
    fh->buf = buf;

    unsigned int n;

    __asm__ __volatile__ (
        "int $0x40"
        : "=a"(*err), "=b"(n)
        : "0"((unsigned)70), "1"((void*)fh)
    );

    fh->posl += n;

    return n;
}

static void ksys_reset (ksys_file_info_t *fh) {
    fh->posl = 0;
    fh->posh = 0;
}

static int ksys_read (void *ptr, int n, ksys_file_info_t *f) {
    int return_code, count = 0;
    f->nfunc = 0;
    f->nbytes = n;
    f->buf = ptr;
    f->zero = 0;

    __asm__ __volatile__ (
        "int $0x40"
        : "=a"(return_code), "=b"(count)
        : "0"(70), "1"(f)
        : "memory"
    );

    if (return_code == 0) {
        f->posl += count;
        return count;
    } else if (return_code == 6) { /*EOF*/
        f->posl += count;
        return count;
    } else {
        return -1;
    }
}

Re: Помогите новичку

Posted: Fri Feb 11, 2011 9:58 pm
by SoUrcerer
Спасибо за помощь!
Функции чтения/записи тоже имею, но из-за природной лени хотелось "родные" Сишные команды... Не привык я работать с аттрибутами, буферами. Ну что же, если выбора нет, придется учиться.

Re: Помогите новичку

Posted: Sat Feb 12, 2011 5:52 am
by Asper
Sorcerer
Собранная версия http://ftp.kolibrios.org/users/Asper/menuetlibc/.