2
0
Alexander Shiryaev 7 жил өмнө
parent
commit
22d679eaee
27 өөрчлөгдсөн 1369 нэмэгдсэн , 440 устгасан
  1. 12 6
      BlackBox/_FreeBSDLinuxOpenBSD_/Lin/Mod/gen-Libc/Libc.txt.templ
  2. 3 1
      BlackBox/_LinuxOpenBSD_/Lin/Mod/gen-Libc/sizeofs.c
  3. BIN
      BlackBox/_Linux_/Host/Mod/Files.odc
  4. 612 426
      BlackBox/_Linux_/Lin/Mod/Libc.txt
  5. 0 0
      BlackBox/_Linux_/Lin/Mod/attic/Libc.odc
  6. 476 0
      BlackBox/_Linux_/Lin/Mod/attic/Libc.txt
  7. 86 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/Makefile
  8. 38 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/custom
  9. 6 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-dirent
  10. 5 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-sigaction
  11. 49 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-siginfo
  12. 4 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-stack
  13. 18 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-stat
  14. 3 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-timespec
  15. 13 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-tm
  16. 11 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-ucontext
  17. 1 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/libver
  18. 1 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/machine
  19. 1 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/osname
  20. 10 0
      BlackBox/_Linux_/Lin/Mod/gen-Libc/scs.c
  21. BIN
      BlackBox/_Linux_/System/Mod/Kernel.odc
  22. BIN
      BlackBox/_OpenBSD_/BlackBox1.run
  23. 17 7
      BlackBox/_OpenBSD_/Lin/Mod/Libc.txt
  24. 3 0
      BlackBox/_OpenBSD_/Lin/Mod/gen-Libc/custom
  25. BIN
      BlackBox/_OpenBSD_/System/Mod/Kernel.odc
  26. BIN
      BlackBox/_OpenBSD_/libBB.so
  27. BIN
      BlackBox/_OpenBSD_/libBB0.so

+ 12 - 6
BlackBox/_FreeBSDLinuxOpenBSD_/Lin/Mod/gen-Libc/Libc.txt.templ

@@ -165,14 +165,16 @@ MODULE LinLibc ["libc.so%%libver%%"];
 	PROCEDURE [ccall] localtime* (VAR [nil] t: time_t): tm;
 
 	(* POSIX.1 *)
+(*
 		PROCEDURE [ccall] sigsetjmp* (VAR env: sigjmp_buf; savemask: int): int;
+*)
 		PROCEDURE [ccall] siglongjmp* (VAR env: sigjmp_buf; val: int);
 
 	(* POSIX.1 *)
-		PROCEDURE [ccall] sigemptyset* (VAR set: sigset_t): int;
-		PROCEDURE [ccall] sigfillset* (VAR set: sigset_t): int;
-		PROCEDURE [ccall] sigaddset* (VAR set: sigset_t; signo: int): int;
-		PROCEDURE [ccall] sigprocmask* (how: int; VAR [nil] set: sigset_t; VAR [nil] oset: sigset_t): int;
+		PROCEDURE [ccall] sigemptyset* (set: PtrSigset_t): int;
+		PROCEDURE [ccall] sigfillset* (set: PtrSigset_t): int;
+		PROCEDURE [ccall] sigaddset* (set: PtrSigset_t; signo: int): int;
+		PROCEDURE [ccall] sigprocmask* (how: int; set: PtrSigset_t; oset: PtrSigset_t): int;
 
 	(* POSIX.1 *)
 		PROCEDURE [ccall] sigaction* (sig: int; VAR [nil] act: sigaction_t; VAR [nil] oact: sigaction_t): int;
@@ -226,9 +228,7 @@ MODULE LinLibc ["libc.so%%libver%%"];
 		PROCEDURE [ccall] lseek* (d: int; offset: off_t; whence: int): off_t;
 
 	(* POSIX.1 *)
-(*
 		PROCEDURE [ccall] chmod* (path: PtrSTR; mode: mode_t): int;
-*)
 		PROCEDURE [ccall] fchmod* (fd: int; mode: mode_t): int;
 
 	(* POSIX.1 *)
