Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Apr 08, 2020 3:02 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 140 41 42 43 4476 Next
Author Message
PostPosted: Mon Nov 12, 2012 4:10 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
Остался один момент - не хочет удалять диски. А добавляет отлично. Падает с PageFault.


Attachments:
tmpdisk.zip [2.46 KiB]
Downloaded 79 times

_________________
Через тернии к звездам
Top
   
PostPosted: Mon Nov 12, 2012 4:34 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
strchr в этой странной реализации, в отличие от POSIX, при ошибке возвращает не 0, а длину строки, соответственно, ветка про добавление диска срабатывает и при запросе на удаление и из-за этого всё идёт наперекосяк. Я, правда, не поняла, почему именно падает, а не сообщает об ошибке. Где именно PF?

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


Top
   
PostPosted: Mon Nov 12, 2012 7:36 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
Вот тут, сейчас буду проверять и править...


Attachments:
Безымянный.png
Безымянный.png [ 157.88 KiB | Viewed 1759 times ]

_________________
Через тернии к звездам
Top
   
PostPosted: Mon Nov 12, 2012 7:56 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Ясно. strchr в этой странной реализации при ошибке возвращает даже не длину строки, а мусор - то, что было до вызова в eax, с обнулённым al. Отсюда и падение при попытке проинтерпретировать этот мусор как указатель на число.

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


Top
   
PostPosted: Tue Nov 13, 2012 2:43 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
Code:
struc boxy
{
  left   dd ?
  top    dd ?
  width  dd ?
  height dd ?
}

BOX boxy

struc process_info
{
  cpu_usage               dd ?  ; +0
  window_stack_position   dw ?  ; +4
  window_stack_value      dw ?  ; +6
                          dw ?  ; +8
  process_name            rb 12 ; +10
  memory_start            dd ?  ; +22
  used_memory             dd ?  ; +26
  PID                     dd ?  ; +30
  box                     BOX   ; +34
  dw ?
  slot_state              dw ?  ; +50
                          dw ?  ; +52
  client_box              BOX   ; +54
  dw ?
  wnd_state               db ?  ; +70
  rb (1024-71)
}

Пишет ошибка box BOX ; +34 - illegal instuction. Что я делаю не так?

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


Top
   
PostPosted: Tue Nov 13, 2012 3:21 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 814
Leency wrote:
Пишет ошибка box BOX ; +34 - illegal instuction. Что я делаю не так?

В этой записи скорее всего предполагается что BOX это тип данного т. е. название структуры.
А у тебя структура имеет тип данного boxy вместо BOX, потому и конфликтует. Т. е. этот код:
Leency wrote:
struc boxy{  left   dd ?  top    dd ?  width  dd ?  height dd ?}BOX boxy

должен быть таким:
Code:
struc BOX{
  left   dd ?
  top    dd ?
  width  dd ?
  height dd ?
}
boxy BOX <>

Потому как в ассемблере сначала идет имя переменной а потом ее тип (а в Си наоборот)


Top
   
PostPosted: Tue Nov 13, 2012 4:23 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
Спасибо, но не прокатило. Я уже прочитал инструкцию и сделаю обычно-привычно.

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


Top
   
PostPosted: Tue Nov 13, 2012 4:52 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
Сделал, компилится, но не работает.
Code:
      ;Leency{
      mov     eax,9
      mov     ebx,process_info_buffer
      mov     ecx,-1
      mov     eax,[ebx+70]
      mov     [window_status],eax
      test    [window_status],100b   ; window is rolled up
      jnz     .exit
      test    [window_status],10b    ; window is minimized to panel
      jnz     .exit
      ;test   [process_info_buffer.wnd_state], 0x04
      ;jnz       .exit
      ;}Leency
        call    con.draw_image

.exit:
        push    12
        pop     eax
        push    2
        pop     ebx
        int     0x40
      
        ret

......................................

