Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Nov 17, 2019 2:27 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 141 42 43 44 4575 Next
Author Message
PostPosted: Wed Nov 14, 2012 9:08 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Leency, ядро обрабатывает такие файлы нормально, проблемы возникают, когда родительская папка - корень, например, /rd/1/html/history/olala/../../../html/page.htm.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Thu Nov 15, 2012 8:59 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Функция преобразования числа в строку, написа мной. Как сделать так, чтобы строка получалась не зеркальной?

Code:
dword itoa_my(dword from_int)
{
   unsigned char to_char[11], int_index, sign;
   if (from_int < 0) //запоминаем знак знак, делаем число позитивным
   {
      sign = 1;
      from_int = -from_int;
   }
   for (;int_index<from_int; int_index++) //записываем числа в обратном порядке
   {
      to_char[int_index] = from_int % 10 + '0';
      from_int /= 10;
   }
   int_index++;
   if (sign) to_char[int_index] = '-'; //запишем знак
   
   return #to_char;
}

_________________
Через тернии к звездам


Top
   
PostPosted: Thu Nov 15, 2012 9:12 pm 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
может всё положить в стек, а потом всё забрать?


Top
   
PostPosted: Thu Nov 15, 2012 10:09 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Вот так?

Code:
dword itoa_my(dword from_int)
{
   unsigned char to_char[11], int_index, sign;
   if (from_int < 0) //запоминаем знак знак, делаем число позитивным
   {
      sign = 1;
      from_int = -from_int;
   }
   for (int_index=0; from_int>0; int_index++) //записываем числа в обратном порядке
   {
      EAX = from_int % 10 + '0';
      $push eax
      from_int /= 10;
   }
   //int_index++;
   //if (sign) to_char[int_index] = '-'; //запишем знак
   for ( ;int_index>0; int_index--)
   {
      $pop eax
      to_char[int_index] = EAX;
   }
   return #to_char;
}

_________________
Через тернии к звездам


Top
   
PostPosted: Thu Nov 15, 2012 10:17 pm 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
Не особо понимаю всё написаное, но судя по подходу да, как то так.


Top
   
PostPosted: Fri Nov 16, 2012 7:00 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Code:
inline fastcall int TestBit(EAX, CL)
{
   $shr eax,cl
   $and eax,1
}
off=file_mas[filenum+za_kadrom]*304 + buf+72; //buf - буфер с данными о файлах из ф70, off - указатель на имя файла

if (!TestBit(ESDWORD[off-40], 4)) //это ФАЙЛ или папка?


Код для меня сложный, где-то здесь должна быть ошибка... Не могу понять где.

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Nov 16, 2012 10:26 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
ошибки не вижу, потому даю вопросы:
1) указатель off точно дает имя файла ?
2) а ESDWORD это макрос или функция, как оно выглядит ?
3) функция TestBit правильно работает? Что-бы проверить правильность работы функции TestBit попробуй 2 варианта
Code:
TestBit(1, 0) // должно дать 1
TestBit(0, 0) //  должно дать 0


Last edited by IgorA on Fri Nov 16, 2012 11:08 pm, edited 1 time in total.

Top
   
PostPosted: Fri Nov 16, 2012 11:01 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Leency wrote:
off=file_mas[filenum+za_kadrom]*304 + buf+72; //buf - буфер с данными о файлах из ф70, off - указатель на имя файла
Возможно не 72, а 32(размер заголовка)?

IgorA wrote:
TestBit(0, 0) // должно дать 1
Ноль же?


Top
   
PostPosted: Fri Nov 16, 2012 11:10 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
0CodErr wrote:
IgorA писал(а):TestBit(0, 0) // должно дать 1Ноль же?

ошибся, предполагал 0 а написал 1, уже исправил
0CodErr wrote:
Возможно не 72, а 32(размер заголовка)?

там 32 размер заголовка плюс 40 смещение на имя файла


Top
   
PostPosted: Sat Nov 17, 2012 12:01 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Хм... проблема не в этом...