@@ -239,7 +239,13 @@ MODULE LinLibc ["libc.so%%libver%%"];
 		PROCEDURE [ccall] execv* (path: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
 		PROCEDURE [ccall] execvp* (file: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
 
+	(* POSIX.2 *)
+		PROCEDURE [ccall] system* (string: PtrSTR): int;
+
 	(* POSIX.1 *)
 		PROCEDURE [ccall] sysconf* (name: int): long;
 
+	PROCEDURE [ccall] popen* (command, type: PtrSTR): PtrFILE;
+	PROCEDURE [ccall] pclose* (stream: PtrFILE): int;
+
 END LinLibc.

+ 3 - 1
BlackBox/_OpenBSD_/Lin/Mod/gen-Libc/sizeofs.c → BlackBox/_LinuxOpenBSD_/Lin/Mod/gen-Libc/sizeofs.c

@@ -80,10 +80,12 @@ int main ()
 	D("int64_t", sizeof(int64_t), FALSE, TRUE);
 	D("u_int64_t", sizeof(u_int64_t), FALSE, TRUE);
 	D("wchar_t", sizeof(wchar_t), FALSE, TRUE);
-	D("sigset_t", sizeof(sigset_t), TRUE, TRUE);
 	D("sigjmp_buf", sizeof(sigjmp_buf), FALSE, TRUE);
 	D("intFlags", sizeof(int), TRUE, TRUE);
 	D("FILE", sizeof(FILE), FALSE, FALSE);
 
+	printf("%ssigset_t* = ARRAY [untagged] %d OF BYTE;\n", TABS, (int)sizeof(sigset_t));
+	printf("%sPtrSigset_t* = POINTER [untagged] TO sigset_t;\n", TABS);
+
 	return 0;
 }

BIN
BlackBox/_Linux_/Host/Mod/Files.odc


+ 612 - 426
BlackBox/_Linux_/Lin/Mod/Libc.txt

@@ -1,476 +1,662 @@
 MODULE LinLibc ["libc.so.6"];
 
-	(* THIS IS TEXT COPY OF Libc.odc *)
-	(* DO NOT EDIT *)
+	(*
+		GNU/Linux (Ubuntu 17.10)
+		i386
+	*)
 
-	IMPORT SYSTEM;
-	
 	CONST
 		NULL* = 0H;
-		TRUE* = 1;
 		FALSE* = 0;
-		
-		(* file constants *)
-		SEEK_SET* = 0;
-		SEEK_CUR* = 1;
-		SEEK_END* = 2;
-		NAME_MAX* = 256;
-		
-		(* The value of CLOCKS_PER_SEC is required to be 1 million on all   XSI-conformant systems.*)
-		CLOCKS_PER_SECOND* = 1000000; 
-		
-		(* temp directory defined in stdio.h *)
-		P_tmpdir* = "/tmp";
-		
-		(* signal constants *)	(* Fake signal functions.  *)
-		SIG_ERR* = -1; 	(* Error return.  *)
-		SIG_DFL* = 0;   	(* Default action.  *)
-		SIG_IGN* = 1;    	(* Ignore signal.  *)
-		SIG_HOLD* = 2;	(* Add signal to hold mask.  *)
-		
-		(* Signals.  *)
-		SIGHUP* = 1;	(* Hangup (POSIX).  *)
-		SIGINT* = 2;	(* Interrupt (ANSI).  *)
-		SIGQUIT* = 3;	(* Quit (POSIX).  *)
-		SIGILL* = 4;	(* Illegal instruction (ANSI).  *)
-		SIGTRAP* = 5;	(* Trace trap (POSIX).  *)
-		SIGABRT* = 6;	(* Abort (ANSI).  *)
-		SIGIOT* = 6;	(* IOT trap (4.2 BSD).  *)
-		SIGBUS* = 7;	(* BUS error (4.2 BSD).  *)
-		SIGFPE* = 8;	(* Floating-point exception (ANSI).  *)
-		SIGKILL* = 9;	(* Kill, unblockable (POSIX).  *)
-		SIGUSR1* = 10;	(* User-defined signal 1 (POSIX).  *)
-		SIGSEGV* = 11;	(* Segmentation violation (ANSI).  *)
-		SIGUSR2* = 12;	(* User-defined signal 2 (POSIX).  *)
-		SIGPIPE* = 13;	(* Broken pipe (POSIX).  *)
-		SIGALRM* = 14;	(* Alarm clock (POSIX).  *)
-		SIGTERM* = 15;	(* Termination (ANSI).  *)
-		SIGSTKFLT* = 16;	(* Stack fault.  *)
-		SIGCHLD* = 17;	(* Child status has changed (POSIX).  *)
-		SIGCLD* = SIGCHLD;	(* Same as SIGCHLD (System V).  *)
-		SIGCONT* = 18;	(* Continue (POSIX).  *)
-		SIGSTOP* = 19;	(* Stop, unblockable (POSIX).  *)
-		SIGTSTP* = 20;	(* Keyboard stop (POSIX).  *)
-		SIGTTIN* = 21;	(* Background read from tty (POSIX).  *)
-		SIGTTOU* = 22;	(* Background write to tty (POSIX).  *)
-		SIGURG* = 23;	(* Urgent condition on socket (4.2 BSD).  *)
-		SIGXCPU* = 24;	(* CPU limit exceeded (4.2 BSD).  *)
-		SIGXFSZ* = 25;	(* File size limit exceeded (4.2 BSD).  *)
-		SIGVTALRM* =26;	(* Virtual alarm clock (4.2 BSD).  *)
-		SIGPROF* = 27;	(* Profiling alarm clock (4.2 BSD).  *)
-		SIGWINCH* = 28;	(* Window size change (4.3 BSD, Sun).  *)
-		SIGIO* = 29;	(* I/O now possible (4.2 BSD).  *)
-		SIGPOLL* = SIGIO;	(* Pollable event occurred (System V).  *)
-		SIGPWR* = 30;	(* Power failure restart (System V).  *)
-		SIGSYS* = 31;	(* Bad system call.  *)
-		SIGUNUSED* =31;
-		_NSIG* = 64;	(* Biggest signal number + 1 (including real-time signals).  *)
-		__SIGRTMIN*= 32;
-		__SIGRTMAX*=_NSIG - 1;
-
-		(* Bits in `sa_flags'.  *)
-		SA_NOCLDSTOP* = {0}; 	(* = 1 Don't send SIGCHLD when children stop.  *)
-		SA_NOCLDWAIT* = {1}; 	(* = 2 Don't create zombie on child death.  *)
-		SA_SIGINFO* = {2}; 	(* = 4 Invoke signal-catching function wth three arguments instead of one.  *)
-		SA_ONSTACK* = {27};	(* = 0x08000000 Use signal stack by using `sa_restorer'. *)
-		SA_RESTART* = {28};	(* = 0x10000000 Restart syscall on signal return.  *)
-		SA_NODEFER* = {30};	(* = 0x40000000 Don't automatically block the signal when its handler is being executed. *)
-		SA_RESETHAND* = {31};	(* = 0x80000000 Reset to SIG_DFL on entry to handler.  *)
-		SA_INTERRUPT* = {29};	(* = 0x20000000  Historical no-op.  *)
-		(* Some aliases for the SA_ constants.  *)
-		SA_NOMASK* = SA_NODEFER;
-		SA_ONESHOT* = SA_RESETHAND;
-		SA_STACK* = SA_ONSTACK;
-
-		(* code values for siginfo_t.si_code when sig = SIGFPE *)
-		FPE_INTDIV* = 1;	(* Integer divide by zero.  *)
-		FPE_INTOVF* = 2;	(* Integer overflow.  *)
-		FPE_FLTDIV* = 3;	(* Floating point divide by zero.  *)
-		FPE_FLTOVF* = 4;	(* Floating point overflow.  *)
-		FPE_FLTUND* = 5;	(* Floating point underflow.  *)
-		FPE_FLTRES* =6;	(* Floating point inexact result.  *)
-		FPE_FLTINV* = 7;	(* Floating point invalid operation.  *)
-		FPE_FLTSUB* = 8;	(* Subscript out of range.  *)
-
-		(* possible error constants for errno *)
-		EPERM* = 1;	(* Operation not permitted *)
-		ENOENT* = 2;	(* No such file or directory *)
-		ESRCH* = 3;	(* No such process *)
-		EINTR* = 4;	(* Interrupted system call *)
-		EIO* = 5;	(* I/O error *)
-		ENXIO* = 6;	(* No such device or address *)
-		E2BIG* = 7;	(* Arg list too long *)
-		ENOEXEC* = 8;	(* Exec format error *)
-		EBADF* = 9;	(* Bad file number *)
-		ECHILD* = 10;	(* No child processes *)
-		EAGAIN* = 11;	(* Try again *)
-		ENOMEM* = 12;	(* Out of memory *)
-		EACCES* = 13;	(* Permission denied *)
-		EFAULT* = 14;	(* Bad address *)
-		ENOTBLK* = 15;	(* Block device required *)
-		EBUSY* = 16;	(* Device or resource busy *)
-		EEXIST* = 17;	(* File exists *)
-		EXDEV* = 18;	(* Cross-device link *)
-		ENODEV* = 19;	(* No such device *)
-		ENOTDIR* = 20;	(* Not a directory *)
-		EISDIR* = 21;	(* Is a directory *)
-		EINVAL* = 22;	(* Invalid argument *)
-		ENFILE* = 23;	(* File table overflow *)
-		EMFILE* = 24;	(* Too many open files *)
-		ENOTTY* = 25;	(* Not a typewriter *)
-		ETXTBSY* = 26;	(* Text file busy *)
-		EFBIG* = 27;	(* File too large *)
-		ENOSPC* = 28;	(* No space left on device *)
-		ESPIPE* = 29;	(* Illegal seek *)
-		EROFS* = 30;	(* Read-only file system *)
-		EMLINK* = 31;	(* Too many links *)
-		EPIPE* = 32;	(* Broken pipe *)
-		EDOM* = 33;	(* Math argument out of domain of func *)
-		ERANGE* = 34;	(* Math result not representable *)
-		EDEADLK* = 35;	(* Resource deadlock would occur *)
-		ENAMETOOLONG* = 36;	(* File name too long *)
-		ENOLCK* = 37;	(* No record locks available *)
-		ENOSYS* = 38;	(* Function not implemented *)
-		ENOTEMPTY* = 39;	(* Directory not empty *)
-		ELOOP* = 40;	(* Too many symbolic links encountered *)
-		EWOULDBLOCK* = EAGAIN;	(* Operation would block *)
-		ENOMSG* = 42;	(* No message of desired type *)
-		EIDRM* = 43;	(* Identifier removed *)
-		ECHRNG* = 44;	(* Channel number out of range *)
-		EL2NSYNC* = 45;	(* Level 2 not synchronized *)
-		EL3HLT* = 46;	(* Level 3 halted *)
-		EL3RST* = 47;	(* Level 3 reset *)
-		ELNRNG* = 48;	(* Link number out of range *)
-		EUNATCH* = 49;	(* Protocol driver not attached *)
-		ENOCSI* = 50;	(* No CSI structure available *)
-		EL2HLT* = 51;	(* Level 2 halted *)
-		EBADE* = 52;	(* Invalid exchange *)
-		EBADR* = 53;	(* Invalid request descriptor *)
-		EXFULL* = 54;	(* Exchange full *)
-		ENOANO* = 55;	(* No anode *)
-		EBADRQC* = 56;	(* Invalid request code *)
-		EBADSLT* = 57;	(* Invalid slot *)
-		EDEADLOCK* = EDEADLK;
-		EBFONT* = 59;	(* Bad font file format *)
-		ENOSTR* = 60;	(* Device not a stream *)
-		ENODATA* = 61;	(* No data available *)
-		ETIME* = 62;	(* Timer expired *)
-		ENOSR* = 63;	(* Out of streams resources *)
-		ENONET* = 64;	(* Machine is not on the network *)
-		ENOPKG* = 65;	(* Package not installed *)
-		EREMOTE* = 66;	(* Object is remote *)
-		ENOLINK* = 67;	(* Link has been severed *)
-		EADV* = 68;	(* Advertise error *)
-		ESRMNT* = 69;	(* Srmount error *)
-		ECOMM* = 70;	(* Communication error on send *)
-		EPROTO* = 71;	(* Protocol error *)
-		EMULTIHOP* = 72;	(* Multihop attempted *)
-		EDOTDOT* = 73;	(* RFS specific error *)
-		EBADMSG* = 74;	(* Not a data message *)
-		EOVERFLOW* = 75;	(* Value too large for defined data type *)
-		ENOTUNIQ* = 76;	(* Name not unique on network *)
-		EBADFD* = 77;	(* File descriptor in bad state *)
-		EREMCHG* = 78;	(* Remote address changed *)
-		ELIBACC* = 79;	(* Can not access a needed shared library *)
-		ELIBBAD* = 80;	(* Accessing a corrupted shared library *)
-		ELIBSCN* = 81;	(* .lib section in a.out corrupted *)
-		ELIBMAX* = 82;	(* Attempting to link in too many shared libraries *)
-		ELIBEXEC* = 83;	(* Cannot exec a shared library directly *)
-		EILSEQ* = 84;	(* Illegal byte sequence *)
-		ERESTART* = 85;	(* Interrupted system call should be restarted *)
-		ESTRPIPE* = 86;	(* Streams pipe error *)
-		EUSERS* = 87;	(* Too many users *)
-		ENOTSOCK* = 88;	(* Socket operation on non-socket *)
-		EDESTADDRREQ* = 89;	(* Destination address required *)
-		EMSGSIZE* = 90;	(* Message too long *)
-		EPROTOTYPE* = 91;	(* Protocol wrong type for socket *)
-		ENOPROTOOPT* = 92;	(* Protocol not available *)
-		EPROTONOSUPPORT* = 93;	(* Protocol not supported *)
-		ESOCKTNOSUPPORT* = 94;	(* Socket type not supported *)
-		EOPNOTSUPP* = 95;	(* Operation not supported on transport endpoint *)
-		EPFNOSUPPORT* = 96;	(* Protocol family not supported *)
-		EAFNOSUPPORT* = 97;	(* Address family not supported by protocol *)
-		EADDRINUSE* = 98;	(* Address already in use *)
-		EADDRNOTAVAIL* = 99;	(* Cannot assign requested address *)
-		ENETDOWN* = 100;	(* Network is down *)
-		ENETUNREACH* = 101;	(* Network is unreachable *)
-		ENETRESET* = 102;	(* Network dropped connection because of reset *)
-		ECONNABORTED* = 103;	(* Software caused connection abort *)
-		ECONNRESET* = 104;	(* Connection reset by peer *)
-		ENOBUFS* = 105;	(* No buffer space available *)
-		EISCONN* = 106;	(* Transport endpoint is already connected *)
-		ENOTCONN* = 107;	(* Transport endpoint is not connected *)
-		ESHUTDOWN* = 108;	(* Cannot send after transport endpoint shutdown *)
-		ETOOMANYREFS* = 109;	(* Too many references: cannot splice *)
-		ETIMEDOUT* = 110;	(* Connection timed out *)
-		ECONNREFUSED* = 111;	(* Connection refused *)
-		EHOSTDOWN* = 112;	(* Host is down *)
-		EHOSTUNREACH* = 113;	(* No route to host *)
-		EALREADY* = 114;	(* Operation already in progress *)
-		EINPROGRESS* = 115;	(* Operation now in progress *)
-		ESTALE* = 116;	(* Stale NFS file handle *)
-		EUCLEAN* = 117;	(* Structure needs cleaning *)
-		ENOTNAM* = 118;	(* Not a XENIX named type file *)
-		ENAVAIL* = 119;	(* No XENIX semaphores available *)
-		EISNAM* = 120;	(* Is a named type file *)
-		EREMOTEIO* = 121;	(* Remote I/O error *)
-		EDQUOT* = 122;	(* Quota exceeded *)
-		ENOMEDIUM* = 123;	(* No medium found *)
-		EMEDIUMTYPE* = 124;	(* Wrong medium type *)
-
-		PROT_NONE* = {};	(* No access *)
-		PROT_READ* = {2};	(* Pages can be read *)
-		PROT_WRITE* = {1};	(* Pages can be written *)
-		PROT_EXEC* = {0};	(* Pages can be executed *)
-		MAP_FILE* = {0};	(* Mapped from a file or device *)
-		MAP_ANON* = {1};	(* Allocated from anonymous virtual memory *)
-		MAP_COPY* = {5};	(* Virtual copy of region at mapping time *)
-		MAP_SHARED* = {4};	(* Share changes *)
-		MAP_PRIVATE* = {};	(* Changes private; copy pages on write *)
-		MAP_FIXED* = {8};	(* Map address must be exactly as requested *)
-		MAP_NOEXTEND* = {9} ;	(* For MAP_FILE, don't change file size *)
-		MAP_HASSEMPHORE*= {10};	(* Region may contain semaphores *)
-		MAP_INHERIT* = {11} ;	(* Region is retained after exec *)
+		TRUE* = 1;
+
+		CLOCKS_PER_SEC* = 1000000;
+
 		MAP_FAILED* = -1;
 
-		O_RDONLY* = {} ;	(* Open read-only *)
-		O_WRONLY* = {0} ;	(* Open write-only *)
-		O_RDWR* = {1} ;	(* Open read/write *)
-		O_NONBLOCK* = {11};
+		(* MAP_PRIVATE, MAP_ANON (intFlags) *)
+		MAP_SHARED* = {0}; (* Share changes *)
+		MAP_PRIVATE* = {1}; (* Changes are private *)
+		MAP_TYPE* = {0..3}; (* Mask for type of mapping *)
+		MAP_FIXED* = {4}; (* Interpret addr exactly *)
+		MAP_ANONYMOUS* = {5}; (* don't use a file *)
+		MAP_FILE* = {};
+		MAP_HUGE_SHIFT* = {1,3,4};
+		MAP_HUGE_MASK* = {0..5};
+		MAP_ANON* = MAP_ANONYMOUS;
+
+
+		(* PROT_READ, PROT_WRITE, PROT_EXEC (intFlags) *)
+		PROT_READ* = {0}; (* page can be read *)
+		PROT_WRITE* = {1}; (* page can be written *)
+		PROT_EXEC* = {2}; (* page can be executed *)
+		PROT_SEM* = {3}; (* page may be used for atomic ops *)
+		PROT_NONE* = {}; (* page can not be accessed *)
+		PROT_GROWSDOWN* = {24}; (* mprotect flag: extend change to start of growsdown vma *)
+		PROT_GROWSUP* = {25}; (* mprotect flag: extend change to end of growsup vma *)
+
+
+		(* SIG_UNBLOCK, SIG_SETMASK (int) *)
+		SIG_BLOCK* = 0; (* for blocking signals *)
+		SIG_UNBLOCK* = 1; (* for unblocking signals *)
+		SIG_SETMASK* = 2; (* for setting the signal mask *)
+
+
+		(* FPE_INTDIV, FPE_INTOVF, FPE_FLTDIV, FPE_FLTOVF, FPE_FLTUND, FPE_FLTRES, FPE_FLTINV, FPE_FLTSUB (int) *)
+		FPE_INTDIV* = 1; (* integer divide by zero *)
+		FPE_INTOVF* = 2; (* integer overflow *)
+		FPE_FLTDIV* = 3; (* floating point divide by zero *)
+		FPE_FLTOVF* = 4; (* floating point overflow *)
+		FPE_FLTUND* = 5; (* floating point underflow *)
+		FPE_FLTRES* = 6; (* floating point inexact result *)
+		FPE_FLTINV* = 7; (* floating point invalid operation *)
+		FPE_FLTSUB* = 8; (* subscript out of range *)
 
-		SIG_BLOCK* = 0;	(* Block signals *)
-		SIG_UNBLOCK* = 1;	(* Unblock signals *)
-		SIG_SETMASK* = 2;	(* Set the set of blocked signals *)
 
+		(* SA_SIGINFO (intFlags) *)
+		SA_NOCLDSTOP* = {0};
+		SA_NOCLDWAIT* = {1};
+		SA_SIGINFO* = {2};
+		SA_ONSTACK* = {27};
+		SA_RESTART* = {28};
+		SA_NODEFER* = {30};
+		SA_RESETHAND* = {31};
+
+
+		(* SIGINT, SIGILL, SIGFPE, SIGSEGV, SIGKILL, SIGSTOP, SIGWINCH, SIGTHR (int) *)
+		SIGHUP* = 1;
+		SIGINT* = 2;
+		SIGQUIT* = 3;
+		SIGILL* = 4;
+		SIGTRAP* = 5;
+		SIGABRT* = 6;
+		SIGIOT* = 6;
+		SIGBUS* = 7;
+		SIGFPE* = 8;
+		SIGKILL* = 9;
+		SIGUSR1* = 10;
+		SIGSEGV* = 11;
+		SIGUSR2* = 12;
+		SIGPIPE* = 13;
+		SIGALRM* = 14;
+		SIGTERM* = 15;
+		SIGSTKFLT* = 16;
+		SIGCHLD* = 17;
+		SIGCONT* = 18;
+		SIGSTOP* = 19;
+		SIGTSTP* = 20;
+		SIGTTIN* = 21;
+		SIGTTOU* = 22;
+		SIGURG* = 23;
+		SIGXCPU* = 24;
+		SIGXFSZ* = 25;
+		SIGVTALRM* = 26;
+		SIGPROF* = 27;
+		SIGWINCH* = 28;
+		SIGIO* = 29;
+		SIGPOLL* = SIGIO;
+		SIGLOST* = 29;
+		SIGPWR* = 30;
+		SIGSYS* = 31;
+		SIGUNUSED* = 31;
+		SIGRTMIN* = 32;
+
+		_NSIG* = 64;
+
+(*
+		PAGE_SIZE* = 4096;
+*)
 		_SC_PAGESIZE* = 30;
 
+
 		SIGSTKSZ* = 8192;
 
+		(* ENOENT, EEXIST, EACCES, ENOMEM, EDQUOT, EMFILE, ENOTDIR (int) *)
+		EPERM* = 1; (* Operation not permitted *)
+		ENOENT* = 2; (* No such file or directory *)
+		ESRCH* = 3; (* No such process *)
+		EINTR* = 4; (* Interrupted system call *)
+		EIO* = 5; (* I/O error *)
+		ENXIO* = 6; (* No such device or address *)
+		E2BIG* = 7; (* Argument list too long *)
+		ENOEXEC* = 8; (* Exec format error *)
+		EBADF* = 9; (* Bad file number *)
+		ECHILD* = 10; (* No child processes *)
+		EAGAIN* = 11; (* Try again *)
+		ENOMEM* = 12; (* Out of memory *)
+		EACCES* = 13; (* Permission denied *)
+		EFAULT* = 14; (* Bad address *)
+		ENOTBLK* = 15; (* Block device required *)
+		EBUSY* = 16; (* Device or resource busy *)
+		EEXIST* = 17; (* File exists *)
+		EXDEV* = 18; (* Cross-device link *)
+		ENODEV* = 19; (* No such device *)
+		ENOTDIR* = 20; (* Not a directory *)
+		EISDIR* = 21; (* Is a directory *)
+		EINVAL* = 22; (* Invalid argument *)
+		ENFILE* = 23; (* File table overflow *)
+		EMFILE* = 24; (* Too many open files *)
+		ENOTTY* = 25; (* Not a typewriter *)
+		ETXTBSY* = 26; (* Text file busy *)
+		EFBIG* = 27; (* File too large *)
+		ENOSPC* = 28; (* No space left on device *)
+		ESPIPE* = 29; (* Illegal seek *)
+		EROFS* = 30; (* Read-only file system *)
+		EMLINK* = 31; (* Too many links *)
+		EPIPE* = 32; (* Broken pipe *)
+		EDOM* = 33; (* Math argument out of domain of func *)
+		ERANGE* = 34; (* Math result not representable *)
+		EDEADLK* = 35; (* Resource deadlock would occur *)
+		ENAMETOOLONG* = 36; (* File name too long *)
+		ENOLCK* = 37; (* No record locks available *)
+		ENOSYS* = 38; (* Invalid system call number *)
+		ENOTEMPTY* = 39; (* Directory not empty *)
+		ELOOP* = 40; (* Too many symbolic links encountered *)
+		EWOULDBLOCK* = EAGAIN; (* Operation would block *)
+		ENOMSG* = 42; (* No message of desired type *)
+		EIDRM* = 43; (* Identifier removed *)
+		ECHRNG* = 44; (* Channel number out of range *)
+		EL2NSYNC* = 45; (* Level 2 not synchronized *)
+		EL3HLT* = 46; (* Level 3 halted *)
+		EL3RST* = 47; (* Level 3 reset *)
+		ELNRNG* = 48; (* Link number out of range *)
+		EUNATCH* = 49; (* Protocol driver not attached *)
+		ENOCSI* = 50; (* No CSI structure available *)
+		EL2HLT* = 51; (* Level 2 halted *)
+		EBADE* = 52; (* Invalid exchange *)
+		EBADR* = 53; (* Invalid request descriptor *)
+		EXFULL* = 54; (* Exchange full *)
+		ENOANO* = 55; (* No anode *)
+		EBADRQC* = 56; (* Invalid request code *)
+		EBADSLT* = 57; (* Invalid slot *)
+		EDEADLOCK* = EDEADLK;
+		EBFONT* = 59; (* Bad font file format *)
+		ENOSTR* = 60; (* Device not a stream *)
+		ENODATA* = 61; (* No data available *)
+		ETIME* = 62; (* Timer expired *)
+		ENOSR* = 63; (* Out of streams resources *)
+		ENONET* = 64; (* Machine is not on the network *)
+		ENOPKG* = 65; (* Package not installed *)
+		EREMOTE* = 66; (* Object is remote *)
+		ENOLINK* = 67; (* Link has been severed *)
+		EADV* = 68; (* Advertise error *)
+		ESRMNT* = 69; (* Srmount error *)
+		ECOMM* = 70; (* Communication error on send *)
+		EPROTO* = 71; (* Protocol error *)
+		EMULTIHOP* = 72; (* Multihop attempted *)
+		EDOTDOT* = 73; (* RFS specific error *)
+		EBADMSG* = 74; (* Not a data message *)
+		EOVERFLOW* = 75; (* Value too large for defined data type *)
+		ENOTUNIQ* = 76; (* Name not unique on network *)
+		EBADFD* = 77; (* File descriptor in bad state *)
+		EREMCHG* = 78; (* Remote address changed *)
+		ELIBACC* = 79; (* Can not access a needed shared library *)
+		ELIBBAD* = 80; (* Accessing a corrupted shared library *)
+		ELIBSCN* = 81; (* .lib section in a.out corrupted *)
+		ELIBMAX* = 82; (* Attempting to link in too many shared libraries *)
+		ELIBEXEC* = 83; (* Cannot exec a shared library directly *)
+		EILSEQ* = 84; (* Illegal byte sequence *)
+		ERESTART* = 85; (* Interrupted system call should be restarted *)
+		ESTRPIPE* = 86; (* Streams pipe error *)
+		EUSERS* = 87; (* Too many users *)
+		ENOTSOCK* = 88; (* Socket operation on non-socket *)
+		EDESTADDRREQ* = 89; (* Destination address required *)
+		EMSGSIZE* = 90; (* Message too long *)
+		EPROTOTYPE* = 91; (* Protocol wrong type for socket *)
+		ENOPROTOOPT* = 92; (* Protocol not available *)
+		EPROTONOSUPPORT* = 93; (* Protocol not supported *)
+		ESOCKTNOSUPPORT* = 94; (* Socket type not supported *)
+		EOPNOTSUPP* = 95; (* Operation not supported on transport endpoint *)
+		EPFNOSUPPORT* = 96; (* Protocol family not supported *)
+		EAFNOSUPPORT* = 97; (* Address family not supported by protocol *)
+		EADDRINUSE* = 98; (* Address already in use *)
+		EADDRNOTAVAIL* = 99; (* Cannot assign requested address *)
+		ENETDOWN* = 100; (* Network is down *)
+		ENETUNREACH* = 101; (* Network is unreachable *)
+		ENETRESET* = 102; (* Network dropped connection because of reset *)
+		ECONNABORTED* = 103; (* Software caused connection abort *)
+		ECONNRESET* = 104; (* Connection reset by peer *)
+		ENOBUFS* = 105; (* No buffer space available *)
+		EISCONN* = 106; (* Transport endpoint is already connected *)
+		ENOTCONN* = 107; (* Transport endpoint is not connected *)
+		ESHUTDOWN* = 108; (* Cannot send after transport endpoint shutdown *)
+		ETOOMANYREFS* = 109; (* Too many references: cannot splice *)
+		ETIMEDOUT* = 110; (* Connection timed out *)
+		ECONNREFUSED* = 111; (* Connection refused *)
+		EHOSTDOWN* = 112; (* Host is down *)
+		EHOSTUNREACH* = 113; (* No route to host *)
+		EALREADY* = 114; (* Operation already in progress *)
+		EINPROGRESS* = 115; (* Operation now in progress *)
+		ESTALE* = 116; (* Stale file handle *)
+		EUCLEAN* = 117; (* Structure needs cleaning *)
+		ENOTNAM* = 118; (* Not a XENIX named type file *)
+		ENAVAIL* = 119; (* No XENIX semaphores available *)
+		EISNAM* = 120; (* Is a named type file *)
+		EREMOTEIO* = 121; (* Remote I/O error *)
+		EDQUOT* = 122; (* Quota exceeded *)
+		ENOMEDIUM* = 123; (* No medium found *)
+		EMEDIUMTYPE* = 124; (* Wrong medium type *)
+		ECANCELED* = 125; (* Operation Canceled *)
+		ENOKEY* = 126; (* Required key not available *)
+		EKEYEXPIRED* = 127; (* Key has expired *)
+		EKEYREVOKED* = 128; (* Key has been revoked *)
+		EKEYREJECTED* = 129; (* Key was rejected by service *)
+		EOWNERDEAD* = 130; (* Owner died *)
+		ENOTRECOVERABLE* = 131; (* State not recoverable *)
+		ERFKILL* = 132; (* Operation not possible due to RF-kill *)
+		EHWPOISON* = 133; (* Memory page has hardware error *)
+
+
+		WAIT_ANY* = -1;
+		WCONTINUED* = {3};
+		WNOHANG* = {0};
+		WUNTRACED* = {1};
+
+
+		NAME_MAX* = 255;
+
+		SEEK_SET* = 0;
+		SEEK_CUR* = 1;
+		SEEK_END* = 2;
+
 		STDIN_FILENO* = 0;
 		STDOUT_FILENO* = 1;
 		STDERR_FILENO* = 2;
 
-	TYPE 
-		__ftw_func_t* = PROCEDURE (fileName: PtrSTR; VAR [nil] stat: stat_t; flag: INTEGER): INTEGER;
-		PtrVoid* = INTEGER;
-		PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
-		wchar_t* = INTEGER;
-		PtrWSTR* = POINTER TO ARRAY [untagged] OF wchar_t;
-		PtrInt* = INTEGER;
+		P_tmpdir* = "/tmp";
+
+		(* O_RDWR, O_NONBLOCK (intFlags) *)
+		O_ACCMODE* = {0,1};
+		O_RDONLY* = {};
+		O_WRONLY* = {0};
+		O_RDWR* = {1};
+		O_CREAT* = {6}; (* not fcntl *)
+		O_EXCL* = {7}; (* not fcntl *)
+		O_NOCTTY* = {8}; (* not fcntl *)
+		O_TRUNC* = {9}; (* not fcntl *)
+		O_APPEND* = {10};
+		O_NONBLOCK* = {11};
+		O_DSYNC* = {12}; (* used to be O_SYNC, see below *)
+		O_DIRECT* = {14}; (* direct disk access hint *)
+		O_LARGEFILE* = {15};
+		O_DIRECTORY* = {16}; (* must be a directory *)
+		O_NOFOLLOW* = {17}; (* don't follow links *)
+		O_NOATIME* = {18};
+		O_CLOEXEC* = {19}; (* set close_on_exec *)
+		O_PATH* = {21};
+
+
+		CLOCK_REALTIME* = 0;
+		CLOCK_MONOTONIC* = 1;
+		CLOCK_PROCESS_CPUTIME_ID* = 2;
+		CLOCK_THREAD_CPUTIME_ID* = 3;
+		CLOCK_MONOTONIC_RAW* = 4;
+		CLOCK_REALTIME_COARSE* = 5;
+		CLOCK_MONOTONIC_COARSE* = 6;
+		CLOCK_BOOTTIME* = 7;
+		CLOCK_REALTIME_ALARM* = 8;
+		CLOCK_BOOTTIME_ALARM* = 9;
+		CLOCK_SGI_CYCLE* = 10;
+		CLOCK_TAI* = 11;
+
+
+	TYPE
 		StrArray* = POINTER TO ARRAY [untagged] OF PtrSTR;
-		PtrFILE* = INTEGER;
-		PtrDIR* = INTEGER;
-		PtrProc* = INTEGER;
+		PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
+
+		(* PtrVoid, int, long, size_t, ssize_t, off_t, time_t, clock_t, sigjmp_buf *)
+		(* mode_t, intFlags, sigset_t (set) *)
+		PtrVoid* = INTEGER;
+		int* = INTEGER;
+		long* = INTEGER;
+		ulong* = INTEGER;
+		size_t* = INTEGER;
+		ssize_t* = INTEGER;
+		off_t* = INTEGER;
 		clock_t* = INTEGER;
-		jmp_buf* = ARRAY [untagged] 6 OF INTEGER; (* bx, si, di, bp, sp, pc *)
+		clockid_t* = INTEGER;
+		time_t* = INTEGER;
 		mode_t* = SET;
-		off_t* = INTEGER;
-		SelectorFunc* = PROCEDURE (dirent: Dirent): INTEGER;
-		CmpFunc* = PROCEDURE (VAR [nil] dirent1, dirent2: PtrDirent): INTEGER;
-		size_t* = INTEGER; (* should be unsigned int *)
-		ssize_t* = INTEGER;
-		sigjmp_buf* = RECORD [untagged] 
-			buf*: jmp_buf;
-			mask_was_saved*: INTEGER;
-			saved_mask*: sigset_t;
-		END; 
-		
-		PtrDirent* = POINTER TO Dirent;
-		PtrDirentArray* = POINTER TO ARRAY [untagged] OF Dirent;
-		Dirent* = RECORD  [untagged]
-			d_ino*: INTEGER;	(* inode number *)
-			d_off*: off_t;	(* offset to this dirent *)
-			d_reclen*: SHORTINT;	(* length of this d_name *)
-			d_type*: BYTE;
-			d_name*: ARRAY[untagged]  NAME_MAX+1 OF SHORTCHAR;		(* file name (null-terminated) *)
-		END;
-		
 		pid_t* = INTEGER;
 		uid_t* = INTEGER;
-		sigval_t* = INTEGER;
-
-		siginfo_t* = RECORD [untagged]
-			si_signo*: INTEGER; 	(* Signal number *)
-			si_errno*: INTEGER;  	(* An errno value *)
-			si_code*: INTEGER;   	(* Signal code *)
-			si_pid*: pid_t;    	(* Sending process ID *)
-			si_uid*: uid_t;    	(* Real user ID of sending process *)
-			si_status*: INTEGER; 	(* Exit value or signal *)
-			si_utime*: clock_t;  	(* User time consumed *)
-			si_stime*: clock_t;  	(* System time consumed *)
-			si_value*: sigval_t;  	(* Signal value *)
-			si_int*: INTEGER;    	(* POSIX.1b signal *)
-			si_ptr*: PtrVoid;    	(* POSIX.1b signal *)
-			si_addr*: PtrVoid;   	(* Memory location which caused fault *)
-			si_band*: INTEGER;   	(* Band event *)
-			si_fd*: INTEGER;     	(* File descriptor *)
+		gid_t* = INTEGER;
+		dev_t* = LONGINT;
+		ino_t* = INTEGER;
+		nlink_t* = INTEGER;
+		blkcnt_t = INTEGER;
+		blksize_t = INTEGER;
+		int8_t* = SHORTCHAR;
+		u_int8_t* = SHORTCHAR;
+		int16_t* = SHORTINT;
+		u_int16_t* = SHORTINT;
+		int32_t* = INTEGER;
+		u_int32_t* = INTEGER;
+		int64_t* = LONGINT;
+		u_int64_t* = LONGINT;
+		wchar_t* = INTEGER;
+		sigjmp_buf* = ARRAY [untagged] 39 OF INTEGER;
+		intFlags* = SET;
+		FILE = ARRAY [untagged] 37 OF INTEGER;
+		sigset_t* = ARRAY [untagged] 128 OF BYTE;
+		PtrSigset_t* = POINTER [untagged] TO sigset_t;
+
+
+		tm* = POINTER TO tmDesc;
+		tmDesc* = RECORD [untagged]
+			(* NOTE: check record size *)
+			(* tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday [ , tm_gmtoff ] *)
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/struct_tm.h: *)
+				tm_sec*: int; (* Seconds.     [0-60] (1 leap second) *)
+				tm_min*: int; (* Minutes.     [0-59] *)
+				tm_hour*: int; (* Hours.       [0-23] *)
+				tm_mday*: int; (* Day.         [1-31] *)
+				tm_mon*: int; (* Month.       [0-11] *)
+				tm_year*: int; (* Year - 1900.  *)
+				tm_wday*: int; (* Day of week. [0-6] *)
+				tm_yday*: int; (* Days in year.[0-365] *)
+				tm_isdst*: int; (* DST.         [-1/0/1] *)
+
+				tm_gmtoff*: int; (* long int *) (* Seconds east of UTC *)
+				tm_zone*: PtrSTR; (* Timezone abbreviation *)
 		END;
+
 		Ptrsiginfo_t* = POINTER TO siginfo_t;
-		
-		sigset_t* = ARRAY [untagged] 128 OF BYTE;
-		Ptrsigset_t* = INTEGER;
+		siginfo_t = RECORD [untagged]
+			(* si_code, fault address *)
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/siginfo_t.h: *)
+				si_signo*: int; 	(* Signal number *)
+				si_errno*: int;  	(* An errno value *)
+				si_code*: int;   	(* Signal code *)
+
+				_sifields*: RECORD [union]
+					_pad: ARRAY [untagged] 29 OF int;
+					_kill*: RECORD [untagged]
+						si_pid*: pid_t;
+						si_uid*: uid_t
+					END;
+					_timer*: RECORD [untagged]
+						si_tid*: int;
+						si_overrun*: int;
+						si_sigval*: sigval_t
+					END;
+					_rt*: RECORD [untagged]
+						si_pid*: pid_t;
+						si_uid*: uid_t;
+						si_sigval*: sigval_t
+					END;
+					_sigchild*: RECORD [untagged]
+						si_pid: pid_t;
+						si_uid*: uid_t;
+						si_status*: int;
+						si_utime*: clock_t;
+						si_stime*: clock_t
+					END;
+					_sigfault*: RECORD [untagged]
+						si_addr*: PtrVoid;
+						si_addr_lsb*: SHORTINT;
+						_bounds*: RECORD [union]
+							_addr_bnd*: RECORD [untagged]
+								_lower*: PtrVoid;
+								_upper*: PtrVoid
+							END;
+							_pkey: INTEGER
+						END
+					END;
+					_sigpoll: RECORD [untagged]
+						si_band*: int; (* long int *);
+						si_fd*: int
+					END;
+					_sigsys*: RECORD [untagged]
+						_call_addr*: PtrVoid;
+						_syscall*: int;
+						_arch*: int (* unsigned int *)
+					END
+				END;
+		END;
+
+		Ptrucontext_t* = POINTER TO ucontext_t;
+		ucontext_t = RECORD [untagged]
+			(* IP, SP, FP *)
+				uc_flags*: INTEGER;	(* unsigned long int *)
+				uc_link*: Ptrucontext_t;
+				uc_stack*: stack_t;
+				uc_mcontext*: RECORD [untagged] (* mcontext_t *)
+					gregs*: gregset_t;
+					fpregs*: fpregset_t;
+					oldmask*: INTEGER; (* unsigned long int *)
+					cr2*: INTEGER; (* unsigned long int *)
+				END;
+				uc_sigmask: sigset_t;
+				__fpregs_mem*: fpstate;
+
+		END;
+
 		sigaction_t* = RECORD [untagged]
-			sa_sigaction*: PROCEDURE [ccall] (sig: INTEGER; siginfo: Ptrsiginfo_t; ptr: Ptrucontext_t); (* union with sa_handler*: PtrProc;*)
-			sa_mask*: sigset_t;
-			sa_flags*: SET;
-			sa_restorer*: LONGINT;
+(*
+			sa_sigaction*: PROCEDURE [ccall] (sig: INTEGER; siginfo: Ptrsiginfo_t; context: Ptrucontext_t),
+			sa_flags*: intFlags, sa_mask*: sigset_t
+*)
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/asm/signal.h, /usr/include/i386-linux-gnu/bits/sigaction.h *)
+				sa_sigaction*: PROCEDURE [ccall] (sig: INTEGER; siginfo: Ptrsiginfo_t; ptr: Ptrucontext_t); (* union with sa_handler*: PtrProc;*)
+				sa_mask*: sigset_t;
+				sa_flags*: intFlags;
+				sa_restorer*: PROCEDURE [ccall];
 		END;
-		
+
 		stack_t* = RECORD [untagged]
-			ss_sp*: PtrVoid;    
-			ss_flags*: INTEGER;    
-			ss_size*: size_t;
+(*
+			ss_sp*: PtrVoid, ss_size*: size_t, ss_flags*: intFlags
+*)
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/stack_t.h: *)
+				ss_sp*: PtrVoid;
+				ss_flags*: intFlags;
+				ss_size*: size_t;
 		END;
-		
+
 		stat_t* = RECORD [untagged]
-			st_dev*: LONGINT;	(* device *)
-			__pad1: SHORTINT;
-			st_ino*: INTEGER;	(* 64? inode *)
-			st_mode*: mode_t;	(* protection *)
-			st_nlink*: INTEGER; 	(* number of hard links *)
-			st_uid*: uid_t;	(* user ID of owner *)
-			st_gid*: INTEGER;	(* group ID of owner *)
-			st_rdev*: LONGINT;	(* device type (if inode device) *)
-			__pad2: SHORTINT;
-			st_size*: off_t;	(* 64? total size, in bytes *)
-			st_blksize*: INTEGER;	(* blocksize for filesystem I/O *)
-			st_blocks*: INTEGER;	(* 64? number of blocks allocated *)
-			st_atime*: INTEGER;	(* time of last access *)
-			__unused1:  INTEGER;
-			st_mtime*: INTEGER;	(* time of last modification *) 
-			__unused2:  INTEGER;
-			st_ctime*: INTEGER;	(* time of last change *)
-			__unused3:  INTEGER;
-			__unused4:  INTEGER;
-			__unused5:  INTEGER;
-		END;
-		
-		fpreg* = RECORD [untagged]
-			significand*: ARRAY [untagged] 4 OF CHAR;
-			exponent*: CHAR;
+(*
+			NOTE: check record size
+			st_mode*: mode_t, st_size*: off_t, st_mtime*: time_t
+*)
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/stat.h: *)
+				st_dev*: dev_t;
+				__pad1: SHORTINT;
+				st_ino*: ino_t;
+				st_mode*: mode_t;
+				st_nlink*: nlink_t;
+				st_uid*: uid_t;
+				st_gid*: gid_t;
+				st_rdev*: dev_t;
+				__pad2: SHORTINT;
+				st_size*: off_t;
+				st_blksize*: blksize_t;
+				st_blocks*: blkcnt_t;
+				st_atim*: timespec_t;
+				st_mtim*: timespec_t;
+				st_ctim*: timespec_t;
+				__glibc_reserved4: INTEGER; (* long int *)
+				__glibc_reserved5: INTEGER; (* long int *)
 		END;
 
-		fpstate* = RECORD [untagged]
-			cw*: INTEGER; 	(* unsigned long int *)
-			sw*: INTEGER; 	(* unsigned long int *)
-			tag*: INTEGER; 	(* unsigned long int *)
-			ipoff*: INTEGER; 	(* unsigned long int *)
-			cssel*: INTEGER; 	(* unsigned long int *)
-			dataoff*: INTEGER; 	(* unsigned long int *)
-			datasel*: INTEGER; 	(* unsigned long int *)
-			_st: ARRAY [untagged] 8 OF fpreg;
-			status*: INTEGER; 	(* unsigned long int *)
-		END;
+		PtrFILE* = PtrVoid;
+		PtrDIR* = PtrVoid;
 
-		gregset_t* = ARRAY [untagged] 19 OF INTEGER;
-		fpregset_t* = POINTER TO fpstate;
-		
-		mcontext_t*  = RECORD [untagged]
-			gregs*: gregset_t;
-			fpregs*: fpregset_t;
-			oldmask*: INTEGER;	(* unsigned long int *)
-			cr2*: INTEGER; 	(* unsigned long int *)
-		END;
-		
-		Ptrucontext_t* = POINTER TO ucontext_t;
-		ucontext_t* = RECORD [untagged]
-			uc_flags*: INTEGER;	(* unsigned long int *)
-			uc_link*: Ptrucontext_t;
-			uc_stack*: stack_t;
-			uc_mcontext*: mcontext_t;
-			uc_sigmask: sigset_t;
-			__fpregs_mem*: fpstate;
+		PtrDirent* = POINTER TO Dirent;
+		Dirent = RECORD [untagged]
+(*
+			d_name*: ARRAY [untagged] NAME_MAX + 1 OF SHORTCHAR
+*)
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/dirent.h: *)
+				d_ino*: ino_t; (* inode number *)
+				d_off*: off_t; (* offset to this dirent *)
+				d_reclen*: SHORTINT; (* length of this d_name *)
+				d_type*: BYTE;
+				d_name*: ARRAY [untagged] 256 OF SHORTCHAR;
 		END;
