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 "localization.h"
21 #include "charEncoding.h"
24 #include "freeArrayOfString.h"
26 /*--------------------------------------------------------------------------*/
27 #define DIARY_SECOND_ARG_LIST L"list"
28 #define DIARY_SECOND_ARG_CLOSE L"close"
29 #define DIARY_SECOND_ARG_PAUSE L"pause"
30 #define DIARY_SECOND_ARG_OFF L"off"
31 #define DIARY_SECOND_ARG_RESUME L"resume"
32 #define DIARY_SECOND_ARG_ON L"on"
33 #define DIARY_SECOND_ARG_NEW L"new"
34 #define DIARY_SECOND_ARG_APPEND L"append"
35 #define DIARY_SECOND_ARG_EXISTS L"exists"
36 #define DIARY_THIRD_ARG_FILTER_COMMAND L"filter=command"
37 #define DIARY_THIRD_ARG_FILTER_OUTPUT L"filter=output"
38 #define DIARY_THIRD_ARG_PREFIX_UNIX_EPOCH L"prefix=U"
39 #define DIARY_THIRD_ARG_PREFIX_DEFAULT L"prefix=YYYY-MM-DD hh:mm:ss"
40 #define DIARY_THIRD_ARG_PREFIX_ONLY_COMMANDS L"prefix-only-commands"
41 /*--------------------------------------------------------------------------*/
42 static int sci_diary_no_rhs(char *fname);
43 static int sci_diary_one_rhs(char *fname);
44 static int sci_diary_two_rhs(char *fname);
45 static int sci_diary_three_rhs(char *fname);
46 /*--------------------------------------------------------------------------*/
47 static double *getInputArgumentOneIDs(char *fname,int *sizeReturnedArray, int *ierror);
48 static wchar_t **getInputArgumentOneFilenames(char *fname,int *sizeReturnedArray, int *ierror);
49 static wchar_t *getInputArgumentTwo(char *fname, int *ierror);
50 static wchar_t **getInputArgumentThree(char *fname,int *sizeReturnedArray, int *ierror);
51 static int checkExistByIDs(char *fname, double *IDs, int size_IDs);
52 static int checkExistByFilenames(char *fname, wchar_t **wcFilenames, int size_IDs);
53 static int CloseByFilenames(char *fname);
54 static int CloseByIds(char *fname);
55 static int PauseByFilenames(char *fname);
56 static int PauseByIds(char *fname);
57 static int ResumeByFilenames(char *fname);
58 static int ResumeByIds(char *fname);
59 static int ExistByFilenames(char *fname);
60 static int ExistByIds(char *fname);
61 static int AppendByFilenames(char *fname,
62 diary_filter filterMode,
63 diary_prefix_time_format prefixMode,
64 diary_prefix_time_filter prefixModeFilter,
66 static int NewByFilenames(char *fname,
67 diary_filter filterMode,
68 diary_prefix_time_format prefixMode,
69 diary_prefix_time_filter prefixModeFilter,
71 /*--------------------------------------------------------------------------*/
72 int sci_diary(char *fname,unsigned long fname_len)
80 return sci_diary_no_rhs(fname);
82 return sci_diary_one_rhs(fname);
84 return sci_diary_two_rhs(fname);
86 return sci_diary_three_rhs(fname);
90 /*--------------------------------------------------------------------------*/
91 static int sci_diary_no_rhs(char *fname)
93 // [ids, filenames] = diary()
94 // [ids, filenames] = diary([],"list")
97 double *diary_ids = getDiaryIDsAsDouble(&nb_diary_ids);
99 if ( (diary_ids) && (nb_diary_ids > 0) )
101 sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, nb_diary_ids, 1, diary_ids);
104 printError(&sciErr, 0);
116 if (nb_diary_ids == 0)
118 sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, 0, 0, NULL);
121 printError(&sciErr, 0);
135 Scierror(999,_("%s: Memory allocation error.\n"),fname);
142 int nb_diary_filenames = 0;
143 wchar_t **wcdiary_filenames = getDiaryFilenames(&nb_diary_filenames);
145 if ( (wcdiary_filenames) && (nb_diary_filenames > 0) )
147 sciErr = createMatrixOfWideString(pvApiCtx, Rhs + 2, nb_diary_filenames, 1, wcdiary_filenames);
150 printError(&sciErr, 0);
156 freeArrayOfWideString(wcdiary_filenames, nb_diary_filenames);
157 nb_diary_filenames = 0;
161 if (nb_diary_filenames == 0)
163 sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 2, 0, 0, NULL);
166 printError(&sciErr, 0);
171 if (wcdiary_filenames)
173 freeArrayOfWideString(wcdiary_filenames, nb_diary_filenames);
174 nb_diary_filenames = 0;
179 Scierror(999,_("%s: Memory allocation error.\n"),fname);
189 /*--------------------------------------------------------------------------*/
190 static int sci_diary_one_rhs(char *fname)
194 int *piAddressVarOne = NULL;
196 sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
199 printError(&sciErr, 0);
203 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
206 printError(&sciErr, 0);
210 if (iType == sci_matrix)
214 double * IDs = getInputArgumentOneIDs(fname, &IDs_size, &ierr);
220 if ( (IDs_size == 0) ||
221 ((IDs_size == 1) && ((int)IDs[0] == 0)))
228 Scierror(999,_("%s: Wrong value for input argument #%d: 0 expected.\n"),fname,1);
231 else if (iType == sci_strings)
234 int sizewcFilenames = 0;
235 wchar_t ** wcFilenames = getInputArgumentOneFilenames(fname,&sizewcFilenames,&ierr);
238 if (sizewcFilenames == 1)
240 if (diaryExists(wcFilenames[0]))
242 double dID = (double)diaryNew(wcFilenames[0], false);
245 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
248 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
249 FREE(utf_str); utf_str = NULL;
253 Scierror(999,_("%s: error can not create diary.\n"),fname);
258 sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, 1, 1, &dID);
261 printError(&sciErr, 0);
269 wchar_t **wfilenameUsed = new wchar_t*[1];
270 wfilenameUsed[0] = getDiaryFilename((int)dID);
271 sciErr = createMatrixOfWideString(pvApiCtx, Rhs + 2, 1, 1, wfilenameUsed);
274 printError(&sciErr, 0);
279 FREE(wfilenameUsed[0]);
280 delete [] wfilenameUsed;
283 else // diary(filename) exists (close diary)
285 if (diaryClose(wcFilenames[0]))
289 freeArrayOfWideString(wcFilenames, 1);
290 Scierror(999,_("%s: error can not close diary.\n"),fname);
297 freeArrayOfWideString(wcFilenames,sizewcFilenames);
302 freeArrayOfWideString(wcFilenames,sizewcFilenames);
303 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname, 1);
308 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
312 /*--------------------------------------------------------------------------*/
313 static int sci_diary_two_rhs(char *fname)
316 wchar_t *wcArgumentTwo = getInputArgumentTwo(fname, &ierr);
318 int *piAddressVarOne = NULL;
320 sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
323 printError(&sciErr, 0);
331 if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_LIST) == 0)
334 sciErr = getVarDimension(pvApiCtx, piAddressVarOne,&m1,&n1);
337 printError(&sciErr, 0);
341 if ( (m1 == n1) && (n1 == 0) )
343 // diary() == diary([], "list")
344 return sci_diary_no_rhs(fname);
348 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
351 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_CLOSE) == 0)
354 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
357 printError(&sciErr, 0);
361 if(iType == sci_matrix)
363 return CloseByIds(fname);
365 else if (iType == sci_strings)
367 return CloseByFilenames(fname);
371 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
375 else if ( (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_PAUSE) == 0) ||
376 (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_OFF) == 0) )
379 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
382 printError(&sciErr, 0);
386 if (iType == sci_matrix)
388 return PauseByIds(fname);
390 else if(iType == sci_strings)
392 return PauseByFilenames(fname);
396 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
400 else if ( (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_RESUME) == 0) ||
401 (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_ON) == 0) )
404 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
407 printError(&sciErr, 0);
411 if (iType == sci_matrix)
413 return ResumeByIds(fname);
415 else if (iType == sci_strings)
417 return ResumeByFilenames(fname);
421 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
425 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_NEW) == 0)
428 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
431 printError(&sciErr, 0);
435 if (iType == sci_strings)
437 return NewByFilenames(fname, DIARY_FILTER_INPUT_AND_OUTPUT,
438 PREFIX_TIME_FORMAT_UNIX_EPOCH,
439 PREFIX_FILTER_NONE, false);
443 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
447 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_APPEND) == 0)
450 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
453 printError(&sciErr, 0);
457 if (iType == sci_strings)
459 return AppendByFilenames(fname, DIARY_FILTER_INPUT_AND_OUTPUT,
460 PREFIX_TIME_FORMAT_UNIX_EPOCH,
461 PREFIX_FILTER_NONE, false);
465 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
469 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_EXISTS) == 0)
472 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
475 printError(&sciErr, 0);
479 if (iType == sci_matrix)
481 return ExistByIds(fname);
483 else if (iType == sci_strings)
485 return ExistByFilenames(fname);
489 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
495 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
501 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
506 /*--------------------------------------------------------------------------*/
507 static int sci_diary_three_rhs(char *fname)
510 int size_ArgThree = 0;
511 wchar_t **wcArgumentThree = getInputArgumentThree(fname, &size_ArgThree, &ierr);
516 diary_filter filterMode = DIARY_FILTER_INPUT_AND_OUTPUT;
517 diary_prefix_time_format iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH;
518 diary_prefix_time_filter iPrefixIoModeFilter = PREFIX_FILTER_NONE;
519 bool suspendedDiary = false;
521 for (int i = 0; i < size_ArgThree; i++)
523 if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_COMMAND) == 0)
525 filterMode = DIARY_FILTER_ONLY_INPUT; // input only
527 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_OUTPUT) == 0)
529 filterMode = DIARY_FILTER_ONLY_OUTPUT; // output only
531 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_UNIX_EPOCH) == 0)
533 iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH;
534 if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT;
536 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_DEFAULT) == 0)
538 iPrefixMode = PREFIX_TIME_FORMAT_ISO_8601;
539 if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT;
541 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_ONLY_COMMANDS) == 0)
543 iPrefixIoModeFilter = PREFIX_FILTER_ONLY_INPUT;
545 else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_ON) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_RESUME) == 0) )
547 suspendedDiary = false;
549 else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_OFF) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_PAUSE) == 0) )
551 suspendedDiary = true;
555 freeArrayOfWideString(wcArgumentThree, size_ArgThree);
556 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 3);
560 freeArrayOfWideString(wcArgumentThree, size_ArgThree);
562 wchar_t *wcArgumentTwo = getInputArgumentTwo(fname, &ierr);
566 int *piAddressVarOne = NULL;
567 SciErr sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
570 printError(&sciErr, 0);
574 if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_NEW) == 0)
577 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
580 printError(&sciErr, 0);
584 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
585 if (iType == sci_strings)
587 return NewByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary);
591 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
595 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_APPEND) == 0)
598 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
601 printError(&sciErr, 0);
605 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
606 if (iType == sci_strings)
608 return AppendByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary);
612 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
618 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
619 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
625 Scierror(999,_("%s: Memory allocation error.\n"),fname);
630 Scierror(999,_("%s: Memory allocation error.\n"),fname);
634 /*--------------------------------------------------------------------------*/
635 static double *getInputArgumentOneIDs(char *fname,int *sizeReturnedArray, int *ierror)
638 *sizeReturnedArray = 0;
642 int *piAddressVarOne = NULL;
644 SciErr sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
647 printError(&sciErr, 0);
652 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
655 printError(&sciErr, 0);
659 if (iType == sci_matrix)
661 sciErr = getMatrixOfDouble(pvApiCtx, piAddressVarOne,&m1,&n1,&IDs);
664 printError(&sciErr, 0);
668 if ( (m1 == 1) || (n1 == 1) )
670 *sizeReturnedArray = m1 * n1;
672 else if ( (m1 == 0) || (n1 == 0) )
674 *sizeReturnedArray = 0;
680 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,1);
686 Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname,1);
692 /*--------------------------------------------------------------------------*/
693 static wchar_t **getInputArgumentOneFilenames(char *fname,int *sizeReturnedArray, int *ierror)
695 wchar_t** wcFilenames = NULL;
696 *sizeReturnedArray = 0;
700 int *piAddressVarOne = NULL;
702 SciErr sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
705 printError(&sciErr, 0);
710 sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType);
713 printError(&sciErr, 0);
717 if (iType == sci_strings)
719 int *lenStVarOne = NULL;
721 sciErr = getVarDimension(pvApiCtx, piAddressVarOne,&m1,&n1);
724 printError(&sciErr, 0);
730 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname,1);
733 else if ( (m1 == 1) || (n1 == 1) )
735 lenStVarOne = (int *)MALLOC(sizeof(int) * (m1 * n1));
736 if (lenStVarOne == NULL)
738 Scierror(999,_("%s: Memory allocation error.\n"),fname);
743 sciErr = getMatrixOfWideString(pvApiCtx, piAddressVarOne, &m1, &n1, lenStVarOne, NULL);
746 printError(&sciErr, 0);
750 wcFilenames = (wchar_t **)MALLOC(sizeof(wchar_t *) * (m1 * n1));
751 if (wcFilenames == NULL)
753 Scierror(999,_("%s: Memory allocation error.\n"),fname);
758 for (int i = 0; i < m1 * n1;i++)
760 wcFilenames[i] = (wchar_t*)MALLOC(sizeof(wchar_t)* (lenStVarOne[i] + 1));
761 if (wcFilenames[i] == NULL)
763 Scierror(999,_("%s: Memory allocation error.\n"),fname);
768 sciErr = getMatrixOfWideString(pvApiCtx, piAddressVarOne, &m1, &n1, lenStVarOne, wcFilenames);
771 printError(&sciErr, 0);
775 *sizeReturnedArray = m1 * n1;
781 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,1);
787 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,1);
792 /*--------------------------------------------------------------------------*/
793 static wchar_t *getInputArgumentTwo(char *fname, int *ierror)
795 wchar_t *wcInputArgumentTwo = NULL;
799 int *piAddressVarTwo = NULL;
801 SciErr sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddressVarTwo);
804 printError(&sciErr, 0);
809 sciErr = getVarType(pvApiCtx, piAddressVarTwo, &iType);
812 printError(&sciErr, 0);
816 if (iType == sci_strings)
820 sciErr = getVarDimension(pvApiCtx, piAddressVarTwo,&m2,&n2);
823 printError(&sciErr, 0);
827 if ( (m2 != n2) && (n2 != 1) )
829 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,2);
834 // get length lenStVarTwo
835 sciErr = getMatrixOfWideString(pvApiCtx, piAddressVarTwo,&m2,&n2,&lenStVarTwo, NULL);
838 printError(&sciErr, 0);
842 wcInputArgumentTwo = (wchar_t*)MALLOC(sizeof(wchar_t) * (lenStVarTwo + 1));
844 if (wcInputArgumentTwo == NULL)
846 Scierror(999,_("%s: Memory allocation error.\n"),fname);
850 sciErr = getMatrixOfWideString(pvApiCtx, piAddressVarTwo,&m2,&n2,&lenStVarTwo,&wcInputArgumentTwo);
853 printError(&sciErr, 0);
860 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,2);
863 return wcInputArgumentTwo;
865 /*--------------------------------------------------------------------------*/
866 static wchar_t** getInputArgumentThree(char *fname,int *sizeReturnedArray, int *ierror)
868 wchar_t** wcInputArgumentThree = NULL;
869 *sizeReturnedArray = 0;
873 int *piAddressVarThree = NULL;
875 SciErr sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddressVarThree);
878 printError(&sciErr, 0);
883 sciErr = getVarType(pvApiCtx, piAddressVarThree, &iType);
886 printError(&sciErr, 0);
890 if (iType == sci_strings)
892 int *lenStVarThree = NULL;
894 sciErr = getVarDimension(pvApiCtx, piAddressVarThree,&m3,&n3);
897 printError(&sciErr, 0);
903 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname,3);
906 else if ( (m3 == 1) || (n3 == 1) )
908 lenStVarThree = (int *)MALLOC(sizeof(int) * (m3 * n3));
909 if (lenStVarThree == NULL)
911 Scierror(999,_("%s: Memory allocation error.\n"),fname);
916 sciErr = getMatrixOfWideString(pvApiCtx, piAddressVarThree, &m3, &n3, lenStVarThree, NULL);
919 printError(&sciErr, 0);
923 wcInputArgumentThree = (wchar_t **)MALLOC(sizeof(wchar_t *) * (m3 * n3));
924 if (wcInputArgumentThree == NULL)
926 Scierror(999,_("%s: Memory allocation error.\n"),fname);
931 for (int i = 0; i < m3 * n3; i++)
933 wcInputArgumentThree[i] = (wchar_t*)MALLOC(sizeof(wchar_t) * (lenStVarThree[i] + 1));
936 sciErr = getMatrixOfWideString(pvApiCtx, piAddressVarThree, &m3, &n3, lenStVarThree, wcInputArgumentThree);
939 printError(&sciErr, 0);
943 *sizeReturnedArray = m3 * n3;
949 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,3);
955 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,3);
958 return wcInputArgumentThree;
960 /*--------------------------------------------------------------------------*/
961 static int checkExistByIDs(char *fname, double *IDs, int size_IDs)
965 for (int i = 0; i < size_IDs; i++)
967 if (diaryExists((int)IDs[i]))
969 Scierror(999,_("%s: Wrong value for input argument #%d: diary ID %d not exists.\n"),fname,1, (int)IDs[i]);
977 /*--------------------------------------------------------------------------*/
978 static int checkExistByFilenames(char *fname, wchar_t **wcFilenames, int size_IDs)
982 for (int i = 0; i < size_IDs; i++)
984 if (diaryExists(wcFilenames[i]))
986 Scierror(999,_("%s: Wrong value for input argument #%d: diary filename not exists.\n"),fname,1);
994 /*--------------------------------------------------------------------------*/
995 static int CloseByFilenames(char *fname)
997 wchar_t **wcFilenames = NULL;
1001 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1004 ierr = checkExistByFilenames(fname, wcFilenames, dIDs_size);
1007 freeArrayOfWideString(wcFilenames, dIDs_size);
1011 for (int i = 0; i < dIDs_size; i++)
1013 if (diaryClose(wcFilenames[i]))
1015 freeArrayOfWideString(wcFilenames, dIDs_size);
1016 Scierror(999,_("%s: Wrong value for input argument #%d: error can not close diary.\n"),fname);
1021 freeArrayOfWideString(wcFilenames, dIDs_size);
1025 /*--------------------------------------------------------------------------*/
1026 static int CloseByIds(char *fname)
1028 double *dIDs = NULL;
1032 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
1036 // diary([], 'close')
1041 else if (ierr) return 0;
1043 ierr = checkExistByIDs(fname, dIDs, dIDs_size);
1046 for (int i = 0; i < dIDs_size; i++)
1048 if (diaryClose((int)dIDs[i]))
1050 Scierror(999,_("%s: Wrong value for input argument #%d: error can not close diary %d.\n"),fname, (int)dIDs[i]);
1057 /*--------------------------------------------------------------------------*/
1058 static int PauseByFilenames(char *fname)
1060 wchar_t **wcFilenames = NULL;
1064 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1067 ierr = checkExistByFilenames(fname, wcFilenames, dIDs_size);
1070 freeArrayOfWideString(wcFilenames, dIDs_size);
1074 for (int i = 0; i < dIDs_size; i++)
1076 if (diaryPause(wcFilenames[i]))
1078 freeArrayOfWideString(wcFilenames, dIDs_size);
1079 Scierror(999,_("%s: Wrong value for input argument #%d: error can not pause diary.\n"),fname);
1084 freeArrayOfWideString(wcFilenames, dIDs_size);
1089 /*--------------------------------------------------------------------------*/
1090 static int PauseByIds(char *fname)
1092 double *dIDs = NULL;
1096 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
1099 ierr = checkExistByIDs(fname, dIDs, dIDs_size);
1102 for (int i = 0; i < dIDs_size; i++)
1104 if (diaryPause((int)dIDs[i]))
1106 Scierror(999,_("%s: Wrong value for input argument #%d: error can not pause diary %d.\n"),fname, (int)dIDs[i]);
1115 /*--------------------------------------------------------------------------*/
1116 static int ResumeByFilenames(char *fname)
1118 wchar_t **wcFilenames = NULL;
1121 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1124 ierr = checkExistByFilenames(fname, wcFilenames, dIDs_size);
1127 freeArrayOfWideString(wcFilenames, dIDs_size);
1131 for (int i = 0; i < dIDs_size; i++)
1133 if (diaryResume(wcFilenames[i]))
1135 freeArrayOfWideString(wcFilenames, dIDs_size);
1136 Scierror(999,_("%s: Wrong value for input argument #%d: error can not resume diary.\n"),fname);
1141 freeArrayOfWideString(wcFilenames, dIDs_size);
1147 /*--------------------------------------------------------------------------*/
1148 static int ResumeByIds(char *fname)
1150 double *dIDs = NULL;
1154 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
1157 ierr = checkExistByIDs(fname, dIDs, dIDs_size);
1160 for (int i = 0; i < dIDs_size; i++)
1162 if (diaryResume((int)dIDs[i]))
1164 Scierror(999,_("%s: Wrong value for input argument #%d: error can not resume diary %d.\n"),fname, (int)dIDs[i]);
1173 /*--------------------------------------------------------------------------*/
1174 static int ExistByFilenames(char *fname)
1176 wchar_t **wcFilenames = NULL;
1179 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1182 int *resultExist = (int*)MALLOC(sizeof(int)*dIDs_size);
1183 if (resultExist == NULL)
1185 freeArrayOfWideString(wcFilenames,dIDs_size);
1186 Scierror(999,_("%s: Memory allocation error.\n"),fname);
1190 for(int i=0; i < dIDs_size; i++)
1192 int bExists = diaryExists(wcFilenames[i]);
1195 resultExist[i] = TRUE;
1199 resultExist[i] = FALSE;
1202 freeArrayOfWideString(wcFilenames,dIDs_size);
1204 SciErr sciErr = createMatrixOfBoolean(pvApiCtx, Rhs + 1, 1, dIDs_size, resultExist);
1207 printError(&sciErr, 0);
1211 FREE(resultExist); resultExist = NULL;
1212 LhsVar(1) = Rhs + 1;
1216 /*--------------------------------------------------------------------------*/
1217 static int ExistByIds(char *fname)
1219 double *dIDs = NULL;
1223 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
1226 int *resultExist = (int*)MALLOC(sizeof(int)*dIDs_size);
1227 if (resultExist == NULL)
1229 Scierror(999,_("%s: Memory allocation error.\n"),fname);
1233 for(int i=0; i < dIDs_size; i++)
1235 int bExists = diaryExists((int)dIDs[i]);
1238 resultExist[i] = TRUE;
1242 resultExist[i] = FALSE;
1246 SciErr sciErr = createMatrixOfBoolean(pvApiCtx, Rhs + 1, 1, dIDs_size, resultExist);
1249 printError(&sciErr, 0);
1253 FREE(resultExist); resultExist = NULL;
1254 LhsVar(1) = Rhs + 1;
1258 /*--------------------------------------------------------------------------*/
1259 static int AppendByFilenames(char *fname,
1260 diary_filter filterMode,
1261 diary_prefix_time_format prefixMode,
1262 diary_prefix_time_filter prefixModeFilter,
1266 wchar_t **wcFilenames = NULL;
1270 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1275 double dID = (double)diaryAppend(wcFilenames[0]);
1278 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
1281 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
1282 FREE(utf_str); utf_str = NULL;
1286 Scierror(999,_("%s: error can not create diary.\n"),fname);
1288 freeArrayOfWideString(wcFilenames, dIDs_size);
1292 freeArrayOfWideString(wcFilenames, dIDs_size);
1294 diarySetFilterMode((int)dID, filterMode);
1295 diarySetPrefixMode((int)dID, prefixMode);
1296 diarySetPrefixIoModeFilter((int)dID, prefixModeFilter);
1297 if (suspended) diaryPause((int)dID);
1299 sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, 1, 1, &dID);
1302 printError(&sciErr, 0);
1306 LhsVar(1) = Rhs + 1;
1310 wchar_t **wfilenameUsed = new wchar_t*[1];
1311 wfilenameUsed[0] = getDiaryFilename((int)dID);
1312 sciErr = createMatrixOfWideString(pvApiCtx, Rhs + 2, 1, 1, wfilenameUsed);
1315 printError(&sciErr, 0);
1319 LhsVar(2) = Rhs + 2;
1320 freeArrayOfWideString(wfilenameUsed, 1);
1326 freeArrayOfWideString(wcFilenames, dIDs_size);
1327 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,1);
1332 /*--------------------------------------------------------------------------*/
1333 static int NewByFilenames(char *fname,
1334 diary_filter filterMode,
1335 diary_prefix_time_format prefixMode,
1336 diary_prefix_time_filter prefixModeFilter,
1339 wchar_t **wcFilenames = NULL;
1343 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1348 double dID = (double)diaryNew(wcFilenames[0], true);
1351 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
1354 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
1355 FREE(utf_str); utf_str = NULL;
1359 Scierror(999,_("%s: error can not create diary.\n"),fname);
1361 freeArrayOfWideString(wcFilenames, dIDs_size);
1365 freeArrayOfWideString(wcFilenames, dIDs_size);
1367 diarySetFilterMode((int)dID, filterMode);
1368 diarySetPrefixMode((int)dID, prefixMode);
1369 diarySetPrefixIoModeFilter((int)dID, prefixModeFilter);
1370 if (suspended) diaryPause((int)dID);
1372 SciErr sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, 1, 1, &dID);
1373 LhsVar(1) = Rhs + 1;
1377 wchar_t **wfilenameUsed = new wchar_t*[1];
1378 wfilenameUsed[0] = getDiaryFilename((int)dID);
1379 sciErr = createMatrixOfWideString(pvApiCtx, Rhs + 2, 1, 1, wfilenameUsed);
1382 printError(&sciErr, 0);
1386 LhsVar(2) = Rhs + 2;
1387 FREE(wfilenameUsed[0]);
1388 delete [] wfilenameUsed;
1394 freeArrayOfWideString(wcFilenames, dIDs_size);
1395 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,1);
1400 /*--------------------------------------------------------------------------*/