From d4925c85615a871e090627ace6e9c476ce2f11ae Mon Sep 17 00:00:00 2001 From: Allan CORNET Date: Mon, 24 Aug 2009 09:16:53 +0200 Subject: [PATCH] uses enum --- .../output_stream/sci_gateway/cpp/sci_diary.cpp | 68 ++++++++++++++------ .../output_stream/src/c/output_stream.vcproj | 4 ++ scilab/modules/output_stream/src/cpp/Diary.cpp | 34 +++++----- scilab/modules/output_stream/src/cpp/Diary.hxx | 33 ++++------ scilab/modules/output_stream/src/cpp/DiaryList.cpp | 14 ++-- scilab/modules/output_stream/src/cpp/DiaryList.hxx | 11 ++-- .../output_stream/src/cpp/DiaryModesEnum.hxx | 39 +++++++++++ .../output_stream/src/cpp/diary_manager.cpp | 10 +-- .../output_stream/src/cpp/diary_manager.hxx | 16 ++--- 9 files changed, 147 insertions(+), 82 deletions(-) create mode 100644 scilab/modules/output_stream/src/cpp/DiaryModesEnum.hxx diff --git a/scilab/modules/output_stream/sci_gateway/cpp/sci_diary.cpp b/scilab/modules/output_stream/sci_gateway/cpp/sci_diary.cpp index e19684f..c935a8d 100644 --- a/scilab/modules/output_stream/sci_gateway/cpp/sci_diary.cpp +++ b/scilab/modules/output_stream/sci_gateway/cpp/sci_diary.cpp @@ -61,8 +61,16 @@ static int ResumeByFilenames(char *fname); static int ResumeByIds(char *fname); static int ExistByFilenames(char *fname); static int ExistByIds(char *fname); -static int AppendByFilenames(char *fname, int filterMode, int prefixMode, int prefixModeFilter); -static int NewByFilenames(char *fname, int filterMode, int prefixMode, int prefixModeFilter); +static int AppendByFilenames(char *fname, + diary_filter filterMode, + diary_prefix_time_format prefixMode, + diary_prefix_time_filter prefixModeFilter, + bool suspended); +static int NewByFilenames(char *fname, + diary_filter filterMode, + diary_prefix_time_format prefixMode, + diary_prefix_time_filter prefixModeFilter, + bool suspended); /*--------------------------------------------------------------------------*/ int sci_diary(char *fname,unsigned long fname_len) { @@ -341,7 +349,9 @@ static int sci_diary_two_rhs(char *fname) { if (getVarType(piAddressVarOne) == sci_strings) { - return NewByFilenames(fname, 0, 0, 3); + return NewByFilenames(fname, DIARY_FILTER_INPUT_AND_OUTPUT, + PREFIX_TIME_FORMAT_UNIX_EPOCH, + PREFIX_FILTER_NONE, false); } else { @@ -353,7 +363,10 @@ static int sci_diary_two_rhs(char *fname) { if (getVarType(piAddressVarOne) == sci_strings) { - return AppendByFilenames(fname, 0, 0, 3); + return AppendByFilenames(fname, DIARY_FILTER_INPUT_AND_OUTPUT, + PREFIX_TIME_FORMAT_UNIX_EPOCH, + PREFIX_FILTER_NONE, false); + } else { @@ -400,33 +413,42 @@ static int sci_diary_three_rhs(char *fname) if (wcArgumentThree) { - int filterMode = 0; - int iPrefixMode = 0; - int iPrefixIoModeFilter = 3; + diary_filter filterMode = DIARY_FILTER_INPUT_AND_OUTPUT; + diary_prefix_time_format iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH; + diary_prefix_time_filter iPrefixIoModeFilter = PREFIX_FILTER_NONE; + bool suspendedDiary = false; for (int i = 0; i < size_ArgThree; i++) { if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_COMMAND) == 0) { - filterMode = 1; // input only + filterMode = DIARY_FILTER_ONLY_INPUT; // input only } else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_FILTER_OUTPUT) == 0) { - filterMode = 2; // output only + filterMode = DIARY_FILTER_ONLY_OUTPUT; // output only } else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_UNIX_EPOCH) == 0) { - iPrefixMode = 0; - if (iPrefixIoModeFilter == 3) iPrefixIoModeFilter = 0; + iPrefixMode = PREFIX_TIME_FORMAT_UNIX_EPOCH; + if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT; } else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_DEFAULT) == 0) { - iPrefixMode = 1; - if (iPrefixIoModeFilter == 3) iPrefixIoModeFilter = 0; + iPrefixMode = PREFIX_TIME_FORMAT_ISO_8601; + if (iPrefixIoModeFilter == PREFIX_FILTER_NONE) iPrefixIoModeFilter = PREFIX_FILTER_INPUT_AND_OUTPUT; } else if (wcscmp(wcArgumentThree[i], DIARY_THIRD_ARG_PREFIX_ONLY_COMMANDS) == 0) { - iPrefixIoModeFilter = 1; + iPrefixIoModeFilter = PREFIX_FILTER_ONLY_INPUT; + } + else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_ON) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_RESUME) == 0) ) + { + suspendedDiary = false; + } + else if ( (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_OFF) == 0) || (wcscmp(wcArgumentThree[i], DIARY_SECOND_ARG_PAUSE) == 0) ) + { + suspendedDiary = true; } else { @@ -449,7 +471,7 @@ static int sci_diary_three_rhs(char *fname) FREE(wcArgumentTwo); wcArgumentTwo = NULL; if (getVarType(piAddressVarOne) == sci_strings) { - return NewByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter); + return NewByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary); } else { @@ -462,7 +484,7 @@ static int sci_diary_three_rhs(char *fname) FREE(wcArgumentTwo); wcArgumentTwo = NULL; if (getVarType(piAddressVarOne) == sci_strings) { - return AppendByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter); + return AppendByFilenames(fname, filterMode, iPrefixMode, iPrefixIoModeFilter, suspendedDiary); } else { @@ -974,7 +996,11 @@ static int ExistByIds(char *fname) return 0; } /*--------------------------------------------------------------------------*/ -static int AppendByFilenames(char *fname, int filterMode, int prefixMode, int prefixModeFilter) +static int AppendByFilenames(char *fname, + diary_filter filterMode, + diary_prefix_time_format prefixMode, + diary_prefix_time_filter prefixModeFilter, + bool suspended) { wchar_t **wcFilenames = NULL; int dIDs_size = 0; @@ -1007,6 +1033,7 @@ static int AppendByFilenames(char *fname, int filterMode, int prefixMode, int pr diarySetFilterMode((int)dID, filterMode); diarySetPrefixMode((int)dID, prefixMode); diarySetPrefixIoModeFilter((int)dID, prefixModeFilter); + if (suspended) diaryPause((int)dID); createMatrixOfDouble(Rhs + 1, 1, 1, &dID); LhsVar(1) = Rhs + 1; @@ -1030,7 +1057,11 @@ static int AppendByFilenames(char *fname, int filterMode, int prefixMode, int pr return 0; } /*--------------------------------------------------------------------------*/ -static int NewByFilenames(char *fname, int filterMode, int prefixMode, int prefixModeFilter) +static int NewByFilenames(char *fname, + diary_filter filterMode, + diary_prefix_time_format prefixMode, + diary_prefix_time_filter prefixModeFilter, + bool suspended) { wchar_t **wcFilenames = NULL; int dIDs_size = 0; @@ -1063,6 +1094,7 @@ static int NewByFilenames(char *fname, int filterMode, int prefixMode, int prefi diarySetFilterMode((int)dID, filterMode); diarySetPrefixMode((int)dID, prefixMode); diarySetPrefixIoModeFilter((int)dID, prefixModeFilter); + if (suspended) diaryPause((int)dID); createMatrixOfDouble(Rhs + 1, 1, 1, &dID); LhsVar(1) = Rhs + 1; diff --git a/scilab/modules/output_stream/src/c/output_stream.vcproj b/scilab/modules/output_stream/src/c/output_stream.vcproj index 7b65f01..bb46f1b 100644 --- a/scilab/modules/output_stream/src/c/output_stream.vcproj +++ b/scilab/modules/output_stream/src/c/output_stream.vcproj @@ -515,6 +515,10 @@ > + + diff --git a/scilab/modules/output_stream/src/cpp/Diary.cpp b/scilab/modules/output_stream/src/cpp/Diary.cpp index 06b6da0..efa30ad 100644 --- a/scilab/modules/output_stream/src/cpp/Diary.cpp +++ b/scilab/modules/output_stream/src/cpp/Diary.cpp @@ -28,9 +28,9 @@ Diary::Diary(std::wstring _wfilename,int _mode,int ID) suspendwrite = false; - Prefixmode = 0; - IoModeFilter = 0; // default command & input - PrefixIoModeFilter = 3; // no prefix + PrefixTimeFormat = PREFIX_TIME_FORMAT_UNIX_EPOCH; + IoModeFilter = DIARY_FILTER_INPUT_AND_OUTPUT; // default command & input + PrefixIoModeFilter = PREFIX_FILTER_NONE; // no prefix if (_mode == 0) { @@ -107,11 +107,11 @@ void Diary::write(std::wstring _wstr, bool bInput) if (bInput) // input { - if ( (IoModeFilter == 0) || (IoModeFilter == 1) ) + if ( (IoModeFilter == DIARY_FILTER_INPUT_AND_OUTPUT) || (IoModeFilter == DIARY_FILTER_ONLY_INPUT) ) { - if ( (PrefixIoModeFilter == 0) || (PrefixIoModeFilter == 1) ) + if ( (PrefixIoModeFilter == PREFIX_FILTER_INPUT_AND_OUTPUT) || (PrefixIoModeFilter == PREFIX_FILTER_ONLY_INPUT) ) { - char *timeInfo = wide_string_to_UTF8((wchar_t*)getDiaryDate(Prefixmode).c_str()); + char *timeInfo = wide_string_to_UTF8((wchar_t*)getDiaryDate(PrefixTimeFormat).c_str()); if (timeInfo) { fileDiary << timeInfo << " "; @@ -123,11 +123,11 @@ void Diary::write(std::wstring _wstr, bool bInput) } else // output { - if ( (IoModeFilter == 0) || (IoModeFilter == 2) ) + if ( (IoModeFilter == DIARY_FILTER_INPUT_AND_OUTPUT) || (IoModeFilter == DIARY_FILTER_ONLY_OUTPUT) ) { - if ( (PrefixIoModeFilter == 0) || (PrefixIoModeFilter == 2) ) + if ( (PrefixIoModeFilter == PREFIX_FILTER_INPUT_AND_OUTPUT) || (PrefixIoModeFilter == PREFIX_FILTER_ONLY_OUTPUT) ) { - char *timeInfo = wide_string_to_UTF8((wchar_t*)getDiaryDate(Prefixmode).c_str()); + char *timeInfo = wide_string_to_UTF8((wchar_t*)getDiaryDate(PrefixTimeFormat).c_str()); if (timeInfo) { fileDiary << timeInfo << " "; @@ -189,32 +189,32 @@ std::wstring Diary::replace(std::wstring text, std::wstring s, std::wstring repl return text; } /*--------------------------------------------------------------------------*/ -int Diary::getIOMode(void) +diary_filter Diary::getIOMode(void) { return IoModeFilter; } /*--------------------------------------------------------------------------*/ -void Diary::setIOMode(int _mode) +void Diary::setIOMode(diary_filter _mode) { IoModeFilter = _mode; } /*--------------------------------------------------------------------------*/ -void Diary::setPrefixMode(int iPrefixMode) +void Diary::setPrefixMode(diary_prefix_time_format iPrefixTimeFormat) { - Prefixmode = iPrefixMode; + PrefixTimeFormat = iPrefixTimeFormat; } /*--------------------------------------------------------------------------*/ -void Diary::setPrefixIoModeFilter(int mode) +void Diary::setPrefixIoModeFilter(diary_prefix_time_filter mode) { PrefixIoModeFilter = mode; } /*--------------------------------------------------------------------------*/ -int Diary::getPrefixMode(void) +diary_prefix_time_format Diary::getPrefixMode(void) { - return Prefixmode; + return PrefixTimeFormat; } /*--------------------------------------------------------------------------*/ -int Diary::getPrefixIoModeFilter(void) +diary_prefix_time_filter Diary::getPrefixIoModeFilter(void) { return PrefixIoModeFilter; } diff --git a/scilab/modules/output_stream/src/cpp/Diary.hxx b/scilab/modules/output_stream/src/cpp/Diary.hxx index ffe703c..d9af5ea 100644 --- a/scilab/modules/output_stream/src/cpp/Diary.hxx +++ b/scilab/modules/output_stream/src/cpp/Diary.hxx @@ -15,6 +15,7 @@ #define __DIARY_HXX__ /*--------------------------------------------------------------------------*/ #include +#include "DiaryModesEnum.hxx" /*--------------------------------------------------------------------------*/ class Diary { @@ -29,20 +30,14 @@ private: /* resume mode */ bool suspendwrite; - // 0 UNIX epoch - // 1 ISO_8601 - int Prefixmode; + /* see DiaryModesEnum.hxx */ + diary_prefix_time_format PrefixTimeFormat; - // 0 prefix @ beginning of Input and Output - // 1 prefix only @ beginning of Input - // 2 prefix only @ beginning of Output - // 3 no prefix - int PrefixIoModeFilter; + /* see DiaryModesEnum.hxx */ + diary_prefix_time_filter PrefixIoModeFilter; - // 0 all (output and input) - // 1 input - // 2 output - int IoModeFilter; + /* see DiaryModesEnum.hxx */ + diary_filter IoModeFilter; /* * used on Windows to replace carriage return @@ -61,15 +56,15 @@ public: ~Diary(); /* - * get filename of this diray + * get filename of this diary */ std::wstring getFilename(void); /* * get & set IO mode */ - void setIOMode(int _mode); - int getIOMode(void); + void setIOMode(diary_filter _mode); + diary_filter getIOMode(void); /* * get ID of this diary @@ -95,14 +90,14 @@ public: /* * get & set Prefix mode */ - void setPrefixMode(int iPrefixMode); - int getPrefixMode(void); + void setPrefixMode(diary_prefix_time_format iPrefixTimeFormat); + diary_prefix_time_format getPrefixMode(void); /* * get & set IO mode filter */ - void setPrefixIoModeFilter(int mode); - int getPrefixIoModeFilter(void); + void setPrefixIoModeFilter(diary_prefix_time_filter mode); + diary_prefix_time_filter getPrefixIoModeFilter(void); }; #endif /* __DIARY_HXX__ */ diff --git a/scilab/modules/output_stream/src/cpp/DiaryList.cpp b/scilab/modules/output_stream/src/cpp/DiaryList.cpp index d3113ba..c634507 100644 --- a/scilab/modules/output_stream/src/cpp/DiaryList.cpp +++ b/scilab/modules/output_stream/src/cpp/DiaryList.cpp @@ -241,7 +241,7 @@ int DiaryList::getID(std::wstring _wfilename) return -1; } /*--------------------------------------------------------------------------*/ -void DiaryList::setFilterMode(int ID_diary, int mode) +void DiaryList::setFilterMode(int ID_diary, diary_filter mode) { std::list::iterator iter; @@ -254,7 +254,7 @@ void DiaryList::setFilterMode(int ID_diary, int mode) } } /*--------------------------------------------------------------------------*/ -void DiaryList::setPrefixMode(int ID_diary,int iPrefixMode) +void DiaryList::setPrefixMode(int ID_diary,diary_prefix_time_format iPrefixMode) { std::list::iterator iter; @@ -268,7 +268,7 @@ void DiaryList::setPrefixMode(int ID_diary,int iPrefixMode) } } /*--------------------------------------------------------------------------*/ -int DiaryList::getPrefixMode(int ID_diary) +diary_prefix_time_format DiaryList::getPrefixMode(int ID_diary) { std::list::iterator iter; @@ -279,10 +279,10 @@ int DiaryList::getPrefixMode(int ID_diary) return iter->getPrefixMode(); } } - return -1; + return PREFIX_TIME_FORMAT_ERROR; } /*--------------------------------------------------------------------------*/ -void DiaryList::setPrefixIoModeFilter(int ID_diary,int mode) +void DiaryList::setPrefixIoModeFilter(int ID_diary,diary_prefix_time_filter mode) { std::list::iterator iter; @@ -296,7 +296,7 @@ void DiaryList::setPrefixIoModeFilter(int ID_diary,int mode) } } /*--------------------------------------------------------------------------*/ -int DiaryList::getPrefixIoModeFilter(int ID_diary) +diary_prefix_time_filter DiaryList::getPrefixIoModeFilter(int ID_diary) { std::list::iterator iter; @@ -307,7 +307,7 @@ int DiaryList::getPrefixIoModeFilter(int ID_diary) return iter->getPrefixIoModeFilter(); } } - return -1; + return PREFIX_FILTER_ERROR; } /*--------------------------------------------------------------------------*/ diff --git a/scilab/modules/output_stream/src/cpp/DiaryList.hxx b/scilab/modules/output_stream/src/cpp/DiaryList.hxx index 7586bff..634b7ea 100644 --- a/scilab/modules/output_stream/src/cpp/DiaryList.hxx +++ b/scilab/modules/output_stream/src/cpp/DiaryList.hxx @@ -17,6 +17,7 @@ #include #include #include "Diary.hxx" +#include "DiaryModesEnum.hxx" /*--------------------------------------------------------------------------*/ class DiaryList { @@ -67,13 +68,13 @@ public: int getID(std::wstring _wfilename); /* set & get mode */ - void setFilterMode(int ID_diary, int mode); + void setFilterMode(int ID_diary, diary_filter mode); - void setPrefixMode(int ID_diary,int iPrefixMode); - int getPrefixMode(int ID_diary); + void setPrefixMode(int ID_diary,diary_prefix_time_format iPrefixMode); + diary_prefix_time_format getPrefixMode(int ID_diary); - void setPrefixIoModeFilter(int ID_diary,int mode); - int getPrefixIoModeFilter(int ID_diary); + void setPrefixIoModeFilter(int ID_diary, diary_prefix_time_filter mode); + diary_prefix_time_filter getPrefixIoModeFilter(int ID_diary); private: /* list of diary */ diff --git a/scilab/modules/output_stream/src/cpp/DiaryModesEnum.hxx b/scilab/modules/output_stream/src/cpp/DiaryModesEnum.hxx new file mode 100644 index 0000000..1b645c8 --- /dev/null +++ b/scilab/modules/output_stream/src/cpp/DiaryModesEnum.hxx @@ -0,0 +1,39 @@ +/*--------------------------------------------------------------------------*/ +/* +* ( http://www.scilab.org/ ) - This file is part of Scilab +* Copyright (C) DIGITEO - 2009 - Allan CORNET +* +* This file must be used under the terms of the CeCILL. +* This source file is licensed as described in the file COPYING, which +* you should have received as part of this distribution. The terms +* are also available at +* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +* +*/ +/*--------------------------------------------------------------------------*/ +#ifndef __DIARYMODESENUM_HXX__ +#define __DIARYMODESENUM_HXX__ + +typedef enum { + PREFIX_TIME_FORMAT_ERROR = -1, + PREFIX_TIME_FORMAT_UNIX_EPOCH = 0, + PREFIX_TIME_FORMAT_ISO_8601 = 1 +} diary_prefix_time_format; + +typedef enum { + PREFIX_FILTER_ERROR = -1, + PREFIX_FILTER_INPUT_AND_OUTPUT = 0, + PREFIX_FILTER_ONLY_INPUT = 1, + PREFIX_FILTER_ONLY_OUTPUT = 2, + PREFIX_FILTER_NONE = 3 +} diary_prefix_time_filter; + +typedef enum { + DIARY_FILTER_ERROR = -1, + DIARY_FILTER_INPUT_AND_OUTPUT = 0, + DIARY_FILTER_ONLY_INPUT = 1, + DIARY_FILTER_ONLY_OUTPUT = 2, +} diary_filter; + +#endif /* __DIARYMODESENUM_HXX__ */ +/*--------------------------------------------------------------------------*/ diff --git a/scilab/modules/output_stream/src/cpp/diary_manager.cpp b/scilab/modules/output_stream/src/cpp/diary_manager.cpp index 5003ebd..3e1a899 100644 --- a/scilab/modules/output_stream/src/cpp/diary_manager.cpp +++ b/scilab/modules/output_stream/src/cpp/diary_manager.cpp @@ -266,7 +266,7 @@ int diaryWriteln(wchar_t *wstr, BOOL bInput) return 1; } /*--------------------------------------------------------------------------*/ -int diarySetFilterMode(int _iId, int mode) +int diarySetFilterMode(int _iId, diary_filter mode) { if (SCIDIARY) { @@ -276,7 +276,7 @@ int diarySetFilterMode(int _iId, int mode) return 1; } /*--------------------------------------------------------------------------*/ -int diarySetPrefixMode(int ID_diary,int iPrefixMode) +int diarySetPrefixMode(int ID_diary,diary_prefix_time_format iPrefixMode) { if (SCIDIARY) { @@ -295,7 +295,7 @@ int diaryGetPrefixMode(int ID_diary) return -1; } /*--------------------------------------------------------------------------*/ -int diarySetPrefixIoModeFilter(int ID_diary,int mode) +int diarySetPrefixIoModeFilter(int ID_diary,diary_prefix_time_filter mode) { if (SCIDIARY) { @@ -305,12 +305,12 @@ int diarySetPrefixIoModeFilter(int ID_diary,int mode) return 1; } /*--------------------------------------------------------------------------*/ -int diaryGetPrefixIoModeFilter(int ID_diary) +diary_prefix_time_filter diaryGetPrefixIoModeFilter(int ID_diary) { if (SCIDIARY) { return SCIDIARY->getPrefixIoModeFilter(ID_diary); } - return -1; + return PREFIX_FILTER_ERROR; } /*--------------------------------------------------------------------------*/ diff --git a/scilab/modules/output_stream/src/cpp/diary_manager.hxx b/scilab/modules/output_stream/src/cpp/diary_manager.hxx index 0fea03e..67cd80b 100644 --- a/scilab/modules/output_stream/src/cpp/diary_manager.hxx +++ b/scilab/modules/output_stream/src/cpp/diary_manager.hxx @@ -14,6 +14,7 @@ #define __DIARY_MANAGER_HXX__ #include +#include "DiaryModesEnum.hxx" /** * get filename of a ID @@ -135,24 +136,17 @@ int diaryAppend(wchar_t *filename); * Set filter mode (input, output) * @param[in] ID * @param[in] mode -* 0 all (output and input) -* 1 input -* 2 output * @return 0 (OK) 1 (NOK) */ -int diarySetFilterMode(int _iId, int mode); +int diarySetFilterMode(int _iId, diary_filter mode); /* * Set prefix time mode * @param[in] ID * @param[in] mode -* 0 prefix @ beginning of Input and Output -* 1 prefix only @ beginning of Input -* 2 prefix only @ beginning of Output -* 3 no prefix * @return 0 (OK) 1 (NOK) */ -int diarySetPrefixMode(int ID_diary,int iPrefixMode); +int diarySetPrefixMode(int ID_diary,diary_prefix_time_format iPrefixMode); /* * get prefix mode @@ -167,14 +161,14 @@ int diaryGetPrefixMode(int ID_diary); * @param[in] mode * @return 0 (OK) 1 (NOK) */ -int diarySetPrefixIoModeFilter(int ID_diary,int mode); +int diarySetPrefixIoModeFilter(int ID_diary,diary_prefix_time_filter mode); /* * get prefix IO mode filter * @param[in] ID * @return mode */ -int diaryGetPrefixIoModeFilter(int ID_diary); +diary_prefix_time_filter diaryGetPrefixIoModeFilter(int ID_diary); #endif /* __DIARY_MANAGER_HXX__ */ /*--------------------------------------------------------------------------*/ -- 1.7.9.5