-		
-		(* Times and Dates *)
-		
-		tm* = POINTER TO tmDesc;
-		tmDesc* = RECORD [untagged]
-			tm_sec*: INTEGER;	(* seconds *)
-			tm_min*: INTEGER;	(* minutes *)
-			tm_hour*: INTEGER;	(* hours *)
-			tm_mday*: INTEGER;	(* day of the month *)
-			tm_mon*: INTEGER;	(* month *)
-			tm_year*: INTEGER;	(* year *)
-			tm_wday*: INTEGER;	(* day of the week *)
-			tm_yday*: INTEGER;	(* day in the year *)
-			tm_isdst*: INTEGER;	(* daylight saving time *)
+
+		timespec_t* = RECORD [untagged]
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/struct_timespec.h: *)
+				tv_sec*: time_t;
+				tv_nsec*: INTEGER;
 		END;
-		time_t* = INTEGER;
 
+(*
 	VAR
-		timezone*: INTEGER; (* seconds from GMT *)		
+		stdin*: INTEGER;
+		timezone*: INTEGER; (* or tm.tm_gmtoff *)
+*)
 (*
-		stdin*, stdout*, stderr* : PtrFILE;
+	PROCEDURE [ccall] __errno_location* (): PtrVoid;
+*)
+(*
+	(* POSIX.1 *)
+		PROCEDURE [ccall] stat* (path: PtrSTR; VAR sp: stat_t): int;
 *)
