2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2009 - DIGITEO - Allan CORNET
5 * This file must be used under the terms of the CeCILL.
6 * This source file is licensed as described in the file COPYING, which
7 * you should have received as part of this distribution. The terms
8 * are also available at
9 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12 /*--------------------------------------------------------------------------*/
13 #include "diary_manager.hxx"
14 /*--------------------------------------------------------------------------*/
17 #include "gw_output_stream.h"
19 #include "api_scilab.h"
20 #include "api_oldstack.h"
21 #include "localization.h"
22 #include "charEncoding.h"
25 #include "freeArrayOfString.h"
27 /*--------------------------------------------------------------------------*/
28 #define DIARY_SECOND_ARG_LIST L"list"
29 #define DIARY_SECOND_ARG_CLOSE L"close"
30 #define DIARY_SECOND_ARG_PAUSE L"pause"
31 #define DIARY_SECOND_ARG_OFF L"off"
32 #define DIARY_SECOND_ARG_RESUME L"resume"
33 #define DIARY_SECOND_ARG_ON L"on"
34 #define DIARY_SECOND_ARG_NEW L"new"
35 #define DIARY_SECOND_ARG_APPEND L"append"
36 #define DIARY_SECOND_ARG_EXISTS L"exists"
37 #define DIARY_THIRD_ARG_FILTER_COMMAND L"filter=command"
38 #define DIARY_THIRD_ARG_FILTER_OUTPUT L"filter=output"
39 #define DIARY_THIRD_ARG_PREFIX_UNIX_EPOCH L"prefix=U"
40 #define DIARY_THIRD_ARG_PREFIX_DEFAULT L"prefix=YYYY-MM-DD hh:mm:ss"
41 #define DIARY_THIRD_ARG_PREFIX_ONLY_COMMANDS L"prefix-only-commands"
42 /*--------------------------------------------------------------------------*/
43 static int sci_diary_no_rhs(char *fname, int* _piKey);
44 static int sci_diary_one_rhs(char *fname, int* _piKey);
45 static int sci_diary_two_rhs(char *fname, int* _piKey);
46 static int sci_diary_three_rhs(char *fname, int* _piKey);
47 /*--------------------------------------------------------------------------*/
48 static double *getInputArgumentOneIDs(char *fname, int* _piKey,int *sizeReturnedArray, int *ierror);
49 static wchar_t **getInputArgumentOneFilenames(char *fname, int* _piKey,int *sizeReturnedArray, int *ierror);
50 static wchar_t *getInputArgumentTwo(char *fname, int* _piKey, int *ierror);
51 static wchar_t **getInputArgumentThree(char *fname, int* _piKey,int *sizeReturnedArray, int *ierror);
52 static int checkExistByIDs(char *fname, int* _piKey, double *IDs, int size_IDs);
53 static int checkExistByFilenames(char *fname, int* _piKey, wchar_t **wcFilenames, int size_IDs);
54 static int CloseByFilenames(char *fname, int* _piKey);
55 static int CloseByIds(char *fnam, int* _piKeye);
56 static int PauseByFilenames(char *fname, int* _piKey);
57 static int PauseByIds(char *fname, int* _piKey);
58 static int ResumeByFilenames(char *fname, int* _piKey);
59 static int ResumeByIds(char *fname, int* _piKey);
60 static int ExistByFilenames(char *fname, int* _piKey);
61 static int ExistByIds(char *fname, int* _piKey);
62 static int AppendByFilenames(char *fname, int* _piKey,
63 diary_filter filterMode,
64 diary_prefix_time_format prefixMode,
65 diary_prefix_time_filter prefixModeFilter,
67 static int NewByFilenames(char *fname, int* _piKey,
68 diary_filter filterMode,
69 diary_prefix_time_format prefixMode,
70 diary_prefix_time_filter prefixModeFilter,
72 /*--------------------------------------------------------------------------*/
73 int sci_diary(char *fname, int* _piKey)
81 return sci_diary_no_rhs(fname, _piKey);
83 return sci_diary_one_rhs(fname, _piKey);
85 return sci_diary_two_rhs(fname, _piKey);
87 return sci_diary_three_rhs(fname, _piKey);
91 /*--------------------------------------------------------------------------*/
92 static int sci_diary_no_rhs(char *fname, int* _piKey)
94 // [ids, filenames] = diary()
95 // [ids, filenames] = diary([],"list")
98 double *diary_ids = getDiaryIDsAsDouble(&nb_diary_ids);
100 if ( (diary_ids) && (nb_diary_ids > 0) )
102 sciErr = createMatrixOfDouble(_piKey, Rhs + 1, nb_diary_ids, 1, diary_ids);
105 printError(&sciErr, 0);
117 if (nb_diary_ids == 0)
119 sciErr = createMatrixOfDouble(_piKey, Rhs + 1, 0, 0, NULL);
122 printError(&sciErr, 0);
136 Scierror(999,_("%s: Memory allocation error.\n"),fname);
143 int nb_diary_filenames = 0;
144 wchar_t **wcdiary_filenames = getDiaryFilenames(&nb_diary_filenames);
146 if ( (wcdiary_filenames) && (nb_diary_filenames > 0) )
148 sciErr = createMatrixOfWideString(_piKey, Rhs + 2, nb_diary_filenames, 1, wcdiary_filenames);
151 printError(&sciErr, 0);
157 freeArrayOfWideString(wcdiary_filenames, nb_diary_filenames);
158 nb_diary_filenames = 0;
162 if (nb_diary_filenames == 0)
164 sciErr = createMatrixOfDouble(_piKey, Rhs + 2, 0, 0, NULL);
167 printError(&sciErr, 0);
172 if (wcdiary_filenames)
174 freeArrayOfWideString(wcdiary_filenames, nb_diary_filenames);
175 nb_diary_filenames = 0;
180 Scierror(999,_("%s: Memory allocation error.\n"),fname);
190 /*--------------------------------------------------------------------------*/
191 static int sci_diary_one_rhs(char *fname, int* _piKey)
195 int *piAddressVarOne = NULL;
197 sciErr = getVarAddressFromPosition(_piKey, 1, &piAddressVarOne);
200 printError(&sciErr, 0);
204 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
207 printError(&sciErr, 0);
211 if (iType == sci_matrix)
215 double * IDs = getInputArgumentOneIDs(fname, _piKey, &IDs_size, &ierr);
221 if ( (IDs_size == 0) ||
222 ((IDs_size == 1) && ((int)IDs[0] == 0)))
229 Scierror(999,_("%s: Wrong value for input argument #%d: 0 expected.\n"),fname,1);
232 else if (iType == sci_strings)
235 int sizewcFilenames = 0;
236 wchar_t ** wcFilenames = getInputArgumentOneFilenames(fname, _piKey,&sizewcFilenames,&ierr);
239 if (sizewcFilenames == 1)
241 if (diaryExists(wcFilenames[0]))
243 double dID = (double)diaryNew(wcFilenames[0], false);
246 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
249 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
250 FREE(utf_str); utf_str = NULL;
254 Scierror(999,_("%s: error can not create diary.\n"),fname);
259 sciErr = createMatrixOfDouble(_piKey, Rhs + 1, 1, 1, &dID);
262 printError(&sciErr, 0);
270 wchar_t **wfilenameUsed = new wchar_t*[1];
271 wfilenameUsed[0] = getDiaryFilename((int)dID);
272 sciErr = createMatrixOfWideString(_piKey, Rhs + 2, 1, 1, wfilenameUsed);
275 printError(&sciErr, 0);
280 FREE(wfilenameUsed[0]);
281 delete [] wfilenameUsed;
284 else // diary(filename) exists (close diary)
286 if (diaryClose(wcFilenames[0]))
290 freeArrayOfWideString(wcFilenames, 1);
291 Scierror(999,_("%s: error can not close diary.\n"),fname);
298 freeArrayOfWideString(wcFilenames,sizewcFilenames);
303 freeArrayOfWideString(wcFilenames,sizewcFilenames);
304 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname, 1);
309 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
313 /*--------------------------------------------------------------------------*/
314 static int sci_diary_two_rhs(char *fname, int* _piKey)
317 wchar_t *wcArgumentTwo = getInputArgumentTwo(fname, _piKey, &ierr);
319 int *piAddressVarOne = NULL;
321 sciErr = getVarAddressFromPosition(_piKey, 1, &piAddressVarOne);
324 printError(&sciErr, 0);
332 if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_LIST) == 0)
335 sciErr = getVarDimension(_piKey, piAddressVarOne,&m1,&n1);
338 printError(&sciErr, 0);
342 if ( (m1 == n1) && (n1 == 0) )
344 // diary() == diary([], "list")
345 return sci_diary_no_rhs(fname, _piKey);
349 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
352 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_CLOSE) == 0)
355 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
358 printError(&sciErr, 0);
362 if(iType == sci_matrix)
364 return CloseByIds(fname, _piKey);
366 else if (iType == sci_strings)
368 return CloseByFilenames(fname, _piKey);
372 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
376 else if ( (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_PAUSE) == 0) ||
377 (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_OFF) == 0) )
380 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
383 printError(&sciErr, 0);
387 if (iType == sci_matrix)
389 return PauseByIds(fname, _piKey);
391 else if(iType == sci_strings)
393 return PauseByFilenames(fname, _piKey);
397 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
401 else if ( (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_RESUME) == 0) ||
402 (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_ON) == 0) )
405 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
408 printError(&sciErr, 0);
412 if (iType == sci_matrix)
414 return ResumeByIds(fname, _piKey);
416 else if (iType == sci_strings)
418 return ResumeByFilenames(fname, _piKey);
422 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
426 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_NEW) == 0)
429 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
432 printError(&sciErr, 0);
436 if (iType == sci_strings)
438 return NewByFilenames(fname, _piKey, DIARY_FILTER_INPUT_AND_OUTPUT,
439 PREFIX_TIME_FORMAT_UNIX_EPOCH,
440 PREFIX_FILTER_NONE, false);
444 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
448 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_APPEND) == 0)
451 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
454 printError(&sciErr, 0);
458 if (iType == sci_strings)
460 return AppendByFilenames(fname, _piKey, DIARY_FILTER_INPUT_AND_OUTPUT,
461 PREFIX_TIME_FORMAT_UNIX_EPOCH,
462 PREFIX_FILTER_NONE, false);
466 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
470 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_EXISTS) == 0)
473 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
476 printError(&sciErr, 0);
480 if (iType == sci_matrix)
482 return ExistByIds(fname, _piKey);
484 else if (iType == sci_strings)
486 return ExistByFilenames(fname, _piKey);
490 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
496 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
502 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
507 /*--------------------------------------------------------------------------*/
508 static int sci_diary_three_rhs(char *fname, int* _piKey)
511 int size_ArgThree = 0;
512 wchar_t **wcArgumentThree = getInputArgumentThree(fname, _piKey, &size_ArgThree, &ierr);
517 diary_filter filterMode = DIARY_FILTER_INPUT_AND_OUTPUT;
518 diary_prefix_time_format iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH;
519 diary_prefix_time_filter iPrefixIoModeFilter = PREFIX_FILTER_NONE;
520 bool suspendedDiary = false;
522 for (int i = 0; i < size_ArgThree; i++)
524 if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_COMMAND) == 0)
526 filterMode = DIARY_FILTER_ONLY_INPUT; // input only
528 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_OUTPUT) == 0)
530 filterMode = DIARY_FILTER_ONLY_OUTPUT; // output only
532 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_UNIX_EPOCH) == 0)
534 iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH;
535 if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT;
537 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_DEFAULT) == 0)
539 iPrefixMode = PREFIX_TIME_FORMAT_ISO_8601;
540 if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT;
542 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_ONLY_COMMANDS) == 0)
544 iPrefixIoModeFilter = PREFIX_FILTER_ONLY_INPUT;
546 else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_ON) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_RESUME) == 0) )
548 suspendedDiary = false;
550 else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_OFF) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_PAUSE) == 0) )
552 suspendedDiary = true;
556 freeArrayOfWideString(wcArgumentThree, size_ArgThree);
557 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 3);
561 freeArrayOfWideString(wcArgumentThree, size_ArgThree);
563 wchar_t *wcArgumentTwo = getInputArgumentTwo(fname, _piKey, &ierr);
567 int *piAddressVarOne = NULL;
568 SciErr sciErr = getVarAddressFromPosition(_piKey, 1, &piAddressVarOne);
571 printError(&sciErr, 0);
575 if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_NEW) == 0)
578 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
581 printError(&sciErr, 0);
585 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
586 if (iType == sci_strings)
588 return NewByFilenames(fname, _piKey, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary);
592 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
596 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_APPEND) == 0)
599 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
602 printError(&sciErr, 0);
606 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
607 if (iType == sci_strings)
609 return AppendByFilenames(fname, _piKey, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary);
613 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
619 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
620 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
626 Scierror(999,_("%s: Memory allocation error.\n"),fname);
631 Scierror(999,_("%s: Memory allocation error.\n"),fname);
635 /*--------------------------------------------------------------------------*/
636 static double *getInputArgumentOneIDs(char *fname, int* _piKey,int *sizeReturnedArray, int *ierror)
639 *sizeReturnedArray = 0;
643 int *piAddressVarOne = NULL;
645 SciErr sciErr = getVarAddressFromPosition(_piKey, 1, &piAddressVarOne);
648 printError(&sciErr, 0);
653 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
656 printError(&sciErr, 0);
660 if (iType == sci_matrix)
662 sciErr = getMatrixOfDouble(_piKey, piAddressVarOne,&m1,&n1,&IDs);
665 printError(&sciErr, 0);
669 if ( (m1 == 1) || (n1 == 1) )
671 *sizeReturnedArray = m1 * n1;
673 else if ( (m1 == 0) || (n1 == 0) )
675 *sizeReturnedArray = 0;
681 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,1);
687 Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname,1);
693 /*--------------------------------------------------------------------------*/
694 static wchar_t **getInputArgumentOneFilenames(char *fname, int* _piKey,int *sizeReturnedArray, int *ierror)
696 wchar_t** wcFilenames = NULL;
697 *sizeReturnedArray = 0;
701 int *piAddressVarOne = NULL;
703 SciErr sciErr = getVarAddressFromPosition(_piKey, 1, &piAddressVarOne);
706 printError(&sciErr, 0);
711 sciErr = getVarType(_piKey, piAddressVarOne, &iType);
714 printError(&sciErr, 0);
718 if (iType == sci_strings)
720 int *lenStVarOne = NULL;
722 sciErr = getVarDimension(_piKey, piAddressVarOne,&m1,&n1);
725 printError(&sciErr, 0);
731 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname,1);
734 else if ( (m1 == 1) || (n1 == 1) )
736 lenStVarOne = (int *)MALLOC(sizeof(int) * (m1 * n1));
737 if (lenStVarOne == NULL)
739 Scierror(999,_("%s: Memory allocation error.\n"),fname);
744 sciErr = getMatrixOfWideString(_piKey, piAddressVarOne, &m1, &n1, lenStVarOne, wcFilenames);
747 printError(&sciErr, 0);
751 wcFilenames = (wchar_t **)MALLOC(sizeof(wchar_t *) * (m1 * n1));
752 if (wcFilenames == NULL)
754 Scierror(999,_("%s: Memory allocation error.\n"),fname);
759 for (int i = 0; i < m1 * n1;i++)
761 wcFilenames[i] = (wchar_t*)MALLOC(sizeof(wchar_t)* (lenStVarOne[i] + 1));
762 if (wcFilenames[i] == NULL)
764 Scierror(999,_("%s: Memory allocation error.\n"),fname);
769 sciErr = getMatrixOfWideString(_piKey, piAddressVarOne, &m1, &n1, lenStVarOne, wcFilenames);
772 printError(&sciErr, 0);
776 *sizeReturnedArray = m1 * n1;
782 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,1);
788 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,1);
793 /*--------------------------------------------------------------------------*/
794 static wchar_t *getInputArgumentTwo(char *fname, int* _piKey, int *ierror)
796 wchar_t *wcInputArgumentTwo = NULL;
800 int *piAddressVarTwo = NULL;
802 SciErr sciErr = getVarAddressFromPosition(_piKey, 2, &piAddressVarTwo);
805 printError(&sciErr, 0);
810 sciErr = getVarType(_piKey, piAddressVarTwo, &iType);
813 printError(&sciErr, 0);
817 if (iType == sci_strings)
821 sciErr = getVarDimension(_piKey, piAddressVarTwo,&m2,&n2);
824 printError(&sciErr, 0);
828 if ( (m2 != n2) && (n2 != 1) )
830 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,2);
835 // get length lenStVarTwo
836 sciErr = getMatrixOfWideString(_piKey, piAddressVarTwo,&m2,&n2,&lenStVarTwo,&wcInputArgumentTwo);
839 printError(&sciErr, 0);
843 wcInputArgumentTwo = (wchar_t*)MALLOC(sizeof(wchar_t) * (lenStVarTwo + 1));
845 if (wcInputArgumentTwo == NULL)
847 Scierror(999,_("%s: Memory allocation error.\n"),fname);
851 sciErr = getMatrixOfWideString(_piKey, piAddressVarTwo,&m2,&n2,&lenStVarTwo,&wcInputArgumentTwo);
854 printError(&sciErr, 0);
861 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,2);
864 return wcInputArgumentTwo;
866 /*--------------------------------------------------------------------------*/
867 static wchar_t** getInputArgumentThree(char *fname, int* _piKey,int *sizeReturnedArray, int *ierror)
869 wchar_t** wcInputArgumentThree = NULL;
870 *sizeReturnedArray = 0;
874 int *piAddressVarThree = NULL;
876 SciErr sciErr = getVarAddressFromPosition(_piKey, 3, &piAddressVarThree);
879 printError(&sciErr, 0);
884 sciErr = getVarType(_piKey, piAddressVarThree, &iType);
887 printError(&sciErr, 0);
891 if (iType == sci_strings)
893 int *lenStVarThree = NULL;
895 sciErr = getVarDimension(_piKey, piAddressVarThree,&m3,&n3);
898 printError(&sciErr, 0);
904 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname,3);
907 else if ( (m3 == 1) || (n3 == 1) )
909 lenStVarThree = (int *)MALLOC(sizeof(int) * (m3 * n3));
910 if (lenStVarThree == NULL)
912 Scierror(999,_("%s: Memory allocation error.\n"),fname);
917 sciErr = getMatrixOfWideString(_piKey, piAddressVarThree, &m3, &n3, lenStVarThree, wcInputArgumentThree);
920 printError(&sciErr, 0);
924 wcInputArgumentThree = (wchar_t **)MALLOC(sizeof(wchar_t *) * (m3 * n3));
925 if (wcInputArgumentThree == NULL)
927 Scierror(999,_("%s: Memory allocation error.\n"),fname);
932 for (int i = 0; i < m3 * n3; i++)
934 wcInputArgumentThree[i] = (wchar_t*)MALLOC(sizeof(wchar_t) * (lenStVarThree[i] + 1));
937 sciErr = getMatrixOfWideString(_piKey, piAddressVarThree, &m3, &n3, lenStVarThree, wcInputArgumentThree);
940 printError(&sciErr, 0);
944 *sizeReturnedArray = m3 * n3;
950 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,3);
956 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,3);
959 return wcInputArgumentThree;
961 /*--------------------------------------------------------------------------*/
962 static int checkExistByIDs(char *fname, int* _piKey, double *IDs, int size_IDs)
966 for (int i = 0; i < size_IDs; i++)
968 if (diaryExists((int)IDs[i]))
970 Scierror(999,_("%s: Wrong value for input argument #%d: diary ID %d not exists.\n"),fname,1, (int)IDs[i]);
978 /*--------------------------------------------------------------------------*/
979 static int checkExistByFilenames(char *fname, int* _piKey, wchar_t **wcFilenames, int size_IDs)
983 for (int i = 0; i < size_IDs; i++)
985 if (diaryExists(wcFilenames[i]))
987 Scierror(999,_("%s: Wrong value for input argument #%d: diary filename not exists.\n"),fname,1);
995 /*--------------------------------------------------------------------------*/
996 static int CloseByFilenames(char *fname, int* _piKey)
998 wchar_t **wcFilenames = NULL;
1002 wcFilenames = getInputArgumentOneFilenames(fname, _piKey, &dIDs_size, &ierr);
1005 ierr = checkExistByFilenames(fname, _piKey, wcFilenames, dIDs_size);
1008 freeArrayOfWideString(wcFilenames, dIDs_size);
1012 for (int i = 0; i < dIDs_size; i++)
1014 if (diaryClose(wcFilenames[i]))
1016 freeArrayOfWideString(wcFilenames, dIDs_size);
1017 Scierror(999,_("%s: Wrong value for input argument #%d: error can not close diary.\n"),fname);
1022 freeArrayOfWideString(wcFilenames, dIDs_size);
1026 /*--------------------------------------------------------------------------*/
1027 static int CloseByIds(char *fname, int* _piKey)
1029 double *dIDs = NULL;
1033 dIDs = getInputArgumentOneIDs(fname, _piKey, &dIDs_size, &ierr);
1037 // diary([], 'close')
1042 else if (ierr) return 0;
1044 ierr = checkExistByIDs(fname, _piKey, dIDs, dIDs_size);
1047 for (int i = 0; i < dIDs_size; i++)
1049 if (diaryClose((int)dIDs[i]))
1051 Scierror(999,_("%s: Wrong value for input argument #%d: error can not close diary %d.\n"),fname, (int)dIDs[i]);
1058 /*--------------------------------------------------------------------------*/
1059 static int PauseByFilenames(char *fname, int* _piKey)
1061 wchar_t **wcFilenames = NULL;
1065 wcFilenames = getInputArgumentOneFilenames(fname, _piKey, &dIDs_size, &ierr);
1068 ierr = checkExistByFilenames(fname, _piKey, wcFilenames, dIDs_size);
1071 freeArrayOfWideString(wcFilenames, dIDs_size);
1075 for (int i = 0; i < dIDs_size; i++)
1077 if (diaryPause(wcFilenames[i]))
1079 freeArrayOfWideString(wcFilenames, dIDs_size);
1080 Scierror(999,_("%s: Wrong value for input argument #%d: error can not pause diary.\n"),fname);
1085 freeArrayOfWideString(wcFilenames, dIDs_size);
1090 /*--------------------------------------------------------------------------*/
1091 static int PauseByIds(char *fname, int* _piKey)
1093 double *dIDs = NULL;
1097 dIDs = getInputArgumentOneIDs(fname, _piKey, &dIDs_size, &ierr);
1100 ierr = checkExistByIDs(fname, _piKey, dIDs, dIDs_size);
1103 for (int i = 0; i < dIDs_size; i++)
1105 if (diaryPause((int)dIDs[i]))
1107 Scierror(999,_("%s: Wrong value for input argument #%d: error can not pause diary %d.\n"),fname, (int)dIDs[i]);
1116 /*--------------------------------------------------------------------------*/
1117 static int ResumeByFilenames(char *fname, int* _piKey)
1119 wchar_t **wcFilenames = NULL;
1122 wcFilenames = getInputArgumentOneFilenames(fname, _piKey, &dIDs_size, &ierr);
1125 ierr = checkExistByFilenames(fname, _piKey, wcFilenames, dIDs_size);
1128 freeArrayOfWideString(wcFilenames, dIDs_size);
1132 for (int i = 0; i < dIDs_size; i++)
1134 if (diaryResume(wcFilenames[i]))
1136 freeArrayOfWideString(wcFilenames, dIDs_size);
1137 Scierror(999,_("%s: Wrong value for input argument #%d: error can not resume diary.\n"),fname);
1142 freeArrayOfWideString(wcFilenames, dIDs_size);
1148 /*--------------------------------------------------------------------------*/
1149 static int ResumeByIds(char *fname, int* _piKey)
1151 double *dIDs = NULL;
1155 dIDs = getInputArgumentOneIDs(fname, _piKey, &dIDs_size, &ierr);
1158 ierr = checkExistByIDs(fname, _piKey, dIDs, dIDs_size);
1161 for (int i = 0; i < dIDs_size; i++)
1163 if (diaryResume((int)dIDs[i]))
1165 Scierror(999,_("%s: Wrong value for input argument #%d: error can not resume diary %d.\n"),fname, (int)dIDs[i]);
1174 /*--------------------------------------------------------------------------*/
1175 static int ExistByFilenames(char *fname, int* _piKey)
1177 wchar_t **wcFilenames = NULL;
1180 wcFilenames = getInputArgumentOneFilenames(fname, _piKey, &dIDs_size, &ierr);
1183 int *resultExist = (int*)MALLOC(sizeof(int)*dIDs_size);
1184 if (resultExist == NULL)
1186 freeArrayOfWideString(wcFilenames,dIDs_size);
1187 Scierror(999,_("%s: Memory allocation error.\n"),fname);
1191 for(int i=0; i < dIDs_size; i++)
1193 int bExists = diaryExists(wcFilenames[i]);
1196 resultExist[i] = TRUE;
1200 resultExist[i] = FALSE;
1203 freeArrayOfWideString(wcFilenames,dIDs_size);
1205 SciErr sciErr = createMatrixOfBoolean(_piKey, Rhs + 1, 1, dIDs_size, resultExist);
1208 printError(&sciErr, 0);
1212 FREE(resultExist); resultExist = NULL;
1213 LhsVar(1) = Rhs + 1;
1217 /*--------------------------------------------------------------------------*/
1218 static int ExistByIds(char *fname, int* _piKey)
1220 double *dIDs = NULL;
1224 dIDs = getInputArgumentOneIDs(fname, _piKey, &dIDs_size, &ierr);
1227 int *resultExist = (int*)MALLOC(sizeof(int)*dIDs_size);
1228 if (resultExist == NULL)
1230 Scierror(999,_("%s: Memory allocation error.\n"),fname);
1234 for(int i=0; i < dIDs_size; i++)
1236 int bExists = diaryExists((int)dIDs[i]);
1239 resultExist[i] = TRUE;
1243 resultExist[i] = FALSE;
1247 SciErr sciErr = createMatrixOfBoolean(_piKey, Rhs + 1, 1, dIDs_size, resultExist);
1250 printError(&sciErr, 0);
1254 FREE(resultExist); resultExist = NULL;
1255 LhsVar(1) = Rhs + 1;
1259 /*--------------------------------------------------------------------------*/
1260 static int AppendByFilenames(char *fname, int* _piKey,
1261 diary_filter filterMode,
1262 diary_prefix_time_format prefixMode,
1263 diary_prefix_time_filter prefixModeFilter,
1267 wchar_t **wcFilenames = NULL;
1271 wcFilenames = getInputArgumentOneFilenames(fname, _piKey, &dIDs_size, &ierr);
1276 double dID = (double)diaryAppend(wcFilenames[0]);
1279 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
1282 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
1283 FREE(utf_str); utf_str = NULL;
1287 Scierror(999,_("%s: error can not create diary.\n"),fname);
1289 freeArrayOfWideString(wcFilenames, dIDs_size);
1293 freeArrayOfWideString(wcFilenames, dIDs_size);
1295 diarySetFilterMode((int)dID, filterMode);
1296 diarySetPrefixMode((int)dID, prefixMode);
1297 diarySetPrefixIoModeFilter((int)dID, prefixModeFilter);
1298 if (suspended) diaryPause((int)dID);
1300 sciErr = createMatrixOfDouble(_piKey, Rhs + 1, 1, 1, &dID);
1303 printError(&sciErr, 0);
1307 LhsVar(1) = Rhs + 1;
1311 wchar_t **wfilenameUsed = new wchar_t*[1];
1312 wfilenameUsed[0] = getDiaryFilename((int)dID);
1313 sciErr = createMatrixOfWideString(_piKey, Rhs + 2, 1, 1, wfilenameUsed);
1316 printError(&sciErr, 0);
1320 LhsVar(2) = Rhs + 2;
1321 freeArrayOfWideString(wfilenameUsed, 1);
1327 freeArrayOfWideString(wcFilenames, dIDs_size);
1328 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,1);
1333 /*--------------------------------------------------------------------------*/
1334 static int NewByFilenames(char *fname, int* _piKey,
1335 diary_filter filterMode,
1336 diary_prefix_time_format prefixMode,
1337 diary_prefix_time_filter prefixModeFilter,
1340 wchar_t **wcFilenames = NULL;
1344 wcFilenames = getInputArgumentOneFilenames(fname, _piKey, &dIDs_size, &ierr);
1349 double dID = (double)diaryNew(wcFilenames[0], true);
1352 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
1355 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
1356 FREE(utf_str); utf_str = NULL;
1360 Scierror(999,_("%s: error can not create diary.\n"),fname);
1362 freeArrayOfWideString(wcFilenames, dIDs_size);
1366 freeArrayOfWideString(wcFilenames, dIDs_size);
1368 diarySetFilterMode((int)dID, filterMode);
1369 diarySetPrefixMode((int)dID, prefixMode);
1370 diarySetPrefixIoModeFilter((int)dID, prefixModeFilter);
1371 if (suspended) diaryPause((int)dID);
1373 SciErr sciErr = createMatrixOfDouble(_piKey, Rhs + 1, 1, 1, &dID);
1374 LhsVar(1) = Rhs + 1;
1378 wchar_t **wfilenameUsed = new wchar_t*[1];
1379 wfilenameUsed[0] = getDiaryFilename((int)dID);
1380 sciErr = createMatrixOfWideString(_piKey, Rhs + 2, 1, 1, wfilenameUsed);
1383 printError(&sciErr, 0);
1387 LhsVar(2) = Rhs + 2;
1388 FREE(wfilenameUsed[0]);
1389 delete [] wfilenameUsed;
1395 freeArrayOfWideString(wcFilenames, dIDs_size);
1396 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,1);
1401 /*--------------------------------------------------------------------------*/