1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
#include "asclock.h"
#define GETNEXT fread(&next, 1, sizeof(char), file); if(feof(file)) return FALSE
static char next;
static FILE *file;
static void buferr()
{
fprintf(stderr, "please do not enter numbers bigger than the number of atoms in the universe. thanks\n");
exit(-1);
}
int read_init(FILE *f)
{
size_t readresult;
file = f;
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
return TRUE;
}
int read_type(int *type) {
size_t readresult;
while(1)
{
if(isalpha(next))
return TRUE;
readresult=GETNEXT;
if(next=='*')
while(1) {
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
if(next!='*') continue;
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
if(next=='/') break;
}
else if(next=='/')
while(1) {
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
if(next=='\n') { readresult=GETNEXT; break; }
}
if(isalpha(next)) return TRUE;
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
}
return TRUE;
}
int read_token(char *str, int max)
{
int i;
size_t readresult;
i = 0;
while(isspace(next))
{
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
}
while( (isalnum(next) || (next=='_')) && (i<max))
{
str[i++] = next;
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
}
if(i==max) buferr();
str[i] = '\0';
return TRUE;
}
int read_assign()
{
size_t readresult;
while(next!='=')
{
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
}
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
return TRUE;
}
int read_int(int *ret)
{
char buf[64];
size_t readresult;
int i;
while(isspace(next))
{
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
}
i = 0;
while(isdigit(next) && (i<64)) {
buf[i++]=next;
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
}
if(i==64) buferr();
buf[i] = '\0';
*ret = atoi(buf);
return TRUE;
}
int read_semicolon()
{
size_t readresult;
while(next!=';')
{
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
}
readresult=GETNEXT;
if (readresult==0) { fprintf(stderr,"asclock: read zero characters instead of 1\n"); }
return TRUE;
}
|