[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    {
     I am offering you my DelStr procedure. It's written in assembler
     (BASM), behaves just like standard Delete procedure only a LOT
     faster. I hope you'll find it interesting (and good) enough to
     include it in STRINGS.SWG.
    }

     procedure DelStr(var S : string; Const Index, Count : byte); assembler;
     asm
        push ds
        mov cl,Count
        or cl,cl
        jz @Exit
        lds ax,S
        les ax,S
        mov bx,ax
        push ax
        mov al,Index
        xor ah,ah
        xor ch,ch
        add ax,cx
        dec ax
        mov cl,byte ptr [bx]
        cmp ax,cx
        pop ax
        ja @Exit
        je @To_End
        mov cl,Index
        xor ch,ch
        add ax,cx
        mov di,ax
        mov cl,Count
        xor ch,ch
        add ax,cx
        mov si,ax
        mov cl,byte ptr [bx]
        sub cl,Count
        xor ch,ch
        or cx,cx
        jz @Empty
        cld
        rep movsb
        mov cl,byte ptr [bx]
        sub cl,Count
     @Empty:
        mov byte ptr [bx],cl
        jmp @Exit
     @To_End:
        mov cl,Index
        dec cl
        mov byte ptr [bx],cl
     @Exit:
        pop ds
     end;

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]