>I'm wondering if this will work under MPE/V as well:
>
>:FILE term,NEW;DEV=nnn;ACC=INOUT;
Actually, this form of the :FILE equation evolved on the Classic.
>I don't remember INOUT being in MPE/V, but I could be wrong. If this
>will work, is there any way to pipe the input on that port to another
>port or file, or read the input directly from that file equation?
The problem with simply reading the port, using something like :FCOPY,
is that the default behaviour includes echo - as data is read, via
FREAD, it's echoed back to the sender. You could disable echo with a
special term-type file, but that doesn't solve the entire problem -
you'll still get line-feeds echoed for each completed FREAD.
A simple program would do the trick. Mock C-code:
#define CCG (0)
#define CCL (1)
#define CCE (2)
short int
file_num,
prev_echo = 0,
prev_tt = 0,
prev_cps = 0,
fc_parm,
len,
err_num,
done = 0;
unsigned char
buf[82];
file_num = FOPEN(, 0604, 0504, "ldev ");
FCONTROL(file_num, 13, &prev_echo); /* disable echo */
FCONTROL(file_num, 39, &prev_tt); /* get current term-type */
fc_parm = 18; /* term-type 18 */
FCONTROL(file_num, 38, &fc_parm); /* change term-type */
fc_parm = 0;
FCONTROL(file_num, 13, &fc_parm); /* again, disable echo */
/* The above is necessary as the new term-type might have echo ON */
FSETMODE(file_num, 4); /* disable lf_after_read */
FCONTROL(file_num, 40, &prev_cps); /* get input/output speed */
fc_parm = 1920; /* speed in cps */
FCONTROL(file_num, 11, &fc_parm); /* set input/output speed */
fc_parm = 13; /* carriage return */
FCONTROL(file_num, 41, &fc_parm); /* unedited-mode */
for (;;)
{
fc_parm = 10;
FCONTROL(file_num, 4, &fc_parm); /* set 10-second timer */
len = FREAD(file_num, buf, -80);
if (ccode() == CCG)
FS_Err(); /* unexpected EOF */
if (ccode() == CCL)
{
FCHECK(file_num, &err_num);
if (err_num != 22)
FS_Err(); /* unexpected error */
continue;
}
Process_Data(buf, len);
if (done)
break;
}
FCONTROL(file_num, 38, &prev_tt);
if (prev_echo == 0)
FCONTROL(file_num, 12, &prev_echo); /* re-enable echo */
FCONTROL(file_num, 11, &prev_cps);
FCLOSE(file_num, 0, 0);
I omitted condition-code checks after the FOPEN/FCONTROL/FSETMODE
calls to save space - good and proper form calls for checking the
results of _each_ of these operations. You'd be surprised where
errors crop up. (been there, done that)
--
-------------------------------------------------------------
Randy Medd
Telamon, Inc.
|