From db3783749859f62ad337eff801b09da20a106074 Mon Sep 17 00:00:00 2001 From: Dave Beazley Date: Wed, 11 Aug 1999 13:21:18 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Source/DOH/Doh/base.c | 22 ++++++++++++++++++++++ SWIG/Source/DOH/Doh/file.c | 32 +++++++++++++++++++++++++------- SWIG/Source/DOH/Doh/fio.c | 31 +++++++++++++++++++++++++++++++ SWIG/Source/DOH/Doh/hash.c | 10 +++++----- SWIG/Source/DOH/Doh/list.c | 4 +++- SWIG/Source/DOH/Doh/string.c | 9 +++++++-- SWIG/Source/DOH/Doh/void.c | 2 +- SWIG/Source/DOH/Include/doh.h | 8 ++++++++ 8 files changed, 102 insertions(+), 16 deletions(-) diff --git a/SWIG/Source/DOH/Doh/base.c b/SWIG/Source/DOH/Doh/base.c index 7262ba762..5b5171471 100644 --- a/SWIG/Source/DOH/Doh/base.c +++ b/SWIG/Source/DOH/Doh/base.c @@ -422,6 +422,28 @@ DOH *DohNextkey(DOH *obj) { return 0; } +int DohGetInt(DOH *obj, DOH *name) { + int ival; + DOH *val; + val = Getattr(obj,name); + if (!val) return 0; + if (String_check(val)) { + return atoi(Data(val)); + } + return 0; +} + +double DohGetDouble(DOH *obj, DOH *name) { + double dval; + DOH *val; + val = Getattr(obj,name); + if (!val) return 0; + if (String_check(val)) { + return atof(Data(val)); + } + return 0; +} + /* ---------------------------------------------------------------------- * Sequence Interface * ---------------------------------------------------------------------- */ diff --git a/SWIG/Source/DOH/Doh/file.c b/SWIG/Source/DOH/Doh/file.c index 0aa9fcd13..7b142e778 100644 --- a/SWIG/Source/DOH/Doh/file.c +++ b/SWIG/Source/DOH/Doh/file.c @@ -171,7 +171,10 @@ File_check(DOH *f) int File_read(DOH *so, void *buffer, int len) { File *s = (File *) so; - return (size_t) fread(buffer,1,len,s->filep); + if (s->filep) + return (size_t) fread(buffer,1,len,s->filep); + else + return (size_t) read(s->fd,buffer,len); } /* ----------------------------------------------------------------------------- @@ -182,7 +185,10 @@ File_read(DOH *so, void *buffer, int len) { int File_write(DOH *so, void *buffer, int len) { File *s = (File *) so; - return (size_t) fwrite(buffer,1,len,s->filep); + if (s->filep) + return (size_t) fwrite(buffer,1,len,s->filep); + else + return (size_t) write(s->fd,buffer,len); } /* ----------------------------------------------------------------------------- @@ -193,7 +199,10 @@ File_write(DOH *so, void *buffer, int len) { int File_seek(DOH *so, long offset, int whence) { File *s = (File *) so; - return fseek(s->filep,offset,whence); + if (s->filep) + return fseek(s->filep,offset,whence); + else + return lseek(s->fd,offset,whence); } /* ----------------------------------------------------------------------------- @@ -204,7 +213,10 @@ File_seek(DOH *so, long offset, int whence) { long File_tell(DOH *so) { File *s = (File *) so; - return ftell(s->filep); + if (s->filep) + return ftell(s->filep); + else + return lseek(s->fd,0,SEEK_CUR); } /* ----------------------------------------------------------------------------- @@ -215,7 +227,9 @@ File_tell(DOH *so) { int File_putc(DOH *obj, int ch) { File *s = (File *) obj; - return fputc(ch,s->filep); + if (s->filep) + return fputc(ch,s->filep); + return EOF; } /* ----------------------------------------------------------------------------- @@ -226,7 +240,9 @@ int File_putc(DOH *obj, int ch) { int File_getc(DOH *obj) { File *s = (File *) obj; - return fgetc(s->filep); + if (s->filep) + return fgetc(s->filep); + return EOF; } /* ----------------------------------------------------------------------------- @@ -237,7 +253,9 @@ int File_getc(DOH *obj) { int File_ungetc(DOH *obj, int ch) { File *s = (File *) obj; - return ungetc(ch, s->filep); + if (s->filep) + return ungetc(ch, s->filep); + return EOF; } diff --git a/SWIG/Source/DOH/Doh/fio.c b/SWIG/Source/DOH/Doh/fio.c index b9d1890dd..af3b5096e 100644 --- a/SWIG/Source/DOH/Doh/fio.c +++ b/SWIG/Source/DOH/Doh/fio.c @@ -291,3 +291,34 @@ int DohPrintf(DOH *obj, char *format, ...) { va_end(ap); return ret; } + +/* Split by a character */ + +DOH *DohSplit(DOH *in, char *chs, int nsplits) { + DOH *list; + DOH *str; + int c; + + list = NewList(); + if (String_check(in)) { + Seek(in,0,SEEK_SET); + } + while (1) { + do { + c = Getc(in); + } while ((c != EOF) && (c == *chs)); + if (c != EOF) { + str = NewString(""); + Putc(c,str); + while (1) { + c = Getc(in); + if ((c == EOF) || ((c == *chs) && (nsplits != 0))) break; + Putc(c,str); + } + Append(list,str); + nsplits--; + } + if (c == EOF) break; + } + return list; +} diff --git a/SWIG/Source/DOH/Doh/hash.c b/SWIG/Source/DOH/Doh/hash.c index 0011fe716..f5ffca9ce 100644 --- a/SWIG/Source/DOH/Doh/hash.c +++ b/SWIG/Source/DOH/Doh/hash.c @@ -435,17 +435,17 @@ Hash_str(DOH *ho) { Hash *h; h = (Hash *) ho; -#ifdef OLD - s = NewString("Hash {\n"); + s = NewString(""); + Printf(s,"Hash {\n"); for (i = 0; i < h->hashsize; i++) { n = h->hashtable[i]; while (n) { - Appendf(s," '%o' : %o, \n", n->key, n->object); + Printf(s," '%s' : %s, \n", n->key, n->object); n = n->next; } } - Append(s,"}\n"); -#else + Printf(s,"}\n"); +#ifdef old s = NewString("Hash"); Printf(s,"(%x) {",h); for (i = 0; i < h->hashsize; i++) { diff --git a/SWIG/Source/DOH/Doh/list.c b/SWIG/Source/DOH/Doh/list.c index cc6dfe3fa..330c62ba8 100644 --- a/SWIG/Source/DOH/Doh/list.c +++ b/SWIG/Source/DOH/Doh/list.c @@ -326,11 +326,13 @@ List_str(DOH *lo) List *l = (List *) lo; s = NewString(""); + Printf(s,"List [ "); for (i = 0; i < l->nitems; i++) { - Printf(s, "%o", l->items[i]); + Printf(s, " %s\n", l->items[i]); if ((i+1) < l->nitems) Printf(s,", "); } + Printf(s," ]\n"); return s; } diff --git a/SWIG/Source/DOH/Doh/string.c b/SWIG/Source/DOH/Doh/string.c index 5be745da5..d499a38e9 100644 --- a/SWIG/Source/DOH/Doh/string.c +++ b/SWIG/Source/DOH/Doh/string.c @@ -187,6 +187,7 @@ CopyString(DOH *so) { memmove(str->str, s->str, max); str->maxsize= max; str->len = s->len; + str->str[str->len] = 0; return (DOH *) str; } @@ -279,7 +280,8 @@ add(String *s, const char *newstr) { s->maxsize = newmaxsize; } strcpy(s->str+s->len,newstr); - if (s->sp >= s->len) s->sp+=l; + if (s->sp >= s->len) + s->sp+=l; s->len += l; } @@ -312,7 +314,10 @@ String_addchar(DOH *so, char c) { s->maxsize *= 2; } s->str[s->len] = c; - if (s->sp >= s->len) s->sp++; + if (s->sp >= s->len) { + s->sp++; + s->str[s->len+1] = 0; + } s->len++; } diff --git a/SWIG/Source/DOH/Doh/void.c b/SWIG/Source/DOH/Doh/void.c index 0dd682829..00aecedad 100644 --- a/SWIG/Source/DOH/Doh/void.c +++ b/SWIG/Source/DOH/Doh/void.c @@ -60,7 +60,7 @@ static DohObjInfo DohVoidType = { DOH *NewVoid(void *obj, void (*del)(void *)) { VoidObj *v; - v = (VoidObj *) malloc(sizeof(VoidObj)); + v = (VoidObj *) DohMalloc(sizeof(VoidObj)); DohInit(v); v->objinfo = &DohVoidType; v->ptr = obj; diff --git a/SWIG/Source/DOH/Include/doh.h b/SWIG/Source/DOH/Include/doh.h index f20495ef4..95d2728da 100644 --- a/SWIG/Source/DOH/Include/doh.h +++ b/SWIG/Source/DOH/Include/doh.h @@ -144,6 +144,9 @@ extern DOH *DohGetfile(DOH *obj); extern void DohSetfile(DOH *obj, DOH *file); extern void DohInit(DOH *obj); +extern int DohGetInt(DOH *obj, DOH *name); +extern double DohGetDouble(DOH *obj, DOH *name); + /* File methods */ extern int DohWrite(DOH *obj, void *buffer, int length); @@ -201,6 +204,8 @@ extern int DohvPrintf(DOH *obj, char *format, va_list ap); #define Putc DohPutc #define Ungetc DohUngetc #define vPrintf DohvPrintf +#define GetInt DohGetInt +#define GetDouble DohGetDouble /* #define Scanf DohScanf #define vScanf DohvScanf*/ @@ -247,6 +252,7 @@ extern void String_replace(DOH *s, DOH *token, DOH *rep, int flags); extern DOH *NewFile(char *file, char *mode); extern DOH *NewFileFromFile(FILE *f); +extern DOH *NewFileFromFd(int fd); /* ----------------------------------------------------------------------------- * List @@ -270,5 +276,7 @@ extern DOH *Hash_keys(DOH *); extern DOH *NewVoid(void *ptr, void (*del)(void *)); +extern DOH *DohSplit(DOH *input, char *chs, int nsplits); +#define Split DohSplit