$ include "seed7_05.s7i"; include "bitdata.s7i"; include "strifile.s7i"; const proc: initWriteAscii (inout file: outFile, inout integer: bitPos) is func begin outFile.bufferChar := '\0;'; bitPos := 0; end func; const proc: writeAscii (inout file: outFile, inout integer: bitPos, in string: ascii) is func local var char: ch is ' '; begin for ch range ascii do if ch > '\127;' then raise RANGE_ERROR; else putBitsMsb(outFile, bitPos, ord(ch), 7); end if; end for; end func; const proc: finishWriteAscii (inout file: outFile, inout integer: bitPos) is func begin write(outFile, chr(ord(outFile.bufferChar))); end func; const proc: initReadAscii (inout file: outFile, inout integer: bitPos) is func begin bitPos := 8; end func; const func string: readAscii (inout file: inFile, inout integer: bitPos, in integer: length) is func result var string: stri is ""; local var char: ch is ' '; begin while not eof(inFile) and length(stri) < length do ch := chr(getBitsMsb(inFile, bitPos, 7)); if inFile.bufferChar <> EOF then stri &:= ch; end if; end while; end func; const proc: main is func local var file: aFile is STD_NULL; var integer: bitPos is 0; begin aFile := openStrifile; initWriteAscii(aFile, bitPos); writeAscii(aFile, bitPos, "Hello, Rosetta Code!"); finishWriteAscii(aFile, bitPos); seek(aFile, 1); initReadAscii(aFile, bitPos); writeln(literal(readAscii(aFile, bitPos, 100))); end func;