123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #include "bc_string.h"
- #include "bc_io.h"
- #include <ctype.h>
- /* $Id$ */
- _readln()
- {
- register int c;
- while( (c=fgetc(_chanrd)) != EOF && c!= '\n')
- ;
- }
- readskip()
- {
- register int c;
- #ifdef DEBUG
- printf("readskip\n");
- #endif
- while( (c=fgetc(_chanrd)) != EOF && c!= ',' && c!= '\n')
- ;
- }
- _readint(addr)
- int *addr;
- {
- int i;
- char buf[1024];
- #ifdef DEBUG
- printf("read int from %d\n",_chann);
- #endif
- _asschn();
- if( fscanf(_chanrd,"%d",&i) != 1)
- {
- if( ferror(_chanrd)) error(29);
- if( feof(_chanrd)) error(2);
- if( _chann == -1)
- {
- _asschn(); /* may be closed by now */
- fgets(buf,1024,_chanrd);
- printf("?Redo ");
- _readint(addr);
- return;
- }
- error(40);
- }else { readskip(); *addr=i;}
- }
- _readflt(addr)
- double *addr;
- {
- double f;
- char buf[1024];
- #ifdef DEBUG
- printf("read flt from %d\n",_chann);
- #endif
- _asschn();
- if( fscanf(_chanrd,"%lf",&f) != 1)
- {
- if( ferror(_chanrd)) error(29);
- if( feof(_chanrd)) error(2);
- if( _chann == -1)
- {
- fgets(buf,1024,_chanrd);
- printf("?Redo ");
- _readflt(addr);
- return;
- }
- error(40);
- }else { readskip(); *addr=f;}
- }
- _readstr(s)
- String **s;
- {
- char buffer[1024];
- register int kar ;
- char *c;
- #ifdef DEBUG
- printf("read str from %d\n",_chann);
- #endif
- _asschn();
- c= buffer;
- kar= fgetc(_chanrd);
- while(isspace(kar) && kar!= EOF)
- kar= fgetc(_chanrd);
- *c=kar ;
- if( kar== '"')
- {
- /* read quoted string */
- #ifdef DEBUG
- printf("qouted string\n");
- #endif
- while ( (kar= fgetc(_chanrd)) != EOF && kar!='"' ) *c++ = kar ;
- ungetc(kar,_chanrd);
- *c=0;
- }else
- if( isalpha(*c))
- {
- /* read normal string */
- c++;
- #ifdef DEBUG
- printf("non-qouted string\n");
- #endif
- while( (kar= fgetc(_chanrd)) != ',' && kar!= EOF &&
- !isspace(kar) && kar!='\n')
- *c++= kar ;
- ungetc(kar,_chanrd);
- *c=0;
- }else{
- if( ferror(_chanrd)) error(29);
- if( feof(_chanrd)) error(2);
- if( _chann == -1)
- {
- fgets(buffer,1024,_chanrd);
- printf("?Redo ");
- _rdline(s);
- return;
- }
- error(40);
- }
- #ifdef DEBUG
- printf("string read: %s\n",buffer);
- #endif
- readskip();
- /* save value read */
- _decstr(*s);
- *s= (String *) _newstr(buffer);
- }
- extern int _seektab[];
- _restore(line)
- int line;
- {
- int nr;
- char buffer[1024];
- #ifdef DEBUG
- printf("seek to %d",line);
- #endif
- fseek(_chanrd,0l,0);
- if( line)
- {
- /* search number of lines to skip */
- for(nr=0; _seektab[nr] && _seektab[nr]< line; nr+=2)
- #ifdef DEBUG
- printf("test %d %d\n",_seektab[nr], _seektab[nr+1]);
- #endif
- ;
- nr /= 2;
- #ifdef DEBUG
- printf(" %d lines to skip\n",nr);
- #endif
- while(nr-- >0 ) fgets(buffer,1024,_chanrd);
- }
- }
- _rdline(s)
- String **s;
- {
- char buffer[1024];
- if( fgets(buffer,1024,_chanrd) == 0)
- {
- if( _chann == -1)
- {
- printf("?Redo ");
- _rdline(s);
- return;
- }
- error(40);
- }
- _decstr(*s);
- *s= (String *) _newstr(buffer);
- }
|