Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; ‘âàãªâãà  ¤«ï ä㭪樨 70
  3. ;
  4.  
  5. struc sinfo
  6. {
  7.         .subfnc_name     dd 0
  8.         .pos_in_file     dd 0
  9.         .reserved        dd 0
  10.         .bytes_to_read   dd 0
  11.         .pbuffer         dd 0
  12.         .null            db 0
  13.         .pname           dd 0
  14. }
  15.  
  16.  
  17.  
  18.  
  19. ;
  20. ;  â ¡«¨æë §­ ç¥­¨©
  21. ;
  22. ;  +----+-------------+-----------------+
  23. ;  | in | Variable    | Variable        |
  24. ;  | de | name        | string          |
  25. ;  | x  |             |                 |
  26. ;  |    |             |                 |
  27. ;  +----+-------------+-----------------+
  28. ;  |    |             |                 |
  29. ;  |    |             |                 |
  30. ;  | 1  | UIN         | 'XXXXX..XX',0   |
  31. ;  |    |             |                 |
  32. ;  +----+-------------+-----------------+
  33. ;  |                  |                 |
  34. ;
  35. ;  § £à㧪  int ¯®ª  ­¥ ॠ«¨§®¢ ­ 
  36. ;
  37. ;  +----+-------------+-----------------+
  38. ;  | in | Variable    | Variable        |
  39. ;  | de | name        | int             |
  40. ;  | x  |             |                 |
  41. ;  |    |             |                 |
  42. ;  +----+-------------+-----------------+
  43. ;  |    |             |                 |
  44. ;  |    |             |                 |
  45. ;  | 1  |    BUFFSIZE |  XXXXXXXX       |
  46. ;  |    |             |                 |
  47. ;  +----+-------------+-----------------+
  48. ;  |                  |                 |
  49. ;
  50. ;
  51.  
  52.  
  53. TABLE_SIZE      equ 16
  54. VNAME_LEN       equ 8
  55. VAR_LEN         equ 16
  56.  
  57. ;
  58. ; Ž¯¨á ­¨¥ â ¡«¨æë §­ ç¥­¨©
  59.  
  60. virtual at 0
  61.   vartable:
  62.         .uin db VAR_LEN dup ?
  63.         .pass db VAR_LEN dup ?
  64.         .icqip db VAR_LEN dup ?
  65.        
  66.  
  67.  
  68. end virtual
  69.  
  70.  
  71. ;
  72. ; Š®¤ë ®è¨¡®ª ä ©«®¢®© á¨á⥬ë
  73. ;
  74.  
  75. FIO_SUCCESS             equ 0
  76. FIO_UNSUPPORTED         equ 2
  77. FIO_UNKNOWNFS           equ 3
  78. FIO_FILENOTFOUND        equ 5
  79. FIO_EOF                 equ 6
  80. FIO_BADPOINTER          equ 7
  81. FIO_DISKFULL            equ 8
  82. FIO_FATDAMAGED          equ 9
  83. FIO_DENIED              equ 10
  84. FIO_ERRORDEVICE         equ 11
  85.  
  86.  
  87. IOBUFF_SIZE     equ 128
  88.  
  89.  
  90.  
  91.  
  92. ;
  93. ; ¬ ªà®á ¤«ï ¯®¨áª  í«¥¬¥­â  ¢ áâப¥
  94. ; ¢®§¢à é ¥â ¢ eax ­®¬¥à í«¥¬¥­â  ¨«¨ -1 ¥á«¨ ­¥ ­ ©¤¥­
  95. macro findchar string, len, char
  96. {
  97.    local ..fc_endstr, ..fc_end
  98.  
  99.    push ebx
  100.    push ecx
  101.    push edi
  102.  
  103.  
  104.    mov edi, string
  105.    mov ecx, len
  106.    mov ebx, ecx
  107.    cld
  108.    mov al, char
  109.    repne scasb
  110.    jcxz ..fc_endstr
  111.  
  112.    sub ebx, ecx  ; ®¬¥à =
  113.    mov eax, ebx
  114.    jmp ..fc_end
  115.  
  116.  ..fc_endstr:
  117.    mov eax, -1
  118.  
  119.  
  120.  ..fc_end:
  121.    pop edi
  122.    pop ecx
  123.    pop ebx
  124.  
  125. }
  126.  
  127. ;
  128. ; Œ ªà®á ¤«ï ¯®¨áª  í«¥¬¥­â  áâப¨, ®â«¨ç î饣®áï ®â
  129. ; § ¤ ­­®£®
  130.  
  131. macro findother string, len, char
  132. {
  133.    local ..fc_endstr, ..fc_end
  134.  
  135.    push ebx
  136.    push ecx
  137.    push edi
  138.  
  139.  
  140.    mov edi, string
  141.    mov ecx, len
  142.    mov ebx, ecx
  143.    cld
  144.    mov al, char
  145.    repe scasb    ; …᫨ ᨬ¢®« ­¥ char - ¢ë室¨¬
  146.    jcxz ..fc_endstr   ; áâப  ¨§ char
  147.  
  148.    sub ebx, ecx   ; ¢ ebx - ­®¬¥à í«¥¬¥­â  ®â«¨ç­®£® ®â char
  149.    mov eax, ebx
  150.    jmp ..fc_end
  151.  
  152.  ..fc_endstr:
  153.    mov eax, -1
  154.  
  155.  
  156.  ..fc_end:
  157.    pop edi
  158.    pop ecx
  159.    pop ebx
  160. }
  161.  
  162. ;
  163. ; Œ ªà®á ¤«ï ª®¯¨à®¢ ­¨ï áâப
  164. ;
  165. macro mstrcpy from, to, leng
  166. {
  167.  
  168.    push ecx
  169.    push esi
  170.    push edi
  171.  
  172.    mov ecx, leng
  173.    mov esi, from
  174.    mov edi, to
  175.    cld
  176.    rep movsb
  177.  
  178.    pop edi
  179.    pop esi
  180.    pop ecx
  181.  
  182. }
  183.  
  184.  
  185. ;
  186. ; ˆ­¨æ¨ «¨§¨àã¥â â ¡«¨æë
  187. ;
  188.  
  189. ;  inittables:
  190. ;
  191. ;
  192. ;   mstrcpy name1, nvtable, VNAME_LEN
  193. ;   mstrcpy name2, (nvtable + NAME_LEN), VNAME_LEN
  194. ;   mstrcpy name3, (nvtable + NAME_LEN * 2), VNAME_LEN
  195. ;
  196. ;
  197. ;
  198. ;  ret  
  199.  
  200.  
  201. ;                
  202. ; § ¯®«­ï¥â â ¡«¨æë §­ ç¥­¨ï¬¨
  203. ; IN eax - ASCIIZ ¨¬ï ä ©« 
  204. ; OUT eax - १ã«ìâ â ç⥭¨ï
  205. ; ¥á«¨ १ã«ìâ â -1, ä®à¬ â ä ©«  ­¥¯à ¢¨«ì­ë©
  206. ;
  207.   parseconf:
  208.    push edi
  209.    push esi
  210.    ;push eax
  211.    push ebx
  212.    push ecx
  213.    push edx
  214.  
  215.    mov [strnum], dword 0
  216.    
  217.    ;
  218.    ; à®ç¨â âì ¯®áâà®ç­® ª®­ä¨£
  219.    ; ¥á«¨ áâப  ­ ç¨­ ¥âáï á ;, #  - ª®¬¬¥­â à¨©
  220.    ; ”®à¬ â UIN="1234567890"
  221.    ; PASS="******" ¨ â.¤.
  222.  
  223.    ;
  224.    ; ‘¡à®á ᬥ饭¨ï
  225.    mov [shift], dword 0
  226.  
  227.    mov esi, eax
  228.    
  229.  pc_still:
  230.  
  231.    mov edx, esi
  232.    mov ecx, IOBUFF_SIZE
  233.    mov ebx, iobuff
  234.  
  235.    call getstr
  236.  
  237.    inc [strnum]
  238.  
  239.    push eax
  240.  
  241.    ;
  242.    ;à®¢¥àª  ¯®«ã祭­®© áâப¨
  243.    ;
  244.    movzx eax, byte [iobuff]
  245.  
  246.    test eax, eax
  247.    jz pc_next
  248.  
  249.    cmp al, '#'
  250.    jz pc_next
  251.  
  252.    cmp al, ';'
  253.    jz pc_next
  254.  
  255.    ;
  256.    ;  ©â¨ ¨¬ï ¯¥à¥¬¥­­®©
  257.    ;
  258.    findother iobuff, ebx, ' '
  259.    cmp eax, -1
  260.    jz pc_next
  261.    
  262.    mov [stnpos], eax  ;­ ç «® ¨¬¥­¨
  263.  
  264.    ;
  265.    ; ­ ©â¨ =
  266.    ;
  267.    mov ecx, ebx   ; ˆáª âì ®â ­ ©¤¥­­®£® ᨬ¢®« 
  268.    sub ecx, eax   ;
  269.  
  270.    mov edi, iobuff
  271.    add edi, eax
  272.  
  273.    findchar edi, ecx, '='
  274.  
  275.    cmp eax, -1
  276.    jz pc_badformat
  277.  
  278.    mov edi, [stnpos]
  279.    add eax, edi   ; ¢ eax - ᬥ饭¨¥ ®â ­ ç «  áâப¨
  280.    mov [eqpos], eax
  281.  
  282.    mov ecx, ebx
  283.    sub ecx, eax
  284.  
  285.    ;
  286.    ; ¯à®¢¥à¨âì "
  287.    ;
  288.    mov dl, [iobuff + eax]
  289.    cmp dl, '"'
  290.    jnz pc_badformat
  291.    ;
  292.    ; ­ ©â¨ § ªà뢠îéãî "
  293.    ;
  294.    mov edi, iobuff
  295.    add edi, eax
  296.  
  297.    inc edi
  298.  
  299.    findchar edi, ecx, '"'
  300.  
  301.    cmp eax, -1
  302.    jz pc_badformat
  303.  
  304.    inc eax
  305.  
  306.    mov edx, [eqpos]
  307.    add eax, edx
  308.    mov [edvpos], eax
  309.  
  310.    ;
  311.    ; “áâ ­®¢¨âì §­ ç¥­¨¥
  312.    ;
  313.    ; „®¡ ¢¨âì § ¢¥àè î騥 0
  314.  
  315.    mov eax, [stnpos]
  316.    dec eax
  317.  
  318.  
  319.    mov ebx, [eqpos]
  320.    mov ecx, ebx
  321.    dec ecx            ; ª®«¨ç¥á⢮ ᨬ¢®«®¢ ¤® =
  322.    inc ebx            ; à®¯ãáâ¨âì "
  323.  
  324.    mov [iobuff + ecx], byte 0
  325.  
  326.    mov edx, [edvpos]
  327.    dec edx
  328.  
  329.    mov [iobuff + edx], byte 0
  330.  
  331.    lea eax, [iobuff + eax]
  332.    lea ebx, [iobuff + ebx]
  333.    call setavar
  334.  
  335.    jmp pc_next
  336.  
  337.  
  338.  
  339.  
  340.  pc_badformat:
  341.    pop eax
  342.  
  343.    mov ebx, [strnum]
  344.    jmp pc_err
  345.  
  346.  
  347.  pc_next:
  348.    pop eax
  349.  
  350.    cmp eax, FIO_EOF
  351.    jz pc_eof
  352.    cmp eax, FIO_SUCCESS
  353.    jnz pc_err
  354.  
  355.  jmp pc_still
  356.  
  357.  
  358.  
  359.  pc_eof:
  360.  pc_err:
  361.    pop edx
  362.    pop ecx
  363.    pop ebx
  364.    ;pop eax
  365.    pop esi
  366.    pop edi
  367.   ret
  368.  
  369. ; ®¨áª ¢ â ¡«¨æ¥ ¯¥à¥¬¥­­®© ¨ ãáâ ­®¢ª  ¥ñ §­ ç¥­¨ï
  370. ; IN eax - ­ §¢ ­¨¥ ¯¥à¥¬¥­­®© 㪠§ â¥«ì ­  ASCIIZ
  371. ; IN ebx - §­ ç¥­¨¥ ¯¥à¥¬¥­­®© 㪠§ â¥«ì ­  ASCIIZ
  372. ; OUT eax -१ã«ìâ â 0 = OK, -1 = ­¥â ¢ â ¡«¨æ¥ ¯¥à¥¬¥­­ëå
  373. ; OUT § ¯®«­ï¥â £«®¡ «ì­ãî â ¡«¨æã
  374.   setavar:
  375.    ;push ebx
  376.    push ecx
  377.    push edx
  378.    push esi
  379.    push edi
  380.    push ebx
  381.  
  382.    ;
  383.    ; Ž¯à¥¤¥«¨âì ¤«¨­ã áâப¨ - ­ §¢ ­¨¥ ¯¥à¥¬¥­­®©
  384.    ;
  385.    mov edi, eax
  386.    push eax
  387.  
  388.    mov ecx, VNAME_LEN
  389.  
  390.    xor eax, eax ;ˆé¥¬ \0
  391.    cld
  392.    repne scasb
  393.  
  394.    mov eax, VNAME_LEN
  395.    sub eax, ecx       ; ‚ ecx - ®áâ â®ª ¤® ¬ ªá¨¬ «ì­®£® à §¬¥à  áâப¨
  396.    mov ebx, eax
  397.  
  398.  
  399.    pop eax            
  400.    ;
  401.    ; ˆáª âì ¢ â ¡«¨æ¥ ¯®¤å®¤ï饥 ¨¬ï
  402.    ;
  403.    xor edx, edx         ;index
  404.  
  405.  sv_next:
  406.    mov ecx, ebx
  407.    push eax
  408.    mov esi, eax
  409.    mov edi, nvtable
  410.    mov eax, edx
  411.    imul eax, VNAME_LEN   ;offset
  412.    add edi, eax
  413.    pop eax
  414.    cld
  415.  
  416.    repe cmpsb
  417.    jz sv_match
  418.  
  419.  sv_inc:
  420.    inc edx
  421.    cmp edx, TABLE_SIZE
  422.    jae  sv_fail
  423.    jmp sv_next
  424.  
  425.  sv_match:
  426.    cmp ebx, VNAME_LEN    ;‚ ebx - ¤«¨­  ¨á室­®© áâà®çª¨
  427.    jz sv_match2
  428.  
  429.    push eax
  430.    mov edi, nvtable
  431.    mov eax, edx
  432.    imul eax, VNAME_LEN   ;offset
  433.    add edi, eax
  434.    pop eax
  435.  
  436.    cmp [edi + ebx], byte 0 ; …᫨ ¨¬ï ¢ â ¡«¨æ¥ ª®à®ç¥ ¬ ªá¨¬ «ì­®£®,
  437.    jnz sv_inc                  ; § ª ­ç¨¢ ¥âáï 0
  438.  
  439.  sv_match2:
  440.    pop edi                    ;
  441.    push edi
  442.    ;
  443.    ; Ž¯à¥¤¥«ïâì ¤«¨­ã áâப¨ - ¯¥à¥¬¥­­ ï
  444.    ;
  445.    xor eax, eax
  446.    mov ecx, VAR_LEN
  447.    cld
  448.    repne scasb
  449.  
  450.    mov eax, VAR_LEN
  451.    sub eax, ecx
  452.    mov ecx, eax
  453.    mov ebx, eax
  454.  
  455.    ;
  456.    ; Š®¯¨à®¢ âì ¯¥à¥¬¥­­ãî ¢ â ¡«¨æã
  457.    ;
  458.  
  459.    pop esi
  460.    push esi
  461.  
  462.    mov eax, VAR_LEN
  463.    imul eax, edx
  464.    mov edi, vtable
  465.    add edi, eax
  466.    cld
  467.    rep movsb
  468.  
  469.    ;
  470.    ; …᫨ áâப  ª®à®ç¥ ¯®«ï ¢ â ¡«¨æ¥, § ¯¨á âì ¢ ª®­¥æ 0
  471.    ;
  472.    cmp ebx, VAR_LEN
  473.    jz sv_end
  474.    mov [edi + ebx], byte 0
  475.  
  476.  
  477.  
  478.  sv_end:
  479.    xor eax, eax
  480.    jmp sv_fin
  481.  
  482.  sv_fail:
  483.    mov eax, -1
  484.  
  485.  sv_fin:
  486.  
  487.    pop ebx
  488.    pop edi
  489.    pop esi
  490.    pop edx
  491.    pop ecx
  492.    ;pop ebx
  493.   ret
  494.  
  495.  
  496.  
  497.  
  498.  
  499. ;
  500. ; —⥭¨¥ ASCIIZ áâப¨ ¨§ ä ©« 
  501. ;  IN ebx - 㪠§ â¥«ì ­  ¡ãä¥à
  502. ;  ecx - à §¬¥à ¡ãä¥à 
  503. ;  edx - 㪠§ â¥«ì ­  áâப㠨¬ï ä ©« 
  504. ;  OUT ebx - ¤«¨­  áâப¨
  505. ;  eax - १ã«ìâ â ç⥭¨ï
  506.  
  507.   getstr:
  508.    ;push eax
  509.    ;push ebx
  510.    push ecx
  511.    push edx
  512.    push esi
  513.  
  514.    ;xor edx, edx
  515.    xor esi, esi
  516.  
  517.  gs_read:
  518.    ;
  519.    ;  ‡ ¯®«­ï¥¬ áâàãªâãàã
  520.    ;
  521.    mov [finfo.subfnc_name], 0
  522.    mov eax, [shift]
  523.    mov [finfo.pos_in_file], eax
  524.    mov [finfo.bytes_to_read], ecx
  525.    mov [finfo.pbuffer], ebx
  526.    mov [finfo.pname], edx
  527.  
  528.    push ebx
  529.  
  530.    ;
  531.    ; —¨â¥¬
  532.    ;
  533.    ;mov eax, 70
  534.    ;mov ebx, finfo
  535.    ;int 40h
  536.    mcall 70, finfo
  537.  
  538.    mov ecx, ebx    ; ‚ ebx ª®«¨ç¥á⢮ ¯à®ç⥭­ëå ¡ ©â
  539.  
  540.    pop ebx
  541.  
  542.    ;
  543.    ; à®¢¥à¨âì १ã«ìâ â ç⥭¨ï - ¥á«¨ ­¥ EOF ¨ 0,
  544.    ; ¢ë室¨¬
  545.    cmp eax, FIO_EOF
  546.    jz gs_loop
  547.    cmp eax, 0
  548.    jz gs_loop
  549.  
  550.    jmp gs_ok
  551.  
  552.  
  553.    ;
  554.    ; Ž¡à ¡®âª  ¯®«ã祭­®£® ¡«®ª 
  555.    ;
  556.  gs_loop:
  557.    mov dl, [ebx + esi]
  558.    cmp dl, 0Ah          ;cr
  559.    jz gs_cr
  560.    inc esi
  561.    cmp esi, ecx
  562.    jnb gs_err
  563.    jmp gs_loop
  564.  
  565.  gs_err:
  566.    ;
  567.    ; ‚ ¡ãä¥à¥ ­¥â ᨬ¢®«  ¯¥à¥­®á  áâப¨, â.¥. áâப  ᫨誮¬ ¤«¨­­ ï
  568.    ; Žâ¡à á뢠¥¬ ¢á¥ ¤® ¡«¨¦ ©è¥£® ᨬ¢®«  ¯¥à¥­®á  áâப¨
  569.    ; ¥á«¨ ª®­¥æ ä ©«   - ¢ë室¨¬
  570.    cmp eax, FIO_EOF
  571.    jz gs_endf
  572.    add [shift], ecx
  573.    jmp gs_read
  574.  
  575.  
  576.  gs_endf:
  577.    xor ebx, ebx
  578.    jmp gs_ok
  579.  
  580.  gs_cr:
  581.    ;
  582.    ; ‘¡à®á¨âì १ã«ìâ â ç⥭¨ï
  583.    ;
  584.    xor eax, eax
  585.  
  586.    mov dl, [ebx + esi - 1]
  587.    cmp dl, 0Dh ;le
  588.    jz gs_le
  589.  
  590.    mov [ebx + esi], byte 0
  591.    mov ebx, esi
  592.  
  593.  
  594.    inc esi
  595.    add [shift], esi
  596.  
  597.    jmp gs_ok
  598.  
  599.  gs_le:
  600.    mov [ebx + esi - 1], byte 0
  601.    mov [ebx + esi], byte 0
  602.    lea ebx, [esi - 1]
  603.  
  604.    inc esi
  605.    add [shift], esi
  606.  
  607.  gs_ok:
  608.  
  609.  
  610.    pop esi
  611.    pop edx
  612.    pop ecx
  613.    ;pop ebx
  614.    ;pop eax
  615.   ret
  616.  
  617.  
  618. ;
  619. ; ”ã­ªæ¨ï ¤«ï ¢ë¢®¤  § £à㦥­­®© ¨­äë
  620. ;
  621.  
  622.  showcfg:
  623.    push eax
  624.    push ebx
  625.    push ecx
  626.    push edx
  627.    push edi
  628.  
  629.  
  630.    xor edx, edx ; áç¥â稪
  631.  
  632.   sc_loop:
  633.  
  634.    cmp edx, TABLE_SIZE
  635.    jnb sc_end
  636.  
  637.    ;
  638.    ; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¨¬ï ¨ §­ ç¥­¨¥ ¯¥à¥¬¥­­®©
  639.    ;
  640.    mov eax, VNAME_LEN
  641.    imul eax, edx
  642.    lea eax, [nvtable + eax]
  643.  
  644.    mov cl, [eax]
  645.    cmp cl, byte 0
  646.    jz sc_next
  647.  
  648.    push eax
  649.    call strlen
  650.  
  651.    mov ecx, eax
  652.    pop eax
  653.  
  654.    mov ebx, cfgbuff
  655.  
  656.    call strcpy
  657.  
  658.    mov [cfgbuff + ecx], ':'
  659.  
  660.    lea ebx, [cfgbuff + ecx + 1]
  661.  
  662.    mov eax, VAR_LEN
  663.    imul eax, edx
  664.    lea eax, [vtable + eax]
  665.  
  666.    push eax
  667.    call strlen
  668.  
  669.    mov ecx, eax
  670.    pop eax
  671.  
  672.    call strcpy
  673.  
  674.    mov [ebx + ecx], byte 0
  675.  
  676.    mov eax, cfgbuff
  677.    xor ebx, ebx
  678.    call writemsg
  679.  
  680.   sc_next:
  681.  
  682.    inc edx
  683.  
  684.   jmp sc_loop
  685.  
  686.  
  687.  
  688.   sc_end:
  689.    pop edi
  690.    pop edx
  691.    pop ecx
  692.    pop ebx
  693.    pop eax
  694.  
  695.  ret
  696.  
  697.