Mercurial > repos > tabletprog
changeset 162:157cc497a7f1
Add rand srand and time to os module
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 10 Aug 2013 18:58:40 -0700 |
parents | fc8eecad71e6 |
children | f594e6836c44 |
files | cbackend.js samples/rand.tp |
diffstat | 2 files changed, 50 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/cbackend.js Sat Aug 10 18:26:33 2013 -0700 +++ b/cbackend.js Sat Aug 10 18:58:40 2013 -0700 @@ -773,6 +773,8 @@ var os = new cObject('mod_obj_os'); os.addInclude('<sys/stat.h>'); os.addInclude('<fcntl.h>'); + os.addInclude('<stdlib.h>'); + os.addInclude('<time.h>'); os.addMessage('write', { vars: {str: 'string *', intret: 'obj_int32 *', filedes: 'obj_int32 *'}, lines: [ @@ -790,8 +792,8 @@ 'size = va_arg(args, obj_int32 *);', 'str = (string *)make_object(&string_meta, NULL, 0);', 'str->data = GC_MALLOC_ATOMIC(size->num + 1);', - 'str->length = str->bytes = read(filedes->num, str->data, size->num);', - 'if (str->bytes < 0) { str->bytes = str->length = 0; }', + 'str->len = str->bytes = read(filedes->num, str->data, size->num);', + 'if (str->bytes < 0) { str->bytes = str->len = 0; }', 'str->data[str->bytes] = 0;', 'return &(str->header);' ] @@ -870,6 +872,39 @@ 'return &(intret->header);' ] }); + os.addMessage('rand', { + vars: {intret: 'obj_int32 *'}, + lines: [ + 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', + 'intret->num = rand();', + 'return &(intret->header);' + ] + }); + os.addMessage('rand64', { + vars: {intret64: 'obj_int64 *'}, + lines: [ + 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);', + 'intret64->num = (((int64_t)rand()) << 32 ) | rand();', + 'return &(intret64->header);' + ] + }); + os.addMessage('srand', { + vars: {oseed: 'object *', seed: 'obj_int32 *'}, + lines: [ + 'oseed = va_arg(args, object *);', + 'seed = mcall(' + getMethodId("int32") + ', 1, oseed);', + 'srand(seed->num);', + 'return &(seed->header);' + ] + }); + os.addMessage('time', { + vars: {intret64: 'obj_int64 *'}, + lines: [ + 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);', + 'intret64->num = time(NULL);', + 'return &(intret64->header);' + ] + }); toplevel.names['os'] = os; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/rand.tp Sat Aug 10 18:58:40 2013 -0700 @@ -0,0 +1,13 @@ +#{ + main <- :args { + os srand: (os time) + count <- 1 + if: (args length) > 1 { + count <- int32: (args get: 1) + } + while: { count > 0 } do: { + print: (hex: (os rand64)) . "\n" + count <- count - 1 + } + } +}