/*--------------------------------------------------------------------------*/ types::Function::ReturnValue sci_scicosDiagramToScilab(types::typed_list &in, int _iRetCount, types::typed_list &out) { /* * to import some files * scs_m = scicosDiagramToScilab("/path/to/a/file") * [scs_m1, scs_m2] = scicosDiagramToScilab(["/path/to/a/file", "/path/to/files"]) * * to export a file * scicosDiagramToScilab("/path/to/a/file", scs_m) * scicosDiagramToScilab(["/path/to/a/file", "/path/to/files"], scs_m1, scs_m2) */ if (in.size() < 1) { Scierror(77, _("%s: Wrong number of input arguments: at least %d expected.\n"), funname, 1); return types::Function::Error; } if (!in[0]->isString()) { Scierror(77, _("%s: Wrong type for input argument #%d: string expected.\n"), funname, 1); return types::Function::Error; } types::String* files = in[0]->getAs<types::String>(); if (in.size() == 1 && files->getSize() == _iRetCount) { // the user asked to import out.resize(_iRetCount); for (int i = 0; i < _iRetCount; i++) { char* f = wide_string_to_UTF8(files->get(i)); out[i] = importFile(f); FREE(f); if (out[i] == nullptr) { return types::Function::Error; } } } else if (in.size() == 1 + static_cast<size_t>(files->getSize()) && _iRetCount <= 1) { // the user asked to export for (int i = 0; i < _iRetCount; i++) { if (!in[1 + i]->isUserType()) { Scierror(77, _("%s: Wrong type for input argument #%d: ""%s"" expected.\n"), funname, "diagram"); return types::Function::Error; } } for (int i = 0; i < _iRetCount; i++) { char* f = wide_string_to_UTF8(files->get(i)); bool success = exportFile(1 + i, f, in[1 + i]); FREE(f); if (!success) { return types::Function::Error; } } } else { // report a comprehensible error message if (in.size() == 1) { Scierror(77, _("%s: Wrong number of output arguments: %d expected.\n"), funname, files->getSize()); } else if (in.size() == 1 + static_cast<size_t>(files->getSize())) { Scierror(77, _("%s: Wrong number of output arguments: %d expected.\n"), funname, 0); } else { Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), funname, 1); } return types::Function::Error; } return types::Function::OK; }
/*--------------------------------------------------------------------------*/ types::Function::ReturnValue sci_completion(types::typed_list &in, int _iRetCount, types::typed_list &out) { types::String* pStrSomechars = NULL; char* pcSomechars = NULL; if (in.size() < 1 || in.size() > 2) { Scierror(77, _("%s: Wrong number of input argument(s): %d to %d expected."), "completion", 1, 2); return types::Function::Error; } if (_iRetCount > 6) { Scierror(78, _("%s: Wrong number of output argument(s): %d to %d expected."), "completion", 1, 6); return types::Function::Error; } if (in[0]->isString() == false) { Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), "completion", 1); return types::Function::Error; } pStrSomechars = in[0]->getAs<types::String>(); if (pStrSomechars->isScalar() == false) { Scierror(999, _("%s: Wrong size for input argument #%d: string expected.\n"), "completion", 1); return types::Function::Error; } pcSomechars = wide_string_to_UTF8(pStrSomechars->get(0)); if (in.size() == 1) { if (_iRetCount == 1) { out.push_back(doCompletion(pcSomechars, &completion)); } else { out.resize(_iRetCount); switch (_iRetCount) { case 6 : out[5] = doCompletion(pcSomechars, &completionOnFiles); case 5 : out[4] = doCompletion(pcSomechars, &completionOnHandleGraphicsProperties); case 4 : out[3] = doCompletion(pcSomechars, &completionOnMacros); case 3 : out[2] = doCompletion(pcSomechars, &completionOnVariables); case 2 : out[1] = doCompletion(pcSomechars, &completionOnCommandWords); default : out[0] = doCompletion(pcSomechars, &completionOnFunctions); } } } else // if(in.size() == 2) { if (_iRetCount != 1) { Scierror(78, _("%s: Wrong number of output argument(s): %d expected."), "completion", 1); return types::Function::Error; } if (in[1]->isString() == false) { Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), "completion", 2); return types::Function::Error; } types::String* pStrDictionary = in[1]->getAs<types::String>(); if (pStrDictionary->isScalar() == false) { Scierror(999, _("%s: Wrong size for input argument #%d: string expected.\n"), "completion", 2); return types::Function::Error; } wchar_t* wcsDictionary = pStrDictionary->get(0); if ( wcscmp(wcsDictionary, L"functions") == 0 ) { out.push_back(doCompletion(pcSomechars, &completionOnFunctions)); } else if ( wcscmp(wcsDictionary, L"commands") == 0 ) { out.push_back(doCompletion(pcSomechars, &completionOnCommandWords)); } else if ( wcscmp(wcsDictionary, L"variables") == 0 ) { out.push_back(doCompletion(pcSomechars, &completionOnVariables)); } else if ( wcscmp(wcsDictionary, L"macros") == 0 ) { out.push_back(doCompletion(pcSomechars, &completionOnMacros)); } else if ( wcscmp(wcsDictionary, L"graphic_properties") == 0 ) { out.push_back(doCompletion(pcSomechars, &completionOnHandleGraphicsProperties)); } else if ( wcscmp(wcsDictionary, L"files") == 0 ) { out.push_back(doCompletion(pcSomechars, &completionOnFiles)); } else { Scierror(999, _("%s: Wrong value for input argument: '%s', '%s', '%s', '%s', '%s' or '%s' expected.\n"), "completion", "functions", "commands", "variables", "macros", "graphic_properties", "files"); return types::Function::Error; } } FREE(pcSomechars); return types::Function::OK; }