From: Keith M. <kei...@to...> - 2005-08-17 14:00:43
|
Brian Elmegaard wrote: >> I didn't think the `\n' notation was supported in ANSI FORTRAN-77; >> surely you should use `char(10)', for standards conformance. > > Oh, I didn't know that. But the \n is only treated as two individual > characters until it is passed to c isn't it? Correct. And that's the way it will stay, even when the string is passed to a C function; it will not be converted to C's '\n', unless the C function incorporates a parser to handle the conversion -- it will stay as if specified in a C string as "\\n" (note the double escape, which is equivalent to '\\', i.e. one literal backslash). >> (You are probably also aware that strict ANSI FORTRAN-77 conformance >> requires all symbol names to be limited to six characters, and free >> of case sensitive distinctions. > > Is it case insensitive or is upper case only? It is case insensitive. Whether that translates to upper or lower case is compiler implementation dependent; Microsoft's FORTRAN compiler for MS-DOS used upper case for all public symbols, to ensure consistency of resolution by the case sensitive linker -- you could use mixed case in your source, but the compiler mapped all symbols to upper case in the generated symbol tables, unless you specified otherwise, on a symbol by symbol by symbol basis, using a non-standard qualifying attribute, to designate a `C' symbol reference, in the type declaration statement. Regards, Keith. |
From: Keith M. <kei...@to...> - 2005-08-17 14:21:06
|
Brian Elmegaard wrote: >> WRITE( MSGBUF, FORMAT ) 'Message text with', ARGS ... > > Should it actually work with any format specification also one with > line breaks and so on? > > Like: > write(lang,83) 5 > 83 FORMAT (' NO CONVERGENCE' > $ ,/,' Required accuracy has not been ',/, > $ ' obtained in ',I6,' iterations.') I don't know -- I've never tried anything like this. > It doesn't seem to work in g77, so maybe / is only valid when > printing to screen? So, I guess that would be your answer then. But you could probably get the effect you want by writing a LF, or a CRLF, into the internal file buffer; perhaps you could try something like:-- PARAMETER ( LF = CHAR(10) ) PARAMETER ( CR = CHAR(13) ) CHARACTER*2 CRLF CHARACTER*1 MYCRLF(2) EQUIVALENCE ( CRLF, MYCRLF ) DATA MYCRLF / CR, LF / : WRITE( LANG, 83 ) CRLF, CRLF, 5 83 FORMAT( ' NO CONVERGENCE',A & ' Required accuracy has not been',A & ' obtained in ',I6,' iterations.') Not as elegant, I know, but I think it should work; (I haven't tried it, and I'm a bit rusty on FORTRAN syntax these days). Regards, Keith. |
From: Brian E. <be...@me...> - 2005-08-18 18:28:46
|
Keith MARSHALL <kei...@to...> writes: > Not as elegant, I know, but I think it should work. It will work, thanks. -- Brian (remove the sport for mail) http://www.et.web.mek.dtu.dk/Staff/be/be.html http://www.rugbyklubben-speed.dk |