/src/core/sys/posix/unistd.d

http://github.com/AlexeyProkhin/druntime · D · 622 lines · 517 code · 46 blank · 59 comment · 11 complexity · 733bd0bdb66574feb5192cddfe0a9ff5 MD5 · raw file

  1. /**
  2. * D header file for POSIX.
  3. *
  4. * Copyright: Copyright Sean Kelly 2005 - 2009.
  5. * License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
  6. * Authors: Sean Kelly
  7. * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
  8. */
  9. /* Copyright Sean Kelly 2005 - 2009.
  10. * Distributed under the Boost Software License, Version 1.0.
  11. * (See accompanying file LICENSE or copy at
  12. * http://www.boost.org/LICENSE_1_0.txt)
  13. */
  14. module core.sys.posix.unistd;
  15. private import core.sys.posix.config;
  16. private import core.stdc.stddef;
  17. public import core.sys.posix.inttypes; // for intptr_t
  18. public import core.sys.posix.sys.types; // for size_t, ssize_t, uid_t, gid_t, off_t, pid_t, useconds_t
  19. version (Posix):
  20. extern (C):
  21. version( Posix )
  22. {
  23. enum STDIN_FILENO = 0;
  24. enum STDOUT_FILENO = 1;
  25. enum STDERR_FILENO = 2;
  26. __gshared char* optarg;
  27. __gshared int optind;
  28. __gshared int opterr;
  29. __gshared int optopt;
  30. int access(in char*, int);
  31. uint alarm(uint);
  32. int chdir(in char*);
  33. int chown(in char*, uid_t, gid_t);
  34. int close(int);
  35. size_t confstr(int, char*, size_t);
  36. int dup(int);
  37. int dup2(int, int);
  38. int execl(in char*, in char*, ...);
  39. int execle(in char*, in char*, ...);
  40. int execlp(in char*, in char*, ...);
  41. int execv(in char*, in char**);
  42. int execve(in char*, in char**, in char**);
  43. int execvp(in char*, in char**);
  44. void _exit(int);
  45. int fchown(int, uid_t, gid_t);
  46. pid_t fork();
  47. c_long fpathconf(int, int);
  48. //int ftruncate(int, off_t);
  49. char* getcwd(char*, size_t);
  50. gid_t getegid();
  51. uid_t geteuid();
  52. gid_t getgid();
  53. int getgroups(int, gid_t *);
  54. int gethostname(char*, size_t);
  55. char* getlogin();
  56. int getlogin_r(char*, size_t);
  57. int getopt(int, in char**, in char*);
  58. pid_t getpgrp();
  59. pid_t getpid();
  60. pid_t getppid();
  61. uid_t getuid();
  62. int isatty(int);
  63. int link(in char*, in char*);
  64. //off_t lseek(int, off_t, int);
  65. c_long pathconf(in char*, int);
  66. int pause();
  67. int pipe(ref int[2]);
  68. ssize_t read(int, void*, size_t);
  69. ssize_t readlink(in char*, char*, size_t);
  70. int rmdir(in char*);
  71. int setegid(gid_t);
  72. int seteuid(uid_t);
  73. int setgid(gid_t);
  74. int setpgid(pid_t, pid_t);
  75. pid_t setsid();
  76. int setuid(uid_t);
  77. uint sleep(uint);
  78. int symlink(in char*, in char*);
  79. c_long sysconf(int);
  80. pid_t tcgetpgrp(int);
  81. int tcsetpgrp(int, pid_t);
  82. char* ttyname(int);
  83. int ttyname_r(int, char*, size_t);
  84. int unlink(in char*);
  85. ssize_t write(int, in void*, size_t);
  86. }
  87. version( linux )
  88. {
  89. static if( __USE_FILE_OFFSET64 )
  90. {
  91. off_t lseek64(int, off_t, int);
  92. alias lseek64 lseek;
  93. }
  94. else
  95. {
  96. off_t lseek(int, off_t, int);
  97. }
  98. static if( __USE_LARGEFILE64 )
  99. {
  100. int ftruncate64(int, off_t);
  101. alias ftruncate64 ftruncate;
  102. }
  103. else
  104. {
  105. int ftruncate(int, off_t);
  106. }
  107. }
  108. else version( FreeBSD )
  109. {
  110. off_t lseek(int, off_t, int);
  111. int ftruncate(int, off_t);
  112. }
  113. else version( Posix )
  114. {
  115. off_t lseek(int, off_t, int);
  116. int ftruncate(int, off_t);
  117. }
  118. version( linux )
  119. {
  120. enum F_OK = 0;
  121. enum R_OK = 4;
  122. enum W_OK = 2;
  123. enum X_OK = 1;
  124. enum F_ULOCK = 0;
  125. enum F_LOCK = 1;
  126. enum F_TLOCK = 2;
  127. enum F_TEST = 3;
  128. enum
  129. {
  130. _CS_PATH,
  131. _CS_V6_WIDTH_RESTRICTED_ENVS,
  132. _CS_GNU_LIBC_VERSION,
  133. _CS_GNU_LIBPTHREAD_VERSION,
  134. _CS_LFS_CFLAGS = 1000,
  135. _CS_LFS_LDFLAGS,
  136. _CS_LFS_LIBS,
  137. _CS_LFS_LINTFLAGS,
  138. _CS_LFS64_CFLAGS,
  139. _CS_LFS64_LDFLAGS,
  140. _CS_LFS64_LIBS,
  141. _CS_LFS64_LINTFLAGS,
  142. _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
  143. _CS_XBS5_ILP32_OFF32_LDFLAGS,
  144. _CS_XBS5_ILP32_OFF32_LIBS,
  145. _CS_XBS5_ILP32_OFF32_LINTFLAGS,
  146. _CS_XBS5_ILP32_OFFBIG_CFLAGS,
  147. _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
  148. _CS_XBS5_ILP32_OFFBIG_LIBS,
  149. _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
  150. _CS_XBS5_LP64_OFF64_CFLAGS,
  151. _CS_XBS5_LP64_OFF64_LDFLAGS,
  152. _CS_XBS5_LP64_OFF64_LIBS,
  153. _CS_XBS5_LP64_OFF64_LINTFLAGS,
  154. _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
  155. _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
  156. _CS_XBS5_LPBIG_OFFBIG_LIBS,
  157. _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
  158. _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
  159. _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
  160. _CS_POSIX_V6_ILP32_OFF32_LIBS,
  161. _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
  162. _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
  163. _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
  164. _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
  165. _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
  166. _CS_POSIX_V6_LP64_OFF64_CFLAGS,
  167. _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
  168. _CS_POSIX_V6_LP64_OFF64_LIBS,
  169. _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
  170. _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
  171. _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
  172. _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
  173. _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
  174. }
  175. enum
  176. {
  177. _PC_LINK_MAX,
  178. _PC_MAX_CANON,
  179. _PC_MAX_INPUT,
  180. _PC_NAME_MAX,
  181. _PC_PATH_MAX,
  182. _PC_PIPE_BUF,
  183. _PC_CHOWN_RESTRICTED,
  184. _PC_NO_TRUNC,
  185. _PC_VDISABLE,
  186. _PC_SYNC_IO,
  187. _PC_ASYNC_IO,
  188. _PC_PRIO_IO,
  189. _PC_SOCK_MAXBUF,
  190. _PC_FILESIZEBITS,
  191. _PC_REC_INCR_XFER_SIZE,
  192. _PC_REC_MAX_XFER_SIZE,
  193. _PC_REC_MIN_XFER_SIZE,
  194. _PC_REC_XFER_ALIGN,
  195. _PC_ALLOC_SIZE_MIN,
  196. _PC_SYMLINK_MAX,
  197. _PC_2_SYMLINKS
  198. }
  199. enum
  200. {
  201. _SC_ARG_MAX,
  202. _SC_CHILD_MAX,
  203. _SC_CLK_TCK,
  204. _SC_NGROUPS_MAX,
  205. _SC_OPEN_MAX,
  206. _SC_STREAM_MAX,
  207. _SC_TZNAME_MAX,
  208. _SC_JOB_CONTROL,
  209. _SC_SAVED_IDS,
  210. _SC_REALTIME_SIGNALS,
  211. _SC_PRIORITY_SCHEDULING,
  212. _SC_TIMERS,
  213. _SC_ASYNCHRONOUS_IO,
  214. _SC_PRIORITIZED_IO,
  215. _SC_SYNCHRONIZED_IO,
  216. _SC_FSYNC,
  217. _SC_MAPPED_FILES,
  218. _SC_MEMLOCK,
  219. _SC_MEMLOCK_RANGE,
  220. _SC_MEMORY_PROTECTION,
  221. _SC_MESSAGE_PASSING,
  222. _SC_SEMAPHORES,
  223. _SC_SHARED_MEMORY_OBJECTS,
  224. _SC_AIO_LISTIO_MAX,
  225. _SC_AIO_MAX,
  226. _SC_AIO_PRIO_DELTA_MAX,
  227. _SC_DELAYTIMER_MAX,
  228. _SC_MQ_OPEN_MAX,
  229. _SC_MQ_PRIO_MAX,
  230. _SC_VERSION,
  231. _SC_PAGESIZE,
  232. _SC_PAGE_SIZE = _SC_PAGESIZE,
  233. _SC_RTSIG_MAX,
  234. _SC_SEM_NSEMS_MAX,
  235. _SC_SEM_VALUE_MAX,
  236. _SC_SIGQUEUE_MAX,
  237. _SC_TIMER_MAX,
  238. _SC_BC_BASE_MAX,
  239. _SC_BC_DIM_MAX,
  240. _SC_BC_SCALE_MAX,
  241. _SC_BC_STRING_MAX,
  242. _SC_COLL_WEIGHTS_MAX,
  243. _SC_EQUIV_CLASS_MAX,
  244. _SC_EXPR_NEST_MAX,
  245. _SC_LINE_MAX,
  246. _SC_RE_DUP_MAX,
  247. _SC_CHARCLASS_NAME_MAX,
  248. _SC_2_VERSION,
  249. _SC_2_C_BIND,
  250. _SC_2_C_DEV,
  251. _SC_2_FORT_DEV,
  252. _SC_2_FORT_RUN,
  253. _SC_2_SW_DEV,
  254. _SC_2_LOCALEDEF,
  255. _SC_PII,
  256. _SC_PII_XTI,
  257. _SC_PII_SOCKET,
  258. _SC_PII_INTERNET,
  259. _SC_PII_OSI,
  260. _SC_POLL,
  261. _SC_SELECT,
  262. _SC_UIO_MAXIOV,
  263. _SC_IOV_MAX = _SC_UIO_MAXIOV,
  264. _SC_PII_INTERNET_STREAM,
  265. _SC_PII_INTERNET_DGRAM,
  266. _SC_PII_OSI_COTS,
  267. _SC_PII_OSI_CLTS,
  268. _SC_PII_OSI_M,
  269. _SC_T_IOV_MAX,
  270. _SC_THREADS,
  271. _SC_THREAD_SAFE_FUNCTIONS,
  272. _SC_GETGR_R_SIZE_MAX,
  273. _SC_GETPW_R_SIZE_MAX,
  274. _SC_LOGIN_NAME_MAX,
  275. _SC_TTY_NAME_MAX,
  276. _SC_THREAD_DESTRUCTOR_ITERATIONS,
  277. _SC_THREAD_KEYS_MAX,
  278. _SC_THREAD_STACK_MIN,
  279. _SC_THREAD_THREADS_MAX,
  280. _SC_THREAD_ATTR_STACKADDR,
  281. _SC_THREAD_ATTR_STACKSIZE,
  282. _SC_THREAD_PRIORITY_SCHEDULING,
  283. _SC_THREAD_PRIO_INHERIT,
  284. _SC_THREAD_PRIO_PROTECT,
  285. _SC_THREAD_PROCESS_SHARED,
  286. _SC_NPROCESSORS_CONF,
  287. _SC_NPROCESSORS_ONLN,
  288. _SC_PHYS_PAGES,
  289. _SC_AVPHYS_PAGES,
  290. _SC_ATEXIT_MAX,
  291. _SC_PASS_MAX,
  292. _SC_XOPEN_VERSION,
  293. _SC_XOPEN_XCU_VERSION,
  294. _SC_XOPEN_UNIX,
  295. _SC_XOPEN_CRYPT,
  296. _SC_XOPEN_ENH_I18N,
  297. _SC_XOPEN_SHM,
  298. _SC_2_CHAR_TERM,
  299. _SC_2_C_VERSION,
  300. _SC_2_UPE,
  301. _SC_XOPEN_XPG2,
  302. _SC_XOPEN_XPG3,
  303. _SC_XOPEN_XPG4,
  304. _SC_CHAR_BIT,
  305. _SC_CHAR_MAX,
  306. _SC_CHAR_MIN,
  307. _SC_INT_MAX,
  308. _SC_INT_MIN,
  309. _SC_LONG_BIT,
  310. _SC_WORD_BIT,
  311. _SC_MB_LEN_MAX,
  312. _SC_NZERO,
  313. _SC_SSIZE_MAX,
  314. _SC_SCHAR_MAX,
  315. _SC_SCHAR_MIN,
  316. _SC_SHRT_MAX,
  317. _SC_SHRT_MIN,
  318. _SC_UCHAR_MAX,
  319. _SC_UINT_MAX,
  320. _SC_ULONG_MAX,
  321. _SC_USHRT_MAX,
  322. _SC_NL_ARGMAX,
  323. _SC_NL_LANGMAX,
  324. _SC_NL_MSGMAX,
  325. _SC_NL_NMAX,
  326. _SC_NL_SETMAX,
  327. _SC_NL_TEXTMAX,
  328. _SC_XBS5_ILP32_OFF32,
  329. _SC_XBS5_ILP32_OFFBIG,
  330. _SC_XBS5_LP64_OFF64,
  331. _SC_XBS5_LPBIG_OFFBIG,
  332. _SC_XOPEN_LEGACY,
  333. _SC_XOPEN_REALTIME,
  334. _SC_XOPEN_REALTIME_THREADS,
  335. _SC_ADVISORY_INFO,
  336. _SC_BARRIERS,
  337. _SC_BASE,
  338. _SC_C_LANG_SUPPORT,
  339. _SC_C_LANG_SUPPORT_R,
  340. _SC_CLOCK_SELECTION,
  341. _SC_CPUTIME,
  342. _SC_THREAD_CPUTIME,
  343. _SC_DEVICE_IO,
  344. _SC_DEVICE_SPECIFIC,
  345. _SC_DEVICE_SPECIFIC_R,
  346. _SC_FD_MGMT,
  347. _SC_FIFO,
  348. _SC_PIPE,
  349. _SC_FILE_ATTRIBUTES,
  350. _SC_FILE_LOCKING,
  351. _SC_FILE_SYSTEM,
  352. _SC_MONOTONIC_CLOCK,
  353. _SC_MULTI_PROCESS,
  354. _SC_SINGLE_PROCESS,
  355. _SC_NETWORKING,
  356. _SC_READER_WRITER_LOCKS,
  357. _SC_SPIN_LOCKS,
  358. _SC_REGEXP,
  359. _SC_REGEX_VERSION,
  360. _SC_SHELL,
  361. _SC_SIGNALS,
  362. _SC_SPAWN,
  363. _SC_SPORADIC_SERVER,
  364. _SC_THREAD_SPORADIC_SERVER,
  365. _SC_SYSTEM_DATABASE,
  366. _SC_SYSTEM_DATABASE_R,
  367. _SC_TIMEOUTS,
  368. _SC_TYPED_MEMORY_OBJECTS,
  369. _SC_USER_GROUPS,
  370. _SC_USER_GROUPS_R,
  371. _SC_2_PBS,
  372. _SC_2_PBS_ACCOUNTING,
  373. _SC_2_PBS_LOCATE,
  374. _SC_2_PBS_MESSAGE,
  375. _SC_2_PBS_TRACK,
  376. _SC_SYMLOOP_MAX,
  377. _SC_STREAMS,
  378. _SC_2_PBS_CHECKPOINT,
  379. _SC_V6_ILP32_OFF32,
  380. _SC_V6_ILP32_OFFBIG,
  381. _SC_V6_LP64_OFF64,
  382. _SC_V6_LPBIG_OFFBIG,
  383. _SC_HOST_NAME_MAX,
  384. _SC_TRACE,
  385. _SC_TRACE_EVENT_FILTER,
  386. _SC_TRACE_INHERIT,
  387. _SC_TRACE_LOG,
  388. _SC_LEVEL1_ICACHE_SIZE,
  389. _SC_LEVEL1_ICACHE_ASSOC,
  390. _SC_LEVEL1_ICACHE_LINESIZE,
  391. _SC_LEVEL1_DCACHE_SIZE,
  392. _SC_LEVEL1_DCACHE_ASSOC,
  393. _SC_LEVEL1_DCACHE_LINESIZE,
  394. _SC_LEVEL2_CACHE_SIZE,
  395. _SC_LEVEL2_CACHE_ASSOC,
  396. _SC_LEVEL2_CACHE_LINESIZE,
  397. _SC_LEVEL3_CACHE_SIZE,
  398. _SC_LEVEL3_CACHE_ASSOC,
  399. _SC_LEVEL3_CACHE_LINESIZE,
  400. _SC_LEVEL4_CACHE_SIZE,
  401. _SC_LEVEL4_CACHE_ASSOC,
  402. _SC_LEVEL4_CACHE_LINESIZE,
  403. _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
  404. _SC_RAW_SOCKETS
  405. }
  406. }
  407. else version( OSX )
  408. {
  409. enum F_OK = 0;
  410. enum R_OK = 4;
  411. enum W_OK = 2;
  412. enum X_OK = 1;
  413. enum F_ULOCK = 0;
  414. enum F_LOCK = 1;
  415. enum F_TLOCK = 2;
  416. enum F_TEST = 3;
  417. }
  418. else version( FreeBSD )
  419. {
  420. enum F_OK = 0;
  421. enum R_OK = 0x04;
  422. enum W_OK = 0x02;
  423. enum X_OK = 0x01;
  424. enum F_ULOCK = 0;
  425. enum F_LOCK = 1;
  426. enum F_TLOCK = 2;
  427. enum F_TEST = 3;
  428. }
  429. //
  430. // File Synchronization (FSC)
  431. //
  432. /*
  433. int fsync(int);
  434. */
  435. version( linux )
  436. {
  437. int fsync(int);
  438. }
  439. else version( OSX )
  440. {
  441. int fsync(int);
  442. }
  443. else version( FreeBSD )
  444. {
  445. int fsync(int);
  446. }
  447. //
  448. // Synchronized I/O (SIO)
  449. //
  450. /*
  451. int fdatasync(int);
  452. */
  453. version( linux )
  454. {
  455. int fdatasync(int);
  456. }
  457. //
  458. // XOpen (XSI)
  459. //
  460. /*
  461. char* crypt(in char*, in char*);
  462. char* ctermid(char*);
  463. void encrypt(ref char[64], int);
  464. int fchdir(int);
  465. c_long gethostid();
  466. pid_t getpgid(pid_t);
  467. pid_t getsid(pid_t);
  468. char* getwd(char*); // LEGACY
  469. int lchown(in char*, uid_t, gid_t);
  470. int lockf(int, int, off_t);
  471. int nice(int);
  472. ssize_t pread(int, void*, size_t, off_t);
  473. ssize_t pwrite(int, in void*, size_t, off_t);
  474. pid_t setpgrp();
  475. int setregid(gid_t, gid_t);
  476. int setreuid(uid_t, uid_t);
  477. void swab(in void*, void*, ssize_t);
  478. void sync();
  479. int truncate(in char*, off_t);
  480. useconds_t ualarm(useconds_t, useconds_t);
  481. int usleep(useconds_t);
  482. pid_t vfork();
  483. */
  484. version( linux )
  485. {
  486. char* crypt(in char*, in char*);
  487. char* ctermid(char*);
  488. void encrypt(ref char[64], int);
  489. int fchdir(int);
  490. c_long gethostid();
  491. pid_t getpgid(pid_t);
  492. pid_t getsid(pid_t);
  493. char* getwd(char*); // LEGACY
  494. int lchown(in char*, uid_t, gid_t);
  495. //int lockf(int, int, off_t);
  496. int nice(int);
  497. //ssize_t pread(int, void*, size_t, off_t);
  498. //ssize_t pwrite(int, in void*, size_t, off_t);
  499. pid_t setpgrp();
  500. int setregid(gid_t, gid_t);
  501. int setreuid(uid_t, uid_t);
  502. void swab(in void*, void*, ssize_t);
  503. void sync();
  504. //int truncate(in char*, off_t);
  505. useconds_t ualarm(useconds_t, useconds_t);
  506. int usleep(useconds_t);
  507. pid_t vfork();
  508. static if( __USE_FILE_OFFSET64 )
  509. {
  510. int lockf64(int, int, off_t);
  511. alias lockf64 lockf;
  512. ssize_t pread64(int, void*, size_t, off_t);
  513. alias pread64 pread;
  514. ssize_t pwrite64(int, in void*, size_t, off_t);
  515. alias pwrite64 pwrite;
  516. int truncate64(in char*, off_t);
  517. alias truncate64 truncate;
  518. }
  519. else
  520. {
  521. int lockf(int, int, off_t);
  522. ssize_t pread(int, void*, size_t, off_t);
  523. ssize_t pwrite(int, in void*, size_t, off_t);
  524. int truncate(in char*, off_t);
  525. }
  526. }
  527. else version( OSX )
  528. {
  529. char* crypt(in char*, in char*);
  530. char* ctermid(char*);
  531. void encrypt(ref char[64], int);
  532. int fchdir(int);
  533. c_long gethostid();
  534. pid_t getpgid(pid_t);
  535. pid_t getsid(pid_t);
  536. char* getwd(char*); // LEGACY
  537. int lchown(in char*, uid_t, gid_t);
  538. int lockf(int, int, off_t);
  539. int nice(int);
  540. ssize_t pread(int, void*, size_t, off_t);
  541. ssize_t pwrite(int, in void*, size_t, off_t);
  542. pid_t setpgrp();
  543. int setregid(gid_t, gid_t);
  544. int setreuid(uid_t, uid_t);
  545. void swab(in void*, void*, ssize_t);
  546. void sync();
  547. int truncate(in char*, off_t);
  548. useconds_t ualarm(useconds_t, useconds_t);
  549. int usleep(useconds_t);
  550. pid_t vfork();
  551. }
  552. else version( FreeBSD )
  553. {
  554. char* crypt(in char*, in char*);
  555. //char* ctermid(char*);
  556. void encrypt(ref char[64], int);
  557. int fchdir(int);
  558. c_long gethostid();
  559. int getpgid(pid_t);
  560. int getsid(pid_t);
  561. char* getwd(char*); // LEGACY
  562. int lchown(in char*, uid_t, gid_t);
  563. int lockf(int, int, off_t);
  564. int nice(int);
  565. ssize_t pread(int, void*, size_t, off_t);
  566. ssize_t pwrite(int, in void*, size_t, off_t);
  567. int setpgrp(pid_t, pid_t);
  568. int setregid(gid_t, gid_t);
  569. int setreuid(uid_t, uid_t);
  570. void swab(in void*, void*, ssize_t);
  571. void sync();
  572. int truncate(in char*, off_t);
  573. useconds_t ualarm(useconds_t, useconds_t);
  574. int usleep(useconds_t);
  575. pid_t vfork();
  576. }