rick@SIEMENS.UUCP (03/06/86)
I've been having a problem with output on VMS C. I am in the
process of porting a graphics program from UNIX to VMS. My
problem concerns the driver for a Raster Technologies' Model
One/10 terminal.
On UNIX, everything works fine. I send lots and lots of ASCII
characters to the terminal and it interprets them as hex
digits and I get pretty pictures on the screen.
On VMS, I send lots and lots of ASCII characters to the
terminal but the computer decides that no one would really
want to output so many characters without a newline now and
again so every 256th character is a newline. The Model One
indiscriminately tries to interpret this as a command and then
tries to interpret the following characters as arguments to
the command. I get nasty error messages from the terminal and
messed up pictures on the screen.
I tried to setbuf(stdout,NULL) but it doesn't work. I also
tried a lot of ugly kluges including sprintf(...)ing the
commands and write(...)ing the string to stdout. No luck.
I would be grateful for any ideas or solutions.
Rick Taft
Siemens Research and Technology Laboratories
105 College Road East
Princeton, NJ 08540
(609) 734-3324
FAX: (609) 734-6565
UUCP: {vrdxhq,cwruecmp,princeton,astrovax,
inhp4,drexel,jandj,columbia }!siemens!rick
===================================
= Ad Hoc, Ad Loc and Quid Pro Quo,=
= So much to do, so much to know! =
===================================KFL@MC.LCS.MIT.EDU ("Keith F. Lynch") (03/08/86)
From: princeton!siemens!rick@siemens.ARPA
On VMS, I send lots and lots of ASCII characters to the terminal but the
computer decides that no one would really want to output so many
characters without a newline now and again so every 256th character is a
newline.
I don't know how this is done in C, but what you want to do is open
the file so that the CARRIAGECONTROL attribute has the value NONE.
...Keithrcb@RTI-SEL.UUCP (Random) (03/10/86)
In article <510520825.rick@siemens> you write: > > I've been having a problem with output on VMS C. I am in the > process of porting a graphics program from UNIX to VMS. My > problem concerns the driver for a Raster Technologies' Model > One/10 terminal. > > On VMS, I send lots and lots of ASCII characters to the > terminal but the computer decides that no one would really > want to output so many characters without a newline now and > again so every 256th character is a newline. Deja Vu!!!! I think I've been here before!!! As it turns out, the VMS C stdio stuff is not very good for pure binary output to terminals as it does not have an ioctl to set a raw mode. You will need to use QIO to set ther terminal line to pasthru. This may be enough to allow the use of C io calls. I personally use QIO's for all the io to graphics devices so that I know exactly what is going on. All you need is one routine to write a character and one to flush the buffer in the first routine. I would definately suggest doing some buffering if you use qio's. The overhead is just too much for one character at a time. Random (Randy Buckland) Research Triangle Institute ...!mcnc!rti-sel!rcb
seaton@DEC-BLOTT.UUCP (Ian Seaton, Dedicated Mail, REO2-F/D3, DTN 830 3) (03/12/86)
> "rick@siemans" writes that VMS is giving him newlines < > every 256 characters when writing from a VAX C program :< The most likely solution to your problem is that unlike UNIX, VMS has `half-a-million' different ways to open an output stream and you've got the wrong one. (Hardly surprising :-)) The one you probably want is to open your output stream like: fd = open( "tt:", O_RDWR, "ctx=bin" ); which tells RMS that you want to read and write binary not text. eg #include stdio #include file main() { int fd, i; fd = open( "tt:", O_WRONLY, "ctx=bin" ); for( i = 0; i < 512; i++ ) write( fd, "A", 1 ); close( fd ); } Should write out 512 `A's without break. Share and Enjoy... Ian Seaton DEC Reading, England UUCP: !dec-thrint! decwrl!dec-rhea!dec-tron !seaton !dec-blott ! ARPA: seaton%tron.DEC@DECWRL.ARPA
egisin@WATERLOO.CSNET (Eric Gisin) (03/13/86)
the easiest way to prevent insertion of returns is by opening or fopening with the rms "rfm=udf" attribute. set the terminal /nowrap and possibly /pasthru. this works for files sent to a print queue also.
egisin@WATERLOO.CSNET (Eric Gisin) (03/13/86)
Actually, I can't duplicate the problem with my test program:
#include <stdio.h>
main() {
int i;
char buf [1000+1];
freopen("tt:", "w", stdout /*"rfm=udf"*/);
for (i=0; i<1000; i++)
buf[i] = 'x';
buf[i] = '\0';
fputs(buf, stdout);
}
No extra characters appear in the output.
I've got VMS 4.2 and C 2.1.