Xref: utzoo comp.lang.c:11913 comp.os.vms:8162 Path: utzoo!attcan!uunet!sdrc!scjones From: scjones@sdrc.UUCP (Larry Jones) Newsgroups: comp.lang.c,comp.os.vms Subject: Re: VMS C file type and stdio - help! Message-ID: <351@sdrc.UUCP> Date: 18 Aug 88 21:39:22 GMT References: <196@rna.UUCP> <6671@bloom-beacon.MIT.EDU> <3689@bsu-cs.UUCP> Organization: Structural Dynamics Research Corp., Cincinnati Lines: 38 In article <3689@bsu-cs.UUCP>, dhesi@bsu-cs.UUCP (Rahul Dhesi) writes: > In response to the request for a solution to the problem of how to > create a binary file under VAX/VMS that allows arbitrary seeks: There > is no ideal solution (other than switching to UNIX, of course), but you > can get by if you use stream-LF files. > > Kermit will not let you transfer a stream-LF file without risking > corrupting it with newline conversions. The standard VMS "Kermit-32" > won't treat a stream-LF file as a binary file and sends it line by line > instead. > > Kermit transfer can still be done, however. My bilf.c utility (that is > included with source code for zoo 2.0) will convert between stream-LF > and fixed-length-record (FLR) files. So to do a Kermit transfer, use > bilf.c to convert to FLR format, then transfer with Kermit as a binary > file. Or the other way around. If you're using Digital's Vax-11 C, it's much easier to just tell it you want fixed length records in the first place. All you need do is add three additional arguments on to the fopen call: "recfm=f", "mrs=512", "ctx=stm" (that's from memory, so I hope I got them right). The first says you want fixed-length records, the seconds says to make them 512 bytes long, and the last tells the C library to ignore the fact that the file is record structured and pretend it's a stream file instead (which works just grand as long as the records are fixed rather than variable-length). It is worthwhile to note that the Vax-11 C documentation contains a typo listing the last argument as "ctx=str". It is still more interesting that the library itself contains a bug which causes it to report some bizzare VMS-specific error if you actually try that rather than reporting "invalid argument value" as it should. In any event, "ctx=stm" is correct. ---- Larry Jones UUCP: uunet!sdrc!scjones SDRC scjones@sdrc 2000 Eastman Dr. BIX: ltl Milford, OH 45150 AT&T: (513) 576-2070 Nancy Reagan on superconductivity: "Just say mho."