21#include <android/asset_manager.h>
22#include <android/asset_manager_jni.h>
23#include <android/log.h>
26#include "YapStreams.h"
30#include "crypto/md5.h"
71#if defined(__MINGW32__) || _MSC_VER
82#include <android/asset_manager.h>
83#include <android/asset_manager_jni.h>
84#include <android/log.h>
87X_API
void init_sys(
void);
89#if defined(__MINGW32__) || _MSC_VER
90static YAP_Term WinError(
void) {
93 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
94 NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
96 return (YAP_MkAtomTerm(YAP_LookupAtom(msg)));
101static YAP_Bool sysmktime(
void) {
103#if defined(__MINGW32__) || _MSC_VER
104 SYSTEMTIME stime, stime0;
105 FILETIME ftime, ftime0;
107 stime.wYear = YAP_IntOfTerm(YAP_ARG1);
108 stime.wMonth = YAP_IntOfTerm(YAP_ARG2);
109 stime.wDay = YAP_IntOfTerm(YAP_ARG3);
110 stime.wHour = YAP_IntOfTerm(YAP_ARG4);
111 stime.wMinute = YAP_IntOfTerm(YAP_ARG5);
112 stime.wSecond = YAP_IntOfTerm(YAP_ARG6);
113 stime.wMilliseconds = 0;
120 stime0.wMilliseconds = 0;
121 if (!SystemTimeToFileTime(&stime, &ftime)) {
122 return YAP_Unify(YAP_ARG8, YAP_MkIntTerm(errno));
124 if (!SystemTimeToFileTime(&stime0, &ftime0)) {
125 return YAP_Unify(YAP_ARG8, YAP_MkIntTerm(errno));
129 unsigned long long f1 = (((
unsigned long long)ftime.dwHighDateTime) << 32) +
130 (
unsigned long long)ftime.dwLowDateTime;
131 unsigned long long f0 =
132 (((
unsigned long long)ftime0.dwHighDateTime) << 32) +
133 (
unsigned long long)ftime0.dwLowDateTime;
134 return YAP_Unify(YAP_ARG7, YAP_MkIntTerm((
long int)((f1 - f0) / 10000000)));
144 loc.tm_year = YAP_IntOfTerm(YAP_ARG1) - 1900;
145 loc.tm_mon = YAP_IntOfTerm(YAP_ARG2) - 1;
146 loc.tm_mday = YAP_IntOfTerm(YAP_ARG3);
147 loc.tm_hour = YAP_IntOfTerm(YAP_ARG4);
148 loc.tm_min = YAP_IntOfTerm(YAP_ARG5);
149 loc.tm_sec = YAP_IntOfTerm(YAP_ARG6);
152 if ((tim = mktime(&loc)) == (time_t)-1) {
153 return YAP_Unify(YAP_ARG8, YAP_MkIntTerm(errno));
155 return YAP_Unify(YAP_ARG7, YAP_MkIntTerm(tim));
163static YAP_Bool datime(
void) {
165#if defined(__MINGW32__) || _MSC_VER
167 GetLocalTime(&stime);
168 out[0] = YAP_MkIntTerm(stime.wYear);
169 out[1] = YAP_MkIntTerm(stime.wMonth);
170 out[2] = YAP_MkIntTerm(stime.wDay);
171 out[3] = YAP_MkIntTerm(stime.wHour);
172 out[4] = YAP_MkIntTerm(stime.wMinute);
173 out[5] = YAP_MkIntTerm(stime.wSecond);
177 if ((tp = time(NULL)) == -1) {
178 return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(errno)));
182 struct tm *loc = localtime(&tp);
184 return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(errno)));
186 out[0] = YAP_MkIntTerm(1900 + loc->tm_year);
187 out[1] = YAP_MkIntTerm(1 + loc->tm_mon);
188 out[2] = YAP_MkIntTerm(loc->tm_mday);
189 out[3] = YAP_MkIntTerm(loc->tm_hour);
190 out[4] = YAP_MkIntTerm(loc->tm_min);
191 out[5] = YAP_MkIntTerm(loc->tm_sec);
199 tf = YAP_MkApplTerm(YAP_MkFunctor(YAP_LookupAtom(
"datime"), 6), 6, out);
200 return YAP_Unify(YAP_ARG1, tf);
206static YAP_Bool p_unlink(
void) {
207 char *fd = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
208#if defined(__MINGW32__) || _MSC_VER
209 if (_unlink(fd) == -1)
211 if (unlink(fd) == -1)
215 return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(errno)));
220static YAP_Bool p_rmdir(
void) {
221 char *fd = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
222#if defined(__MINGW32__) || _MSC_VER
223 if (_rmdir(fd) == -1) {
225 if (rmdir(fd) == -1) {
228 return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(errno)));
233static YAP_Bool rename_file(
void) {
234 char *s1 = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
235 char *s2 = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2));
237 if (rename(s1, s2) == -1) {
239 return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
245static YAP_Bool read_link(
void) {
247 char *s1 = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
248 char buf[MAXPATHLEN + 1];
250 if (readlink(s1, buf, MAXPATHLEN) < 0)
254 if (!YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(buf)))) {
264static YAP_Bool dir_separator(
void) {
265 return (YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(
"/"))));
268static YAP_Bool file_property(
void) {
273 fd = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
274 if (lstat(fd, &buf) == -1) {
276 return (YAP_Unify(YAP_ARG7, YAP_MkIntTerm(errno)));
278 if (S_ISREG(buf.st_mode)) {
279 if (!(YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"regular"))) &&
280 YAP_Unify(YAP_ARG6, YAP_MkIntTerm(0))))
282 }
else if (S_ISDIR(buf.st_mode)) {
283 if (!(YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"directory"))) &&
284 YAP_Unify(YAP_ARG6, YAP_MkIntTerm(0))))
286 }
else if (S_ISFIFO(buf.st_mode)) {
287 if (!(YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"fifo"))) &&
288 YAP_Unify(YAP_ARG6, YAP_MkIntTerm(0))))
290 }
else if (S_ISLNK(buf.st_mode)) {
291 if (!YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"symlink"))))
297 if ((n = readlink(fd, tmp, 256)) == -1) {
298 return (YAP_Unify(YAP_ARG7, YAP_MkIntTerm(errno)));
301 if (!YAP_Unify(YAP_ARG6, YAP_MkAtomTerm(YAP_LookupAtom(tmp)))) {
306 if (!YAP_Unify(YAP_ARG6, YAP_MkIntTerm(0)))
309 }
else if (S_ISSOCK(buf.st_mode)) {
310 if (!(YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"socket"))) &&
311 YAP_Unify(YAP_ARG6, YAP_MkIntTerm(0))))
314 if (!(YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"unknown"))) &&
315 YAP_Unify(YAP_ARG6, YAP_MkIntTerm(0))))
318#elif defined(__MINGW32__) || _MSC_VER
322 fd = YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
323 if (_stat(fd, &buf) != 0) {
325 return (YAP_Unify(YAP_ARG7, YAP_MkIntTerm(errno)));
327 if (buf.st_mode & S_IFREG) {
328 if (!YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"regular"))))
330 }
else if (buf.st_mode & S_IFDIR) {
331 if (!YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"directory"))))
334 if (!YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
"unknown"))))
338 return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(buf.st_size)) &&
339 YAP_Unify(YAP_ARG4, YAP_MkIntTerm(buf.st_mtime)) &&
340 YAP_Unify(YAP_ARG5, YAP_MkIntTerm(buf.st_mode)));
345static YAP_Bool p_mktemp(
void) {
346#if HAVE_MKSTEMP || HAVE_MKTEMP || defined(__MINGW32__) || _MSC_VER
347 char *s, tmp[BUF_SIZE];
348 s = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
350 strncpy(tmp, s, BUF_SIZE);
354#if defined(__MINGW32__) || _MSC_VER
355 if ((s = _mktemp(tmp)) == NULL) {
357 return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
359 return (YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(s))));
361 strcpy(tmp,
"/tmp/YAP_tmpXXXXXXXX");
362 if (mkstemp(tmp) == -1) {
364 return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
366 return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(tmp)));
368 if ((s = mktemp(tmp)) == NULL) {
370 return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
372 return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(s)));
380static YAP_Bool p_tmpnam(
void) {
383 strcpy(s,
"/tmp/YAP_tmpXXXXXXXX");
384 if (mkstemp(s) == -1)
386 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(s)));
389 if (!(s = mktemp(
"/tmp/YAP_tmpXXXXXXXX")))
391 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(s)));
393 char buf[L_tmpnam], *s;
394 if (!(s = tmpnam(buf)))
396 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(s)));
402static YAP_Bool p_tmpdir(
void) {
403#if defined(__MINGW32__) || _MSC_VER
405 DWORD out = GetTempPath(512, buf);
407 return (YAP_Unify(YAP_ARG2, WinError()));
410 char *nbuf = malloc(out + 1);
412 return YAP_Unify(YAP_ARG2,
413 YAP_MkAtomTerm(YAP_LookupAtom(
"no malloc memory")));
414 out = GetTempPath(512, nbuf);
416 return YAP_Unify(YAP_ARG2, WinError());
418 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(nbuf)));
420 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(buf)));
423 if ((s = getenv(
"TMPDIR")))
424 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(s)));
426 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(P_tmpdir)));
428 return YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(
"/tmp")));
433static YAP_Bool p_environ(
void) {
435#if HAVE__NSGETENVIRON
436 char **ptr = _NSGetEnviron();
437#elif defined(__MINGW32__) || _MSC_VER
438 extern char **_environ;
439 char **ptr = _environ;
441 extern char **environ;
442 char **ptr = environ;
444 YAP_Term t1 = YAP_ARG1;
447 i = YAP_IntOfTerm(t1);
451 YAP_Term t = YAP_BufferToString(ptr[i]);
452 return (YAP_Unify(t, YAP_ARG2));
455 YAP_Error(0, 0L,
"environ not available in this configuration");
460#if defined(__MINGW32__) || _MSC_VER
461static HANDLE get_handle(YAP_Term ti, DWORD fd) {
462 if (YAP_IsAtomTerm(ti)) {
464 SECURITY_ATTRIBUTES satt;
466 satt.nLength =
sizeof(satt);
467 satt.lpSecurityDescriptor = NULL;
468 satt.bInheritHandle = TRUE;
469 out = CreateFile(
"NUL", GENERIC_READ | GENERIC_WRITE,
470 FILE_SHARE_READ | FILE_SHARE_WRITE, &satt, OPEN_EXISTING,
474 if (YAP_IsIntTerm(ti)) {
475 return (GetStdHandle(fd));
477 return ((HANDLE)_get_osfhandle(YAP_StreamToFileNo(ti)));
481static void close_handle(YAP_Term ti, HANDLE h) {
482 if (YAP_IsAtomTerm(ti)) {
490static YAP_Bool execute_command(
void) {
491 YAP_Term ti = YAP_ARG2, to = YAP_ARG3, te = YAP_ARG4;
494#if defined(__MINGW32__) || _MSC_VER
495 HANDLE inpf, outf, errf;
496 DWORD CreationFlags = 0;
497 STARTUPINFO StartupInfo;
498 PROCESS_INFORMATION ProcessInformation;
499 inpf = get_handle(ti, STD_INPUT_HANDLE);
500 if (inpf == INVALID_HANDLE_VALUE) {
501 return (YAP_Unify(YAP_ARG6, WinError()));
503 outf = get_handle(to, STD_OUTPUT_HANDLE);
504 if (outf == INVALID_HANDLE_VALUE) {
505 close_handle(ti, inpf);
506 return (YAP_Unify(YAP_ARG6, WinError()));
508 errf = get_handle(te, STD_OUTPUT_HANDLE);
509 if (errf == INVALID_HANDLE_VALUE) {
510 close_handle(ti, inpf);
511 close_handle(to, outf);
512 return (YAP_Unify(YAP_ARG6, WinError()));
514 if (!YAP_IsIntTerm(ti) && !YAP_IsIntTerm(to) && !YAP_IsIntTerm(te)) {
516 CreationFlags = DETACHED_PROCESS;
518 StartupInfo.cb =
sizeof(STARTUPINFO);
519 StartupInfo.lpReserved = NULL;
520 StartupInfo.lpDesktop = NULL;
521 StartupInfo.lpTitle = NULL;
522 StartupInfo.dwFlags = STARTF_USESTDHANDLES;
523 StartupInfo.cbReserved2 = 0;
524 StartupInfo.lpReserved2 = NULL;
525 StartupInfo.hStdInput = inpf;
526 StartupInfo.hStdOutput = outf;
527 StartupInfo.hStdError = errf;
529 if (CreateProcess(NULL, (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)), NULL,
530 NULL, TRUE, CreationFlags, NULL, NULL, &StartupInfo,
531 &ProcessInformation) == FALSE) {
532 close_handle(ti, inpf);
533 close_handle(to, outf);
534 close_handle(te, errf);
535 return (YAP_Unify(YAP_ARG6, WinError()));
537 close_handle(ti, inpf);
538 close_handle(to, outf);
539 close_handle(te, errf);
540 res = ProcessInformation.dwProcessId;
541 return (YAP_Unify(YAP_ARG5, YAP_MkIntTerm(res)));
543 YAP_Term AtomNull = YAP_MkAtomTerm(YAP_LookupAtom(
"null"));
544 int inpf, outf, errf;
546 if (ti == AtomNull) {
547 inpf = open(
"/dev/null", O_RDONLY);
550 if (YAP_IsIntTerm(ti))
551 sd = YAP_IntOfTerm(ti);
553 sd = YAP_StreamToFileNo(ti);
561 return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno)));
564 if (to == AtomNull) {
565 outf = open(
"/dev/zero", O_WRONLY);
568 if (YAP_IsIntTerm(to))
569 sd = YAP_IntOfTerm(to);
571 sd = YAP_StreamToFileNo(to);
581 return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno)));
584 if (te == AtomNull) {
585 errf = open(
"/dev/zero", O_WRONLY);
588 if (YAP_IsIntTerm(te))
589 sd = YAP_IntOfTerm(te);
591 sd = YAP_StreamToFileNo(te);
603 return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno)));
605 YAP_FlushAllStreams();
607 if ((res = fork()) < 0) {
616 return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno)));
617 }
else if (res == 0) {
622 YAP_CloseAllOpenStreams();
643 argv[2] = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
645 execv(
"/bin/sh",
argv);
655 return (YAP_Unify(YAP_ARG5, YAP_MkIntTerm(res)));
669static YAP_Bool do_system(
void) {
670 char *command = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
672 int sys = system(command);
674 return YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno));
676 return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(sys));
678 YAP_Error(0, 0L,
"system not available in this configuration, trying %s",
685static YAP_Bool do_shell(
void) {
686#if defined(__MINGW32__) || _MSC_VER
687 YAP_Error(0, 0L,
"system not available in this configuration");
690 char *buf = YAP_AllocSpaceFromYap(BUF_SIZE);
694 YAP_Error(0, 0L,
"No Temporary Space for Shell");
698 strncpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)), BUF_SIZE);
699 strncpy(buf,
" ", BUF_SIZE);
700 strncpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)), BUF_SIZE);
701 strncpy(buf,
" ", BUF_SIZE);
702 strncpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)), BUF_SIZE);
704 strcpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)));
705 strcpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)));
707 strcpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)));
710 YAP_FreeSpaceFromYap(buf);
712 return YAP_Unify(YAP_ARG5, YAP_MkIntTerm(errno));
714 return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys));
720 cptr[0] = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
721 cptr[1] = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2));
722 cptr[2] = (
char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3));
726 return YAP_Unify(YAP_ARG5, YAP_MkIntTerm(errno));
728 t = execvp(cptr[0], cptr);
733 return YAP_Unify(YAP_ARG5, YAP_MkIntTerm(errno));
736 return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys));
741static YAP_Bool plwait(
void) {
742 long int pid = YAP_IntOfTerm(YAP_ARG1);
743#if defined(__MINGW32__) || _MSC_VER
744 HANDLE proc = OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE, FALSE, pid);
747 return (YAP_Unify(YAP_ARG3, WinError()));
749 if (WaitForSingleObject(proc, INFINITE) == WAIT_FAILED) {
750 return (YAP_Unify(YAP_ARG3, WinError()));
752 if (GetExitCodeProcess(proc, &ExitCode) == 0) {
753 return (YAP_Unify(YAP_ARG4, WinError()));
756 return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(ExitCode)));
762 if (waitpid(pid, &status, 0) == -1) {
764 if (errno == EINTR) {
767 return YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno));
770 if (WIFEXITED(status)) {
771 return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(WEXITSTATUS(status)));
772 }
else if (WIFSIGNALED(status)) {
773 return YAP_Unify(YAP_ARG3, YAP_MkAtomTerm(YAP_LookupAtom(
"signalled"))) &&
774 YAP_Unify(YAP_ARG4, YAP_MkIntTerm(WTERMSIG(status)));
776 return YAP_Unify(YAP_ARG3, YAP_MkAtomTerm(YAP_LookupAtom(
"stopped"))) &&
777 YAP_Unify(YAP_ARG4, YAP_MkIntTerm(WSTOPSIG(status)));
785static YAP_Bool host_name(
void) {
786#if defined(__MINGW32__) || _MSC_VER
787 char name[MAX_COMPUTERNAME_LENGTH + 1];
788 DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
789 if (GetComputerName(name, &nSize) == 0) {
790 return (YAP_Unify(YAP_ARG2, WinError()));
795 if (gethostname(name, 256) == -1) {
797 return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(errno)));
801 return (YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(name))));
804static YAP_Bool host_id(
void) {
806 return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(gethostid())));
808 return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(0)));
812static YAP_Bool pid(
void) {
813#if defined(__MINGW32__) || _MSC_VER
814 return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(_getpid())));
816 return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(getpid())));
820static YAP_Bool win(
void) {
821#if defined(__MINGW32__) || _MSC_VER
828static YAP_Bool p_kill(
void) {
829#if defined(__MINGW32__) || _MSC_VER
833 HANDLE proc = OpenProcess(STANDARD_RIGHTS_REQUIRED | PROCESS_TERMINATE, FALSE,
834 YAP_IntOfTerm(YAP_ARG1));
836 return (YAP_Unify(YAP_ARG3, WinError()));
838 if (TerminateProcess(proc, -1) == 0) {
839 return (YAP_Unify(YAP_ARG3, WinError()));
843 if (kill(YAP_IntOfTerm(YAP_ARG1), YAP_IntOfTerm(YAP_ARG2)) < 0) {
845 return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
851#if HAVE_OPENSSL_RIPEMD_H
852#include <openssl/ripemd.h>
864static YAP_Bool md5(
void) {
865 unsigned char buf[64];
874 md5_append(&pms, (
const unsigned char *)s, strlen(s));
875 md5_finish(&pms, buf);
877 YAP_Term t = YAP_ARG3;
884 top = (top - 10) +
'a';
889 bop = (bop - 10) +
'a';
892 t = YAP_MkPairTerm(YAP_MkIntTerm(top),
893 YAP_MkPairTerm(YAP_MkIntTerm(bop), t));
895 return YAP_Unify(YAP_ARG2, t);
898static YAP_Bool error_message(
void) {
900 return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
901 strerror(YAP_IntOfTerm(YAP_ARG1)))));
903 return YAP_Unify(YAP_ARG2, YAP_ARG1);
906X_API
void init_sys(
void) {
910 YAP_UserCPredicate(
"datime", datime, 2);
911 YAP_UserCPredicate(
"mktime", sysmktime, 8);
912 YAP_UserCPredicate(
"file_property", file_property, 7);
913 YAP_UserCPredicate(
"unlink", p_unlink, 2);
914 YAP_UserCPredicate(
"rmdir", p_rmdir, 2);
915 YAP_UserCPredicate(
"dir_separator", dir_separator, 1);
916 YAP_UserCPredicate(
"p_environ", p_environ, 2);
917 YAP_UserCPredicate(
"exec_command", execute_command, 6);
918 YAP_UserCPredicate(
"do_shell", do_shell, 5);
919 YAP_UserCPredicate(
"do_system", do_system, 3);
920 YAP_UserCPredicate(
"plwait", plwait, 4);
921 YAP_UserCPredicate(
"host_name", host_name, 2);
922 YAP_UserCPredicate(
"host_id", host_id, 2);
923 YAP_UserCPredicate(
"pid", pid, 2);
924 YAP_UserCPredicate(
"kill", p_kill, 3);
925 YAP_UserCPredicate(
"mktemp", p_mktemp, 3);
926 YAP_UserCPredicate(
"tmpnam", p_tmpnam, 2);
927 YAP_UserCPredicate(
"tmpdir", p_tmpdir, 2);
928 YAP_UserCPredicate(
"rename_file", rename_file, 3);
929 YAP_UserCPredicate(
"read_link", read_link, 2);
930 YAP_UserCPredicate(
"error_message", error_message, 2);
931 YAP_UserCPredicate(
"win", win, 0);
932 YAP_UserCPredicate(
"md5", md5, 3);
939int WINAPI win_sys(HANDLE, DWORD, LPVOID);
941int WINAPI win_sys(HANDLE hinst, DWORD reason, LPVOID reserved) {
943 case DLL_PROCESS_ATTACH:
945 case DLL_PROCESS_DETACH:
947 case DLL_THREAD_ATTACH:
949 case DLL_THREAD_DETACH:
@ argv
read-only atom, it describes the list with all arguments received by YAP at boot
X_API char * YAP_StringToBuffer(Term t, char *buf, unsigned int bufsize)
copy a string to a buffer, the buffer must have been malloced