+	TYPE
+		(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/sigval_t.h: *)
+			sigval_t* = RECORD [union]
+				sival_int*: int;
+				sival_ptr*: PtrVoid
+			END;
 
-	PROCEDURE [ccall] calloc* (num, size: size_t): PtrVoid;
-	PROCEDURE [ccall] clock* (): clock_t;
-	PROCEDURE [ccall] closedir* (dir: PtrDIR): INTEGER;
-	PROCEDURE [ccall] chmod* (path: PtrSTR; mode: mode_t);
-	PROCEDURE [ccall] exit* (status: INTEGER);
-	PROCEDURE [ccall] fclose* (fp: PtrFILE): INTEGER;
-	PROCEDURE [ccall] fflush* (fp: PtrFILE): INTEGER;
-	PROCEDURE [ccall] fopen* (filename, mode: PtrSTR): PtrFILE;
-	PROCEDURE [ccall] fdopen* (fildes: INTEGER; mode: PtrSTR): PtrFILE;
-	PROCEDURE [ccall] feof* (fp: PtrFILE): INTEGER;
-	PROCEDURE [ccall] fread* (ptr: PtrVoid; size, nobj: size_t; stream: PtrFILE): size_t;
-	PROCEDURE [ccall] fseek* (stream: PtrFILE; offset, origin: INTEGER): INTEGER;
-	PROCEDURE [ccall] free* (p: PtrVoid);
-	PROCEDURE [ccall] ftell* (stream: PtrFILE): LONGINT;
-	PROCEDURE [ccall] ftw* (filename: PtrSTR; func: __ftw_func_t; descriptors: INTEGER): INTEGER;
-	PROCEDURE [ccall] fwrite* (ptr: PtrVoid; size, nobj: size_t; stream: PtrFILE): size_t;
-	PROCEDURE [ccall] getcwd* (buf: PtrSTR; size: size_t): PtrSTR;
-	PROCEDURE [ccall] getcontext* (ucontext_t: Ptrucontext_t): INTEGER;
-	PROCEDURE [ccall] gets* (s: PtrSTR);
-	PROCEDURE [ccall] fgets* (s: PtrSTR; n: INTEGER; fp: PtrFILE): PtrSTR;
-	PROCEDURE [ccall] gmtime* (VAR timep: time_t): tm;
-	PROCEDURE [ccall] kill* (pid: pid_t; sig: INTEGER): INTEGER;
-	PROCEDURE [ccall] localtime* (VAR timep: time_t): tm;
-	PROCEDURE [ccall] malloc* (size: size_t): PtrVoid;
-	PROCEDURE [ccall] mkdir* (pathname: PtrSTR; mode: mode_t): INTEGER;
-	PROCEDURE [ccall] mktime* (timeptr: tm): time_t;
-	PROCEDURE [ccall] opendir* (name: PtrSTR): PtrDIR;
-	PROCEDURE [ccall] printf* (s: PtrSTR): INTEGER;	
-	PROCEDURE [ccall] readdir* (dir: PtrDIR): PtrDirent;
-	PROCEDURE [ccall] remove* (filename: PtrSTR): INTEGER;
-	PROCEDURE [ccall] rename* (oldname, newname: PtrSTR): INTEGER;
-	PROCEDURE [ccall] scandir* (dir: PtrDIR; namelist: PtrDirentArray; selector: SelectorFunc; cmp: CmpFunc): INTEGER;
-	PROCEDURE [ccall] setcontext* (ucontext_t: Ptrucontext_t): INTEGER;
-	PROCEDURE [ccall] setjmp* (VAR env: jmp_buf): INTEGER;
-	PROCEDURE [ccall] sigaction* (sig_num: INTEGER; VAR [nil] act: sigaction_t; VAR [nil] oldact: sigaction_t): INTEGER;
-	PROCEDURE [ccall] sigaddset* (set: Ptrsigset_t; sig: INTEGER): INTEGER;
-	PROCEDURE [ccall] sigdelset* (set: Ptrsigset_t; sig: INTEGER): INTEGER;
-	PROCEDURE [ccall] sigemptyset* (set: Ptrsigset_t): INTEGER;
-	PROCEDURE [ccall] sigfillset* (set: Ptrsigset_t): INTEGER;
-	PROCEDURE [ccall] sigismemeber* (set: Ptrsigset_t; sig: INTEGER): INTEGER;
-	PROCEDURE [ccall] siglongjmp* (VAR env: sigjmp_buf; val: INTEGER);
-	PROCEDURE [ccall] signal* (sig_num: INTEGER; sighandler: PtrProc): PtrProc;
-	PROCEDURE [ccall] sigsetjmp* ["__sigsetjmp"] (VAR env: sigjmp_buf; savemask: INTEGER): INTEGER; 
+		(* Ubuntu 17.10 /usr/include/i386-linux-gnu/sys/ucontext.h: *)
+			greg_t* = int;
+			gregset_t* = ARRAY [untagged] 19 OF greg_t;
+			fpregset_t* = POINTER [untagged] TO fpstate;
+			fpreg* = RECORD [untagged]
+				significand*: ARRAY [untagged] 4 OF SHORTINT; (* unsigned short int *)
+				exponent*: SHORTINT; (* unsigned short int *)
+			END;
+			fpstate* = RECORD [untagged]
+				cw*: INTEGER; (* unsigned long int *)
+				sw*: INTEGER; (* unsigned long int *)
+				tag*: INTEGER; (* unsigned long int *)
+				ipoff*: INTEGER; (* unsigned long int *)
+				cssel*: INTEGER; (* unsigned long int *)
+				dataoff*: INTEGER; (* unsigned long int *)
+				datasel*: INTEGER; (* unsigned long int *)
+				_st: ARRAY [untagged] 8 OF fpreg;
+				status*: INTEGER; (* unsigned long int *)
+			END;
+
+	VAR
+		timezone*: INTEGER; (* seconds from GMT *)
 (*
-	PROCEDURE [ccall] stat* (filename: PtrSTR; VAR buf: stat_t): INTEGER;   stat is a macro and expands to __xstat(3, filename, buf)
+		stdin*, stdout*, stderr* : PtrFILE;
 *)
