Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Jun 17, 2019 6:36 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 231 posts ]  Go to page Previous 1 2 3 4 5 616 Next
Author Message
 Post subject:
PostPosted: Mon Sep 18, 2006 5:58 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Veliant

Спасибо,понял.
Проблему ошибок metcc надо решать.

Кто-нибудь может дать мне прямую ссылку на MinGW(версия GCC под виндовс) ?
А то я хочу melibc.a пересобрать.


Top
   
 Post subject:
PostPosted: Mon Sep 18, 2006 6:14 pm 
andrew_programmer
В данном случае проще было обратиться ко мне. Стандартная библиотека по серьезному не проверялась, поэтому очень может быть, что в ней много багов. Пришли (или выложи) мне неработающий код - буду исправлять.


Top
   
 Post subject:
PostPosted: Mon Sep 18, 2006 6:15 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
andrew_programmer wrote:
Veliant

Спасибо,понял.
Проблему ошибок metcc надо решать.

Кто-нибудь может дать мне прямую ссылку на MinGW(версия GCC под виндовс) ?
А то я хочу melibc.a пересобрать.

http://www.filesearch.ru/cgi-bin/s?q=mi ... &x=26&y=13


Top
   
 Post subject:
PostPosted: Mon Sep 18, 2006 6:27 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
andrew_programmer
Quote:
Пробовал писать свою версию _msys_get_key() но всё равно возвращается неправильные коды(к примеру 8230).

Приведи код функции. Я переписал плеер на С. Может смогу разобраться в чем дело.


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 3:52 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Вот эта часть кода работает с файлом.

float spektors[2][2048];

int LoadSpektr(char *filename)
{
FILE *f;
int stroka[20];
int k,counter,i,j,s,spektr_pos;
long value;
float dec,stepen;
int number;

// open file with spektr
f=fopen(filename,"r");

j=0;
spektr_pos=0;
//load spektr from file to memory
while((s=fgetc(f))!=EOF)
{
//load string from file
if (s!='\n')
{
s=s-'0';
stroka[counter]=s;
counter++;
}

//convert string to float number
if (s=='\n')
{
dec=0;
for(k=0;k<counter;k++)
{
s=stroka[k];
value=(s & 0xff);
stepen=1;
if (counter-k>0)
{
for(i=1;i<(counter-k);i++)
{stepen=stepen*10;}
}
else {stepen=1;}
dec=dec+(stepen*value);
}
//save converted number in array of spektors
spektors[j][spektr_pos]=dec;
spektr_pos++;
counter=0;
}

}

fclose(f);
return(spektr_pos);
}

А с клавиатурой я разобрался.После того,как я перераспаковал архив,глюки с неработающей клавиатурой исчезли.


Кажется я понял почему работа с файлами не работает.Взгляните на эту часть кода:
format ELF
section '.text' executable
public _msys_read_file
_msys_read_file:
;arg1 - file name
;arg2 - file offset
;arg3 - size to read
;arg4 - data
;arg5 - file size
push ebp
mov ebp,esp
xor eax,eax
mov [file_struct.operation],eax
mov eax,[ebp+12]
mov [file_struct.offset],eax
mov eax,[ebp+16]
mov [file_struct.offset],eax
mov eax,[ebp+20]
mov [file_struct.offset],eax
mov [file_struct.temp_buffer],temp_buffer
mov edx,[ebp+8]
call copy_file_name
push ebx
mov ebx,file_struct
mov eax,58
int 0x40
mov ecx,[ebp+24]
test ecx,ecx
jz .no_file_size
mov [ecx],ebx
.no_file_size:
pop ebx
pop ebp
ret 20

copy_file_name:
push esi edi
cld
mov edi,edx
xor eax,eax
xor ecx,ecx
dec ecx
repnz scasb
not ecx
mov edi,file_struct.path
mov esi,edx
rep movsb
pop edi esi
ret

file_struct:
.operation rd 1
.offset rd 1
.param:
.size rd 1
.data rd 1
.temp_buffer rd 1
.path rb 1024
temp_buffer rb 4096

Как видно,параметры в поле offset записывается три раза.Хотя некоторые параметры(например указатель на область куда загружать файл) должны записываться в другие поля.Сегодня попробую пересобрать часть melibc.a(ту её часть,которая мне нужна для работы).

Serge,а ты для работы MP3 плеера использовал 70 функцию ? Можно взглянуть на ту часть кода,которая работает с файлом ?


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 5:35 pm 
Offline

Joined: Mon Apr 10, 2006 7:22 am
Posts: 76
Code:
#include "stdio.h" 
#include "string.h"
#include "mesys.h"
#include "ogg/ogg.h"

#define FONT0      0
#define FONT1      0x10000000

#define BT_NORMAL   0
#define BT_DEL      0x80000000
#define BT_HIDE      0x40000000
#define BT_NOFRAME   0x20000000

char header[]={" -= OGG demo programm. Compiled whith TCC 0.9.23 halyavin port. Use libogg-1.1.2 =-   "};

char sz_demo_start[]={"START"};

char sz_open_file[256];
char p_sz_open_file=0;

FILE *fogg;

