{ Duncan Murdoch >var > TextFile: Text; > NextChar: Char; >... >begin >... > with TextRec(TextFile) do NextChar:= Buffer[BufPos]; Careful! This is unreliable, because the Buffer could be empty. You should check that there's something there, and fill it if not. Here's my NextChar routine. BTW, I don't like the DOS unit's declaration of TextRec, so I wrote my own. } type IOFunc = function(var Source:text): Integer; TTextBuf = array[0..127] of char; PTextBuf = ^TTextBuf; TextRec = record Handle: Word; Mode: Word; BufSize: Word; Private: Word; BufPos: Word; BufEnd: Word; BufPtr: PTextBuf; OpenFunc: IOFunc; InOutFunc: IOFunc; FlushFunc: IOFunc; CloseFunc: IOFunc; UserData: array[1..16] of Byte; Name: array[0..79] of Char; Buffer: TTextBuf; end; function NextChar(var Source: text):char; begin NextChar := chr(0); { This is the default value in case of error } with TextRec(Source) do begin if BufPos >= BufEnd then { Buffer empty; need to fill it } InOutRes := InOutFunc(Source); { This sets the System error variable InOutRes; other than that, it ignores errors. } NextChar := BufPtr^[BufPos] { A test here of whether a a character was available would be a good idea } end; end;