-	PROCEDURE [ccall] __xstat* (version: INTEGER; filename: PtrSTR; VAR buf: stat_t): INTEGER;
-	PROCEDURE [ccall] strftime* (s: PtrSTR; max: size_t; format: PtrSTR; ptm: tm): size_t;
-	PROCEDURE [ccall] time* (VAR [nil] t: time_t): time_t;
 
 	PROCEDURE [ccall] __errno_location*(): INTEGER;
 
-	PROCEDURE [ccall] open* (name: PtrSTR; flags: SET; mode: mode_t): INTEGER;
-	PROCEDURE [ccall] close* (d: INTEGER): INTEGER;
-	PROCEDURE [ccall] read* (d: INTEGER; buf: PtrVoid; nbytes: size_t): ssize_t;
-	PROCEDURE [ccall] write* (d: INTEGER; buf: PtrVoid; nBytes: size_t): ssize_t;
+	PROCEDURE [ccall] __xstat* (version: INTEGER; filename: PtrSTR; VAR buf: stat_t): INTEGER;
+
+	PROCEDURE [ccall] sigsetjmp* ["__sigsetjmp"] (VAR env: sigjmp_buf; savemask: int): int;
+
+
+	(* ANSI C 89 *)
+		PROCEDURE [ccall] clock* (): clock_t;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] clock_gettime* (clock_id: clockid_t; VAR tp: timespec_t): int;
+
+	PROCEDURE [ccall] mmap* (adr: PtrVoid; len: size_t; prot: intFlags; flags: intFlags; fd: int; offset: off_t): PtrVoid;
+	(* BSD *)
+		PROCEDURE [ccall] munmap* (adr: PtrVoid; len: size_t): int;
+		PROCEDURE [ccall] mprotect* (adr: PtrVoid; len: size_t; prot: intFlags): int;
+
+(*
+	PROCEDURE [ccall] calloc* (nmemb: size_t; size: size_t): PtrVoid;
+	(* ANSI C 89 *)
+		PROCEDURE [ccall] malloc* (size: size_t): PtrVoid;
+*)
+		PROCEDURE [ccall] free* (ptr: PtrVoid);
+
+	(* AT&T *)
+		PROCEDURE [ccall] time* (VAR [nil] t: time_t): time_t;
+	PROCEDURE [ccall] gmtime* (VAR [nil] t: time_t): tm;
+	PROCEDURE [ccall] localtime* (VAR [nil] t: time_t): tm;
+
+	(* POSIX.1 *)
+(*
+		PROCEDURE [ccall] sigsetjmp* (VAR env: sigjmp_buf; savemask: int): int;
+*)
+		PROCEDURE [ccall] siglongjmp* (VAR env: sigjmp_buf; val: int);
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] sigemptyset* (set: PtrSigset_t): int;
+		PROCEDURE [ccall] sigfillset* (set: PtrSigset_t): int;
+		PROCEDURE [ccall] sigaddset* (set: PtrSigset_t; signo: int): int;
+		PROCEDURE [ccall] sigprocmask* (how: int; set: PtrSigset_t; oset: PtrSigset_t): int;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] sigaction* (sig: int; VAR [nil] act: sigaction_t; VAR [nil] oact: sigaction_t): int;
+
+	(* BSD *)
+		PROCEDURE [ccall] sigaltstack* (VAR [nil] ss: stack_t; VAR [nil] oss: stack_t): int;
+
+	(* ANSI C 89 *)
+		PROCEDURE [ccall] getenv* (s: PtrSTR): PtrSTR;
+
+	(* ANSI C 89 *)
+		PROCEDURE [ccall] fopen* (path, mode: PtrSTR): PtrFILE;
+		PROCEDURE [ccall] fdopen* (fildes: int; mode: PtrSTR): PtrFILE;
+		PROCEDURE [ccall] fclose* (stream: PtrFILE): int;
+		PROCEDURE [ccall] fread* (ptr: PtrVoid; size: size_t; nmemb: size_t; stream: PtrFILE): size_t;
+		PROCEDURE [ccall] fwrite* (ptr: PtrVoid; size: size_t; nmemb: size_t; stream: PtrFILE): size_t;
+		PROCEDURE [ccall] fflush* (s: PtrFILE): int;
+		PROCEDURE [ccall] printf* (s: PtrSTR): int;
+	(* ANSI C 89, XPG4 *)
+		PROCEDURE [ccall] fseek* (stream: PtrFILE; offset: long; whence: int): int;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] fileno* (stream: PtrFILE): int;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] rename* (from, to: PtrSTR): int;
+		PROCEDURE [ccall] mkdir* (path: PtrSTR; mode: mode_t): int;
+		PROCEDURE [ccall] opendir* (filename: PtrSTR): PtrDIR;
+		PROCEDURE [ccall] readdir* (dirp: PtrDIR): PtrDirent;
+		PROCEDURE [ccall] closedir* (dirp: PtrDIR): int;
+	(* ANSI C 89, XPG4.2 *)
+		PROCEDURE [ccall] remove* (path: PtrSTR): int;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] getcwd* (buf: PtrSTR; size: size_t): PtrSTR;
+
+	(* ANSI C 99 *)
+		PROCEDURE [ccall] exit* (status: int);
+
+	(* ANSI C 89 *)
+		PROCEDURE [ccall] strftime* (buf: PtrSTR; maxsize: size_t; format: PtrSTR; timeptr: tm): size_t;
+
+	(* XXX: use fread instead *)
+		PROCEDURE [ccall] fgets* (str: PtrSTR; size: int; stream: PtrFILE): PtrSTR;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] open* (path: PtrSTR; flags: intFlags; mode: mode_t): int;
+		PROCEDURE [ccall] write* (d: int; buf: PtrVoid; nbytes: size_t): ssize_t;
+		PROCEDURE [ccall] read* (d: int; buf: PtrVoid; nbytes: size_t): ssize_t;
+		PROCEDURE [ccall] close* (d: int): int;
+		PROCEDURE [ccall] lseek* (d: int; offset: off_t; whence: int): off_t;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] chmod* (path: PtrSTR; mode: mode_t): int;
+		PROCEDURE [ccall] fchmod* (fd: int; mode: mode_t): int;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] fork* (): pid_t;
+		PROCEDURE [ccall] waitpid* (wpid: pid_t; VAR [nil] status: int; options: intFlags): pid_t;
 
