-- Copyright (C) 1985, 1986  by Xerox Corporation. All rights reserved. 
-- CString.mesa
-- NFS		18-Dec-85 10:34:20
-- MEW		18-Jan-86 13:17:29

-- Routines for coversions between Mesa strings and C strings.

DIRECTORY
  Environment USING [Byte],
  ESCAlpha,
  Mopcodes,
  MopcodesExtraST USING [zMBP, zRBP, zWBP],
  PrincOpsExtrasBP USING [BytePointer];

CString: DEFINITIONS = {

  CString: TYPE = PrincOpsExtrasBP.BytePointer;

  ToBytePointer: PROCEDURE [LONG POINTER] RETURNS [CString] = MACHINE CODE
    BEGIN MopcodesExtraST.zMBP END;

  ToWordPointer: PROCEDURE [CString] RETURNS [LONG POINTER] = MACHINE CODE
    BEGIN
    Mopcodes.zLIN1;
    Mopcodes.zLIW, 177B, 377B;
    Mopcodes.zESC, ESCAlpha.aDAND;
    Mopcodes.zLIN1;
    Mopcodes.zESC, ESCAlpha.aDSHIFT
    END;

  ReadChar: PROCEDURE [CString] RETURNS [CHARACTER] = MACHINE CODE
    BEGIN MopcodesExtraST.zRBP, 0 END;

  ReadByte: PROCEDURE [CString] RETURNS [Environment.Byte] = MACHINE CODE
    BEGIN MopcodesExtraST.zRBP, 0 END;

  WriteChar: PROCEDURE [CHARACTER, CString] = MACHINE CODE
    BEGIN MopcodesExtraST.zWBP, 0 END;

  WriteByte: PROCEDURE [Environment.Byte, CString] = MACHINE CODE
    BEGIN MopcodesExtraST.zWBP, 0 END;

  IncrBPointer: PROCEDURE [p: CString] RETURNS [CString] = INLINE
    BEGIN RETURN[LOOPHOLE[p.pointer + 1, CString]] END;

  DecrBPointer: PROCEDURE [p: CString] RETURNS [CString] = INLINE
    BEGIN RETURN[LOOPHOLE[p.pointer - 1, CString]] END;

  AddToBPointer: PROCEDURE [p: CString, i: INTEGER] RETURNS [CString] = INLINE
    BEGIN RETURN[LOOPHOLE[p.pointer + i, CString]] END;

  CStringToString: PROCEDURE [cs: CString, z: MDSZone] RETURNS [STRING];
  CStringToLongString: PROCEDURE [cs: CString, z: UNCOUNTED ZONE]
    RETURNS [LONG STRING];
  StringToCString: PROCEDURE [s: STRING, z: UNCOUNTED ZONE] RETURNS [CString];
  LongStringToCString: PROCEDURE [s: LONG STRING, z: UNCOUNTED ZONE]
    RETURNS [CString];

  }.