[comp.sys.dec] VMS Pascal Terminal I/O help needed

denbeste@bgsuvax.UUCP (02/28/87)

I am having difficulties writing what should be a simple program.  I want to
read in a character at a time from the keyboard and print out the next higher
character.  I also want a prompt to be displayed.  My initial expectation was
to write the program as follows

PROGRAM NextChar(Input,Output);

VAR
	ch : Char;

BEGIN
WriteLn('Press RETURN to Exit');
Write('prompt>');
REPEAT
    Read(CH);
    Write(chr(ord(ch)+1));
UNTIL ch = chr(13);
WriteLn('  Thank You.');
END.

My problem with this is that Read doesn't pass on the char until return has
been pressed on the keyboard.  

One sugestion was to use the SMG$ routines and create a virtual keyboard.
This worked, except that it created another problem.  None of my output,
including the prompt, was echoed until the WriteLn was encountered. (It is
also a royal pain for such a simple task.)

Please excuse any typos in the example, as I had to retype it in on our UNIX
vax for posting.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Wiliam C. DenBesten             |        ... !osu-eddie!bgsuvax!denbeste  UUCP
Dept of Computer Science        | denbeste%research1.bgsu.edu@csnet-relay ARPA
Bowling Green State University  |            denbeste@research1.bgsu.edu  CSNET
Bowling Green, OH 43403-0214    |                   #include <std.disclaimer.h>
--------------------------------+----------------------------------------------
There is no difference between theory and practice in theory, but there is
often a great deal of difference between theory and practice in practice.

perry@vu-vlsi.UUCP (03/01/87)

In article <701@bgsuvax.UUCP> denbeste@bgsuvax.UUCP (William C. DenBesten) writes:
>I am having difficulties writing what should be a simple program.  I want to
>read in a character at a time from the keyboard ...

Here is a sample program doing single character input from VAX/VMS Pascal,
see $help system  and look at sys$library:starlet.pas  for more info on the
wierd $assign and $qiow bs.  Unfortunately, I don't think there is any way
to get the io$ symbols directly into Pascal, I copied the values from
one of the FORSYSDEF modules...

...Rick			..{cbmvax,pyrnj,bpa}!vu-vlsi!perry
			perry@vuvaxcom.bitnet
---
[inherit('sys$library:starlet')]
program ascii(output);
var	c:char; chan: [word] 0..65535;
	code: integer := %x'3A' + %x'40'; { io$_ttyreadall + io$m_noecho }
begin
	$assign('tt',chan);
	open(output,'tt:'); rewrite(output);
	writeln('Enter  Q  or  q  to quit.');
	writeln('Start entering characters...');
	repeat
	 $qiow(,chan,code,,,,c,1);
	 writeln('Character=',c,'   ASCII code = ',ord(c):1)
	until (c='Q') or (c='q')
end.