-	PROCEDURE [ccall] mmap* (addr: PtrVoid; len: size_t; prot: SET; flags: SET; fd, offset: off_t): PtrVoid;
-	PROCEDURE [ccall] munmap* (addr: PtrVoid; len: size_t): INTEGER;
-	PROCEDURE [ccall] mprotect* (addr: PtrVoid; len: size_t; prot: SET): INTEGER;
+	(* POSIX.1 *)
+		PROCEDURE [ccall] execv* (path: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
+		PROCEDURE [ccall] execvp* (file: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
 
-	PROCEDURE [ccall] getenv* (name: PtrSTR): PtrSTR;
+	(* POSIX.2 *)
+		PROCEDURE [ccall] system* (string: PtrSTR): int;
 
-	PROCEDURE [ccall] sysconf* (name: INTEGER): INTEGER;
-	
-	PROCEDURE [ccall] sigaltstack* (VAR [nil] ss: stack_t; VAR [nil] oss: stack_t): INTEGER;
+	(* POSIX.1 *)
+		PROCEDURE [ccall] sysconf* (name: int): long;
 
-	PROCEDURE [ccall] sigprocmask* (how: INTEGER; set: Ptrsigset_t; oldset: Ptrsigset_t): INTEGER;
+	PROCEDURE [ccall] popen* (command, type: PtrSTR): PtrFILE;
+	PROCEDURE [ccall] pclose* (stream: PtrFILE): int;
 
-END LinLibc.
+END LinLibc.

+ 0 - 0
BlackBox/_Linux_/Lin/Mod/Libc.odc → BlackBox/_Linux_/Lin/Mod/attic/Libc.odc


+ 476 - 0
BlackBox/_Linux_/Lin/Mod/attic/Libc.txt

@@ -0,0 +1,476 @@
+MODULE LinLibc ["libc.so.6"];
+
+	(* THIS IS TEXT COPY OF Libc.odc *)
+	(* DO NOT EDIT *)
+
+	IMPORT SYSTEM;
+	
+	CONST
+		NULL* = 0H;
+		TRUE* = 1;
+		FALSE* = 0;
+		
+		(* file constants *)
+		SEEK_SET* = 0;
+		SEEK_CUR* = 1;
+		SEEK_END* = 2;
+		NAME_MAX* = 256;
+		
+		(* The value of CLOCKS_PER_SEC is required to be 1 million on all   XSI-conformant systems.*)
+		CLOCKS_PER_SECOND* = 1000000; 
+		
+		(* temp directory defined in stdio.h *)
+		P_tmpdir* = "/tmp";
+		
+		(* signal constants *)	(* Fake signal functions.  *)
+		SIG_ERR* = -1; 	(* Error return.  *)
+		SIG_DFL* = 0;   	(* Default action.  *)
+		SIG_IGN* = 1;    	(* Ignore signal.  *)
+		SIG_HOLD* = 2;	(* Add signal to hold mask.  *)
+		
+		(* Signals.  *)
+		SIGHUP* = 1;	(* Hangup (POSIX).  *)
+		SIGINT* = 2;	(* Interrupt (ANSI).  *)
+		SIGQUIT* = 3;	(* Quit (POSIX).  *)
+		SIGILL* = 4;	(* Illegal instruction (ANSI).  *)
+		SIGTRAP* = 5;	(* Trace trap (POSIX).  *)
+		SIGABRT* = 6;	(* Abort (ANSI).  *)
+		SIGIOT* = 6;	(* IOT trap (4.2 BSD).  *)
+		SIGBUS* = 7;	(* BUS error (4.2 BSD).  *)
+		SIGFPE* = 8;	(* Floating-point exception (ANSI).  *)
+		SIGKILL* = 9;	(* Kill, unblockable (POSIX).  *)
+		SIGUSR1* = 10;	(* User-defined signal 1 (POSIX).  *)
+		SIGSEGV* = 11;	(* Segmentation violation (ANSI).  *)
+		SIGUSR2* = 12;	(* User-defined signal 2 (POSIX).  *)
+		SIGPIPE* = 13;	(* Broken pipe (POSIX).  *)
+		SIGALRM* = 14;	(* Alarm clock (POSIX).  *)
+		SIGTERM* = 15;	(* Termination (ANSI).  *)
+		SIGSTKFLT* = 16;	(* Stack fault.  *)
+		SIGCHLD* = 17;	(* Child status has changed (POSIX).  *)
+		SIGCLD* = SIGCHLD;	(* Same as SIGCHLD (System V).  *)
+		SIGCONT* = 18;	(* Continue (POSIX).  *)
+		SIGSTOP* = 19;	(* Stop, unblockable (POSIX).  *)
+		SIGTSTP* = 20;	(* Keyboard stop (POSIX).  *)
+		SIGTTIN* = 21;	(* Background read from tty (POSIX).  *)
+		SIGTTOU* = 22;	(* Background write to tty (POSIX).  *)
+		SIGURG* = 23;	(* Urgent condition on socket (4.2 BSD).  *)
+		SIGXCPU* = 24;	(* CPU limit exceeded (4.2 BSD).  *)
+		SIGXFSZ* = 25;	(* File size limit exceeded (4.2 BSD).  *)
+		SIGVTALRM* =26;	(* Virtual alarm clock (4.2 BSD).  *)
+		SIGPROF* = 27;	(* Profiling alarm clock (4.2 BSD).  *)
+		SIGWINCH* = 28;	(* Window size change (4.3 BSD, Sun).  *)
+		SIGIO* = 29;	(* I/O now possible (4.2 BSD).  *)
+		SIGPOLL* = SIGIO;	(* Pollable event occurred (System V).  *)
+		SIGPWR* = 30;	(* Power failure restart (System V).  *)
+		SIGSYS* = 31;	(* Bad system call.  *)
+		SIGUNUSED* =31;
+		_NSIG* = 64;	(* Biggest signal number + 1 (including real-time signals).  *)
+		__SIGRTMIN*= 32;
+		__SIGRTMAX*=_NSIG - 1;
+
+		(* Bits in `sa_flags'.  *)
+		SA_NOCLDSTOP* = {0}; 	(* = 1 Don't send SIGCHLD when children stop.  *)
+		SA_NOCLDWAIT* = {1}; 	(* = 2 Don't create zombie on child death.  *)
+		SA_SIGINFO* = {2}; 	(* = 4 Invoke signal-catching function wth three arguments instead of one.  *)
+		SA_ONSTACK* = {27};	(* = 0x08000000 Use signal stack by using `sa_restorer'. *)
+		SA_RESTART* = {28};	(* = 0x10000000 Restart syscall on signal return.  *)
+		SA_NODEFER* = {30};	(* = 0x40000000 Don't automatically block the signal when its handler is being executed. *)
+		SA_RESETHAND* = {31};	(* = 0x80000000 Reset to SIG_DFL on entry to handler.  *)
+		SA_INTERRUPT* = {29};	(* = 0x20000000  Historical no-op.  *)
+		(* Some aliases for the SA_ constants.  *)
+		SA_NOMASK* = SA_NODEFER;
+		SA_ONESHOT* = SA_RESETHAND;
+		SA_STACK* = SA_ONSTACK;
+
+		(* code values for siginfo_t.si_code when sig = SIGFPE *)
+		FPE_INTDIV* = 1;	(* Integer divide by zero.  *)
+		FPE_INTOVF* = 2;	(* Integer overflow.  *)
+		FPE_FLTDIV* = 3;	(* Floating point divide by zero.  *)
+		FPE_FLTOVF* = 4;	(* Floating point overflow.  *)
+		FPE_FLTUND* = 5;	(* Floating point underflow.  *)
+		FPE_FLTRES* =6;	(* Floating point inexact result.  *)
+		FPE_FLTINV* = 7;	(* Floating point invalid operation.  *)
+		FPE_FLTSUB* = 8;	(* Subscript out of range.  *)
+
+		(* possible error constants for errno *)
+		EPERM* = 1;	(* Operation not permitted *)
+		ENOENT* = 2;	(* No such file or directory *)
+		ESRCH* = 3;	(* No such process *)
+		EINTR* = 4;	(* Interrupted system call *)
+		EIO* = 5;	(* I/O error *)
+		ENXIO* = 6;	(* No such device or address *)
+		E2BIG* = 7;	(* Arg list too long *)
+		ENOEXEC* = 8;	(* Exec format error *)
+		EBADF* = 9;	(* Bad file number *)
+		ECHILD* = 10;	(* No child processes *)
+		EAGAIN* = 11;	(* Try again *)
+		ENOMEM* = 12;	(* Out of memory *)
+		EACCES* = 13;	(* Permission denied *)
+		EFAULT* = 14;	(* Bad address *)
+		ENOTBLK* = 15;	(* Block device required *)
+		EBUSY* = 16;	(* Device or resource busy *)
+		EEXIST* = 17;	(* File exists *)
+		EXDEV* = 18;	(* Cross-device link *)
+		ENODEV* = 19;	(* No such device *)
+		ENOTDIR* = 20;	(* Not a directory *)
+		EISDIR* = 21;	(* Is a directory *)
+		EINVAL* = 22;	(* Invalid argument *)
+		ENFILE* = 23;	(* File table overflow *)
+		EMFILE* = 24;	(* Too many open files *)
+		ENOTTY* = 25;	(* Not a typewriter *)
+		ETXTBSY* = 26;	(* Text file busy *)
+		EFBIG* = 27;	(* File too large *)
+		ENOSPC* = 28;	(* No space left on device *)
+		ESPIPE* = 29;	(* Illegal seek *)
+		EROFS* = 30;	(* Read-only file system *)
+		EMLINK* = 31;	(* Too many links *)
+		EPIPE* = 32;	(* Broken pipe *)
+		EDOM* = 33;	(* Math argument out of domain of func *)
+		ERANGE* = 34;	(* Math result not representable *)
+		EDEADLK* = 35;	(* Resource deadlock would occur *)
+		ENAMETOOLONG* = 36;	(* File name too long *)
+		ENOLCK* = 37;	(* No record locks available *)
+		ENOSYS* = 38;	(* Function not implemented *)
+		ENOTEMPTY* = 39;	(* Directory not empty *)
+		ELOOP* = 40;	(* Too many symbolic links encountered *)
+		EWOULDBLOCK* = EAGAIN;	(* Operation would block *)
+		ENOMSG* = 42;	(* No message of desired type *)
+		EIDRM* = 43;	(* Identifier removed *)
+		ECHRNG* = 44;	(* Channel number out of range *)
+		EL2NSYNC* = 45;	(* Level 2 not synchronized *)
+		EL3HLT* = 46;	(* Level 3 halted *)
+		EL3RST* = 47;	(* Level 3 reset *)
+		ELNRNG* = 48;	(* Link number out of range *)
+		EUNATCH* = 49;	(* Protocol driver not attached *)
+		ENOCSI* = 50;	(* No CSI structure available *)
+		EL2HLT* = 51;	(* Level 2 halted *)
+		EBADE* = 52;	(* Invalid exchange *)
+		EBADR* = 53;	(* Invalid request descriptor *)
+		EXFULL* = 54;	(* Exchange full *)
+		ENOANO* = 55;	(* No anode *)
+		EBADRQC* = 56;	(* Invalid request code *)
+		EBADSLT* = 57;	(* Invalid slot *)
+		EDEADLOCK* = EDEADLK;
+		EBFONT* = 59;	(* Bad font file format *)
+		ENOSTR* = 60;	(* Device not a stream *)
+		ENODATA* = 61;	(* No data available *)
+		ETIME* = 62;	(* Timer expired *)
+		ENOSR* = 63;	(* Out of streams resources *)
+		ENONET* = 64;	(* Machine is not on the network *)
+		ENOPKG* = 65;	(* Package not installed *)
+		EREMOTE* = 66;	(* Object is remote *)
+		ENOLINK* = 67;	(* Link has been severed *)
+		EADV* = 68;	(* Advertise error *)
+		ESRMNT* = 69;	(* Srmount error *)
+		ECOMM* = 70;	(* Communication error on send *)
+		EPROTO* = 71;	(* Protocol error *)
+		EMULTIHOP* = 72;	(* Multihop attempted *)
+		EDOTDOT* = 73;	(* RFS specific error *)
+		EBADMSG* = 74;	(* Not a data message *)
+		EOVERFLOW* = 75;	(* Value too large for defined data type *)
+		ENOTUNIQ* = 76;	(* Name not unique on network *)
+		EBADFD* = 77;	(* File descriptor in bad state *)
+		EREMCHG* = 78;	(* Remote address changed *)
+		ELIBACC* = 79;	(* Can not access a needed shared library *)
+		ELIBBAD* = 80;	(* Accessing a corrupted shared library *)
+		ELIBSCN* = 81;	(* .lib section in a.out corrupted *)
+		ELIBMAX* = 82;	(* Attempting to link in too many shared libraries *)
+		ELIBEXEC* = 83;	(* Cannot exec a shared library directly *)
+		EILSEQ* = 84;	(* Illegal byte sequence *)
+		ERESTART* = 85;	(* Interrupted system call should be restarted *)
+		ESTRPIPE* = 86;	(* Streams pipe error *)
+		EUSERS* = 87;	(* Too many users *)
+		ENOTSOCK* = 88;	(* Socket operation on non-socket *)
+		EDESTADDRREQ* = 89;	(* Destination address required *)
+		EMSGSIZE* = 90;	(* Message too long *)
+		EPROTOTYPE* = 91;	(* Protocol wrong type for socket *)
+		ENOPROTOOPT* = 92;	(* Protocol not available *)
+		EPROTONOSUPPORT* = 93;	(* Protocol not supported *)
+		ESOCKTNOSUPPORT* = 94;	(* Socket type not supported *)
+		EOPNOTSUPP* = 95;	(* Operation not supported on transport endpoint *)
+		EPFNOSUPPORT* = 96;	(* Protocol family not supported *)
+		EAFNOSUPPORT* = 97;	(* Address family not supported by protocol *)
+		EADDRINUSE* = 98;	(* Address already in use *)
+		EADDRNOTAVAIL* = 99;	(* Cannot assign requested address *)
+		ENETDOWN* = 100;	(* Network is down *)
+		ENETUNREACH* = 101;	(* Network is unreachable *)
+		ENETRESET* = 102;	(* Network dropped connection because of reset *)
+		ECONNABORTED* = 103;	(* Software caused connection abort *)
+		ECONNRESET* = 104;	(* Connection reset by peer *)
+		ENOBUFS* = 105;	(* No buffer space available *)
+		EISCONN* = 106;	(* Transport endpoint is already connected *)
+		ENOTCONN* = 107;	(* Transport endpoint is not connected *)
+		ESHUTDOWN* = 108;	(* Cannot send after transport endpoint shutdown *)
+		ETOOMANYREFS* = 109;	(* Too many references: cannot splice *)
+		ETIMEDOUT* = 110;	(* Connection timed out *)
+		ECONNREFUSED* = 111;	(* Connection refused *)
+		EHOSTDOWN* = 112;	(* Host is down *)
+		EHOSTUNREACH* = 113;	(* No route to host *)
+		EALREADY* = 114;	(* Operation already in progress *)
+		EINPROGRESS* = 115;	(* Operation now in progress *)
+		ESTALE* = 116;	(* Stale NFS file handle *)
+		EUCLEAN* = 117;	(* Structure needs cleaning *)
+		ENOTNAM* = 118;	(* Not a XENIX named type file *)
+		ENAVAIL* = 119;	(* No XENIX semaphores available *)
+		EISNAM* = 120;	(* Is a named type file *)
+		EREMOTEIO* = 121;	(* Remote I/O error *)
+		EDQUOT* = 122;	(* Quota exceeded *)
+		ENOMEDIUM* = 123;	(* No medium found *)
+		EMEDIUMTYPE* = 124;	(* Wrong medium type *)
+
+		PROT_NONE* = {};	(* No access *)
+		PROT_READ* = {2};	(* Pages can be read *)
+		PROT_WRITE* = {1};	(* Pages can be written *)
+		PROT_EXEC* = {0};	(* Pages can be executed *)
+		MAP_FILE* = {0};	(* Mapped from a file or device *)
+		MAP_ANON* = {1};	(* Allocated from anonymous virtual memory *)
+		MAP_COPY* = {5};	(* Virtual copy of region at mapping time *)
+		MAP_SHARED* = {4};	(* Share changes *)
+		MAP_PRIVATE* = {};	(* Changes private; copy pages on write *)
+		MAP_FIXED* = {8};	(* Map address must be exactly as requested *)
+		MAP_NOEXTEND* = {9} ;	(* For MAP_FILE, don't change file size *)
+		MAP_HASSEMPHORE*= {10};	(* Region may contain semaphores *)
+		MAP_INHERIT* = {11} ;	(* Region is retained after exec *)
+		MAP_FAILED* = -1;
+
+		O_RDONLY* = {} ;	(* Open read-only *)
+		O_WRONLY* = {0} ;	(* Open write-only *)
+		O_RDWR* = {1} ;	(* Open read/write *)
+		O_NONBLOCK* = {11};
+
+		SIG_BLOCK* = 0;	(* Block signals *)
+		SIG_UNBLOCK* = 1;	(* Unblock signals *)
+		SIG_SETMASK* = 2;	(* Set the set of blocked signals *)
+
+		_SC_PAGESIZE* = 30;
+
+		SIGSTKSZ* = 8192;
+
+		STDIN_FILENO* = 0;
+		STDOUT_FILENO* = 1;
+		STDERR_FILENO* = 2;
+
+	TYPE 
+		__ftw_func_t* = PROCEDURE (fileName: PtrSTR; VAR [nil] stat: stat_t; flag: INTEGER): INTEGER;
+		PtrVoid* = INTEGER;
+		PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
+		wchar_t* = INTEGER;
+		PtrWSTR* = POINTER TO ARRAY [untagged] OF wchar_t;
+		PtrInt* = INTEGER;
+		StrArray* = POINTER TO ARRAY [untagged] OF PtrSTR;
+		PtrFILE* = INTEGER;
+		PtrDIR* = INTEGER;
+		PtrProc* = INTEGER;
+		clock_t* = INTEGER;
+		jmp_buf* = ARRAY [untagged] 6 OF INTEGER; (* bx, si, di, bp, sp, pc *)
+		mode_t* = SET;
+		off_t* = INTEGER;
+		SelectorFunc* = PROCEDURE (dirent: Dirent): INTEGER;
+		CmpFunc* = PROCEDURE (VAR [nil] dirent1, dirent2: PtrDirent): INTEGER;
+		size_t* = INTEGER; (* should be unsigned int *)
+		ssize_t* = INTEGER;
+		sigjmp_buf* = RECORD [untagged] 
+			buf*: jmp_buf;
+			mask_was_saved*: INTEGER;
+			saved_mask*: sigset_t;
+		END; 
+		
+		PtrDirent* = POINTER TO Dirent;
+		PtrDirentArray* = POINTER TO ARRAY [untagged] OF Dirent;
+		Dirent* = RECORD  [untagged]
+			d_ino*: INTEGER;	(* inode number *)
+			d_off*: off_t;	(* offset to this dirent *)
+			d_reclen*: SHORTINT;	(* length of this d_name *)
+			d_type*: BYTE;
+			d_name*: ARRAY[untagged]  NAME_MAX+1 OF SHORTCHAR;		(* file name (null-terminated) *)
+		END;
+		
+		pid_t* = INTEGER;
+		uid_t* = INTEGER;
+		sigval_t* = INTEGER;
+
+		siginfo_t* = RECORD [untagged]
+			si_signo*: INTEGER; 	(* Signal number *)
+			si_errno*: INTEGER;  	(* An errno value *)
+			si_code*: INTEGER;   	(* Signal code *)
+			si_pid*: pid_t;    	(* Sending process ID *)
+			si_uid*: uid_t;    	(* Real user ID of sending process *)
+			si_status*: INTEGER; 	(* Exit value or signal *)
+			si_utime*: clock_t;  	(* User time consumed *)
+			si_stime*: clock_t;  	(* System time consumed *)
+			si_value*: sigval_t;  	(* Signal value *)
+			si_int*: INTEGER;    	(* POSIX.1b signal *)
+			si_ptr*: PtrVoid;    	(* POSIX.1b signal *)
+			si_addr*: PtrVoid;   	(* Memory location which caused fault *)
+			si_band*: INTEGER;   	(* Band event *)
+			si_fd*: INTEGER;     	(* File descriptor *)
+		END;
+		Ptrsiginfo_t* = POINTER TO siginfo_t;
+		
+		sigset_t* = ARRAY [untagged] 128 OF BYTE;
+		Ptrsigset_t* = INTEGER;
+		sigaction_t* = RECORD [untagged]
+			sa_sigaction*: PROCEDURE [ccall] (sig: INTEGER; siginfo: Ptrsiginfo_t; ptr: Ptrucontext_t); (* union with sa_handler*: PtrProc;*)
+			sa_mask*: sigset_t;
+			sa_flags*: SET;
+			sa_restorer*: LONGINT;
+		END;
+		
+		stack_t* = RECORD [untagged]
+			ss_sp*: PtrVoid;    
+			ss_flags*: INTEGER;    
+			ss_size*: size_t;
+		END;
+		
+		stat_t* = RECORD [untagged]
+			st_dev*: LONGINT;	(* device *)
+			__pad1: SHORTINT;
+			st_ino*: INTEGER;	(* 64? inode *)
+			st_mode*: mode_t;	(* protection *)
+			st_nlink*: INTEGER; 	(* number of hard links *)
+			st_uid*: uid_t;	(* user ID of owner *)
+			st_gid*: INTEGER;	(* group ID of owner *)
+			st_rdev*: LONGINT;	(* device type (if inode device) *)
+			__pad2: SHORTINT;
+			st_size*: off_t;	(* 64? total size, in bytes *)
+			st_blksize*: INTEGER;	(* blocksize for filesystem I/O *)
+			st_blocks*: INTEGER;	(* 64? number of blocks allocated *)
+			st_atime*: INTEGER;	(* time of last access *)
+			__unused1:  INTEGER;
+			st_mtime*: INTEGER;	(* time of last modification *) 
+			__unused2:  INTEGER;
+			st_ctime*: INTEGER;	(* time of last change *)
+			__unused3:  INTEGER;
+			__unused4:  INTEGER;
+			__unused5:  INTEGER;
+		END;
+		
+		fpreg* = RECORD [untagged]
+			significand*: ARRAY [untagged] 4 OF CHAR;
+			exponent*: CHAR;
+		END;
+
+		fpstate* = RECORD [untagged]
+			cw*: INTEGER; 	(* unsigned long int *)
+			sw*: INTEGER; 	(* unsigned long int *)
+			tag*: INTEGER; 	(* unsigned long int *)
+			ipoff*: INTEGER; 	(* unsigned long int *)
+			cssel*: INTEGER; 	(* unsigned long int *)
+			dataoff*: INTEGER; 	(* unsigned long int *)
+			datasel*: INTEGER; 	(* unsigned long int *)
+			_st: ARRAY [untagged] 8 OF fpreg;
+			status*: INTEGER; 	(* unsigned long int *)
+		END;
+
+		gregset_t* = ARRAY [untagged] 19 OF INTEGER;
+		fpregset_t* = POINTER TO fpstate;
+		
+		mcontext_t*  = RECORD [untagged]
+			gregs*: gregset_t;
+			fpregs*: fpregset_t;
+			oldmask*: INTEGER;	(* unsigned long int *)
+			cr2*: INTEGER; 	(* unsigned long int *)
+		END;
+		
+		Ptrucontext_t* = POINTER TO ucontext_t;
+		ucontext_t* = RECORD [untagged]
+			uc_flags*: INTEGER;	(* unsigned long int *)
+			uc_link*: Ptrucontext_t;
+			uc_stack*: stack_t;
+			uc_mcontext*: mcontext_t;
+			uc_sigmask: sigset_t;
+			__fpregs_mem*: fpstate;
+		END;
+		
+		(* Times and Dates *)
+		
+		tm* = POINTER TO tmDesc;
+		tmDesc* = RECORD [untagged]
+			tm_sec*: INTEGER;	(* seconds *)
+			tm_min*: INTEGER;	(* minutes *)
+			tm_hour*: INTEGER;	(* hours *)
+			tm_mday*: INTEGER;	(* day of the month *)
+			tm_mon*: INTEGER;	(* month *)
+			tm_year*: INTEGER;	(* year *)
+			tm_wday*: INTEGER;	(* day of the week *)
+			tm_yday*: INTEGER;	(* day in the year *)
+			tm_isdst*: INTEGER;	(* daylight saving time *)
+		END;
+		time_t* = INTEGER;
+
+	VAR
+		timezone*: INTEGER; (* seconds from GMT *)		
+(*
+		stdin*, stdout*, stderr* : PtrFILE;
+*)
+
+	PROCEDURE [ccall] calloc* (num, size: size_t): PtrVoid;
+	PROCEDURE [ccall] clock* (): clock_t;
+	PROCEDURE [ccall] closedir* (dir: PtrDIR): INTEGER;
+	PROCEDURE [ccall] chmod* (path: PtrSTR; mode: mode_t);
+	PROCEDURE [ccall] exit* (status: INTEGER);
+	PROCEDURE [ccall] fclose* (fp: PtrFILE): INTEGER;
+	PROCEDURE [ccall] fflush* (fp: PtrFILE): INTEGER;
+	PROCEDURE [ccall] fopen* (filename, mode: PtrSTR): PtrFILE;
+	PROCEDURE [ccall] fdopen* (fildes: INTEGER; mode: PtrSTR): PtrFILE;
+	PROCEDURE [ccall] feof* (fp: PtrFILE): INTEGER;
+	PROCEDURE [ccall] fread* (ptr: PtrVoid; size, nobj: size_t; stream: PtrFILE): size_t;
+	PROCEDURE [ccall] fseek* (stream: PtrFILE; offset, origin: INTEGER): INTEGER;
+	PROCEDURE [ccall] free* (p: PtrVoid);
+	PROCEDURE [ccall] ftell* (stream: PtrFILE): LONGINT;
+	PROCEDURE [ccall] ftw* (filename: PtrSTR; func: __ftw_func_t; descriptors: INTEGER): INTEGER;
+	PROCEDURE [ccall] fwrite* (ptr: PtrVoid; size, nobj: size_t; stream: PtrFILE): size_t;
+	PROCEDURE [ccall] getcwd* (buf: PtrSTR; size: size_t): PtrSTR;
+	PROCEDURE [ccall] getcontext* (ucontext_t: Ptrucontext_t): INTEGER;
+	PROCEDURE [ccall] gets* (s: PtrSTR);
+	PROCEDURE [ccall] fgets* (s: PtrSTR; n: INTEGER; fp: PtrFILE): PtrSTR;
+	PROCEDURE [ccall] gmtime* (VAR timep: time_t): tm;
+	PROCEDURE [ccall] kill* (pid: pid_t; sig: INTEGER): INTEGER;
+	PROCEDURE [ccall] localtime* (VAR timep: time_t): tm;
+	PROCEDURE [ccall] malloc* (size: size_t): PtrVoid;
+	PROCEDURE [ccall] mkdir* (pathname: PtrSTR; mode: mode_t): INTEGER;
+	PROCEDURE [ccall] mktime* (timeptr: tm): time_t;
+	PROCEDURE [ccall] opendir* (name: PtrSTR): PtrDIR;
+	PROCEDURE [ccall] printf* (s: PtrSTR): INTEGER;	
+	PROCEDURE [ccall] readdir* (dir: PtrDIR): PtrDirent;
+	PROCEDURE [ccall] remove* (filename: PtrSTR): INTEGER;
+	PROCEDURE [ccall] rename* (oldname, newname: PtrSTR): INTEGER;
+	PROCEDURE [ccall] scandir* (dir: PtrDIR; namelist: PtrDirentArray; selector: SelectorFunc; cmp: CmpFunc): INTEGER;
+	PROCEDURE [ccall] setcontext* (ucontext_t: Ptrucontext_t): INTEGER;
+	PROCEDURE [ccall] setjmp* (VAR env: jmp_buf): INTEGER;
+	PROCEDURE [ccall] sigaction* (sig_num: INTEGER; VAR [nil] act: sigaction_t; VAR [nil] oldact: sigaction_t): INTEGER;
+	PROCEDURE [ccall] sigaddset* (set: Ptrsigset_t; sig: INTEGER): INTEGER;
+	PROCEDURE [ccall] sigdelset* (set: Ptrsigset_t; sig: INTEGER): INTEGER;
+	PROCEDURE [ccall] sigemptyset* (set: Ptrsigset_t): INTEGER;
+	PROCEDURE [ccall] sigfillset* (set: Ptrsigset_t): INTEGER;
+	PROCEDURE [ccall] sigismemeber* (set: Ptrsigset_t; sig: INTEGER): INTEGER;
+	PROCEDURE [ccall] siglongjmp* (VAR env: sigjmp_buf; val: INTEGER);
+	PROCEDURE [ccall] signal* (sig_num: INTEGER; sighandler: PtrProc): PtrProc;
+	PROCEDURE [ccall] sigsetjmp* ["__sigsetjmp"] (VAR env: sigjmp_buf; savemask: INTEGER): INTEGER; 
+(*
+	PROCEDURE [ccall] stat* (filename: PtrSTR; VAR buf: stat_t): INTEGER;   stat is a macro and expands to __xstat(3, filename, buf)
+*)
+	PROCEDURE [ccall] __xstat* (version: INTEGER; filename: PtrSTR; VAR buf: stat_t): INTEGER;
+	PROCEDURE [ccall] strftime* (s: PtrSTR; max: size_t; format: PtrSTR; ptm: tm): size_t;
+	PROCEDURE [ccall] time* (VAR [nil] t: time_t): time_t;
+
+	PROCEDURE [ccall] __errno_location*(): INTEGER;
+
+	PROCEDURE [ccall] open* (name: PtrSTR; flags: SET; mode: mode_t): INTEGER;
+	PROCEDURE [ccall] close* (d: INTEGER): INTEGER;
+	PROCEDURE [ccall] read* (d: INTEGER; buf: PtrVoid; nbytes: size_t): ssize_t;
+	PROCEDURE [ccall] write* (d: INTEGER; buf: PtrVoid; nBytes: size_t): ssize_t;
+
+	PROCEDURE [ccall] mmap* (addr: PtrVoid; len: size_t; prot: SET; flags: SET; fd, offset: off_t): PtrVoid;
+	PROCEDURE [ccall] munmap* (addr: PtrVoid; len: size_t): INTEGER;
+	PROCEDURE [ccall] mprotect* (addr: PtrVoid; len: size_t; prot: SET): INTEGER;
+
+	PROCEDURE [ccall] getenv* (name: PtrSTR): PtrSTR;
+
+	PROCEDURE [ccall] sysconf* (name: INTEGER): INTEGER;
+	
+	PROCEDURE [ccall] sigaltstack* (VAR [nil] ss: stack_t; VAR [nil] oss: stack_t): INTEGER;
+
+	PROCEDURE [ccall] sigprocmask* (how: INTEGER; set: Ptrsigset_t; oldset: Ptrsigset_t): INTEGER;
+
+END LinLibc.

+ 86 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/Makefile

@@ -0,0 +1,86 @@
+# This is BSD Makefile
+#    BSD       GNU
+# ${.TARGET}    $@
+# ${.ALLSRC}    $^
+# ${.IMPSRC}    $<
+
+INCDIR ?= /usr/include
+INCDIR_I386 ?= ${INCDIR}/i386-linux-gnu
+
+PY = python2.7
+
+DEFS = clockspersec sigstksz defs-map defs-prot defs-sigmask nsig defs-signo defs-fpe defs-sa defs-errno namemax defs-fcntlo defs-basictypes defs-sc defs-clockid defs-wait
+
+all: Libc.txt ${DEFS} strerrnocase.txt
+
+Libc.txt: Libc.txt.templ ${DEFS} libver osname machine custom fields-dirent fields-sigaction fields-siginfo fields-stack fields-stat fields-tm fields-ucontext fields-timespec
+	${PY} ./untempl.py Libc.txt.templ $@
+
+clockspersec:
+	grep "define CLOCKS_PER_SEC" ${INCDIR_I386}/bits/time.h | awk '{print $$4}' | cut -d ')' -f 1 | tr -d '\n' > $@
+
+sigstksz:
+	grep "define SIGSTKSZ" ${INCDIR}/asm-generic/signal.h | awk '{print $$3}' | tr -d '\n' > $@
+
+defs-map:
+	./dumpdefs.py 2 1 s ${INCDIR}/asm-generic/mman-common.h | grep "MAP_" > $@
+	echo "		MAP_ANON* = MAP_ANONYMOUS;" >> $@
+
+defs-prot:
+	./dumpdefs.py 2 1 s ${INCDIR}/asm-generic/mman-common.h | grep "PROT_" > $@
+
+defs-sigmask:
+	./dumpdefs.py 2 2 i ${INCDIR}//asm-generic/signal-defs.h | grep "SIG_" | grep -v __sighandler_t > $@
+
+defs-signo:
+	./dumpdefs.py 2 1 i ${INCDIR}/asm-generic/signal.h | grep "	SIG" > $@
+
+nsig:
+	grep "#define _NSIG" ${INCDIR}/asm-generic/signal.h | head -1 | awk '{print $$3}' | tr -d '\n' > $@
+
+defs-fpe:
+	./dumpdefs.py 2 1 i ${INCDIR}/asm-generic/siginfo.h | grep "	FPE_" | sed s'/__SI_FAULT|//' > $@
+
+defs-sa:
+	./dumpdefs.py 2 1 s ${INCDIR}/asm-generic/signal.h | grep "	SA_" > $@
+
+defs-errno:
+	./dumpdefs.py 2 1 i ${INCDIR}/asm-generic/errno-base.h > $@
+	./dumpdefs.py 2 1 i ${INCDIR}/asm-generic/errno.h >> $@
+
+namemax:
+	grep " NAME_MAX " ${INCDIR}/linux/limits.h | awk '{print $$3}' | tr -d '\n' > $@
+
+defs-fcntlo:
+	./dumpdefs.py 2 1 s ${INCDIR}/asm-generic/fcntl.h | grep "	O_" > $@
+	./dumpdefs.py 2 2 s ${INCDIR}/asm-generic/fcntl.h | grep "	O_" >> $@
+
+defs-basictypes: sizeofs
+	./sizeofs > $@
+
+defs-sc: scs
+	./scs > $@
+
+defs-clockid:
+	./dumpdefs.py 2 1 i ${INCDIR}/linux/time.h | grep CLOCK_ > $@
+
+defs-wait:
+	grep "define WAIT_ANY" ${INCDIR_I386}/sys/wait.h | sed s'/(//' | sed s'/)//' | awk '{print "		" $$3 "* = " $$4 ";"}' > $@
+	./dumpdefs.py 2 1 s ${INCDIR}/linux/wait.h | grep "	WCONTINUED" >> $@
+	./dumpdefs.py 2 1 s ${INCDIR}/linux/wait.h | grep "	WNOHANG" >> $@
+	./dumpdefs.py 2 1 s ${INCDIR}/linux/wait.h | grep "	WUNTRACED" >> $@
+
+dumpstrerrno.c: defs-errno
+	grep -v ERESTART $^ | grep -v EJUSTRETURN | ./mkdumpstrerrno.py > $@
+
+strerrnocase.txt: dumpstrerrno
+	./dumpstrerrno | ./mkstrerrnocase.py > $@
+
+scs: scs.c
+	${CC} -m32 scs.c -o $@
+
+sizeofs: sizeofs.c
+	${CC} -m32 sizeofs.c -o $@
+
+clean:
+	rm -f ${DEFS} Libc.txt dumpstrerrno dumpstrerrno.c strerrnocase.txt sizeofs scs

+ 38 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/custom

@@ -0,0 +1,38 @@
+	TYPE
+		(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/sigval_t.h: *)
+			sigval_t* = RECORD [union]
+				sival_int*: int;
+				sival_ptr*: PtrVoid
+			END;
+
+		(* Ubuntu 17.10 /usr/include/i386-linux-gnu/sys/ucontext.h: *)
+			greg_t* = int;
+			gregset_t* = ARRAY [untagged] 19 OF greg_t;
+			fpregset_t* = POINTER [untagged] TO fpstate;
+			fpreg* = RECORD [untagged]
+				significand*: ARRAY [untagged] 4 OF SHORTINT; (* unsigned short int *)
+				exponent*: SHORTINT; (* unsigned short int *)
+			END;
+			fpstate* = RECORD [untagged]
+				cw*: INTEGER; (* unsigned long int *)
+				sw*: INTEGER; (* unsigned long int *)
+				tag*: INTEGER; (* unsigned long int *)
+				ipoff*: INTEGER; (* unsigned long int *)
+				cssel*: INTEGER; (* unsigned long int *)
+				dataoff*: INTEGER; (* unsigned long int *)
+				datasel*: INTEGER; (* unsigned long int *)
+				_st: ARRAY [untagged] 8 OF fpreg;
+				status*: INTEGER; (* unsigned long int *)
+			END;
+
+	VAR
+		timezone*: INTEGER; (* seconds from GMT *)
+(*
+		stdin*, stdout*, stderr* : PtrFILE;
+*)
+
+	PROCEDURE [ccall] __errno_location*(): INTEGER;
+
+	PROCEDURE [ccall] __xstat* (version: INTEGER; filename: PtrSTR; VAR buf: stat_t): INTEGER;
+
+	PROCEDURE [ccall] sigsetjmp* ["__sigsetjmp"] (VAR env: sigjmp_buf; savemask: int): int;

+ 6 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-dirent

@@ -0,0 +1,6 @@
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/dirent.h: *)
+				d_ino*: ino_t; (* inode number *)
+				d_off*: off_t; (* offset to this dirent *)
+				d_reclen*: SHORTINT; (* length of this d_name *)
+				d_type*: BYTE;
+				d_name*: ARRAY [untagged] 256 OF SHORTCHAR;

+ 5 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-sigaction

@@ -0,0 +1,5 @@
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/asm/signal.h, /usr/include/i386-linux-gnu/bits/sigaction.h *)
+				sa_sigaction*: PROCEDURE [ccall] (sig: INTEGER; siginfo: Ptrsiginfo_t; ptr: Ptrucontext_t); (* union with sa_handler*: PtrProc;*)
+				sa_mask*: sigset_t;
+				sa_flags*: intFlags;
+				sa_restorer*: PROCEDURE [ccall];

+ 49 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-siginfo

@@ -0,0 +1,49 @@
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/siginfo_t.h: *)
+				si_signo*: int; 	(* Signal number *)
+				si_errno*: int;  	(* An errno value *)
+				si_code*: int;   	(* Signal code *)
+
+				_sifields*: RECORD [union]
+					_pad: ARRAY [untagged] 29 OF int;
+					_kill*: RECORD [untagged]
+						si_pid*: pid_t;
+						si_uid*: uid_t
+					END;
+					_timer*: RECORD [untagged]
+						si_tid*: int;
+						si_overrun*: int;
+						si_sigval*: sigval_t
+					END;
+					_rt*: RECORD [untagged]
+						si_pid*: pid_t;
+						si_uid*: uid_t;
+						si_sigval*: sigval_t
+					END;
+					_sigchild*: RECORD [untagged]
+						si_pid: pid_t;
+						si_uid*: uid_t;
+						si_status*: int;
+						si_utime*: clock_t;
+						si_stime*: clock_t
+					END;
+					_sigfault*: RECORD [untagged]
+						si_addr*: PtrVoid;
+						si_addr_lsb*: SHORTINT;
+						_bounds*: RECORD [union]
+							_addr_bnd*: RECORD [untagged]
+								_lower*: PtrVoid;
+								_upper*: PtrVoid
+							END;
+							_pkey: INTEGER
+						END
+					END;
+					_sigpoll: RECORD [untagged]
+						si_band*: int; (* long int *);
+						si_fd*: int
+					END;
+					_sigsys*: RECORD [untagged]
+						_call_addr*: PtrVoid;
+						_syscall*: int;
+						_arch*: int (* unsigned int *)
+					END
+				END;

+ 4 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-stack

@@ -0,0 +1,4 @@
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/stack_t.h: *)
+				ss_sp*: PtrVoid;
+				ss_flags*: intFlags;
+				ss_size*: size_t;

+ 18 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-stat

@@ -0,0 +1,18 @@
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/stat.h: *)
+				st_dev*: dev_t;
+				__pad1: SHORTINT;
+				st_ino*: ino_t;
+				st_mode*: mode_t;
+				st_nlink*: nlink_t;
+				st_uid*: uid_t;
+				st_gid*: gid_t;
+				st_rdev*: dev_t;
+				__pad2: SHORTINT;
+				st_size*: off_t;
+				st_blksize*: blksize_t;
+				st_blocks*: blkcnt_t;
+				st_atim*: timespec_t;
+				st_mtim*: timespec_t;
+				st_ctim*: timespec_t;
+				__glibc_reserved4: INTEGER; (* long int *)
+				__glibc_reserved5: INTEGER; (* long int *)

