|
From: Vitor S. C. <vs...@us...> - 2008-07-24 16:02:29
|
Update of /cvsroot/yap/C In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7875/C Modified Files: adtdefs.c c_interface.c iopreds.c parser.c stdpreds.c Log Message: improve C-interface and SWI comptaibility a bit. Index: adtdefs.c =================================================================== RCS file: /cvsroot/yap/C/adtdefs.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- adtdefs.c 17 Jun 2008 13:37:48 -0000 1.59 +++ adtdefs.c 24 Jul 2008 16:01:58 -0000 1.60 @@ -1009,7 +1009,20 @@ } Term -Yap_WStringToList(wchar_t *s) +Yap_NStringToList(char *s, size_t len) +{ + Term t; + char *cp = s + len; + + t = MkAtomTerm(AtomNil); + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term +Yap_WideStringToList(wchar_t *s) { Term t; wchar_t *cp = s + wcslen(s); @@ -1022,6 +1035,19 @@ } Term +Yap_NWideStringToList(wchar_t *s, size_t len) +{ + Term t; + wchar_t *cp = s + len; + + t = MkAtomTerm(AtomNil); + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term Yap_StringToDiffList(char *s, Term t) { register unsigned char *cp = (unsigned char *)s + strlen(s); @@ -1033,6 +1059,39 @@ } Term +Yap_NStringToDiffList(char *s, Term t, size_t len) +{ + register unsigned char *cp = (unsigned char *)s + len; + + while (cp > (unsigned char *)s) { + t = MkPairTerm(MkIntTerm(*--cp), t); + } + return t; +} + +Term +Yap_WideStringToDiffList(wchar_t *s, Term t) +{ + wchar_t *cp = s + wcslen(s); + + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term +Yap_NWideStringToDiffList(wchar_t *s, Term t, size_t len) +{ + wchar_t *cp = s + len; + + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term Yap_StringToListOfAtoms(char *s) { register Term t; @@ -1045,11 +1104,27 @@ so[0] = *--cp; t = MkPairTerm(MkAtomTerm(LookupAtom(so)), t); } - return (t); + return t; } Term -Yap_WStringToListOfAtoms(wchar_t *s) +Yap_NStringToListOfAtoms(char *s, size_t len) +{ + register Term t; + char so[2]; + register unsigned char *cp = (unsigned char *)s + len; + + so[1] = '\0'; + t = MkAtomTerm(AtomNil); + while (cp > (unsigned char *)s) { + so[0] = *--cp; + t = MkPairTerm(MkAtomTerm(LookupAtom(so)), t); + } + return t; +} + +Term +Yap_WideStringToListOfAtoms(wchar_t *s) { register Term t; wchar_t so[2]; @@ -1065,6 +1140,22 @@ } Term +Yap_NWideStringToListOfAtoms(wchar_t *s, size_t len) +{ + register Term t; + wchar_t so[2]; + wchar_t *cp = s + len; + + so[1] = '\0'; + t = MkAtomTerm(AtomNil); + while (cp > s) { + so[0] = *--cp; + t = MkPairTerm(MkAtomTerm(LookupWideAtom(so)), t); + } + return t; +} + +Term Yap_ArrayToList(register Term *tp, int nof) { register Term *pt = tp + nof; Index: c_interface.c =================================================================== RCS file: /cvsroot/yap/C/c_interface.c,v retrieving revision 1.120 retrieving revision 1.121 diff -u -r1.120 -r1.121 --- c_interface.c 11 Jul 2008 17:02:07 -0000 1.120 +++ c_interface.c 24 Jul 2008 16:02:00 -0000 1.121 @@ -12,6 +12,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.121 2008/07/24 16:02:00 vsc +* improve C-interface and SWI comptaibility a bit. +* * Revision 1.120 2008/07/11 17:02:07 vsc * fixes by Bart and Tom: mostly libraries but nasty one in indexing * compilation. @@ -415,7 +418,17 @@ X_API int STD_PROTO(YAP_StringToBuffer, (Term, char *, unsigned int)); X_API Term STD_PROTO(YAP_ReadBuffer, (char *,Term *)); X_API Term STD_PROTO(YAP_BufferToString, (char *)); +X_API Term STD_PROTO(YAP_NBufferToString, (char *, size_t)); +X_API Term STD_PROTO(YAP_WideBufferToString, (wchar_t *)); +X_API Term STD_PROTO(YAP_NWideBufferToString, (wchar_t *, size_t)); X_API Term STD_PROTO(YAP_BufferToAtomList, (char *)); +X_API Term STD_PROTO(YAP_NBufferToAtomList, (char *,size_t)); +X_API Term STD_PROTO(YAP_WideBufferToAtomList, (wchar_t *)); +X_API Term STD_PROTO(YAP_NWideBufferToAtomList, (wchar_t *, size_t)); +X_API Term STD_PROTO(YAP_BufferToDiffList, (char *, Term)); +X_API Term STD_PROTO(YAP_NBufferToDiffList, (char *, Term, size_t)); +X_API Term STD_PROTO(YAP_WideBufferToDiffList, (wchar_t *, Term)); +X_API Term STD_PROTO(YAP_NWideBufferToDiffList, (wchar_t *, Term, size_t)); X_API void STD_PROTO(YAP_Error,(int, Term, char *, ...)); X_API Term STD_PROTO(YAP_RunGoal,(Term)); X_API Term STD_PROTO(YAP_RunGoalOnce,(Term)); @@ -1236,6 +1249,45 @@ /* copy a string to a buffer */ X_API Term +YAP_NBufferToString(char *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NStringToList(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_WideBufferToString(wchar_t *s) +{ + Term t; + BACKUP_H(); + + t = Yap_WideStringToList(s); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_NWideBufferToString(wchar_t *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NWideStringToList(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term YAP_ReadBuffer(char *s, Term *tp) { Term t; @@ -1262,6 +1314,97 @@ return t; } +/* copy a string of size len to a buffer */ +X_API Term +YAP_NBufferToAtomList(char *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NStringToListOfAtoms(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_WideBufferToAtomList(wchar_t *s) +{ + Term t; + BACKUP_H(); + + t = Yap_WideStringToListOfAtoms(s); + + RECOVER_H(); + return t; +} + +/* copy a string of size len to a buffer */ +X_API Term +YAP_NWideBufferToAtomList(wchar_t *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NWideStringToListOfAtoms(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_BufferToDiffList(char *s, Term t0) +{ + Term t; + BACKUP_H(); + + t = Yap_StringToDiffList(s, t0); + + RECOVER_H(); + return t; +} + +/* copy a string of size len to a buffer */ +X_API Term +YAP_NBufferToDiffList(char *s, Term t0, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NStringToDiffList(s, t0, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_WideBufferToDiffList(wchar_t *s, Term t0) +{ + Term t; + BACKUP_H(); + + t = Yap_WideStringToDiffList(s, t0); + + RECOVER_H(); + return t; +} + +/* copy a string of size len to a buffer */ +X_API Term +YAP_NWideBufferToDiffList(wchar_t *s, Term t0, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NWideStringToDiffList(s, t0, len); + + RECOVER_H(); + return t; +} + X_API void YAP_Error(int myerrno, Term t, char *buf,...) Index: iopreds.c =================================================================== RCS file: /cvsroot/yap/C/iopreds.c,v retrieving revision 1.184 retrieving revision 1.185 diff -u -r1.184 -r1.185 --- iopreds.c 22 Jul 2008 23:34:48 -0000 1.184 +++ iopreds.c 24 Jul 2008 16:02:00 -0000 1.185 @@ -3660,7 +3660,7 @@ break; case WString_tok: { - Term t0 = Yap_WStringToList((wchar_t *)info); + Term t0 = Yap_WideStringToList((wchar_t *)info); ts[0] = Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("string"),1),1,&t0); } break; Index: parser.c =================================================================== RCS file: /cvsroot/yap/C/parser.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- parser.c 10 Mar 2008 14:11:38 -0000 1.26 +++ parser.c 24 Jul 2008 16:02:00 -0000 1.27 @@ -546,11 +546,11 @@ if (*p == 0) t = MkAtomTerm(AtomNil); else if (yap_flags[YAP_DOUBLE_QUOTES_FLAG] == STRING_AS_CHARS) - t = Yap_WStringToListOfAtoms(p); + t = Yap_WideStringToListOfAtoms(p); else if (yap_flags[YAP_DOUBLE_QUOTES_FLAG] == STRING_AS_ATOM) t = MkAtomTerm(Yap_LookupWideAtom(p)); else - t = Yap_WStringToList(p); + t = Yap_WideStringToList(p); NextToken; } break; Index: stdpreds.c =================================================================== RCS file: /cvsroot/yap/C/stdpreds.c,v retrieving revision 1.131 retrieving revision 1.132 diff -u -r1.131 -r1.132 --- stdpreds.c 12 Jun 2008 10:55:52 -0000 1.131 +++ stdpreds.c 24 Jul 2008 16:02:00 -0000 1.132 @@ -13,6 +13,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.132 2008/07/24 16:02:00 vsc +* improve C-interface and SWI comptaibility a bit. +* * Revision 1.131 2008/06/12 10:55:52 vsc * fix syntax error messages * @@ -893,7 +896,7 @@ if (IsAtomTerm(AtomNameT)) { Atom at = AtomOfTerm(AtomNameT); if (IsWideAtom(at)) { - NewT = Yap_WStringToList((wchar_t *)(RepAtom(at)->StrOfAE)); + NewT = Yap_WideStringToList((wchar_t *)(RepAtom(at)->StrOfAE)); return Yap_unify(NewT, ARG2); } else String = RepAtom(at)->StrOfAE; @@ -1054,9 +1057,9 @@ at = AtomOfTerm(t1); if (IsWideAtom(at)) { if (yap_flags[YAP_TO_CHARS_FLAG] == QUINTUS_TO_CHARS) { - NewT = Yap_WStringToList((wchar_t *)RepAtom(at)->StrOfAE); + NewT = Yap_WideStringToList((wchar_t *)RepAtom(at)->StrOfAE); } else { - NewT = Yap_WStringToListOfAtoms((wchar_t *)RepAtom(AtomOfTerm(t1))->StrOfAE); + NewT = Yap_WideStringToListOfAtoms((wchar_t *)RepAtom(AtomOfTerm(t1))->StrOfAE); } } else { if (yap_flags[YAP_TO_CHARS_FLAG] == QUINTUS_TO_CHARS) { @@ -1609,7 +1612,7 @@ } at = AtomOfTerm(t1); if (IsWideAtom(at)) { - NewT = Yap_WStringToList((wchar_t *)RepAtom(at)->StrOfAE); + NewT = Yap_WideStringToList((wchar_t *)RepAtom(at)->StrOfAE); } else { NewT = Yap_StringToList(RepAtom(at)->StrOfAE); } |