# HG changeset patch # User Mike Pavone # Date 1246051400 14400 # Node ID 20d40cb8abf38852c374ee69082f876981d68745 # Parent 8b2b3f4a2a588d990702a1d3beba1fa0b6a861d3 Added Get Double@File diff -r 8b2b3f4a2a58 -r 20d40cb8abf3 file.c --- a/file.c Wed Jun 24 23:56:49 2009 -0400 +++ b/file.c Fri Jun 26 17:23:20 2009 -0400 @@ -471,6 +471,38 @@ return 0; } +int vis_file_get_double(datum ** inputlist, queue_entry * worker_entry) +{ + file_data * file; + BOOL eof; + double num; + + inputlist[0] = copy_datum(inputlist[0], 0); + file = (file_data *)inputlist[0]->c.generic.data; + VIS_EnterCriticalSection(file->shared->lock); + if(!(eof = (file->offset >= file->shared->size))) + { + vis_file_read_open_check(file); + fread(&num,sizeof(num),1, file->shared->file); + } + VIS_LeaveCriticalSection(file->shared->lock); + if(eof) + { + release_ref(inputlist[0]); + inputlist[0] = inputlist[1] = NULL; + inputlist[2] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); + datum_set_yesno(inputlist[2], 1); + } + else + { + inputlist[1] = new_datum(BUILTIN_TYPE_REAL, 3, 0, worker_entry->instance->def->program); + inputlist[1]->c.real = num; + inputlist[2] = NULL; + file->offset += sizeof(num); + } + return 0; +} + void vis_file_write_open_check(file_data * file) { switch(file->shared->status) diff -r 8b2b3f4a2a58 -r 20d40cb8abf3 interp.c --- a/interp.c Wed Jun 24 23:56:49 2009 -0400 +++ b/interp.c Fri Jun 26 17:23:20 2009 -0400 @@ -1687,6 +1687,10 @@ aworker->input_types[0] = BUILTIN_TYPE_FILE; //add_method(this_comp, aworker); + aworker = create_worker(prog, "Get Double@File", 1, 3, WORKER_TYPE); + aworker->implement_func=(custom_worker *)vis_file_get_double; + aworker->input_types[0] = BUILTIN_TYPE_FILE; + aworker = create_worker(prog, "Put String@File", 2, 1, WORKER_TYPE); aworker->implement_func=(custom_worker *)vis_file_put_string; aworker->input_types[0] = BUILTIN_TYPE_FILE; diff -r 8b2b3f4a2a58 -r 20d40cb8abf3 interp.h --- a/interp.h Wed Jun 24 23:56:49 2009 -0400 +++ b/interp.h Fri Jun 26 17:23:20 2009 -0400 @@ -160,6 +160,7 @@ int vis_file_get_byte(datum ** inputlist, queue_entry * worker_entry); int vis_file_get_word(datum ** inputlist, queue_entry * worker_entry); int vis_file_get_long(datum ** inputlist, queue_entry * worker_entry); +int vis_file_get_double(datum ** inputlist, queue_entry * worker_entry); int vis_file_put_string(datum ** inputlist, queue_entry * worker_entry); int vis_file_length(datum ** inputlist, queue_entry * worker_entry); int vis_worker_from_string(datum ** inputlist, queue_entry * worker_entry);