+ 3 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-timespec

@@ -0,0 +1,3 @@
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/struct_timespec.h: *)
+				tv_sec*: time_t;
+				tv_nsec*: INTEGER;

+ 13 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-tm

@@ -0,0 +1,13 @@
+			(* Ubuntu 17.10 /usr/include/i386-linux-gnu/bits/types/struct_tm.h: *)
+				tm_sec*: int; (* Seconds.     [0-60] (1 leap second) *)
+				tm_min*: int; (* Minutes.     [0-59] *)
+				tm_hour*: int; (* Hours.       [0-23] *)
+				tm_mday*: int; (* Day.         [1-31] *)
+				tm_mon*: int; (* Month.       [0-11] *)
+				tm_year*: int; (* Year - 1900.  *)
+				tm_wday*: int; (* Day of week. [0-6] *)
+				tm_yday*: int; (* Days in year.[0-365] *)
+				tm_isdst*: int; (* DST.         [-1/0/1] *)
+
+				tm_gmtoff*: int; (* long int *) (* Seconds east of UTC *)
+				tm_zone*: PtrSTR; (* Timezone abbreviation *)

+ 11 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/fields-ucontext

@@ -0,0 +1,11 @@
+				uc_flags*: INTEGER;	(* unsigned long int *)
+				uc_link*: Ptrucontext_t;
+				uc_stack*: stack_t;
+				uc_mcontext*: RECORD [untagged] (* mcontext_t *)
+					gregs*: gregset_t;
+					fpregs*: fpregset_t;
+					oldmask*: INTEGER; (* unsigned long int *)
+					cr2*: INTEGER; (* unsigned long int *)
+				END;
+				uc_sigmask: sigset_t;
+				__fpregs_mem*: fpstate;

