Mercurial > repos > rhope
changeset 26:20d40cb8abf3
Added Get Double@File
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 26 Jun 2009 17:23:20 -0400 |
parents | 8b2b3f4a2a58 |
children | 0c9272a96b58 |
files | file.c interp.c interp.h |
diffstat | 3 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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;
--- 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);