home *** CD-ROM | disk | FTP | other *** search
-
- #log Zero terminated string conversions
-
- type
- zstring = array[0..255] of char;
-
- (*------------------------------------------
- *
- * ztos - convert a zero terminated string into a turbo string
- *
- *)
-
- procedure ztos(var z: zstring;
- var s: anystring);
- begin
-
- Inline(
- $1E { push ds }
- /$FC { cld ;direction fwd }
- /$C5/$76/$08 { lds si,[bp]8 ;ds:si --> z[0] }
- /$C4/$7E/$04 { les di,[bp]4 ;es:di --> s[0] }
- /$47 { inc di ;skip over length }
- /$B1/$FF { mov cl,=-1 ;length counter }
-
- { loop: }
- /$FE/$C1 { inc cl ;count a byte }
- /$AC { lods(b) ;al=*ds:si++ }
- /$AA { stos(b) ;*es:di++=al }
- /$3C/$00 { cmp al,=0 ;repeat until zero }
- /$75/$F8 { jnz loop }
-
- /$C5/$7E/$04 { lds di,[bp]4 ;store the length }
- /$88/$0D { mov [di],cl ;ds:di=length }
- /$1F { pop ds }
- );
-
- end;
-
-
- (*------------------------------------------
- *
- * stoz - convert a turbo string into a zero terminated string
- *
- *)
-
- procedure stoz(var s: anystring;
- var z: zstring);
- begin
-
- Inline(
- $1E { push ds }
- /$FC { cld ;direction fwd }
- /$C4/$7E/$04 { les di,[bp]4 ;es:di --> z[0] }
- /$C5/$76/$08 { lds si,[bp]8 ;ds:si --> s[0] }
- /$AC { lods(b) }
- /$8A/$C8 { mov cl,al }
- /$B5/$00 { mov ch,=0 ;cx is length }
- /$F2/$A4 { rep movs(b) ;copy the string }
- /$B0/$00 { mov al,=0 }
- /$AA { stos(b) ;append the zero }
- /$1F { pop ds }
- );
-
- end;
-
-