Mercurial > repos > rhope
changeset 27:0c9272a96b58
Merged change
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 26 Jun 2009 17:24:31 -0400 |
parents | 20d40cb8abf3 (diff) 9749109b3198 (current diff) |
children | d8b4d38fceb6 |
files | |
diffstat | 3 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/file.c Thu Jun 25 02:15:36 2009 +0000 +++ b/file.c Fri Jun 26 17:24:31 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 Thu Jun 25 02:15:36 2009 +0000 +++ b/interp.c Fri Jun 26 17:24:31 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 Thu Jun 25 02:15:36 2009 +0000 +++ b/interp.h Fri Jun 26 17:24:31 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);