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_common.h"
20 #include "api_string.h"
21 #include "api_double.h"
22 #include "api_boolean.h"
23 #include "localization.h"
24 #include "charEncoding.h"
28 /*--------------------------------------------------------------------------*/
29 #define DIARY_SECOND_ARG_LIST L"list"
30 #define DIARY_SECOND_ARG_CLOSE L"close"
31 #define DIARY_SECOND_ARG_PAUSE L"pause"
32 #define DIARY_SECOND_ARG_OFF L"off"
33 #define DIARY_SECOND_ARG_RESUME L"resume"
34 #define DIARY_SECOND_ARG_ON L"on"
35 #define DIARY_SECOND_ARG_NEW L"new"
36 #define DIARY_SECOND_ARG_APPEND L"append"
37 #define DIARY_SECOND_ARG_EXISTS L"exists"
38 #define DIARY_THIRD_ARG_FILTER_COMMAND L"filter=command"
39 #define DIARY_THIRD_ARG_FILTER_OUTPUT L"filter=output"
40 #define DIARY_THIRD_ARG_PREFIX_UNIX_EPOCH L"prefix=U"
41 #define DIARY_THIRD_ARG_PREFIX_DEFAULT L"prefix=YYYY-MM-DD hh:mm:ss"
42 #define DIARY_THIRD_ARG_PREFIX_ONLY_COMMANDS L"prefix-only-commands"
43 /*--------------------------------------------------------------------------*/
44 static int sci_diary_no_rhs(char *fname);
45 static int sci_diary_one_rhs(char *fname);
46 static int sci_diary_two_rhs(char *fname);
47 static int sci_diary_three_rhs(char *fname);
48 /*--------------------------------------------------------------------------*/
49 static double *getInputArgumentOneIDs(char *fname,int *sizeReturnedArray, int *ierror);
50 static wchar_t **getInputArgumentOneFilenames(char *fname,int *sizeReturnedArray, int *ierror);
51 static wchar_t *getInputArgumentTwo(char *fname, int *ierror);
52 static wchar_t **getInputArgumentThree(char *fname,int *sizeReturnedArray, int *ierror);
53 static int checkExistByIDs(char *fname, double *IDs, int size_IDs);
54 static int checkExistByFilenames(char *fname, wchar_t **wcFilenames, int size_IDs);
55 static int freeInput( wchar_t **wcInput, int size_IDs);
56 static int CloseByFilenames(char *fname);
57 static int CloseByIds(char *fname);
58 static int PauseByFilenames(char *fname);
59 static int PauseByIds(char *fname);
60 static int ResumeByFilenames(char *fname);
61 static int ResumeByIds(char *fname);
62 static int ExistByFilenames(char *fname);
63 static int ExistByIds(char *fname);
64 static int AppendByFilenames(char *fname,
65 diary_filter filterMode,
66 diary_prefix_time_format prefixMode,
67 diary_prefix_time_filter prefixModeFilter,
69 static int NewByFilenames(char *fname,
70 diary_filter filterMode,
71 diary_prefix_time_format prefixMode,
72 diary_prefix_time_filter prefixModeFilter,
74 /*--------------------------------------------------------------------------*/
75 int sci_diary(char *fname,unsigned long fname_len)
83 return sci_diary_no_rhs(fname);
85 return sci_diary_one_rhs(fname);
87 return sci_diary_two_rhs(fname);
89 return sci_diary_three_rhs(fname);
93 /*--------------------------------------------------------------------------*/
94 static int sci_diary_no_rhs(char *fname)
96 // [ids, filenames] = diary()
97 // [ids, filenames] = diary([],"list")
100 double *diary_ids = getDiaryIDsAsDouble(&nb_diary_ids);
102 if ( (diary_ids) && (nb_diary_ids > 0) )
104 createMatrixOfDouble(Rhs + 1, nb_diary_ids, 1, diary_ids);
113 if (nb_diary_ids == 0)
115 createMatrixOfDouble(Rhs + 1, 0, 0, NULL);
127 Scierror(999,_("%s : Memory allocation error.\n"),fname);
134 int nb_diary_filenames = 0;
135 wchar_t **wcdiary_filenames = getDiaryFilenames(&nb_diary_filenames);
137 if ( (wcdiary_filenames) && (nb_diary_filenames > 0) )
139 createMatrixOfWideString(Rhs + 2, nb_diary_filenames, 1, wcdiary_filenames);
142 delete [] wcdiary_filenames;
143 wcdiary_filenames = NULL;
144 nb_diary_filenames = 0;
148 if (nb_diary_filenames == 0)
150 createMatrixOfDouble(Rhs + 2, 0, 0, NULL);
152 if (wcdiary_filenames)
154 delete [] wcdiary_filenames;
155 wcdiary_filenames = NULL;
156 nb_diary_filenames = 0;
161 Scierror(999,_("%s : Memory allocation error.\n"),fname);
171 /*--------------------------------------------------------------------------*/
172 static int sci_diary_one_rhs(char *fname)
174 int *piAddressVarOne = NULL;
176 getVarAddressFromPosition(1, &piAddressVarOne);
178 if (getVarType(piAddressVarOne) == sci_matrix)
182 double * IDs = getInputArgumentOneIDs(fname, &IDs_size, &ierr);
188 if ( (IDs_size == 0) ||
189 ((IDs_size == 1) && ((int)IDs[0] == 0)))
196 Scierror(999,_("%s: Wrong value for input argument #%d: 0 expected.\n"),fname,1);
199 else if (getVarType(piAddressVarOne) == sci_strings)
202 int sizewcFilenames = 0;
203 wchar_t ** wcFilenames = getInputArgumentOneFilenames(fname,&sizewcFilenames,&ierr);
206 if (sizewcFilenames == 1)
208 if (diaryExists(wcFilenames[0]))
210 double dID = (double)diaryNew(wcFilenames[0]);
213 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
216 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
217 FREE(utf_str); utf_str = NULL;
221 Scierror(999,_("%s: error can not create diary.\n"),fname);
226 createMatrixOfDouble(Rhs + 1, 1, 1, &dID);
231 wchar_t **wfilenameUsed = new wchar_t*[1];
232 wfilenameUsed[0] = getDiaryFilename((int)dID);
233 createMatrixOfWideString(Rhs + 2, 1, 1, wfilenameUsed);
235 if (wfilenameUsed) {delete [] wfilenameUsed; wfilenameUsed = NULL;}
238 else // diary(filename) exists (close diary)
240 if (diaryClose(wcFilenames[0]))
244 if (wcFilenames[0]) {FREE(wcFilenames[0]); wcFilenames[0] = NULL;}
245 FREE(wcFilenames); wcFilenames = NULL;
246 Scierror(999,_("%s: error can not close diary.\n"),fname);
254 if (wcFilenames[0]) {FREE(wcFilenames[0]); wcFilenames[0] = NULL;}
255 FREE(wcFilenames); wcFilenames = NULL;
262 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname, 1);
267 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
271 /*--------------------------------------------------------------------------*/
272 static int sci_diary_two_rhs(char *fname)
275 wchar_t *wcArgumentTwo = getInputArgumentTwo(fname, &ierr);
277 int *piAddressVarOne = NULL;
278 getVarAddressFromPosition(1, &piAddressVarOne);
284 if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_LIST) == 0)
287 getVarDimension(piAddressVarOne,&m1,&n1);
288 if ( (m1 == n1) && (n1 == 0) )
290 // diary() == diary([], "list")
291 return sci_diary_no_rhs(fname);
295 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
298 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_CLOSE) == 0)
300 if (getVarType(piAddressVarOne) == sci_matrix)
302 return CloseByIds(fname);
304 else if (getVarType(piAddressVarOne) == sci_strings)
306 return CloseByFilenames(fname);
310 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
314 else if ( (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_PAUSE) == 0) ||
315 (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_OFF) == 0) )
317 if (getVarType(piAddressVarOne) == sci_matrix)
319 return PauseByIds(fname);
321 else if (getVarType(piAddressVarOne) == sci_strings)
323 return PauseByFilenames(fname);
327 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
331 else if ( (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_RESUME) == 0) ||
332 (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_ON) == 0) )
334 if (getVarType(piAddressVarOne) == sci_matrix)
336 return ResumeByIds(fname);
338 else if (getVarType(piAddressVarOne) == sci_strings)
340 return ResumeByFilenames(fname);
344 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
348 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_NEW) == 0)
350 if (getVarType(piAddressVarOne) == sci_strings)
352 return NewByFilenames(fname, DIARY_FILTER_INPUT_AND_OUTPUT,
353 PREFIX_TIME_FORMAT_UNIX_EPOCH,
354 PREFIX_FILTER_NONE, false);
358 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
362 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_APPEND) == 0)
364 if (getVarType(piAddressVarOne) == sci_strings)
366 return AppendByFilenames(fname, DIARY_FILTER_INPUT_AND_OUTPUT,
367 PREFIX_TIME_FORMAT_UNIX_EPOCH,
368 PREFIX_FILTER_NONE, false);
373 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
377 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_EXISTS) == 0)
379 if (getVarType(piAddressVarOne) == sci_matrix)
381 return ExistByIds(fname);
383 else if (getVarType(piAddressVarOne) == sci_strings)
385 return ExistByFilenames(fname);
389 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
395 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
401 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
406 /*--------------------------------------------------------------------------*/
407 static int sci_diary_three_rhs(char *fname)
410 int size_ArgThree = 0;
411 wchar_t **wcArgumentThree = getInputArgumentThree(fname, &size_ArgThree, &ierr);
416 diary_filter filterMode = DIARY_FILTER_INPUT_AND_OUTPUT;
417 diary_prefix_time_format iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH;
418 diary_prefix_time_filter iPrefixIoModeFilter = PREFIX_FILTER_NONE;
419 bool suspendedDiary = false;
421 for (int i = 0; i < size_ArgThree; i++)
423 if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_COMMAND) == 0)
425 filterMode = DIARY_FILTER_ONLY_INPUT; // input only
427 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_OUTPUT) == 0)
429 filterMode = DIARY_FILTER_ONLY_OUTPUT; // output only
431 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_UNIX_EPOCH) == 0)
433 iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH;
434 if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT;
436 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_DEFAULT) == 0)
438 iPrefixMode = PREFIX_TIME_FORMAT_ISO_8601;
439 if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT;
441 else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_ONLY_COMMANDS) == 0)
443 iPrefixIoModeFilter = PREFIX_FILTER_ONLY_INPUT;
445 else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_ON) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_RESUME) == 0) )
447 suspendedDiary = false;
449 else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_OFF) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_PAUSE) == 0) )
451 suspendedDiary = true;
455 freeInput(wcArgumentThree, size_ArgThree);
456 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 3);
460 freeInput(wcArgumentThree, size_ArgThree);
462 wchar_t *wcArgumentTwo = getInputArgumentTwo(fname, &ierr);
466 int *piAddressVarOne = NULL;
467 getVarAddressFromPosition(1, &piAddressVarOne);
469 if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_NEW) == 0)
471 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
472 if (getVarType(piAddressVarOne) == sci_strings)
474 return NewByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary);
478 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
482 else if (wcscmp(wcArgumentTwo, DIARY_SECOND_ARG_APPEND) == 0)
484 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
485 if (getVarType(piAddressVarOne) == sci_strings)
487 return AppendByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary);
491 Scierror(999,_("%s: Wrong type for input argument #%d.\n"),fname, 1);
497 FREE(wcArgumentTwo); wcArgumentTwo = NULL;
498 Scierror(999,_("%s: Wrong value for input argument #%d.\n"),fname, 2);
504 Scierror(999,_("%s : Memory allocation error.\n"),fname);
509 Scierror(999,_("%s : Memory allocation error.\n"),fname);
513 /*--------------------------------------------------------------------------*/
514 static double *getInputArgumentOneIDs(char *fname,int *sizeReturnedArray, int *ierror)
517 *sizeReturnedArray = 0;
521 int *piAddressVarOne = NULL;
523 getVarAddressFromPosition(1, &piAddressVarOne);
525 if (getVarType(piAddressVarOne) == sci_matrix)
527 getMatrixOfDouble(piAddressVarOne,&m1,&n1,&IDs);
528 if ( (m1 == 1) || (n1 == 1) )
530 *sizeReturnedArray = m1 * n1;
534 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,1);
540 Scierror(999,_("%s: Wrong type for input argument #%d: A scalar expected.\n"),fname,1);
546 /*--------------------------------------------------------------------------*/
547 static wchar_t **getInputArgumentOneFilenames(char *fname,int *sizeReturnedArray, int *ierror)
549 wchar_t** wcFilenames = NULL;
550 *sizeReturnedArray = 0;
554 int *piAddressVarOne = NULL;
556 getVarAddressFromPosition(1, &piAddressVarOne);
558 if (getVarType(piAddressVarOne) == sci_strings)
560 int *lenStVarOne = NULL;
562 getVarDimension(piAddressVarOne,&m1,&n1);
566 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname,1);
569 else if ( (m1 == 1) || (n1 == 1) )
571 lenStVarOne = (int *)MALLOC(sizeof(int) * (m1 * n1));
572 if (lenStVarOne == NULL)
574 Scierror(999,_("%s : Memory allocation error.\n"),fname);
579 getMatrixOfWideString(piAddressVarOne, &m1, &n1, lenStVarOne, wcFilenames);
580 wcFilenames = (wchar_t **)MALLOC(sizeof(wchar_t *) * (m1 * n1));
581 if (wcFilenames == NULL)
583 Scierror(999,_("%s : Memory allocation error.\n"),fname);
588 getMatrixOfWideString(piAddressVarOne, &m1, &n1, lenStVarOne, wcFilenames);
589 *sizeReturnedArray = m1 * n1;
595 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,1);
601 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,1);
606 /*--------------------------------------------------------------------------*/
607 static wchar_t *getInputArgumentTwo(char *fname, int *ierror)
609 wchar_t *wcInputArgumentTwo = NULL;
613 int *piAddressVarTwo = NULL;
615 getVarAddressFromPosition(2, &piAddressVarTwo);
617 if (getVarType(piAddressVarTwo) == sci_strings)
621 getVarDimension(piAddressVarTwo,&m2,&n2);
622 if ( (m2 != n2) && (n2 != 1) )
624 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,2);
629 getMatrixOfWideString(piAddressVarTwo,&m2,&n2,&lenStVarTwo,&wcInputArgumentTwo);
630 if (wcInputArgumentTwo == NULL)
632 Scierror(999,_("%s : Memory allocation error.\n"),fname);
639 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,2);
642 return wcInputArgumentTwo;
644 /*--------------------------------------------------------------------------*/
645 static wchar_t** getInputArgumentThree(char *fname,int *sizeReturnedArray, int *ierror)
647 wchar_t** wcInputArgumentThree = NULL;
648 *sizeReturnedArray = 0;
652 int *piAddressVarThree = NULL;
654 getVarAddressFromPosition(3, &piAddressVarThree);
656 if (getVarType(piAddressVarThree) == sci_strings)
658 int *lenStVarThree = NULL;
660 getVarDimension(piAddressVarThree,&m3,&n3);
664 Scierror(999,_("%s: Wrong size for input argument #%d.\n"),fname,3);
667 else if ( (m3 == 1) || (n3 == 1) )
669 lenStVarThree = (int *)MALLOC(sizeof(int) * (m3 * n3));
670 if (lenStVarThree == NULL)
672 Scierror(999,_("%s : Memory allocation error.\n"),fname);
677 getMatrixOfWideString(piAddressVarThree, &m3, &n3, lenStVarThree, wcInputArgumentThree);
678 wcInputArgumentThree = (wchar_t **)MALLOC(sizeof(wchar_t *) * (m3 * n3));
679 if (wcInputArgumentThree == NULL)
681 Scierror(999,_("%s : Memory allocation error.\n"),fname);
686 getMatrixOfWideString(piAddressVarThree, &m3, &n3, lenStVarThree, wcInputArgumentThree);
687 *sizeReturnedArray = m3 * n3;
693 Scierror(999,_("%s: Wrong size for input argument #%d: A vector expected.\n"),fname,3);
699 Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,3);
702 return wcInputArgumentThree;
704 /*--------------------------------------------------------------------------*/
705 static int checkExistByIDs(char *fname, double *IDs, int size_IDs)
709 for (int i = 0; i < size_IDs; i++)
711 if (diaryExists((int)IDs[i]))
713 Scierror(999,_("%s: Wrong value for input argument #%d: diary ID %d not exists.\n"),fname,1, (int)IDs[i]);
721 /*--------------------------------------------------------------------------*/
722 static int checkExistByFilenames(char *fname, wchar_t **wcFilenames, int size_IDs)
726 for (int i = 0; i < size_IDs; i++)
728 if (diaryExists(wcFilenames[i]))
730 Scierror(999,_("%s: Wrong value for input argument #%d: diary filename not exists.\n"),fname,1);
738 /*--------------------------------------------------------------------------*/
739 static int freeInput(wchar_t **wcInput, int size_IDs)
743 for(int i = 0; i < size_IDs; i++)
754 /*--------------------------------------------------------------------------*/
755 static int CloseByFilenames(char *fname)
757 wchar_t **wcFilenames = NULL;
761 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
764 ierr = checkExistByFilenames(fname, wcFilenames, dIDs_size);
767 freeInput(wcFilenames, dIDs_size);
771 for (int i = 0; i < dIDs_size; i++)
773 if (diaryClose(wcFilenames[i]))
775 freeInput(wcFilenames, dIDs_size);
776 Scierror(999,_("%s: Wrong value for input argument #%d: error can not close diary.\n"),fname);
781 freeInput(wcFilenames, dIDs_size);
785 /*--------------------------------------------------------------------------*/
786 static int CloseByIds(char *fname)
792 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
795 ierr = checkExistByIDs(fname, dIDs, dIDs_size);
798 for (int i = 0; i < dIDs_size; i++)
800 if (diaryClose((int)dIDs[i]))
802 Scierror(999,_("%s: Wrong value for input argument #%d: error can not close diary %d.\n"),fname, (int)dIDs[i]);
809 /*--------------------------------------------------------------------------*/
810 static int PauseByFilenames(char *fname)
812 wchar_t **wcFilenames = NULL;
816 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
819 ierr = checkExistByFilenames(fname, wcFilenames, dIDs_size);
822 freeInput(wcFilenames, dIDs_size);
826 for (int i = 0; i < dIDs_size; i++)
828 if (diaryPause(wcFilenames[i]))
830 freeInput(wcFilenames, dIDs_size);
831 Scierror(999,_("%s: Wrong value for input argument #%d: error can not pause diary.\n"),fname);
836 freeInput(wcFilenames, dIDs_size);
841 /*--------------------------------------------------------------------------*/
842 static int PauseByIds(char *fname)
848 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
851 ierr = checkExistByIDs(fname, dIDs, dIDs_size);
854 for (int i = 0; i < dIDs_size; i++)
856 if (diaryPause((int)dIDs[i]))
858 Scierror(999,_("%s: Wrong value for input argument #%d: error can not pause diary %d.\n"),fname, (int)dIDs[i]);
867 /*--------------------------------------------------------------------------*/
868 static int ResumeByFilenames(char *fname)
870 wchar_t **wcFilenames = NULL;
873 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
876 ierr = checkExistByFilenames(fname, wcFilenames, dIDs_size);
879 freeInput(wcFilenames, dIDs_size);
883 for (int i = 0; i < dIDs_size; i++)
885 if (diaryResume(wcFilenames[i]))
887 freeInput(wcFilenames, dIDs_size);
888 Scierror(999,_("%s: Wrong value for input argument #%d: error can not resume diary.\n"),fname);
893 freeInput(wcFilenames, dIDs_size);
899 /*--------------------------------------------------------------------------*/
900 static int ResumeByIds(char *fname)
906 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
909 ierr = checkExistByIDs(fname, dIDs, dIDs_size);
912 for (int i = 0; i < dIDs_size; i++)
914 if (diaryResume((int)dIDs[i]))
916 Scierror(999,_("%s: Wrong value for input argument #%d: error can not resume diary %d.\n"),fname, (int)dIDs[i]);
925 /*--------------------------------------------------------------------------*/
926 static int ExistByFilenames(char *fname)
928 wchar_t **wcFilenames = NULL;
931 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
934 int *resultExist = (int*)MALLOC(sizeof(int)*dIDs_size);
935 if (resultExist == NULL)
937 freeInput(wcFilenames,dIDs_size);
938 Scierror(999,_("%s : Memory allocation error.\n"),fname);
942 for(int i=0; i < dIDs_size; i++)
944 int bExists = diaryExists(wcFilenames[i]);
947 resultExist[i] = TRUE;
951 resultExist[i] = FALSE;
954 freeInput(wcFilenames,dIDs_size);
956 createMatrixOfBoolean(Rhs + 1, 1, dIDs_size, resultExist);
957 FREE(resultExist); resultExist = NULL;
962 /*--------------------------------------------------------------------------*/
963 static int ExistByIds(char *fname)
969 dIDs = getInputArgumentOneIDs(fname, &dIDs_size, &ierr);
972 int *resultExist = (int*)MALLOC(sizeof(int)*dIDs_size);
973 if (resultExist == NULL)
975 Scierror(999,_("%s : Memory allocation error.\n"),fname);
979 for(int i=0; i < dIDs_size; i++)
981 int bExists = diaryExists((int)dIDs[i]);
984 resultExist[i] = TRUE;
988 resultExist[i] = FALSE;
992 createMatrixOfBoolean(Rhs + 1, 1, dIDs_size, resultExist);
993 FREE(resultExist); resultExist = NULL;
998 /*--------------------------------------------------------------------------*/
999 static int AppendByFilenames(char *fname,
1000 diary_filter filterMode,
1001 diary_prefix_time_format prefixMode,
1002 diary_prefix_time_filter prefixModeFilter,
1005 wchar_t **wcFilenames = NULL;
1009 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1014 double dID = (double)diaryAppend(wcFilenames[0]);
1017 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
1020 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
1021 FREE(utf_str); utf_str = NULL;
1025 Scierror(999,_("%s: error can not create diary.\n"),fname);
1027 freeInput(wcFilenames, dIDs_size);
1031 freeInput(wcFilenames, dIDs_size);
1033 diarySetFilterMode((int)dID, filterMode);
1034 diarySetPrefixMode((int)dID, prefixMode);
1035 diarySetPrefixIoModeFilter((int)dID, prefixModeFilter);
1036 if (suspended) diaryPause((int)dID);
1038 createMatrixOfDouble(Rhs + 1, 1, 1, &dID);
1039 LhsVar(1) = Rhs + 1;
1043 wchar_t **wfilenameUsed = new wchar_t*[1];
1044 wfilenameUsed[0] = getDiaryFilename((int)dID);
1045 createMatrixOfWideString(Rhs + 2, 1, 1, wfilenameUsed);
1046 LhsVar(2) = Rhs + 2;
1047 if (wfilenameUsed) {delete [] wfilenameUsed; wfilenameUsed = NULL;}
1053 freeInput(wcFilenames, dIDs_size);
1054 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,1);
1059 /*--------------------------------------------------------------------------*/
1060 static int NewByFilenames(char *fname,
1061 diary_filter filterMode,
1062 diary_prefix_time_format prefixMode,
1063 diary_prefix_time_filter prefixModeFilter,
1066 wchar_t **wcFilenames = NULL;
1070 wcFilenames = getInputArgumentOneFilenames(fname, &dIDs_size, &ierr);
1075 double dID = (double)diaryNew(wcFilenames[0]);
1078 char *utf_str = wide_string_to_UTF8(wcFilenames[0]);
1081 Scierror(999,_("%s: error can not create diary: %s.\n"), fname, utf_str);
1082 FREE(utf_str); utf_str = NULL;
1086 Scierror(999,_("%s: error can not create diary.\n"),fname);
1088 freeInput(wcFilenames, dIDs_size);
1092 freeInput(wcFilenames, dIDs_size);
1094 diarySetFilterMode((int)dID, filterMode);
1095 diarySetPrefixMode((int)dID, prefixMode);
1096 diarySetPrefixIoModeFilter((int)dID, prefixModeFilter);
1097 if (suspended) diaryPause((int)dID);
1099 createMatrixOfDouble(Rhs + 1, 1, 1, &dID);
1100 LhsVar(1) = Rhs + 1;
1104 wchar_t **wfilenameUsed = new wchar_t*[1];
1105 wfilenameUsed[0] = getDiaryFilename((int)dID);
1106 createMatrixOfWideString(Rhs + 2, 1, 1, wfilenameUsed);
1107 LhsVar(2) = Rhs + 2;
1108 if (wfilenameUsed) {delete [] wfilenameUsed; wfilenameUsed = NULL;}
1114 freeInput(wcFilenames, dIDs_size);
1115 Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,1);
1120 /*--------------------------------------------------------------------------*/