Mercurial > repos > tabletprog
comparison cbackend.js @ 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 | 224071eed9dd |
comparison
equal
deleted
inserted
replaced
161:fc8eecad71e6 | 162:157cc497a7f1 |
---|---|
771 function addBuiltinModules(toplevel) | 771 function addBuiltinModules(toplevel) |
772 { | 772 { |
773 var os = new cObject('mod_obj_os'); | 773 var os = new cObject('mod_obj_os'); |
774 os.addInclude('<sys/stat.h>'); | 774 os.addInclude('<sys/stat.h>'); |
775 os.addInclude('<fcntl.h>'); | 775 os.addInclude('<fcntl.h>'); |
776 os.addInclude('<stdlib.h>'); | |
777 os.addInclude('<time.h>'); | |
776 os.addMessage('write', { | 778 os.addMessage('write', { |
777 vars: {str: 'string *', intret: 'obj_int32 *', filedes: 'obj_int32 *'}, | 779 vars: {str: 'string *', intret: 'obj_int32 *', filedes: 'obj_int32 *'}, |
778 lines: [ | 780 lines: [ |
779 'filedes = va_arg(args, obj_int32 *);', | 781 'filedes = va_arg(args, obj_int32 *);', |
780 'str = va_arg(args, string *);', | 782 'str = va_arg(args, string *);', |
788 lines: [ | 790 lines: [ |
789 'filedes = va_arg(args, obj_int32 *);', | 791 'filedes = va_arg(args, obj_int32 *);', |
790 'size = va_arg(args, obj_int32 *);', | 792 'size = va_arg(args, obj_int32 *);', |
791 'str = (string *)make_object(&string_meta, NULL, 0);', | 793 'str = (string *)make_object(&string_meta, NULL, 0);', |
792 'str->data = GC_MALLOC_ATOMIC(size->num + 1);', | 794 'str->data = GC_MALLOC_ATOMIC(size->num + 1);', |
793 'str->length = str->bytes = read(filedes->num, str->data, size->num);', | 795 'str->len = str->bytes = read(filedes->num, str->data, size->num);', |
794 'if (str->bytes < 0) { str->bytes = str->length = 0; }', | 796 'if (str->bytes < 0) { str->bytes = str->len = 0; }', |
795 'str->data[str->bytes] = 0;', | 797 'str->data[str->bytes] = 0;', |
796 'return &(str->header);' | 798 'return &(str->header);' |
797 ] | 799 ] |
798 }); | 800 }); |
799 os.addMessage('open', { | 801 os.addMessage('open', { |
868 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', | 870 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', |
869 'intret->num = O_TRUNC;', | 871 'intret->num = O_TRUNC;', |
870 'return &(intret->header);' | 872 'return &(intret->header);' |
871 ] | 873 ] |
872 }); | 874 }); |
875 os.addMessage('rand', { | |
876 vars: {intret: 'obj_int32 *'}, | |
877 lines: [ | |
878 'intret = (obj_int32 *)make_object(&obj_int32_meta, NULL, 0);', | |
879 'intret->num = rand();', | |
880 'return &(intret->header);' | |
881 ] | |
882 }); | |
883 os.addMessage('rand64', { | |
884 vars: {intret64: 'obj_int64 *'}, | |
885 lines: [ | |
886 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);', | |
887 'intret64->num = (((int64_t)rand()) << 32 ) | rand();', | |
888 'return &(intret64->header);' | |
889 ] | |
890 }); | |
891 os.addMessage('srand', { | |
892 vars: {oseed: 'object *', seed: 'obj_int32 *'}, | |
893 lines: [ | |
894 'oseed = va_arg(args, object *);', | |
895 'seed = mcall(' + getMethodId("int32") + ', 1, oseed);', | |
896 'srand(seed->num);', | |
897 'return &(seed->header);' | |
898 ] | |
899 }); | |
900 os.addMessage('time', { | |
901 vars: {intret64: 'obj_int64 *'}, | |
902 lines: [ | |
903 'intret64 = (obj_int64 *)make_object(&obj_int64_meta, NULL, 0);', | |
904 'intret64->num = time(NULL);', | |
905 'return &(intret64->header);' | |
906 ] | |
907 }); | |
873 toplevel.names['os'] = os; | 908 toplevel.names['os'] = os; |
874 } | 909 } |
875 | 910 |
876 modulefile.prototype.toC = function(){ | 911 modulefile.prototype.toC = function(){ |
877 return this.ast.toCModuleInstance(); | 912 return this.ast.toCModuleInstance(); |