_________________
Через тернии к звездам


Top
   
PostPosted: Tue Nov 20, 2012 8:28 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Можно ли не распаковывая, упакованный Kpack-ом файл, узнать, что это приложение Kolibri?
У неупакованного, например, "MENUET01" в заголовке. А с упакованным как?


Top
   
PostPosted: Tue Nov 20, 2012 9:17 am 
KPCK


Top
   
PostPosted: Tue Nov 20, 2012 9:45 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Но "KPCK" не говорит о том, что это именно приложение. Любой файл, упакованный Kpack-ом, будет иметь такой заголовок.
Конечно, если файл без расширения и имеет в заголовке "KPCK", то, скорее всего, это упакованное приложение. Но я хотел узнать, можно ли это определить однозначно.


Top
   
PostPosted: Tue Nov 20, 2012 10:40 am 
Без распаковки - нет.


Top
   
PostPosted: Thu Nov 22, 2012 9:52 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Читаю папки:
"/bd0/" - файл не найден
"/bd0/1/" - успешно
Само устройство "bd0" существует.
Code:
ORG 0
BITS 32
MENUET01           db 'MENUET01'
version            dd 1
program.start      dd start_
program.end        dd end_
program.memory     dd end_ + STACK_SIZE 
program.stack      dd end_ + STACK_SIZE
program.params     dd 0
program.path       dd 0

STACK_SIZE     equ 256


start_:

  call on_redraw
 
  L_1:
    ; wait.event
    mov eax, 10
    int 64

    cmp eax, 1
    jne L_2
        call on_redraw
    jmp L_1
   
    L_2:   
    cmp eax, 2
    jne L_3
      ; get.key.code
      ; mov eax, 2
      int 64
    jmp L_1
   
    L_3:   
    cmp eax, 3
    jne L_1
      ; get.button.number
      mov eax, 17
      int 64
     
      shr eax, 8
      cmp eax, 1
      jne L_1
         
      ; program.terminate
      neg eax
      int 64


on_redraw:
   
    ; redraw.start
    mov eax, 12
    mov ebx, 1
    int 64

    ; draw.window
    xor eax, eax
    mov ebx, 200
    mov ecx, 200
    mov edx, 33AABBCCh
    xor edi, edi
    int 64   
   
      
      
      
      mov eax, 70
      mov ebx, .dir.read.file_info
      int 64

    ; draw.text
    mov edx, [eax * 4 + errors]
    mov eax, 4
    xor ebx, ebx
    mov ecx, 80000000h
    int 64   
   
      
      
    ; redraw.finish
    mov eax, 12
    mov ebx, 2
    int 64
   
ret



.dir.read.file_info:
dd 1
dd 0
dd 0
dd 0
dd .buffer
db 0
dd  .FolderName


; .FolderName db "/bd0/",0
.FolderName db "/bd0/1/",0
.buffer resb 32



errors:
dd .0
dd .1
dd .2
dd .3
dd .4
dd .5
dd .6
dd .7
dd .8
dd .9
dd .10
dd .11

.0  db "0 = успешно",0
.1  db "1 = не определена база и/или раздел жёсткого диска" ,0
.2  db "2 = функция не поддерживается для данной файловой системы",0
.3  db "3 = неизвестная файловая система",0
.4  db "4 = зарезервировано, никогда не возвращается в текущей реализации",0
.5  db "5 = файл не найден",0
.6  db "6 = файл закончился",0
.7  db "7 = указатель вне памяти приложения",0
.8  db "8 = диск заполнен",0
.9  db "9 = таблица FAT разрушена",0
.10 db "10 = доступ запрещён",0
.11 db "11 = ошибка устройства",0

end_:

Как вообще проверить возможность чтения папки?
В ebx возвращается -1, если папка не найдена.
Но она может существовать и быть в это же время недоступна.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 141 42 43 44 4575 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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:  
cron
Powered by phpBB® Forum Software © phpBB Limited