Mercurial > repos > tabletprog
comparison modules/os.tp @ 294:d1dc2d70bdfd
Move OS module out of backend Javascript into a proper module file. Add normal bytearray to bytearray module. Add read:to method to os module for reading into a bytearray.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 24 Jul 2014 21:58:26 -0700 |
parents | |
children | f987bb2a1911 |
comparison
equal
deleted
inserted
replaced
293:2b045d5b673b | 294:d1dc2d70bdfd |
---|---|
1 { | |
2 _constant <- macro: :name { | |
3 quote: (llMessage: name withVars: { | |
4 uintret <- obj_int32 ptr | |
5 } andCode: { | |
6 uintret <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
7 uintret num!: name | |
8 uintret | |
9 }) | |
10 } | |
11 #{ | |
12 includeSystemHeader: "sys/stat.h" | |
13 includeSystemHeader: "fcntl.h" | |
14 includeSystemHeader: "stdlib.h" | |
15 includeSystemHeader: "time.h" | |
16 includeSystemHeader: "unistd.h" | |
17 | |
18 llMessage: write withVars: { | |
19 str <- string ptr | |
20 intret <- obj_int32 ptr | |
21 filedes <- obj_int32 ptr | |
22 } andCode: :filedes str { | |
23 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
24 intret num!: (write: (filedes num) (str data) (str bytes)) | |
25 intret | |
26 } | |
27 | |
28 llMessage: read withVars: { | |
29 str <- string ptr | |
30 size <- obj_int32 ptr | |
31 filedes <- obj_int32 ptr | |
32 } andCode: :filedes size { | |
33 str <- make_object: (addr_of: string_meta) NULL 0 | |
34 str data!: (GC_MALLOC_ATOMIC: (size num) + 1) | |
35 str bytes!: (read: (filedes num) (str data) (size num)) | |
36 if: (str bytes) < 0 { | |
37 str bytes!: 0 | |
38 } | |
39 str len!: (str bytes) | |
40 (str data) set: (str bytes) 0 | |
41 str | |
42 } | |
43 | |
44 llMessage: readFrom:to withVars: { | |
45 buffer <- object ptr | |
46 bufOpaque <- cpointer ptr | |
47 size <- obj_int32 ptr | |
48 filedes <- obj_int32 ptr | |
49 intret <- obj_int32 ptr | |
50 } andCode: :filedes buffer { | |
51 bufOpaque <- (mcall: _buf_ptr 1 buffer) castTo: (cpointer ptr) | |
52 size <- (mcall: length 1 buffer) castTo: (obj_int32 ptr) | |
53 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
54 intret num!: (read: (filedes num) (bufOpaque val) (size num)) | |
55 intret | |
56 } | |
57 | |
58 open <- :filename flags { | |
59 open: filename flags createPerm: 0b110110110 | |
60 } | |
61 | |
62 llMessage: open:createPerm withVars: { | |
63 filename <- string ptr | |
64 flags <- obj_int32 ptr | |
65 perm <- obj_int32 ptr | |
66 filedes <- obj_int32 ptr | |
67 } andCode: :filename flags :perm { | |
68 filedes <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
69 filedes num!: (open: (filename data) (flags num) (perm num)) | |
70 filedes | |
71 } | |
72 | |
73 llMessage: close withVars: { | |
74 filedes <- obj_int32 ptr | |
75 intret <- obj_int32 ptr | |
76 } andCode: :filedes { | |
77 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
78 intret num!: (close: (filedes num)) | |
79 intret | |
80 } | |
81 | |
82 _constant: O_RDONLY | |
83 _constant: O_WRONLY | |
84 _constant: O_RDWR | |
85 _constant: O_CREAT | |
86 _constant: O_APPEND | |
87 _constant: O_TRUNC | |
88 | |
89 llMessage: rand withVars: { | |
90 intret <- obj_int32 ptr | |
91 } andCode: { | |
92 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
93 intret num!: (rand: ) | |
94 intret | |
95 } | |
96 | |
97 llMessage: srand withVars: { | |
98 oseed <- object ptr | |
99 seed <- obj_int32 ptr | |
100 } andCode: :oseed { | |
101 seed <- (mcall: i32 1 oseed) castTo: (obj_int32 ptr) | |
102 srand: (seed num) | |
103 seed | |
104 } | |
105 | |
106 llMessage: time withVars: { | |
107 intret64 <- obj_int64 ptr | |
108 } andCode: { | |
109 intret64 <- make_object: (addr_of: obj_int64_meta) NULL 0 | |
110 intret64 num!: (time: NULL) | |
111 intret64 | |
112 } | |
113 | |
114 llMessage: sleep withVars: { | |
115 osecs <- object ptr | |
116 secs <- obj_int32 ptr | |
117 intret <- obj_int32 ptr | |
118 } andCode: :osecs { | |
119 secs <- (mcall: i32 1 osecs) castTo: (obj_int32 ptr) | |
120 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
121 intret num!: (sleep: (secs num)) | |
122 intret | |
123 } | |
124 } | |
125 } |