%include "CONSTS" %include "FORMS" %include "SEG7" %include "PROCS" %control 0 %external %predicate GOT SYM %alias "IO$GOTSYM" -> false %if S7_inx == null; ! Permanent EOF from .N %if S7_inx_state # valid %start -> false %if S7_inx_state = EOF ! Invalid - try to get next character %if S7_inx_buffp = S7_inx_ebp %start; ! At end of buffer -> nogo %if S7_inx_type = file type %and S7_inx_block = 0; ! No more blocks %if S7_inx_type = char type %start;! Put out prompt S7_p_ser = S7_inx_ser S7_p_reply = S7_id S7_p_a = write fn S7_p_b = addr(S7_prompt) + 1 S7_p_c = length(S7_prompt) ponoff (S7_p) %finish dev fn (S7_inx, read fn) S7_gvar = S7_p_a %if S7_inx_type = file type %start -> nogo %if S7_gvar # 0; ! Disk read error S7_gvar = 512; ! Size of disk block dir fn (S7_inx, get next); ! ready for next read %else; ! Character device: p_a = # chars %if S7_gvar = 0 %start; ! EOF from TTY nogo: S7_inx_state = EOF false: %false %finish %finish S7_inx_buffp = S7_inx_buffad S7_inx_ebp = S7_inx_buffad + S7_gvar; ! end of buffer %finish S7_inx_sym = byteinteger(S7_inx_buffp) S7_inx_buffp = S7_inx_buffp + 1 S7_inx_state = valid %finish %true %end %end %of %file