struc process_info
{
  cpu_usage               dd ?  ; +0
  window_stack_position   dw ?  ; +4
  window_stack_value      dw ?  ; +6
                          dw ?  ; +8
  process_name            rb 12 ; +10
  memory_start            dd ?  ; +22
  used_memory             dd ?  ; +26
  PID                     dd ?  ; +30
  box.x                   dd ?  ; +34
  box.y                   dd ?  ; +38
  box.width               dd ?  ; +42
  box.height              dd ?  ; +46
  slot_state              dw ?  ; +50
                          dw ?  ; +52
  client_box.x            dd ?  ; +54
  client_box.y            dd ?  ; +58
  client_box.width        dd ?  ; +62
  client_box.height       dd ?  ; +66
  wnd_state               db ?  ; +70
  rb (1024-71)
}
process_info_buffer process_info
window_status      rd 1

Не могу понять где ошибка. Закоммиченый код
test [process_info_buffer.wnd_state], 0x04
jnz .exit
почему-то тоже выдаёт ошибку...

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


Top
   
PostPosted: Tue Nov 13, 2012 6:59 am 
Offline
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 465
Ты не делаешь int 0x40.


Top
   
PostPosted: Tue Nov 13, 2012 12:49 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Закомментированый, ты имеешь в виду? ;)


Top
   
PostPosted: Tue Nov 13, 2012 1:02 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
dunkaist
Ох, спасибо. Я завтыч. :)

SoUrcerer
Типа да)

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


Top
   
PostPosted: Tue Nov 13, 2012 3:45 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Устанавливаю с помощью SysFn30.1 текущую папку "/rd/1/fonts/".
Сразу после этого устанавливаю текущую папку "../".
Затем с помощью SysFn30.2 получаю текущую папку.
Возвращается "/rd/1/fonts" (без слеша в конце).
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

sz_path      db "/rd/1/fonts/",0
; sz_dot_slash db "./",0
sz_dot_dot_slash db "../",0

curdir: resb 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   
   
    ; set.current.directory
    mov eax, 30
    mov ebx, 1
    mov ecx, sz_path
    int 64   

    ; set.current.directory
    ; mov eax, 30
    ; mov ebx, 1
    ; mov ecx, sz_dot_slash
    mov ecx, sz_dot_dot_slash
    int 64       
     
    ; get.current.directory
    ; mov eax, 30
    inc ebx ;mov ebx, 2
    mov ecx, curdir
    mov edx, 256
    int 64   

    ; draw.text
    mov eax, 4
    xor ebx, ebx
    mov edx, ecx ;curdir   
    mov ecx, 80000000h
    int 64   
   
    ; redraw.finish
    mov eax, 12
    mov ebx, 2
    int 64
   
ret

end_:

А вот что выдал SHELL:
Image


Top
   
PostPosted: Tue Nov 13, 2012 7:04 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
Так наверно оно не поддерживает ../ надо вручную обрезать последнюю папку и устанавливать результат.

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


Top
   
PostPosted: Wed Nov 14, 2012 5:43 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
0CodErr
Со слешами на конце вообще мутная история. Самый простой способ - не использовать их.
1. /rd/1/fonts/ интерпретируется как путь к подпапке с пустым именем в папке fonts. Например, попытки обращения к файлам относительно этой папки будут пытаться смотреть на файлы типа /rd/1/fonts//somefile и возвращать ошибку о несуществующем пути. С другой стороны, функция 30.1 съедает первый слеш после . и .., так что переход в папку ../ - то же самое, что и в папку .., что отбрасывает последний компонент пути - пустое имя. По-видимому, такая несогласованность - это баг, но неоднозначно, каким должно быть правильное поведение.
2. shell не использует ни 30.1, ни 30.2, а самостоятельно хранит текущую папку, показывая её по pwd. В ситуации на картинке новой текущей папкой оказывается /rd/1/fonts/../, и это баг shell, что в этом случае .. не сворачивается.
3. Последний ls обращается к ядру за листингом папки /rd/1/fonts/.., и мусор на картинке - баг ядра. Я полагаю, это связано с тем, что .. не обрабатывается специально, а в случае FAT, когда родительская папка - корень, папка .. указывает в 0, для чего нет специальной обработки.

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


Top
   
PostPosted: Wed Nov 14, 2012 6:35 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5111
Замечу только что когда HTMLv был ещё молодым [инвалидом] и не умел переходить по ../
Адреса типа /rd/1/html/history/olala/../../page.htm работали и загружали нужную страницу.

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 140 41 42 43 4476 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:  
Powered by phpBB® Forum Software © phpBB Limited