Compile-time detection of EOL translation mode (CLISP)

Aaron Brown arundelo@hotmail.com
Thu Jan 4 18:58:00 GMT 2007


Dave Korn wrote:

>> From within the C preprocessor, how do I find out whether
>> a Cygwin installation is set to use dos or unix EOLs?
>
>  You don't.  Whatever you're trying to do, this is the
>  wrong way to go about it.

>  What is the /end/ result you're trying to achieve here?

When CLISP does text output, it opens the file in binary
mode and does EOL translation itself, according to the
requested line terminator mode.  For instance, the following
function writes a file with LF, CRLF, or CR EOLs depending
on whether its argument is :unix, :dos, or :mac.

  ;; See http://clisp.cons.org/impnotes/encoding.html#newline
  (defun newlinetest (line-terminator)
    (with-open-file
      (out "eoltest.txt" :external-format
        (ext:make-encoding :line-terminator line-terminator)
        :direction :output
        :if-does-not-exist :create
        :if-exists :new-version)
      (format out "foo~%bar~%")))

That works exactly as intended.  My problem is that if I
don't specify a :line-terminator, :dos is used instead of
:unix.  (This is controlled by *default-file-encoding*,
which itself is set by line 2571 of encoding.d when CLISP is
compiled.)  The reason I expect :unix to be the default
rather than :dos is that when I ran the Cygwin setup.exe, I
selected the "Unix / binary (RECOMMENDED)" radio button
under "Default Text File Type".  Is this expectation
unwarranted?

The one-sentence version of the problem: CLISP writes
newlines as "\r\n" by default, when I want the default to be
"\n".

I could just specify :unix every time, but that's a hassle
and is (as far as I can tell) impossible with standard
output.

Thanks,

-- 
Aaron
http://www.amazon.com/gp/product/0470069171/


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list