diff options
author | epoch <epoch@hacking.allowed.org> | 2017-11-01 02:53:21 -0500 |
---|---|---|
committer | epoch <epoch@hacking.allowed.org> | 2017-11-01 02:53:21 -0500 |
commit | a5d9dde24327755ec4c6068963f2c6ba0f71db94 (patch) | |
tree | aeba9ba96cd1ba8e2842f4c5bd54ec51e5511113 /src | |
parent | 98a56b97a648efa47192553c8231f1a7025f5e03 (diff) | |
download | hackvr-a5d9dde24327755ec4c6068963f2c6ba0f71db94.tar.gz hackvr-a5d9dde24327755ec4c6068963f2c6ba0f71db94.zip |
fixed memory leak in load_stdin() and made it so world changes from load_stdin() will trigger a redraw
Diffstat (limited to 'src')
-rw-r--r-- | src/hackvr.c | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/src/hackvr.c b/src/hackvr.c index cdc5084..30fe173 100644 --- a/src/hackvr.c +++ b/src/hackvr.c @@ -53,7 +53,7 @@ char *read_line_hack(FILE *fp,int len) { //warning: clobbers input //skips leading and trailing space. //compresses multiple spaces to one. -//return length of array +//returns pointer to array of strings. second argument is return by reference length of returned array. char **line_splitter(char *line,int *rlen) { char **a; int len,i=0; @@ -81,14 +81,14 @@ char **line_splitter(char *line,int *rlen) { return a; } -int load_stdin() {//what is this returning? +int load_stdin() {//this function returns -1 to quit, 0 to not ask for a redraw, and 1 to ask for redraw struct c3_shape s; // struct c3_line l; c3_group_rot_t *gr; char *command; - char *line; + char *line=0; char *id; - char **a; + char **a=0; int len; int ret=0; int j,k,l; @@ -117,10 +117,11 @@ int load_stdin() {//what is this returning? } if(FD_ISSET(0,&readfs)) {*/ //#endif - while((line=read_line_hack(stdin,0))) {//load as long there's something to load + while((line=line?free(line),read_line_hack(stdin,0):read_line_hack(stdin,0))) {//load as long there's something to load if(*line == '#') return 0; // printf("# read command: %s\n",line); - a=line_splitter(line,&len); + if(a) free(a); + a=line_splitter(line,&len); // for(i=0;i<len;i++) { // printf("\"%s\" ",a[i]); // } @@ -146,15 +147,15 @@ int load_stdin() {//what is this returning? printf("# dump\n"); printf("# quit\n"); printf("# set\n"); - printf("# addshape\n"); + printf("# addshape N x1 y1 z1 ... xN yN zN\n"); printf("# export\n"); - printf("# scaleup\n"); - printf("# move\n"); + printf("# scaleup x y z\n"); + printf("# move x y z\n"); printf("# that is all.\n"); - return 0; + continue; } else { printf("# ur not doing it right. '%s'\n",id); - return 0; + continue; } } ret=1; @@ -171,6 +172,7 @@ int load_stdin() {//what is this returning? while(global.shape[l] == 0 && l < j) l++; global.shape[k]=global.shape[l]; } + ret=1; continue; } if(!strcmp(command,"deletegroup")) { @@ -187,6 +189,7 @@ int load_stdin() {//what is this returning? while(global.shape[l] == 0 && l < j) l++; global.shape[k]=global.shape[l]; } + ret=1; continue; } if(!strcmp(command,"assimilate")) { @@ -198,6 +201,7 @@ int load_stdin() {//what is this returning? } } } + ret=1; continue; } if(!strcmp(command,"renamegroup")) { @@ -214,8 +218,15 @@ int load_stdin() {//what is this returning? gr->id=strdup(a[3]); } } + ret=1; continue; } + if(!strcmp(command,"status")) { +#ifdef GRAPHICAL + printf("# fps: %d\n",gra_global.fps); + continue; +#endif + } if(!strcmp(command,"dump")) { printf("%s set global.camera.p.x %Lf\n",global.user,global.camera.p.x); printf("%s set global.camera.p.y %Lf\n",global.user,global.camera.p.y); @@ -243,6 +254,7 @@ int load_stdin() {//what is this returning? else if(!strcmp(a[2],"camera.r.z")) global.camera.r.z.d=atoi(a[3]); #endif else printf("# unknown variable: %s\n",a[2]); + ret=1; continue; } #ifdef GRAPHICAL @@ -251,6 +263,7 @@ int load_stdin() {//what is this returning? #endif else { printf("# unknown variable: %s\n",a[2]); continue; } printf("# %s toggled!\n",a[2]); + ret=1; continue; } if(!strcmp(command,"addshape")) {//need to add a grouprot with this. @@ -289,6 +302,7 @@ int load_stdin() {//what is this returning? global.group_rot[i]->r.z=(degrees){0}; } } + ret=1; continue; } if(!strcmp(command,"export")) { @@ -316,6 +330,7 @@ int load_stdin() {//what is this returning? } } } + ret=1; continue; } if(!strcmp(command,"rotate")) { @@ -337,6 +352,7 @@ int load_stdin() {//what is this returning? global.group_rot[i]->r.y=(degrees){atoi(a[3])}; global.group_rot[i]->r.z=(degrees){atoi(a[4])}; } + ret=1; continue; } if(!strcmp(command,"move")) { @@ -361,11 +377,11 @@ int load_stdin() {//what is this returning? else { printf("# ERROR: wrong amount of parts for move. got: %d expected: 4\n",len); } + ret=1; continue; } printf("# I don't know what command you're talking about. %s\n",command); - free(line); - if(a) free(a); + //I used to have free(line) here, but this place is never gotten to if a command is found so it wasn't getting released. } return ret; } @@ -381,6 +397,7 @@ int export_file(FILE *fp) {//not used yet. maybe export in obj optionally? no. t } int main(int argc,char *argv[]) { + char redraw; if(argc < 2) { fprintf(stderr,"usage: hackvr yourname < from_others > to_others\n"); return 1; @@ -396,7 +413,7 @@ int main(int argc,char *argv[]) { #endif printf("# entering main loop\n"); for(;;) { - switch(load_stdin()) { + switch(redraw=load_stdin()) { case -1: return 0; break; @@ -406,8 +423,9 @@ int main(int argc,char *argv[]) { break; } #ifdef GRAPHICAL - graphics_event_handler();//this thing should call draw_screen when it needs to. + graphics_event_handler(redraw);//this thing should call draw_screen when it needs to. #endif + sleep(.01); } return 0; } |