home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / TOOL_INC.ZIP / STOZ.INC < prev    next >
Encoding:
Text File  |  1988-01-29  |  2.2 KB  |  65 lines

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