Subversion Repositories Kolibri OS

Rev

Rev 7159 | 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 string
  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. ;§ ¯®«­ï¥ pathOut
  104. proc getParamOutPath
  105. locals
  106. retrn rd 0
  107. endl
  108.         mov     [retrn], 0
  109.         mov     ebx, params
  110.  
  111.   .find_o:
  112.         cmp     [ebx], word '-o'
  113.         jne     .find_o2
  114.  
  115.         mov     edx, ebx
  116.         lea     esi, [ebx+3]
  117.  
  118.    @@:                          ;skiping spaces
  119.         cmp     esi, params+4096
  120.         jae     .errorParsing
  121.         cmp     byte[esi], ' '
  122.         jne     @f
  123.         inc     esi
  124.         jmp     @b
  125.    @@:
  126.                                 ;copying        ; -o "file"
  127.         mov     ecx, 3
  128.         cmp     byte[esi], '"'
  129.         jne     ._notspace
  130.         inc     esi
  131.         add     ecx, 2
  132.         mov     edi, pathOut
  133.         mov     [retrn], 1
  134.     @@: lodsb
  135.         cmp     al, '"'
  136.         je      .clear
  137.         stosb
  138.         inc     ecx
  139.         cmp     esi, params+1024
  140.         jae     errorParsing
  141.         jmp     @b
  142.  
  143.      ._notspace:                ;copying        ; -o file
  144.         mov     edi, pathOut
  145.     @@: lodsb
  146.         stosb
  147.         inc     ecx
  148.         cmp     al, ' '
  149.         je      .clear
  150.         cmp     esi, params+1024
  151.         jae     errorParsing
  152.         jmp     @b
  153.  
  154.      .clear:                    ;cleaning param
  155.         mov     [edi], byte 0
  156.         inc     edi
  157.         mov     [retrn], 1
  158.       @@:
  159.         mov     byte[edx], ' '
  160.         inc     edx
  161.         loop    @b
  162.         jmp     @f
  163.  
  164.   .find_o2:
  165.         inc     ebx
  166.         cmp     ebx, params+1024
  167.         jae     @f
  168.         cmp     byte[ebx], 0
  169.         je      @f
  170.         jmp     .find_o
  171.   @@:
  172.  
  173.  
  174.  
  175.         mov     eax, [retrn]
  176.         ret
  177. .errorParsing:
  178.         mov     eax, 2
  179.         ret
  180. endp
  181.  
  182.  
  183. proc getParam key:word
  184. locals
  185. retrn rd 0
  186. endl
  187.         mov     [retrn], 0
  188.         mov     ebx, params
  189.  
  190.   .find_o:
  191.         mov     ax, [key]
  192.         cmp     [ebx], ax
  193.         jne     .find_o2
  194.  
  195.         mov     edx, ebx
  196.         lea     esi, [ebx+3]
  197.  
  198.    @@:                          ;skiping spaces
  199.         cmp     esi, params+4096
  200.         jae     .errorParsing
  201.         cmp     byte[esi], ' '
  202.         jne     @f
  203.         inc     esi
  204.         jmp     @b
  205.    @@:
  206.  
  207.                                 ;variant1: copying   ; -f "file"
  208.         mov     ecx, 3
  209.         cmp     byte[esi], '"'
  210.         jne     ._notspace
  211.         inc     esi
  212.         add     ecx, 2
  213.         mov     edi, [endPointer]
  214.         mov     [retrn], 1
  215.     @@: lodsb
  216.         cmp     al, '"'
  217.         je      .clear
  218.         stosb
  219.         inc     ecx
  220.         cmp     esi, params+4096
  221.         jae     errorParsing
  222.         jmp     @b
  223.  
  224.      ._notspace:                ;variant2: copying    ; -f file
  225.         mov     edi, [endPointer]
  226.     @@: lodsb
  227.         stosb
  228.         inc     ecx
  229.         cmp     al, ' '
  230.         je      .clear
  231.         cmp     esi, params+4096
  232.         jae     errorParsing
  233.         jmp     @b
  234.  
  235.  
  236.      .clear:                    ;cleaning param
  237.         mov     [edi], byte 0
  238.         inc     edi
  239.         mov     [endPointer], edi
  240.         mov     [retrn], 1
  241.       @@:
  242.         mov     byte[edx], ' '
  243.         inc     edx
  244.         loop    @b
  245.  
  246.         jmp     @f
  247.  
  248.   .find_o2:
  249.         inc     ebx
  250.         cmp     ebx, params+4096
  251.         jae     @f
  252.         cmp     byte[ebx], 0
  253.         je      @f
  254.         jmp     .find_o
  255.   @@:
  256.  
  257.  
  258.  
  259.         mov     eax, [retrn]
  260.         ret
  261. .errorParsing:
  262.         mov     eax, 2
  263.         ret
  264. endp
  265.