Board.KolibriOS.org
http://board.kolibrios.org/

Помогите новичку
http://board.kolibrios.org/viewtopic.php?f=2&t=684
Page 14 of 76

Author:  art_zh [ Thu Nov 04, 2010 2:19 pm ]
Post subject:  Re: Помогите новичку

Freeman :D ...и чтоб чирикала и крылышками махала...

Author:  Mario [ Thu Nov 04, 2010 5:14 pm ]
Post subject:  Re: Помогите новичку

art_zh wrote:
и чтоб чирикала

Не чирикает. Чирикают воробьи, да еще гопнеги чирикают "Слышь, червонец одолжи а?" (червонец - чирик)

Author:  Freeman [ Thu Nov 04, 2010 9:54 pm ]
Post subject:  Re: Помогите новичку

art_zh wrote:
и крылышками махала...

А в Колибри разве есть понятие курсора "песочные часы"? Всё и так летает, не?

Author:  Mario [ Thu Nov 04, 2010 9:59 pm ]
Post subject:  Re: Помогите новичку

Freeman wrote:
art_zh wrote:
и крылышками махала...

А в Колибри разве есть понятие курсора "песочные часы"? Всё и так летает, не?

В Колибри есть понятие - слишком много жрущих процессорное время приложений запущено, либо одно, которое написал больной на голову программист, которое ушло в вечный цикл перерисовки своего окна. Но система естественно такое не отслеживает - сервиса такого не предусмотрено.

Author:  Rock_maniak_forever [ Fri Nov 05, 2010 1:40 am ]
Post subject:  Re: Помогите новичку

Freeman wrote:
В порядке общего бреда: только мне грезится курсор в виде колибри?

Интересная идея, мне очень понравилась. :D Только врятли у меня получится нарисовать курсор в виде Колибри, но попробовать стоит. Image

Author:  Freeman [ Fri Nov 05, 2010 8:00 am ]
Post subject:  Re: Помогите новичку

Кто-то выкладывал на форуме векторный логотип. Из него и можно сделать. Только придётся развернуть в другую сторону. Стремление вперёд похвально, но мышиные стрелки пока ориентируется на правшей. :)

Author:  Rock_maniak_forever [ Fri Nov 05, 2010 5:48 pm ]
Post subject:  Re: Помогите новичку

Искать надо. Ну я пока фейс переделываю, а стрелку делать буду скорее всего в последнюю очередь, поэтому пока не срочно. :?

Author:  dunkaist [ Fri Nov 05, 2010 5:56 pm ]
Post subject:  Re: Помогите новичку

Freeman wrote:
Кто-то выкладывал на форуме векторный логотип.
Rock_maniak_forever wrote:
Искать надо.

Логотип (и не только) в этой теме.

Author:  Rock_maniak_forever [ Fri Nov 05, 2010 9:49 pm ]
Post subject:  Re: Помогите новичку

dunkaist wrote:
Логотип (и не только) в этой теме.

Image

Author:  SoUrcerer [ Fri Feb 11, 2011 8:03 pm ]
Post subject:  Re: Помогите новичку

Вопросы по 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:
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:
/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?

Author:  Albom [ Fri Feb 11, 2011 8:48 pm ]
Post subject:  Re: Помогите новичку

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

Author:  IgorA [ Fri Feb 11, 2011 8:53 pm ]
Post subject:  Re: Помогите новичку

Albom wrote:
И второе - поменять x и y в индексе массива data

там просто нужно умножить координату Y на 3, т. е.
Code:
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

Author:  Foldl [ Fri Feb 11, 2011 9:37 pm ]
Post subject:  Re: Помогите новичку

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

Не знаю точно что с libc, сам я ради интереса занимался велосипедостроением. Вот несколько функций для чтения/записи файлов, если нужно. Не фонтан, но работали.
Spoiler: Show
Code:
#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;
    }
}

Author:  SoUrcerer [ Fri Feb 11, 2011 9:58 pm ]
Post subject:  Re: Помогите новичку

Спасибо за помощь!
Функции чтения/записи тоже имею, но из-за природной лени хотелось "родные" Сишные команды... Не привык я работать с аттрибутами, буферами. Ну что же, если выбора нет, придется учиться.

Author:  Asper [ Sat Feb 12, 2011 5:52 am ]
Post subject:  Re: Помогите новичку

Sorcerer
Собранная версия http://ftp.kolibrios.org/users/Asper/menuetlibc/.

Page 14 of 76 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/