macro findT b,t { local .l1
.l1:    inc b
        cmp byte [b],t
        jnz  .l1
        inc b
}
macro getTxtNames b { local .0,.1 ,.2
       mov   ecx,b
       ;movzx edx,byte [.pass]
       mov   edx,0
       shl   edx,5
       add edx,.?0
.0:    mov [edx],ecx
       add edx,4
.1:    inc ecx
       cmp byte [ecx],13
       jbe  .2
       cmp byte [ecx],";"
       jnz  .1
       inc ecx
       cmp byte [ecx],13
       ja .0
.2:
}
macro copyNameNum n,to { local .1,.2
       mov edx,[.?0+edx*4]
.1:    mov bl,[edx]
       cmp bl,13
       jbe  .2
       cmp bl,";"
       jz  .2
       mov [to],bl
       inc to
       inc edx
       jmp .1
.2:
       }
macro passCntTxt {
        ;mov edx,45
        cvtsi2ss xmm1,edx
        movss xmm3,xmm1
        mov edx,0.1
        movd xmm0,edx

        mov edx,10.0
        movd xmm2,edx
        mulss xmm1,xmm0
        roundss xmm1,xmm1,9
        cvtss2si edx,xmm1
        add dl,48
        mov [ebp],dl
        mulss xmm1,xmm2
        subss xmm3,xmm1
        cvtss2si edx,xmm3
        add dl,48
        mov [ebp+1],dl
      }
macro copySmartTxt b,to,t { local .1,.2,.i
      mov eax,b
      mov ebp,to

.1:   mov bl,[eax]
      cmp bl,"?"
      jnz .i
      inc eax
      xor edx,edx
      mov dl,[eax]
      sub dl,48
      copyNameNum edx,ebp
      ;inc eax
      mov bl,32
.i:
      mov [ebp],bl
      inc eax
      inc ebp
      cmp word [eax],".."
      jz  .2
      cmp word [eax],t
      jnz .1
      xor edx,edx
      mov dl,[.pass]
      ;add dl,48
      ;mov dh,48
      ;mov word [ebp],dx
      passCntTxt
      add eax,2
      add ebp,2
      cmp word [eax],".."
      jnz .1
.2:   mov word [ebp],".."
      add ebp,2
      }
macro rplcCount b,t { local .1,.2
      mov eax,b
      mov dh,48
.1:   inc eax
      cmp word [eax],".."
      jz  .2
      cmp word [eax],t
      jnz .1
      mov dl,[.pass]
      add dl,48
      mov word [eax],dx
      add eax,2
      cmp word [eax],".."
      jnz .1
.2:
      }
macro getTkn b,t,mtk { local .l1
.l1:   inc b
       ;cmp  dword [b],"----"
       cmp  word [b],"--"
        jz  mtk
       cmp  byte [b],0
       jz   mtk
       cmp byte [b],t
       jnz .l1
       mov ax,word [b-2]
       inc b
       getTxtNames b
       mov ecx,[.txtbgn]
.1:    inc ecx
       cmp ax,word [ecx]
       jnz .1
       findT ecx,13
}
macro copyTtt f,to,tkn  { local .l1,.1,.2
        test f,f
        jz  .l1
.1:     mov al,[f]
        ;cmp al,13
        ;jbe   .l1
        test  al,al
        jz   .l1
        cmp word [f],tkn
        jz  .l1
        mov [to],al
        inc f
        inc to
        jmp .1
.l1:
}
macro copySmartTxt2 f,to,tkn { local .l1,.1,.2,.ll
        mov ecx,.?0
        ;mov  f,[ecx]
.1:     copyTtt f,to,tkn
;.1:     mov al,[f]
;        test al,al
;        jz   .ll
;        cmp word [f],tkn
;        jz  .l1
;        mov [to],al
;        inc f
;        inc to
;        jmp .1
.l1:    add f,2
        mov [ecx],f
        add ecx,4
.2:     inc f
        cmp byte [f],0
        jz  .ll
        cmp word [f],".."
        jnz .2
        add f,2
        jmp .1
.ll:    cmp ecx,.?0
        jb .kk

        mov  f,[ecx]
        ;pusha
        ;Msg f
        ;popa
        copyTtt f,to,".."
        ;pusha
        ;Msg RichTxt+2000
        ;popa
        sub  ecx,4
        jmp .ll
.kk:
}
Proc_Smart:
        mov  [.pass],0
        mov  [.cnt],ebp
        mov  ebp,RichTxt
        mov  edi,esi
        mov  [.txtbgn],esi
        dec  [.txtbgn]
.0:     inc  edi
        cmp  byte [edi],0
        jz   .ext
        cmp  dword [edi],"----"       ;find start block
        jnz  .0
        add  edi,6
        ;Msg  edi
.0b:    getTkn edi,":",.ext
        ;rplcCount ecx,"%%"
        copySmartTxt ecx,ebp,"%%"
        inc  [.pass]
        jmp  .0b
        ;Msg  ecx
.ext:   mov dword [ebp],0
        ;Msg  RichTxt
        mov  ebp,ComboText
        mov  edi,RichTxt
        copySmartTxt2 edi,ebp,"//"
        mov dword [ebp],0
       ; Msg  RichTxt+2000
        mov    esi,ComboText
        call   CopyToWinClipboard
        PasteTxtTo
        mov  ebp,[.cnt]
        ret
        .pass   db 0
        .txtbgn dd 0
        .cnt dd 0,0
        .?0  dd 102 dup(0)
