os_js.odin 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. //+build js
  2. package os
  3. import "core:intrinsics"
  4. import "core:runtime"
  5. import "core:unicode/utf16"
  6. is_path_separator :: proc(c: byte) -> bool {
  7. return c == '/' || c == '\\'
  8. }
  9. open :: proc(path: string, mode: int = O_RDONLY, perm: int = 0) -> (Handle, Errno) {
  10. unimplemented("core:os procedure not supported on JS target")
  11. }
  12. close :: proc(fd: Handle) -> Errno {
  13. unimplemented("core:os procedure not supported on JS target")
  14. }
  15. flush :: proc(fd: Handle) -> (err: Errno) {
  16. unimplemented("core:os procedure not supported on JS target")
  17. }
  18. write :: proc(fd: Handle, data: []byte) -> (int, Errno) {
  19. unimplemented("core:os procedure not supported on JS target")
  20. }
  21. @(private="file")
  22. read_console :: proc(handle: Handle, b: []byte) -> (n: int, err: Errno) {
  23. unimplemented("core:os procedure not supported on JS target")
  24. }
  25. read :: proc(fd: Handle, data: []byte) -> (int, Errno) {
  26. unimplemented("core:os procedure not supported on JS target")
  27. }
  28. seek :: proc(fd: Handle, offset: i64, whence: int) -> (i64, Errno) {
  29. unimplemented("core:os procedure not supported on JS target")
  30. }
  31. file_size :: proc(fd: Handle) -> (i64, Errno) {
  32. unimplemented("core:os procedure not supported on JS target")
  33. }
  34. @(private)
  35. MAX_RW :: 1<<30
  36. @(private)
  37. pread :: proc(fd: Handle, data: []byte, offset: i64) -> (int, Errno) {
  38. unimplemented("core:os procedure not supported on JS target")
  39. }
  40. @(private)
  41. pwrite :: proc(fd: Handle, data: []byte, offset: i64) -> (int, Errno) {
  42. unimplemented("core:os procedure not supported on JS target")
  43. }
  44. read_at :: proc(fd: Handle, data: []byte, offset: i64) -> (n: int, err: Errno) {
  45. unimplemented("core:os procedure not supported on JS target")
  46. }
  47. write_at :: proc(fd: Handle, data: []byte, offset: i64) -> (n: int, err: Errno) {
  48. unimplemented("core:os procedure not supported on JS target")
  49. }
  50. // NOTE(bill): Uses startup to initialize it
  51. //stdin := get_std_handle(uint(win32.STD_INPUT_HANDLE))
  52. //stdout := get_std_handle(uint(win32.STD_OUTPUT_HANDLE))
  53. //stderr := get_std_handle(uint(win32.STD_ERROR_HANDLE))
  54. get_std_handle :: proc "contextless" (h: uint) -> Handle {
  55. context = runtime.default_context()
  56. unimplemented("core:os procedure not supported on JS target")
  57. }
  58. exists :: proc(path: string) -> bool {
  59. unimplemented("core:os procedure not supported on JS target")
  60. }
  61. is_file :: proc(path: string) -> bool {
  62. unimplemented("core:os procedure not supported on JS target")
  63. }
  64. is_dir :: proc(path: string) -> bool {
  65. unimplemented("core:os procedure not supported on JS target")
  66. }
  67. // NOTE(tetra): GetCurrentDirectory is not thread safe with SetCurrentDirectory and GetFullPathName
  68. //@private cwd_lock := win32.SRWLOCK{} // zero is initialized
  69. get_current_directory :: proc(allocator := context.allocator) -> string {
  70. unimplemented("core:os procedure not supported on JS target")
  71. }
  72. set_current_directory :: proc(path: string) -> (err: Errno) {
  73. unimplemented("core:os procedure not supported on JS target")
  74. }
  75. change_directory :: proc(path: string) -> (err: Errno) {
  76. unimplemented("core:os procedure not supported on JS target")
  77. }
  78. make_directory :: proc(path: string, mode: u32 = 0) -> (err: Errno) {
  79. unimplemented("core:os procedure not supported on JS target")
  80. }
  81. remove_directory :: proc(path: string) -> (err: Errno) {
  82. unimplemented("core:os procedure not supported on JS target")
  83. }
  84. @(private)
  85. is_abs :: proc(path: string) -> bool {
  86. unimplemented("core:os procedure not supported on JS target")
  87. }
  88. @(private)
  89. fix_long_path :: proc(path: string) -> string {
  90. unimplemented("core:os procedure not supported on JS target")
  91. }
  92. link :: proc(old_name, new_name: string) -> (err: Errno) {
  93. unimplemented("core:os procedure not supported on JS target")
  94. }
  95. unlink :: proc(path: string) -> (err: Errno) {
  96. unimplemented("core:os procedure not supported on JS target")
  97. }
  98. rename :: proc(old_path, new_path: string) -> (err: Errno) {
  99. unimplemented("core:os procedure not supported on JS target")
  100. }
  101. ftruncate :: proc(fd: Handle, length: i64) -> (err: Errno) {
  102. unimplemented("core:os procedure not supported on JS target")
  103. }
  104. truncate :: proc(path: string, length: i64) -> (err: Errno) {
  105. unimplemented("core:os procedure not supported on JS target")
  106. }
  107. remove :: proc(name: string) -> Errno {
  108. unimplemented("core:os procedure not supported on JS target")
  109. }
  110. pipe :: proc() -> (r, w: Handle, err: Errno) {
  111. unimplemented("core:os procedure not supported on JS target")
  112. }
  113. read_dir :: proc(fd: Handle, n: int, allocator := context.allocator) -> (fi: []File_Info, err: Errno) {
  114. unimplemented("core:os procedure not supported on JS target")
  115. }
  116. Handle :: distinct uintptr
  117. File_Time :: distinct u64
  118. Errno :: distinct int
  119. INVALID_HANDLE :: ~Handle(0)
  120. O_RDONLY :: 0x00000
  121. O_WRONLY :: 0x00001
  122. O_RDWR :: 0x00002
  123. O_CREATE :: 0x00040
  124. O_EXCL :: 0x00080
  125. O_NOCTTY :: 0x00100
  126. O_TRUNC :: 0x00200
  127. O_NONBLOCK :: 0x00800
  128. O_APPEND :: 0x00400
  129. O_SYNC :: 0x01000
  130. O_ASYNC :: 0x02000
  131. O_CLOEXEC :: 0x80000
  132. ERROR_NONE: Errno : 0
  133. ERROR_FILE_NOT_FOUND: Errno : 2
  134. ERROR_PATH_NOT_FOUND: Errno : 3
  135. ERROR_ACCESS_DENIED: Errno : 5
  136. ERROR_INVALID_HANDLE: Errno : 6
  137. ERROR_NOT_ENOUGH_MEMORY: Errno : 8
  138. ERROR_NO_MORE_FILES: Errno : 18
  139. ERROR_HANDLE_EOF: Errno : 38
  140. ERROR_NETNAME_DELETED: Errno : 64
  141. ERROR_FILE_EXISTS: Errno : 80
  142. ERROR_INVALID_PARAMETER: Errno : 87
  143. ERROR_BROKEN_PIPE: Errno : 109
  144. ERROR_BUFFER_OVERFLOW: Errno : 111
  145. ERROR_INSUFFICIENT_BUFFER: Errno : 122
  146. ERROR_MOD_NOT_FOUND: Errno : 126
  147. ERROR_PROC_NOT_FOUND: Errno : 127
  148. ERROR_DIR_NOT_EMPTY: Errno : 145
  149. ERROR_ALREADY_EXISTS: Errno : 183
  150. ERROR_ENVVAR_NOT_FOUND: Errno : 203
  151. ERROR_MORE_DATA: Errno : 234
  152. ERROR_OPERATION_ABORTED: Errno : 995
  153. ERROR_IO_PENDING: Errno : 997
  154. ERROR_NOT_FOUND: Errno : 1168
  155. ERROR_PRIVILEGE_NOT_HELD: Errno : 1314
  156. WSAEACCES: Errno : 10013
  157. WSAECONNRESET: Errno : 10054
  158. // Windows reserves errors >= 1<<29 for application use
  159. ERROR_FILE_IS_PIPE: Errno : 1<<29 + 0
  160. ERROR_FILE_IS_NOT_DIR: Errno : 1<<29 + 1
  161. ERROR_NEGATIVE_OFFSET: Errno : 1<<29 + 2
  162. // "Argv" arguments converted to Odin strings
  163. args := _alloc_command_line_arguments()
  164. last_write_time :: proc(fd: Handle) -> (File_Time, Errno) {
  165. unimplemented("core:os procedure not supported on JS target")
  166. }
  167. last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) {
  168. unimplemented("core:os procedure not supported on JS target")
  169. }
  170. heap_alloc :: proc(size: int, zero_memory := true) -> rawptr {
  171. unimplemented("core:os procedure not supported on JS target")
  172. }
  173. heap_resize :: proc(ptr: rawptr, new_size: int) -> rawptr {
  174. unimplemented("core:os procedure not supported on JS target")
  175. }
  176. heap_free :: proc(ptr: rawptr) {
  177. unimplemented("core:os procedure not supported on JS target")
  178. }
  179. get_page_size :: proc() -> int {
  180. unimplemented("core:os procedure not supported on JS target")
  181. }
  182. @(private)
  183. _processor_core_count :: proc() -> int {
  184. unimplemented("core:os procedure not supported on JS target")
  185. }
  186. exit :: proc "contextless" (code: int) -> ! {
  187. context = runtime.default_context()
  188. unimplemented("core:os procedure not supported on JS target")
  189. }
  190. current_thread_id :: proc "contextless" () -> int {
  191. context = runtime.default_context()
  192. unimplemented("core:os procedure not supported on JS target")
  193. }
  194. _alloc_command_line_arguments :: proc() -> []string {
  195. return nil
  196. }