Помогите новичку
-
Freeman ...и чтоб чирикала и крылышками махала...
Не чирикает. Чирикают воробьи, да еще гопнеги чирикают "Слышь, червонец одолжи а?" (червонец - чирик)art_zh wrote:и чтоб чирикала
А в Колибри разве есть понятие курсора "песочные часы"? Всё и так летает, не?art_zh wrote:и крылышками махала...
В Колибри есть понятие - слишком много жрущих процессорное время приложений запущено, либо одно, которое написал больной на голову программист, которое ушло в вечный цикл перерисовки своего окна. Но система естественно такое не отслеживает - сервиса такого не предусмотрено.Freeman wrote:А в Колибри разве есть понятие курсора "песочные часы"? Всё и так летает, не?art_zh wrote:и крылышками махала...
Интересная идея, мне очень понравилась. Только врятли у меня получится нарисовать курсор в виде Колибри, но попробовать стоит.Freeman wrote:В порядке общего бреда: только мне грезится курсор в виде колибри?
Кто-то выкладывал на форуме векторный логотип. Из него и можно сделать. Только придётся развернуть в другую сторону. Стремление вперёд похвально, но мышиные стрелки пока ориентируется на правшей.
Искать надо. Ну я пока фейс переделываю, а стрелку делать буду скорее всего в последнюю очередь, поэтому пока не срочно.
Freeman wrote:Кто-то выкладывал на форуме векторный логотип.
Логотип (и не только) в этой теме.Rock_maniak_forever wrote:Искать надо.
dunkaist wrote:Логотип (и не только) в этой теме.
Вопросы по 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], и делаю вот так:
Как мне казалось, этот код должен был изменить атрибуты красной, синей и зеленой составляющих на FF для всех точек исходного массива, не равных 1. Но на самом деле этот код выводит кашу. Видимо, с структурой изображения нужно работать как-то по-другому. Вопрос - как?
И еще, наверное, вместо простого задания char data[300*300*3] правильнее работать через malloc? Как это нужно делать?
2) Если в коде программы есть fopen (да и другие операции с ФС), то она отказывается собираться:
Это проблема моей сборки libc, или так и должно быть? Как тогда собирается doom?
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;}}}
И еще, наверное, вместо простого задания 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 для Колибри мне не нравится. Поэтому ими не пользуюсь и конкретно посоветовать ничего не могу. Код вроде правильный (зачем только столько скобочек? ). Предположение - попробовать заменить тип data с char на unsigned char. И второе - поменять x и y в индексе массива data. Но без полного исходника, входных и выходных данных сказать точно не могу.
там просто нужно умножить координату Y на 3, т. е.Albom wrote:И второе - поменять x и y в индексе массива data
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
Не знаю точно что с libc, сам я ради интереса занимался велосипедостроением. Вот несколько функций для чтения/записи файлов, если нужно. Не фонтан, но работали.Sorcerer wrote:2) Если в коде программы есть fopen (да и другие операции с ФС), то она отказывается собираться:
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;
}
}
Спасибо за помощь!
Функции чтения/записи тоже имею, но из-за природной лени хотелось "родные" Сишные команды... Не привык я работать с аттрибутами, буферами. Ну что же, если выбора нет, придется учиться.
Функции чтения/записи тоже имею, но из-за природной лени хотелось "родные" Сишные команды... Не привык я работать с аттрибутами, буферами. Ну что же, если выбора нет, придется учиться.
Sorcerer
Собранная версия http://ftp.kolibrios.org/users/Asper/menuetlibc/.
Собранная версия http://ftp.kolibrios.org/users/Asper/menuetlibc/.
Who is online
Users browsing this forum: No registered users and 5 guests