From: <cli...@li...> - 2008-07-02 19:04:30
|
Send clisp-cvs mailing list submissions to cli...@li... To subscribe or unsubscribe via the World Wide Web, visit https://lists.sourceforge.net/lists/listinfo/clisp-cvs or, via email, send a message with subject or body 'help' to cli...@li... You can reach the person managing the list at cli...@li... When replying, please edit your Subject line so it is more specific than "Re: Contents of clisp-cvs digest..." CLISP CVS commits for today Today's Topics: 1. clisp/src ChangeLog, 1.6333, 1.6334 TODO, 1.143, 1.144 stream.d, 1.610, 1.611 (Sam Steingold) ---------------------------------------------------------------------- Message: 1 Date: Wed, 02 Jul 2008 16:34:59 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/src ChangeLog, 1.6333, 1.6334 TODO, 1.143, 1.144 stream.d, 1.610, 1.611 To: cli...@li... Message-ID: <E1K...@ma...> Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv11863/src Modified Files: ChangeLog TODO stream.d Log Message: (make_terminal_io): pipe, not just file, i/o handles imply non-terminal standard i/o; this should somewhat simplify scripting by not requiring the users to resort to make-stream (handle_type_t): new type (handle_type, regular_handle_type_p, pipe_handle_type_p) (pipe_file_handle_p): new functions (regular_handle_p): a macro combination of regular_handle_type_p and handle_type Index: TODO =================================================================== RCS file: /cvsroot/clisp/clisp/src/TODO,v retrieving revision 1.143 retrieving revision 1.144 diff -u -d -r1.143 -r1.144 --- TODO 27 Jun 2008 21:26:39 -0000 1.143 +++ TODO 2 Jul 2008 16:34:55 -0000 1.144 @@ -28,29 +28,6 @@ change wr_by_array_iau8_buffered to use persev instead of persev_full -binary stdio -<http://article.gmane.org/gmane.lisp.clisp.devel:12268> -one of the common issues with CLISP is -*** - (SETF STREAM-ELEMENT-TYPE) on #<IO TERMINAL-STREAM> is illegal -i.e., inability to use binary IO in stdio. -it all boils down to regular_handle_p(FD): -when the handle is found to be "regular", the appropriate -*STANDARD-*PUT* stream becomes a handle stream whose element type can be -changed, otherwise a TERMINAL-STREAM is used. -Right now, `regular' means "file on disk", as in -[unix] (S_ISREG(statbuf.st_mode) || S_ISBLK(statbuf.st_mode)) -[win32] (filetype == FILE_TYPE_DISK) -what about pipes? -while MAKE-STREAM should provide a universal solution to these issues, -it still might make sense to change regular_handle_p(). -Note that this runs into the FRESH-LINE/same_handle_p issues. -Maybe (SETF STREAM-ELEMENT-TYPE) should work on TERMINAL-STREAMs? -Maybe all streams should be bivalent? -Related issue: LISTEN works on binary streams in all Lisps except CLISP. -LISTEN should work on all streams and READ-CHAR-WILL-HANG-P should be -merged with READ-BYTE-WILL-HANG-P into WILL-HANG-P. - - Changes to Unicode standard (Bruno and Jörg discussing issues Nov. 2006) Eliminate surrogates D800-DFFF from characters Index: stream.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/stream.d,v retrieving revision 1.610 retrieving revision 1.611 diff -u -d -r1.610 -r1.611 --- stream.d 2 Jul 2008 14:50:59 -0000 1.610 +++ stream.d 2 Jul 2008 16:34:55 -0000 1.611 @@ -3650,26 +3650,70 @@ #endif -/* UP: Determines, if a Handle refers to a (static) File. - regular_handle_p(handle) - > handle: Handle of the opened File - < result: true if it is a (static) File */ -local bool regular_handle_p (Handle handle) { +/* UP: Return platform-specific file type + handle_type(handle) + > handle: open handle (file or pipe) + < result: an integer, identifying the type */ #if defined(UNIX) +#define handle_type_t mode_t +local handle_type_t handle_type (Handle handle) { var struct stat statbuf; begin_system_call(); if (!( fstat(handle,&statbuf) ==0)) { OS_error(); } end_system_call(); - return (S_ISREG(statbuf.st_mode) || S_ISBLK(statbuf.st_mode)); - #endif - #ifdef WIN32_NATIVE + return statbuf.st_mode; +} +#elif defined(WIN32_NATIVE) +#define handle_type_t DWORD +local handle_type_t handle_type (Handle handle) { var DWORD filetype; begin_system_call(); filetype = GetFileType(handle); end_system_call(); - return (filetype == FILE_TYPE_DISK); + return filetype; +} +#else +#error handle_type() and handle_type_t are not defined + #endif + +/* UP: Determines, if a Handle refers to a (static) File. + regular_handle_p(handle) + > handle: Handle of the opened File + < result: true if it is a (static) File */ +local inline bool regular_handle_type_p (handle_type_t mode) { + #if defined(UNIX) + return S_ISREG(mode) || S_ISBLK(mode); + #elif defined(WIN32_NATIVE) + return mode == FILE_TYPE_DISK; #endif } +#define regular_handle_p(h) regular_handle_type_p(handle_type(h)) + +/* UP: Determines, if a Handle refers to a pipe or a socket + pipe_handle_p(handle) + > handle: Handle of the opened File + < result: true if it is a socket or a pipe */ +local inline bool pipe_handle_type_p (handle_type_t mode) { + #if defined(UNIX) + return S_ISFIFO(mode) + #if defined(S_ISSOCK) + || S_ISSOCK(mode) + #endif + ; + #elif defined(WIN32_NATIVE) + return mode == FILE_TYPE_PIPE; + #endif +} +#define pipe_handle_p(h) pipe_handle_type_p(handle_type(h)) + +/* UP: Determines, if a Handle refers to a pipe, socket, file + pipe_handle_p(handle) + > handle: Handle of the opened File + < result: true if it is a socket/pipe/file */ +local inline bool pipe_file_handle_p (Handle handle) { + handle_type_t mode = handle_type(handle); + return regular_handle_type_p(mode) || pipe_handle_type_p(mode); +} /* UP: Determines if two Handle refer to the same file or device. same_handle_p(handle1,handle2) @@ -14741,8 +14785,8 @@ /* If stdin or stdout is a file, use a buffered stream instead of an unbuffered terminal stream. For the ud2cd program used as filter, this reduces the runtime on Solaris from 165 sec to 47 sec. */ - var bool stdin_file = regular_handle_p(stdin_handle); - var bool stdout_file = regular_handle_p(stdout_handle); + var bool stdin_file = pipe_file_handle_p(stdin_handle); + var bool stdout_file = pipe_file_handle_p(stdout_handle); if (stdin_file || stdout_file) { var object istream = stdin_file ? /* Input side */ get_standard_input_file_stream() : make_terminal_stream(); Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.6333 retrieving revision 1.6334 diff -u -d -r1.6333 -r1.6334 --- ChangeLog 2 Jul 2008 15:27:16 -0000 1.6333 +++ ChangeLog 2 Jul 2008 16:34:53 -0000 1.6334 @@ -1,5 +1,16 @@ 2008-07-02 Sam Steingold <sd...@gn...> + * stream.d (make_terminal_io): pipe, not just file, i/o handles + imply non-terminal standard i/o; this should somewhat simplify + scripting by not requiring the users to resort to make-stream + (handle_type_t): new type + (handle_type, regular_handle_type_p, pipe_handle_type_p) + (pipe_file_handle_p): new functions + (regular_handle_p): a macro combination of regular_handle_type_p + and handle_type + +2008-07-02 Sam Steingold <sd...@gn...> + * version.sh: 2.46 (2008-07-02) 2008-07-01 Sam Steingold <sd...@gn...> @@ -7,7 +18,7 @@ * modules/clx/new-clx/clx.f (make_xid_obj_2): signal a LOOKUP-ERROR instead of an ERROR; use MAKE-CONDITION & SYS::CORRECTABLE-ERROR instead of correctable_error() - ((x_type_error): new function + (x_type_error): new function (my_type_error, with_stringable_0_tc, get_aint32): use it (make_xid_obj_2): no prealloc for cached objects! * lispbibl.d (correctable_error): do NOT export to clisp.h ------------------------------ ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 ------------------------------ _______________________________________________ clisp-cvs mailing list cli...@li... https://lists.sourceforge.net/lists/listinfo/clisp-cvs End of clisp-cvs Digest, Vol 27, Issue 7 **************************************** |