Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Apr 25, 2019 6:10 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 2 posts ] 
Author Message
PostPosted: Thu Sep 12, 2013 11:29 pm 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
Писалось для своих нужд, возможно кому-то будет полезным.
http://board.kolibrios.org/download/file.php?id=5166
Полезные мелочи:
- пути могут содержать любое количество пробелов (но не табов)
- пробелы в параметрах типа "my folder/file.me" не учитываются и считаются за один параметр




Функции:


__get_param_count - возвращает общее количество параметров
Code:
на входе: esi -> указатель на строку с параметрами
на выходе: eax -> число параметров
портит: eax

__get_param_str - возвращает параметр по порядковому номеру
Code:
на входе: esi -> указатель на строку с параметрами
на входе: eax -> порядковый номер параметра, который требуется вернуть
на выходе: eax -> длина в символах возвращаемого параметра
на выходе: edx -> указатель на буффер в который записан параметр
портит: eax,edx


Применение:


example.asm
Code:
  use32
  org    0x0

  db    'MENUET01'
  dd    0x01
  dd    START
  dd    I_END
  dd    0x1000
  dd    0x1000
  dd    APP_PARAM  ; ----> ! ВАЖНО
  dd    0x0

START:
    mov     esi, APP_PARAM ; строка с параметрами
    call  __get_param_count ; вызываем функцию
    mov     [count],eax ; получили в eax общее количество переданных параметров

    mov     esi, APP_PARAM ; строка с параметрами (необязательно, т.к. esi не испорчен)
    mov     eax,2 ; просим вернуть 2 параметр ввиде строки
    call  __get_param_str ; вызываем функцию
    mov     [paramlen],eax; получили длину символов 2го параметра
    ; edx - хранит указатель на строку (256 byte), которую впринципе можно вывести через 4ю функцию
    ;...
    ;...
    include "getparam.asm";
    ;...
    ;...

    APP_PARAM dd 256 dup(0)
    count    dd 0
    paramlen    dd 0

getparam.asm
Code:
    GP_BUFF_SIZE equ 64 ; максимальная длина возвращаемого параметра (одного) 64*4 (dd) = 256 байт


Примеры:


Code:
example.bin   /a   /b="immortal/good.png" /t="sys/my folder/1.png"    +O -Y  #23
__get_param_count вернет: 6
__get_param_str вернет:
 /a
 /b="immortal/good.png"
 /t="sys/my folder/1.png"
 +O
 -Y
 #23


Планы:


__get_param_type - возвращает типы
- строка (/t) (+IO) (time)
- структура (a=****)
- путь (".....")
- целочисленное (5)
- дробное (2.71)
- hex (0x0...)
__get_param_name - возвращает имя параметра если его тип "структура"
__get_param_value - возвращает значение параметра если его тип "структура"
color=0x000000 - ( color - имя, 0x000000 - значение)
Image


Attachments:
getparam.zip [2.25 KiB]
Downloaded 236 times
Top
   
PostPosted: Fri Sep 13, 2013 12:23 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Похоже на результат работы самодельного транслятора.
Code:
    dec     eax                 ; get path length

    cmp     eax,0               ; length = 0
    je      loc_gpc_end         ; goto exit

Тут cmp не нужно — dec воздействует на zero-flag.

Quote:
Планы:

__get_param_type - возвращает типы
Как ты будешь строку 0123 отличать от числа 0123?

Кстати, вместе с masm32 поставляется что-то похожее(файл masm32\M32LIB\CLARGS.ASM).


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 2 posts ] 

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