Subversion Repositories Kolibri OS

Rev

Rev 7159 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; ret:
  2. ; 0 - not found param
  3. ; 1 - found param
  4. ; 2 - error parsing
  5.  
  6. proc getLastParam       ;¯®á«¥¤­¨© ¯ à ¬¥âà ¯¨è¥â ¢ fInp
  7. xor     al, al          ;to end sring
  8.         mov     edi, params
  9.         mov     ecx, 4096
  10.         repne   scasb
  11.         dec     edi
  12.         dec     edi
  13.         test    ecx, ecx
  14.         jz      errorParsing
  15.  
  16.         mov     eax, ecx       ; - spaces
  17.         mov     ecx, 4096
  18.         sub     ecx, eax
  19.         mov     al, ' '
  20.         std
  21.         repe    scasb
  22.         cld
  23.         inc     edi
  24.         inc     ecx
  25.  
  26.         cmp     edi, params
  27.         je      .noparams
  28.  
  29.         cmp     [edi], byte '"'
  30.         je      .quotation
  31.  
  32.         mov     al, ' '         ;find previous space or begin string
  33.         std
  34.         repne   scasb
  35.         cld
  36.         inc     edi
  37.         inc     edi
  38.  
  39.         mov     esi, edi        ;copy
  40.         mov     ebx, edi
  41.         mov     edi, fInp
  42.  
  43.         xor     ecx, ecx
  44.      @@:lodsb
  45.         cmp     al, ' '
  46.         je      @f
  47.         test    al, al
  48.         je      @f
  49.         stosb
  50.         inc     ecx
  51.         jmp     @b
  52.      @@:
  53.         mov     [edi], byte 0
  54.         inc     edi
  55.  
  56.         mov     edi, ebx        ;clear
  57.         mov     al, ' '
  58.         rep stosb
  59.  
  60.         jmp     .end
  61.  .quotation:
  62.         dec     edi
  63.         mov     al, '"'
  64.         std
  65.         repne   scasb
  66.         cld
  67.         add     edi, 2
  68.         cmp     [edi-1], byte '"'
  69.         jne     .err
  70.  
  71.         mov     esi, edi
  72.         mov     ebx, edi
  73.         mov     edi, fInp
  74.         xor     ecx, ecx
  75.      @@:lodsb
  76.         cmp     al, '"'
  77.         je      @f
  78.         test    al, al
  79.         je      @f
  80.         stosb
  81.         inc     ecx
  82.         jmp     @b
  83.      @@:
  84.         mov     [edi], byte 0
  85.         inc     edi
  86.  
  87.         mov     edi, ebx
  88.         dec     edi
  89.         mov     al, ' '
  90.         add     ecx, 2
  91.         rep stosb
  92.  
  93. .end:
  94.         mov     eax, 1
  95.         ret
  96. .err:
  97.         mov     eax, 2
  98.         ret
  99. .noparams:
  100.         xor     eax, eax
  101. endp
  102.  
  103.  
  104. proc getParam2
  105. locals
  106. retrn rd 0
  107. endl
  108.         mov     [retrn], 0
  109.         mov     ebx, params
  110.   .find_o:
  111.         cmp     [ebx], word '-o'
  112.         jne     .find_o2
  113.         mov     edx, ebx
  114.         lea     esi, [ebx+3]
  115.    @@:                          ;skiping spaces
  116.         cmp     esi, pathOut+1024
  117.         jae     .errorParsing
  118.         cmp     byte[esi], ' '
  119.         jne     @f
  120.         inc     esi
  121.         jmp     @b
  122.    @@:                          ;copying        ; -o "file"
  123.         mov     ecx, 3
  124.         cmp     byte[esi], '"'
  125.         jne     ._notspace
  126.         inc     esi
  127.         add     ecx, 2
  128.         mov     edi, pathOut
  129.         mov     [retrn], 1
  130.     @@: lodsb
  131.         cmp     al, '"'
  132.         je      .clear
  133.         stosb
  134.         inc     ecx
  135.         cmp     esi, pathOut+1024
  136.         jae     errorParsing
  137.         jmp     @b
  138.  
  139.      ._notspace:                ;copying        ; -o file
  140.         mov     edi, pathOut
  141.     @@: lodsb
  142.         stosb
  143.         inc     ecx
  144.         cmp     al, ' '
  145.         je      .clear
  146.         cmp     esi, pathOut+1024
  147.         jae     errorParsing
  148.         jmp     @b
  149.  
  150.      .clear:                    ;cleaning param
  151.         mov     [edi], byte 0
  152.         inc     edi
  153.         mov     [retrn], 1
  154.       @@:
  155.         mov     byte[edx], ' '
  156.         inc     edx
  157.         loop    @b
  158.         jmp     @f
  159.  
  160.   .find_o2:
  161.         inc     ebx
  162.         cmp     ebx, pathOut+1024
  163.         jae     @f
  164.         cmp     byte[ebx], 0
  165.         je      @f
  166.         jmp     .find_o
  167.   @@:
  168.  
  169.  
  170.  
  171.         mov     eax, [retrn]
  172.         ret
  173. .errorParsing:
  174.         mov     eax, 2
  175.         ret
  176. endp
  177.  
  178.  
  179. proc getParam key:word
  180. locals
  181. retrn rd 0
  182. endl
  183.         mov     [retrn], 0
  184.         mov     ebx, params
  185.  
  186.   .find_o:
  187.         mov     ax, [key]
  188.         cmp     [ebx], ax
  189.         jne     .find_o2
  190.  
  191.         mov     edx, ebx
  192.         lea     esi, [ebx+3]
  193.  
  194.    @@:                          ;skiping spaces
  195.         cmp     esi, params+4096
  196.         jae     .errorParsing
  197.         cmp     byte[esi], ' '
  198.         jne     @f
  199.         inc     esi
  200.         jmp     @b
  201.    @@:
  202.  
  203.                                 ;copying        ; -f "file"
  204.         mov     ecx, 3
  205.         cmp     byte[esi], '"'
  206.         jne     ._notspace
  207.         inc     esi
  208.         add     ecx, 2
  209.         mov     edi, [endPointer]
  210.         mov     [retrn], 1
  211.     @@: lodsb
  212.         cmp     al, '"'
  213.         je      .clear
  214.         stosb
  215.         inc     ecx
  216.         cmp     esi, params+4096
  217.         jae     errorParsing
  218.         jmp     @b
  219.  
  220.      ._notspace:                ;copying        ; -f file
  221.         mov     edi, [endPointer]
  222.     @@: lodsb
  223.         stosb
  224.         inc     ecx
  225.         cmp     al, ' '
  226.         je      .clear
  227.         cmp     esi, params+4096
  228.         jae     errorParsing
  229.         jmp     @b
  230.  
  231.  
  232.      .clear:                    ;cleaning param
  233.         mov     [edi], byte 0
  234.         inc     edi
  235.         mov     [endPointer], edi
  236.         mov     [retrn], 1
  237.       @@:
  238.         mov     byte[edx], ' '
  239.         inc     edx
  240.         loop    @b
  241.  
  242.         jmp     @f
  243.  
  244.   .find_o2:
  245.         inc     ebx
  246.         cmp     ebx, params+4096
  247.         jae     @f
  248.         cmp     byte[ebx], 0
  249.         je      @f
  250.         jmp     .find_o
  251.   @@:
  252.  
  253.  
  254.  
  255.         mov     eax, [retrn]
  256.         ret
  257. .errorParsing:
  258.         mov     eax, 2
  259.         ret
  260. endp
  261.