/*--------------------------------------------------------------------------*/ int sci_dgettext(char *fname, unsigned long fname_len) { SciErr sciErr; int *piAddressVarOne = NULL; int *piAddressVarTwo = NULL; CheckRhs(2, 2); CheckLhs(1, 1); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1); } sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddressVarTwo); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2); } if (isStringType(pvApiCtx, piAddressVarOne) && isStringType(pvApiCtx, piAddressVarTwo)) { char *domain = NULL; if (!isScalar(pvApiCtx, piAddressVarOne)) { Scierror(999, "%s: Wrong size for input argument #%d: A string expected.\n", fname, 1); return 0; } if (getAllocatedSingleString(pvApiCtx, piAddressVarOne, &domain) == 0) { char **stringsToTranslate = NULL; char **TranslatedStrings = NULL; int m = 0, n = 0; int i = 0; if (getAllocatedMatrixOfString(pvApiCtx, piAddressVarTwo, &m, &n, &stringsToTranslate) != 0) { Scierror(999, _("%s: No more memory.\n"), fname); return 0; } TranslatedStrings = (char **)MALLOC(sizeof(char*) * (m * n)); if (TranslatedStrings == NULL) { freeAllocatedMatrixOfString(m, n, stringsToTranslate); stringsToTranslate = NULL; Scierror(999, _("%s: No more memory.\n"), fname); return 0; } for (i = 0; i < m * n; i++) { if (strcmp(stringsToTranslate[i], "") == 0) { TranslatedStrings[i] = strdup(""); } else { TranslatedStrings[i] = convertString_dgettext(domain, stringsToTranslate[i]); } } freeAllocatedMatrixOfString(m, n, stringsToTranslate); stringsToTranslate = NULL; sciErr = createMatrixOfString(pvApiCtx, Rhs + 1, m, n, (const char *const *)TranslatedStrings); freeArrayOfString(TranslatedStrings, m * n); TranslatedStrings = NULL; if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 0; } LhsVar(1) = Rhs + 1; PutLhsVar(); } else { Scierror(999, _("%s: No more memory.\n"), fname); return 0; } } else { if (isStringType(pvApiCtx, piAddressVarOne)) { Scierror(999, "%s: Wrong type for input argument #%d: String expected.\n", fname, 2); } else { Scierror(999, "%s: Wrong type for input argument #%d: String expected.\n", fname, 1); } } return 0; }
/*--------------------------------------------------------------------------*/ int sci_gettext(char *fname, void* pvApiCtx) { SciErr sciErr; int *piAddressVarOne = NULL; char* pstDomain = NULL; char **TranslatedStrings = NULL; int m = 0; int n = 0; char **StringsToTranslate = NULL; int i = 0; int iCurrentRhs = 1; int iRhs = nbInputArgument(pvApiCtx); int iLhs = nbOutputArgument(pvApiCtx); CheckInputArgument(pvApiCtx, 1, 2); CheckOutputArgument(pvApiCtx, 0, 1); if (iRhs == 2) { //get domain name sciErr = getVarAddressFromPosition(pvApiCtx, iCurrentRhs, &piAddressVarOne); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iCurrentRhs); } if (isStringType(pvApiCtx, piAddressVarOne) == 0 || isScalar(pvApiCtx, piAddressVarOne) == 0) { Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), fname, iCurrentRhs); return 0; } if (getAllocatedSingleString(pvApiCtx, piAddressVarOne, &pstDomain)) { Scierror(999, _("%s: No more memory.\n"), fname); return 0; } iCurrentRhs++; } sciErr = getVarAddressFromPosition(pvApiCtx, iCurrentRhs, &piAddressVarOne); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iCurrentRhs); } if (isStringType(pvApiCtx, piAddressVarOne) == 0) { Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1); freeAllocatedSingleString(pstDomain); return 0; } if (getAllocatedMatrixOfString(pvApiCtx, piAddressVarOne, &m, &n, &StringsToTranslate) != 0) { Scierror(999, _("%s: No more memory.\n"), fname); freeAllocatedSingleString(pstDomain); return 0; } TranslatedStrings = (char **)MALLOC(sizeof(char*) * (m * n)); if (TranslatedStrings == NULL) { Scierror(999, _("%s: No more memory.\n"), fname); freeAllocatedSingleString(pstDomain); freeAllocatedMatrixOfString(m, n, StringsToTranslate); StringsToTranslate = NULL; return 0; } for (i = 0; i < m * n; i++) { if (strcmp(StringsToTranslate[i], "") == 0) { TranslatedStrings[i] = strdup(""); } else { //if pstDomain is NULL, default domain will be use TranslatedStrings[i] = convertString_dgettext(pstDomain, StringsToTranslate[i]); } } freeAllocatedSingleString(pstDomain); freeAllocatedMatrixOfString(m, n, StringsToTranslate); StringsToTranslate = NULL; sciErr = createMatrixOfString(pvApiCtx, Rhs + 1, m, n, TranslatedStrings); freeArrayOfString(TranslatedStrings, m * n); TranslatedStrings = NULL; if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 0; } LhsVar(1) = Rhs + 1; PutLhsVar(); return 0; }