home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / TPTOOL5.ZIP / STOZ.INC < prev    next >
Encoding:
Text File  |  1987-03-28  |  2.2 KB  |  67 lines

  1.  
  2. #log Zero terminated string conversions
  3.  
  4. type
  5.    zstring = array[0..255] of char;
  6.  
  7. (*------------------------------------------
  8.  *
  9.  * ztos - convert a zero terminated string into a turbo string
  10.  *
  11.  *)
  12.  
  13. procedure ztos(var z: zstring;
  14.                var s: anystring);
  15. begin
  16.  
  17.    Inline(
  18.        $1E             {    push ds                            }
  19.       /$FC             {    cld             ;direction fwd     }
  20.       /$C5/$76/$08     {    lds si,[bp]8    ;ds:si --> z[0]    }
  21.       /$C4/$7E/$04     {    les di,[bp]4    ;es:di --> s[0]    }
  22.       /$47             {    inc di          ;skip over length  }
  23.       /$B1/$FF         {    mov cl,=-1      ;length counter    }
  24.  
  25.                        { loop:                                 }
  26.       /$FE/$C1         {    inc cl          ;count a byte      }
  27.       /$AC             {    lods(b)         ;al=*ds:si++       }
  28.       /$AA             {    stos(b)         ;*es:di++=al       }
  29.       /$3C/$00         {    cmp al,=0       ;repeat until zero }
  30.       /$75/$F8         {    jnz loop                           }
  31.  
  32.       /$C5/$7E/$04     {    lds di,[bp]4    ;store the length  }
  33.       /$88/$0D         {    mov [di],cl     ;ds:di=length      }
  34.       /$1F             {    pop ds                             }
  35.    );
  36.  
  37. end;
  38.  
  39.  
  40. (*------------------------------------------
  41.  *
  42.  * stoz - convert a turbo string into a zero terminated string
  43.  *
  44.  *)
  45.  
  46. procedure stoz(var s: anystring;
  47.                var z: zstring);
  48. begin
  49.  
  50.    Inline(
  51.        $1E             {    push ds                           }
  52.       /$FC             {    cld             ;direction fwd    }
  53.       /$C4/$7E/$04     {    les di,[bp]4    ;es:di --> z[0]   }
  54.       /$C5/$76/$08     {    lds si,[bp]8    ;ds:si --> s[0]   }
  55.       /$AC             {    lods(b)                           }
  56.       /$8A/$C8         {    mov cl,al                         }
  57.       /$B5/$00         {    mov ch,=0       ;cx is length     }
  58.       /$F2/$A4         {    rep movs(b)     ;copy the string  }
  59.       /$B0/$00         {    mov al,=0                         }
  60.       /$AA             {    stos(b)         ;append the zero  }
  61.       /$1F             {    pop ds                            }
  62.    );
  63.  
  64. end;
  65.  
  66.  
  67.