+ 1 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/libver

@@ -0,0 +1 @@
+.6

+ 1 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/machine

@@ -0,0 +1 @@
+i386

+ 1 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/osname

@@ -0,0 +1 @@
+GNU/Linux (Ubuntu 17.10)

+ 10 - 0
BlackBox/_Linux_/Lin/Mod/gen-Libc/scs.c

@@ -0,0 +1,10 @@
+#include <unistd.h>
+
+#include <stdio.h>
+
+int main (int argc, const char *argv[])
+{
+	printf("		_SC_PAGESIZE* = %d;\n", _SC_PAGESIZE);
+
+	return 0;
+}

BIN
BlackBox/_Linux_/System/Mod/Kernel.odc


BIN
BlackBox/_OpenBSD_/BlackBox1.run


+ 17 - 7
BlackBox/_OpenBSD_/Lin/Mod/Libc.txt

@@ -415,10 +415,11 @@ MODULE LinLibc ["libc.so.90"];
 		int64_t* = LONGINT;
 		u_int64_t* = LONGINT;
 		wchar_t* = INTEGER;
-		sigset_t* = SET;
 		sigjmp_buf* = ARRAY [untagged] 11 OF INTEGER;
 		intFlags* = SET;
 		FILE = ARRAY [untagged] 22 OF INTEGER;
+		sigset_t* = ARRAY [untagged] 4 OF BYTE;
+		PtrSigset_t* = POINTER [untagged] TO sigset_t;
 
 
 		tm* = POINTER TO tmDesc;
@@ -617,6 +618,9 @@ MODULE LinLibc ["libc.so.90"];
 	(* POSIX.1 *)
 		PROCEDURE [ccall] stat* (path: PtrSTR; VAR sp: stat_t): int;
 
+	(* POSIX.1 *)
+		PROCEDURE [ccall] sigsetjmp* (VAR env: sigjmp_buf; savemask: int): int;
+
 
 	(* ANSI C 89 *)
 		PROCEDURE [ccall] clock* (): clock_t;
@@ -642,14 +646,16 @@ MODULE LinLibc ["libc.so.90"];
 	PROCEDURE [ccall] localtime* (VAR [nil] t: time_t): tm;
 
 	(* POSIX.1 *)
+(*
 		PROCEDURE [ccall] sigsetjmp* (VAR env: sigjmp_buf; savemask: int): int;
+*)
 		PROCEDURE [ccall] siglongjmp* (VAR env: sigjmp_buf; val: int);
 
 	(* POSIX.1 *)
-		PROCEDURE [ccall] sigemptyset* (VAR set: sigset_t): int;
-		PROCEDURE [ccall] sigfillset* (VAR set: sigset_t): int;
-		PROCEDURE [ccall] sigaddset* (VAR set: sigset_t; signo: int): int;
-		PROCEDURE [ccall] sigprocmask* (how: int; VAR [nil] set: sigset_t; VAR [nil] oset: sigset_t): int;
+		PROCEDURE [ccall] sigemptyset* (set: PtrSigset_t): int;
+		PROCEDURE [ccall] sigfillset* (set: PtrSigset_t): int;
+		PROCEDURE [ccall] sigaddset* (set: PtrSigset_t; signo: int): int;
+		PROCEDURE [ccall] sigprocmask* (how: int; set: PtrSigset_t; oset: PtrSigset_t): int;
 
 	(* POSIX.1 *)
 		PROCEDURE [ccall] sigaction* (sig: int; VAR [nil] act: sigaction_t; VAR [nil] oact: sigaction_t): int;
@@ -703,9 +709,7 @@ MODULE LinLibc ["libc.so.90"];
 		PROCEDURE [ccall] lseek* (d: int; offset: off_t; whence: int): off_t;
 
 	(* POSIX.1 *)
-(*
 		PROCEDURE [ccall] chmod* (path: PtrSTR; mode: mode_t): int;
-*)
 		PROCEDURE [ccall] fchmod* (fd: int; mode: mode_t): int;
 
 	(* POSIX.1 *)
@@ -716,7 +720,13 @@ MODULE LinLibc ["libc.so.90"];
 		PROCEDURE [ccall] execv* (path: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
 		PROCEDURE [ccall] execvp* (file: PtrSTR; argv: POINTER [untagged] TO ARRAY [untagged] OF PtrSTR): int;
 
+	(* POSIX.2 *)
+		PROCEDURE [ccall] system* (string: PtrSTR): int;
+
 	(* POSIX.1 *)
 		PROCEDURE [ccall] sysconf* (name: int): long;
 
+	PROCEDURE [ccall] popen* (command, type: PtrSTR): PtrFILE;
+	PROCEDURE [ccall] pclose* (stream: PtrFILE): int;
+
 END LinLibc.

+ 3 - 0
BlackBox/_OpenBSD_/Lin/Mod/gen-Libc/custom

@@ -13,3 +13,6 @@
 
 	(* POSIX.1 *)
 		PROCEDURE [ccall] stat* (path: PtrSTR; VAR sp: stat_t): int;
+
+	(* POSIX.1 *)
+		PROCEDURE [ccall] sigsetjmp* (VAR env: sigjmp_buf; savemask: int): int;

BIN
BlackBox/_OpenBSD_/System/Mod/Kernel.odc


BIN
BlackBox/_OpenBSD_/libBB.so


BIN
BlackBox/_OpenBSD_/libBB0.so