{----------------------------------------------------------}
{----------------------------------------------------------}
{--------------------------------------------------}
{ Translates the char in in_char into a 1 to 3 byte}
{ sequence stored in out_chars. Sets nchars to the}
{ # of chars. }
PROCEDURE count_char ( in_char :byte );
BEGIN{PROCEDURE}
IF in_char > 127 THEN BEGIN
in_char := in_char - 128;
ctr_highbit := ctr_highbit + 1;
list_flag := TRUE;
END{IF};
IF in_char < 32 THEN BEGIN
IF (in_char <> carriage_return) AND (in_char <> line_feed) THEN BEGIN
ctr_cc := ctr_cc + 1;
END{IF};
END
ELSE IF in_char = 127 THEN BEGIN
ctr_cc := ctr_cc + 1;
END{IF};
END{PROCEDURE};
open_infile := 0;
IF EOF(infile) THEN open_infile := -1;
END{FUNCTION};
{-------------------------------------------------------------}
{--------------------------------------------------------}
{Reads the next sector from the input file. }
{Returns 0 = normal; -1 = error or EOF. }
FUNCTION read_infile :INTEGER;
BEGIN{FUNCTION}
IF EOF(infile) THEN BEGIN
read_infile := -1;
in_bufptr := sector_size + 1;
END
ELSE BEGIN
READ (infile, in_buffer);
in_bufptr := 0;
read_infile := 0;
END{IF};
END{FUNCTION};
{Gets the next char (pseudochar, a byte) from the input buffer.}
{Signals EOF by returning -1. Returns 0 if get a char. }
FUNCTION get_char ( VAR in_char :byte ) :INTEGER;
VAR
status :INTEGER;
BEGIN{FUNCTION}
status := 0;
IF in_bufptr >= sector_size THEN BEGIN
status := read_infile;
END{IF};
IF status = 0 THEN BEGIN
in_bufptr := in_bufptr + 1;
in_char := in_buffer[in_bufptr];
IF in_char = eof_char THEN status := -1;
END{IF};
get_char := status;
END{FUNCTION};
{--------------------------------------------------}
FUNCTION count_file :INTEGER;
VAR
status :INTEGER;
i :INTEGER;
in_char :byte;
BEGIN{FUNCTION}
status := 0;
WHILE status = 0 DO BEGIN
status := get_char (in_char);
IF status=0 THEN BEGIN
count_char (in_char);
IF list_flag THEN WRITE (CHR(in_char));
END{IF};
END{WHILE};
count_file := status;
END{FUNCTION};