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
|
#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)
{
file = f;
GETNEXT;
return TRUE;
}
int read_type(int *type) {
while(1)
{
if(isalpha(next))
return TRUE;
GETNEXT;
if(next=='*')
while(1) {
GETNEXT;
if(next!='*') continue;
GETNEXT;
if(next=='/') break;
}
else if(next=='/')
while(1) {
GETNEXT;
if(next=='\n') { GETNEXT; break; }
}
if(isalpha(next)) return TRUE;
GETNEXT;
}
return TRUE;
}
int read_token(char *str, int max)
{
int i;
i = 0;
while(isspace(next))
GETNEXT;
while( (isalnum(next) || (next=='_')) && (i<max))
{
str[i++] = next;
GETNEXT;
}
if(i==max) buferr();
str[i] = '\0';
return TRUE;
}
int read_assign()
{
while(next!='=')
GETNEXT;
GETNEXT;
return TRUE;
}
int read_int(int *ret)
{
char buf[64];
int i;
while(isspace(next))
GETNEXT;
i = 0;
while(isdigit(next) && (i<64)) {
buf[i++]=next;
GETNEXT;
}
if(i==64) buferr();
buf[i] = '\0';
*ret = atoi(buf);
return TRUE;
}
int read_semicolon()
{
while(next!=';')
GETNEXT;
GETNEXT;
return TRUE;
}
|