[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]
{
SEAN PALMER
these routines change formats 'in place' without changing the number of
bytes, ever, so you can safely use $V-
}
unit asciiz;  {routines for converting strings to asciiz and back}
interface
procedure asciiz2string(var a : string);
procedure string2asciiz(var s : string);
implementation
{note: any asciiz must be length 255 or less}
procedure asciiz2string(var a : string); assembler;
asm
  push ds
  cld
  lds  si, a
  mov  cx, 0
 @L:
  xchg al, byte ptr[si]
  inc  si
  or   al, al
  jnz  @L
  mov  ax, si
  mov  si, word ptr a
  sub  ax, si   {calc length}
  dec  ax
  mov  [si], al
  pop  ds
end;
procedure string2asciiz(var s : string); assembler;
asm
  push  ds
  lds   si, s
  les   di, s
  lodsb
  mov   cl, al
  xor   ch, ch
  cld
  rep   movsb
  xor   al, al
  stosb
  pop   ds
end;
end.
[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]