class FileReader { usage lin{FileReader; Q1} where Q1 = lin{toString; Q1 + next; } Q2 = un{getCounter; Q2 + toString; Q2}; File[Q3] file; string s; int counter; boolean isEof; void FileReader(File[Q3] f) { file = f; s = ""; counter = 0; isEof = false; } sync void count() { counter = counter + 1; } int getCounter() { counter; } string toString() { count(); s; } boolean next() { if(file.eof()) { isEof = true; file.close(); false; } else { s = s ++ file.read(); true; } } } class File { usage lin{File; Q1} where Q1 = lin{eof; } Q3 = lin{read; Q1} Q2 = lin{close; end}; int linesInFile; int linesRead; boolean closed; boolean lineInBuffer; boolean eof; void File() { linesRead = 0; linesInFile = 5; closed = false; lineInBuffer = false; eof = false; } void close() { closed = true; } boolean eof() { lineInBuffer = !linesRead == linesInFile; eof = !lineInBuffer; eof; } string read() { linesRead = linesRead + 1; lineInBuffer = false; "reading line... \n"; } }