# HG changeset patch # User Mike Pavone # Date 1376186320 25200 # Node ID 157cc497a7f18d1a547c873b2abb1d506577a857 # Parent fc8eecad71e68da1a7c397e975a0d71a861baf4e Add rand srand and time to os module diff -r fc8eecad71e6 -r 157cc497a7f1 cbackend.js --- 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(''); os.addInclude(''); + os.addInclude(''); + os.addInclude(''); 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; } diff -r fc8eecad71e6 -r 157cc497a7f1 samples/rand.tp --- /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 + } + } +}