This is the mail archive of the guile@cygnus.com mailing list for the guile project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Date: Wed, 4 Mar 1998 09:21:54 +0100 From: Ole Myren R|hne <o.m.rohne@fys.uio.no> Content-Type: text/plain; charset=iso-8859-1 X-Mime-Autoconverted: from quoted-printable to 8bit by cygnus.com id AAA20829 Sender: owner-guile@cygnus.com Precedence: bulk X-UIDL: aae12e62ff9795baff5b2d3b7f6c457d I am puzzled by the sign of characters in guile-core-980123: In ordinary vectors, characters are unsigned: guile> (define v (make-vector 1 #\a)) guile> (vector-set! v 0 (integer->char 128)) guile> (vector-ref v 0) #\200 In uniform vectors, characters appear to be signed: guile> (define v (make-uniform-vector 1 #\a)) guile> (uniform-vector-set! v 0 (integer->char 128)) guile> (uniform-vector-ref v 0) #\-200 I would prefer that characters are always unsigned. Signed characters does not have a valid read syntax: guile> #\-200 ERROR: In procedure -200: ERROR: unknown # object: #\ ABORT: (misc-error) Sorry if this has already been discussed and/or corrected! Regards, Ole Myren Røhne SCM had this problem. Here is the SCM patch: Return-Path: <amu@media.mit.edu> Date: Mon, 9 Feb 1998 10:20:13 -0500 From: amu@mit.edu To: jaffer@ai.mit.edu Cc: yenta-devo@media.mit.edu Subject: Don't mix (possibly signed) chars and EOF! X-UIDL: 4cfd141bad714208558d5a0eaf194fc6 I found two places where SCM uses a possibly signed type for characters in a stream and risks confusing '\377' (a legitimate character) with EOF (-1). The following patch addresses this problem, and should make SCM's streams completely 8-bit clean: --- scm.h~ Thu Nov 13 17:22:22 1997 +++ scm.h Wed Feb 4 18:01:12 1998 @@ -273,7 +273,7 @@ #define SETSTREAM SETCDR #define CRDYP(port) (CAR(port) & CRDY) #define CLRDY(port) {CAR(port) &= CUC;} -#define CGETUN(port) ((int)SRS(CAR(port), 22)) +#define CGETUN(port) ((unsigned char)SRS(CAR(port), 22)) #define CUNGET(c, port) {CAR(port) += ((long)c<<22) + CRDY;} #define tc_socket (tc7_port | OPN) --- sys.c~ Wed Dec 10 16:43:15 1997 +++ sys.c Wed Feb 4 18:32:48 1998 @@ -337,7 +337,7 @@ sizet ind = INUM(CAR(p)); if (ind >= LENGTH(CDR(p))) return EOF; CAR(p) = MAKINUM(ind + 1); - return CHARS(CDR(p))[ind]; + return UCHARS(CDR(p))[ind]; } int noop0(stream) FILE *stream;