diff options
-rw-r--r-- | badroff.c | 27 |
1 files changed, 18 insertions, 9 deletions
@@ -15,12 +15,11 @@ FILE* getfile(int argc, char** argv){ return stdin; } +// file read & buffer fill helpers + FILE* in; buf* inbuf; -int width = 80; -bool brk = false; // not implemented - size_t fillbuf(size_t len){ // returns real len int c; size_t set; @@ -40,14 +39,18 @@ size_t chrfill(char chr){ return line; } -char* center(char* text){ - size_t len = strlen(text); +// typesetting config and commands to change. +int width = 80; +bool brk = false; // not implemented + +char* center(char* txt){ + size_t len = strlen(txt); int max = width/2 + len/2; // excluding terminator - int min = max-len+1; // first index of *text + int min = max-len+1; // first index of *txt char* str = malloc(sizeof(char)*(max + 1)); str[max] = 0; for (int i=0; i < min; i++) str[i] = ' '; - memcpy(str+min, text, len); + memcpy(str+min, txt, len); return str; } char* setwidth(char* txt){ @@ -67,18 +70,22 @@ char* cmd(void){ int cmp = strncmp(dat, mval, strlen(mval)); if (cmp < 0) // dat < mval - low = mid + 1; - else if (cmp > 0) high = mid - 1; + else if (cmp > 0) + low = mid + 1; else return call[mid](dat+strlen(mval)); } return NULL; } +// normal typesetting + char* typeset(void){ return popstrbuf(inbuf, chrfill('\n')); } +// a parser to choose when to typeset and when to run a command + char* line(void){ size_t sz; if ( (sz = fillbuf(2)) == 0) @@ -95,6 +102,8 @@ char* line(void){ } } +// orchestration + int main(int argc, char** argv){ int c; in = getfile(argc, argv); |