void draw_window()
{
   static int offs = 0;
   static int fcolor = 0;
   static int col = 0;
   int i;
   _msys_window_redraw(1);
   _msys_draw_window(100, 100, 640, 480, 0xaabbcc, 2, 0x5080d0, 0, 0x5080d0);
   _msys_write_text(6 - offs, 8, fcolor | FONT0, header, strlen(header));
   _msys_draw_bar(1, 6, 5, 13, 0x05080d0);
   _msys_draw_bar(274, 6, 26, 13, 0x05080d0);
   _msys_make_button(640 - 16, 5, 12, 12, 1 | BT_NORMAL, 0x6688dd);
   _msys_make_button(20, 25, 32, 12, 2 | BT_NORMAL, 0x6688dd);
   _msys_write_text(21, 26, fcolor | FONT0, sz_demo_start, strlen(sz_demo_start));
   _msys_write_text(40, 40, fcolor | FONT0, sz_open_file, strlen(sz_open_file));
   _msys_window_redraw(2);
}

void ogg_demo(void)
{
}

int main(int argc, char **argv)
{
   int id_button;
   int id_key;
   while(!0)
   {
      switch(_msys_wait_for_event_infinite())
      {
      case 2:
         id_key=_msys_get_key();
         if(id_key==8)
         {
            if(p_sz_open_file>0)
               {
                  sz_open_file[p_sz_open_file]=0;
                  p_sz_open_file--;
               }
         }
         if(id_key!=8)
         {
            if(p_sz_open_file<255)
               {
                  sz_open_file[p_sz_open_file]=id_key;
                  p_sz_open_file++;
                  sz_open_file[p_sz_open_file]=0;
               }
         }
         break;

      case 3:
         id_button=_msys_get_button_id();
         if(id_button == 1) return 0;
         if(id_button == 2) ogg_demo();
         break;
         
      default:
         draw_window();
         break;
      }
   }
}

люди вот ещё код, там используется получение букв с клавиатуры, и удаление на BackSpace, но почему-то, в емуляторе не работает. кроме того отсутствует NULL, а надпись NULL=(void*)0; вызывает ошибку


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 5:51 pm 
Offline

Joined: Mon May 01, 2006 10:12 pm
Posts: 349
Quote:
а надпись NULL=(void*)0; вызывает ошибку

Нулл это вроде константа, изменить её значение естественно нельзя. (если я ничего не путаю)


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 6:26 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Я использовал свою версию read_file();
Code:
format ELF
include "proc32.inc"
section '.text' executable

public read_file

struc FILEIO
{   .cmd            dd ?
    .offset         dd ?
                    dd ?
    .count          dd ?
    .buff           dd ?
                    db ?
    .name           dd ?
};


align 4
proc read_file stdcall,name:dword, buff:dword, offset:dword,count:dword

           xor eax, eax
           mov ebx, [name]
           mov edx, [offset]
           mov esi, [buff]
           mov edi, [count]

           mov [fileio.cmd], eax
           mov [fileio.offset], edx
           mov [fileio.offset+4], eax
           mov [fileio.count], edi
           mov [fileio.buff], esi
           mov byte [fileio.buff+4], al
           mov [fileio.name], ebx

           mov eax, 70
           lea ebx, [fileio]
           int 0x40

           ret
endp

align 4
fileio FILEIO

//////////// C header

extern int stdcall read_file (char *name,char*buff,int offset,int count);



Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 6:53 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Serge,спасибо.

Я так понимаю,что его MinGW надо компилировать.
Сейчас MinGW докачаю и буду "колдовать" с файлами.


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 7:20 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
В предыдущем сообщении я допустил неточность.
Сначала компилируется фасмом в объектный файл,а потом из объектных файлов собирается в melibc.a


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 7:39 pm 
Offline

Joined: Mon Apr 10, 2006 7:22 am
Posts: 76
Там нету NULL, даже если бы и был, то if(!fogg) тоже вызывает ошибку.
А почему melibc.a нельзя скомпилировать metcc?
И вообще, как делать библиотеки .a в metcc?


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 8:12 pm 
O01eg
Code:
#define NULL ((void*)0)

Не поможет? Вообще учти, что это С, а NULL вроде из С++ (могу ошибаться).

melibc.a может быть и можно компилировать metcc, но зачем? Ведь код будет намного хуже, а он будет использоваться в дальнейшем в большом количестве программ.

Библиотеки .a делают с помощью утилиты ar.exe из кучи .o файлов, которые получаются после компиляции.

Твой код у меня не скомпилился из-за остуствия файла "/ogg/ogg.h". После удаления этой строчки ошибка была найдена - функция _msys_get_key() возращает результат в формате менуета, т.е. сам код клавиши равен id_key>>8. После этого исправления редактирование строки работает. Правда из-за отсуствия вызова draw_window() при изменении данных нужно переключиться на другое приложение, а потом обратно, чтобы увидеть измененную строку.


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 8:14 pm 
andrew_programmer
Исправил ошибку в _msys_read_file. Скомпиленный melibc.a можно найти здесь: http://shade.msu.ru/~msu-se/melibc.rar


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 9:24 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
andrew_programmer
Я компилировал плеер metcc. Сегодня выложу все исходники.


Top
   
 Post subject:
PostPosted: Fri Sep 22, 2006 10:05 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Андрей(halyavin),к сожалению и эта версия не работает.
Длина файла всегда ноль.
fgetc тоже возвращает 0.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 231 posts ]  Go to page Previous 1 2 3 4 5 616 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited