📄 jsp_common.cpp
字号:
/*
* TOPPERS/JSP Kernel
* Toyohashi Open Platform for Embedded Real-Time Systems/
* Just Standard Profile Kernel
*
* Copyright (C) 2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
*
* 忋婰挊嶌尃幰偼丆埲壓偺 (1)乣(4) 偺忦審偐丆Free Software Foundation
* 偵傛偭偰岞昞偝傟偰偄傞 GNU General Public License 偺 Version 2 偵婰
* 弎偝傟偰偄傞忦審傪枮偨偡応崌偵尷傝丆杮僜僼僩僂僃傾乮杮僜僼僩僂僃傾
* 傪夵曄偟偨傕偺傪娷傓丏埲壓摨偠乯傪巊梡丒暋惢丒夵曄丒嵞攝晍乮埲壓丆
* 棙梡偲屇傇乯偡傞偙偲傪柍彏偱嫋戻偡傞丏
* (1) 杮僜僼僩僂僃傾傪僜乕僗僐乕僪偺宍偱棙梡偡傞応崌偵偼丆忋婰偺挊嶌
* 尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕偑丆偦偺傑傑偺宍偱僜乕
* 僗僐乕僪拞偵娷傑傟偰偄傞偙偲丏
* (2) 杮僜僼僩僂僃傾傪丆儔僀僽儔儕宍幃側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒傞宍偱嵞攝晍偡傞応崌偵偼丆嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡
* 幰儅僯儏傾儖側偳乯偵丆忋婰偺挊嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰
* 偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (3) 杮僜僼僩僂僃傾傪丆婡婍偵慻傒崬傓側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒側偄宍偱嵞攝晍偡傞応崌偵偼丆師偺偄偢傟偐偺忦審傪枮偨偡偙
* 偲丏
* (a) 嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡幰儅僯儏傾儖側偳乯偵丆忋婰偺挊
* 嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (b) 嵞攝晍偺宍懺傪丆暿偵掕傔傞曽朄偵傛偭偰丆TOPPERS僾儘僕僃僋僩偵
* 曬崘偡傞偙偲丏
* (4) 杮僜僼僩僂僃傾偺棙梡偵傛傝捈愙揑傑偨偼娫愙揑偵惗偠傞偄偐側傞懝
* 奞偐傜傕丆忋婰挊嶌尃幰偍傛傃TOPPERS僾儘僕僃僋僩傪柶愑偡傞偙偲丏
*
* 杮僜僼僩僂僃傾偼丆柍曐徹偱採嫙偝傟偰偄傞傕偺偱偁傞丏忋婰挊嶌尃幰偍
* 傛傃TOPPERS僾儘僕僃僋僩偼丆杮僜僼僩僂僃傾偵娭偟偰丆偦偺揔梡壜擻惈傕
* 娷傔偰丆偄偐側傞曐徹傕峴傢側偄丏傑偨丆杮僜僼僩僂僃傾偺棙梡偵傛傝捈
* 愙揑傑偨偼娫愙揑偵惗偠偨偄偐側傞懝奞偵娭偟偰傕丆偦偺愑擟傪晧傢側偄丏
*
* @(#) $Id: jsp_common.cpp,v 1.1 2006/04/14 02:46:08 9564907 Exp $
*/
#include "jsp/jsp_common.h"
#include "base/option.h"
#include <ctime>
#if defined(_MSC_VER) || defined(__BORLANDC__)
# define GETLOGINNAME_WINDOWS
# include <windows.h>
#elif __GNUC__
# define GETLOGINNAME_UNIX
# include <unistd.h>
#endif
using namespace std;
#if 0
namespace {
string get_loginname(void) throw()
{
string result("TOPPERS/JSP KernelConfigurator");
#ifdef GETLOGINNAME_WINDOWS
char buffer[1024];
DWORD sz = 1024;
::GetUserName(buffer, &sz);
result.assign(buffer);
#elif defined(GETLOGINNAME_UNIX)
result.assign(getlogin());
#endif
return result;
}
}
#endif
//僀儞僋儖乕僪僼傽僀儖偺宍傪曄峏偡傞
string ToppersJsp::conv_includefile(string file) throw()
{
OptionParameter & option = getOptionParameter();
string result;
//il僆僾僔儑儞偑晅偄偨偲偒偵偼 "<...>" 宍幃偱弌椡
if(option["il"].isValid())
result = string("<") + file + ">";
else
result = string("\"") + file + "\"";
return result;
}
//僇乕僱儖偺曄悢柤偺宍傪曄峏偡傞
string ToppersJsp::conv_kernelobject(string obj) throw()
{
OptionParameter & option = getOptionParameter();
string result;
result = obj;
// TOPPERS/JSP rel 1.3傛傝屻偼僇乕僱儖曄悢偺摢偵 _kernel_ 傪偮偗傞
if(!option["1.3"].isValid())
result = string("_kernel_") + obj;
return result;
}
ToppersJsp::SpecialtyFile::SpecialtyFile(void) throw() : MultipartStream(), RuntimeObject(true)
{}
#if 0
string ToppersJsp::get_agreement(string filename) throw()
{
const char * base_agreement =
"/*\n"
" * TOPPERS/JSP Kernel\n"
" * Toyohashi Open Platform for Embedded Real-Time Systems/\n"
" * Just Standard Profile Kernel\n"
" * \n"
" * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory\n"
" * Toyohashi Univ. of Technology, JAPAN\n"
" * \n"
" * 忋婰挊嶌尃幰偼丆埲壓偺 (1)乣(4) 偺忦審偐丆Free Software Foundation \n"
" * 偵傛偭偰岞昞偝傟偰偄傞 GNU General Public License 偺 Version 2 偵婰\n"
" * 弎偝傟偰偄傞忦審傪枮偨偡応崌偵尷傝丆杮僜僼僩僂僃傾乮杮僜僼僩僂僃傾\n"
" * 傪夵曄偟偨傕偺傪娷傓丏埲壓摨偠乯傪巊梡丒暋惢丒夵曄丒嵞攝晍乮埲壓丆\n"
" * 棙梡偲屇傇乯偡傞偙偲傪柍彏偱嫋戻偡傞丏\n"
" * (1) 杮僜僼僩僂僃傾傪僜乕僗僐乕僪偺宍偱棙梡偡傞応崌偵偼丆忋婰偺挊嶌\n"
" * 尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕偑丆偦偺傑傑偺宍偱僜乕\n"
" * 僗僐乕僪拞偵娷傑傟偰偄傞偙偲丏\n"
" * (2) 杮僜僼僩僂僃傾傪丆儔僀僽儔儕宍幃側偳丆懠偺僜僼僩僂僃傾奐敪偵巊\n"
" * 梡偱偒傞宍偱嵞攝晍偡傞応崌偵偼丆嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡\n"
" * 幰儅僯儏傾儖側偳乯偵丆忋婰偺挊嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰\n"
" * 偺柍曐徹婯掕傪宖嵹偡傞偙偲丏\n"
" * (3) 杮僜僼僩僂僃傾傪丆婡婍偵慻傒崬傓側偳丆懠偺僜僼僩僂僃傾奐敪偵巊\n"
" * 梡偱偒側偄宍偱嵞攝晍偡傞応崌偵偼丆師偺偄偢傟偐偺忦審傪枮偨偡偙\n"
" * 偲丏\n"
" * (a) 嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡幰儅僯儏傾儖側偳乯偵丆忋婰偺挊\n"
" * 嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕傪宖嵹偡傞偙偲丏\n"
" * (b) 嵞攝晍偺宍懺傪丆暿偵掕傔傞曽朄偵傛偭偰丆TOPPERS僾儘僕僃僋僩偵\n"
" * 曬崘偡傞偙偲丏\n"
" * (4) 杮僜僼僩僂僃傾偺棙梡偵傛傝捈愙揑傑偨偼娫愙揑偵惗偠傞偄偐側傞懝\n"
" * 奞偐傜傕丆忋婰挊嶌尃幰偍傛傃TOPPERS僾儘僕僃僋僩傪柶愑偡傞偙偲丏\n"
" * \n"
" * 杮僜僼僩僂僃傾偼丆柍曐徹偱採嫙偝傟偰偄傞傕偺偱偁傞丏忋婰挊嶌尃幰偍\n"
" * 傛傃TOPPERS僾儘僕僃僋僩偼丆杮僜僼僩僂僃傾偵娭偟偰丆偦偺揔梡壜擻惈傕\n"
" * 娷傔偰丆偄偐側傞曐徹傕峴傢側偄丏傑偨丆杮僜僼僩僂僃傾偺棙梡偵傛傝捈\n"
" * 愙揑傑偨偼娫愙揑偵惗偠偨偄偐側傞懝奞偵娭偟偰傕丆偦偺愑擟傪晧傢側偄丏\n"
" * \n";
string work(base_agreement);
//CVS偺ID晽偺傕偺傪偔偭偮偗傞
time_t t;
time(&t);
work += string(" * @(#)$Id: ");
work += filename;
work += " ";
work += static_cast<const char *>(asctime(localtime(&t)));
work.erase(work.size() - 1); //asctime偱夵峴偑擖傞偺偱chomp
work += " ";
work += get_loginname();
work += " Exp $\n */\n\n";
return work;
}
#endif
/***************************************** 僥僗僩僗傿乕僩 *****************************************/
#ifdef TESTSUITE
class SpecialtyFile_test : public ToppersJsp::SpecialtyFile
{
public:
~SpecialtyFile_test(void) throw() { TestSuite::check("SpecialtyFile::~SpecialtyFile"); }
TESTSUITE_PROTOTYPE(main)
};
TESTSUITE(main, SpecialtyFile_test)
{
BEGIN_CASE("constructor","constructor") {
BEGIN_CASE("1","惗惉偡傞偲ROT偵忔傞") {
SpecialtyFile_test file;
if(RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0)
TEST_FAIL;
} END_CASE;
BEGIN_CASE("2","攋婞偺懳徾偵側偭偰偄傞") {
Singleton<RuntimeObjectTable>::Context context;
Singleton<RuntimeObjectTable>::saveContext(context);
Singleton<RuntimeObjectTable>::renewInstance();
new SpecialtyFile_test;
TEST_CASE("0","[慜採] 搊榐偝傟偰偄傞", RuntimeObjectTable::getInstance<SpecialtyFile_test>() != 0);
TestSuite::clearCheckpoints();
Singleton<RuntimeObjectTable>::renewInstance(); //僀儞僗僞儞僗偺嵞惗惉偱ROT偑嶍彍偝傟傞
TEST_CASE("1","ROT偐傜夝彍偝傟偰偄傞", RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0);
TEST_CASE("2","僨僗僩儔僋僞偑婲摦偝傟偰偄傞", TestSuite::isReached("SpecialtyFile::~SpecialtyFile"));
Singleton<RuntimeObjectTable>::restoreContext(context);
} END_CASE;
} END_CASE;
BEGIN_CASE("createInstance","createInstance") {
BEGIN_CASE("1","僀儞僗僞儞僗偑惗惉偱偒傞") {
SpecialtyFile_test * file = SpecialtyFile::createInstance<SpecialtyFile_test>("test.txt");
file->disableOutput(); //弌椡偝傟偰傕崲傞偺偱
TEST_CASE("1","旕NULL偑曉傞", file != 0);
TEST_CASE("2","僼傽僀儖柤偑惓忢", file->getFilename().compare("test.txt") == 0);
} END_CASE;
BEGIN_CASE("2","嬻暥帤傪搉偡偲椺奜") {
bool result = false;
try {
SpecialtyFile::createInstance<SpecialtyFile_test>("");
}
catch(Exception &) {
result = true;
}
TEST_CASE("1","椺奜偑婲偙傞", result);
TEST_CASE("2","僆僽僕僃僋僩偼側偄", RuntimeObjectTable::getInstance<SpecialtyFile_test>() == 0);
} END_CASE;
} END_CASE;
}
namespace {
extern void testsuite(TestSuiteControl & _suite_control);
TestSuite testsuite_onTop("TOPPERS/JSP Common Function(main)", testsuite);
//僥僗僩僗傿乕僩偺杮懱
void testsuite(TestSuiteControl & _suite_control)
{
Singleton<OptionParameter>::Context context;
Singleton<OptionParameter>::saveContext(context);
BEGIN_CASE("conv_includefile","conv_includefile") {
BEGIN_CASE("1","-il偑晅偄偰偄側偄偲僟僽儖僋僅乕僩偱偔偔傞") {
Singleton<OptionParameter>::renewInstance();
if(ToppersJsp::conv_includefile("test.h").compare("\"test.h\"") != 0)
TEST_FAIL;
} END_CASE;
BEGIN_CASE("1","-il偑晅偄偰偄傞偲<>偱偔偔傞") {
Singleton<OptionParameter>::renewInstance();
char * argv[] = {"test.exe","-il"};
getOptionParameter().parseOption(2, argv);
if(ToppersJsp::conv_includefile("test.h").compare("<test.h>") != 0)
TEST_FAIL;
} END_CASE;
} END_CASE;
BEGIN_CASE("conv_kernelobject","conv_kernelobject") {
BEGIN_CASE("1","-1.3偑晅偄偰偄側偄偲_kernel_偑晅偔") {
Singleton<OptionParameter>::renewInstance();
if(ToppersJsp::conv_kernelobject("test").compare("_kernel_test") != 0)
TEST_FAIL;
} END_CASE;
BEGIN_CASE("1","-1.3偑晅偄偰偄傞偲偦偺傑傑弌偰偔傞") {
Singleton<OptionParameter>::renewInstance();
char * argv[] = {"test.exe","-1.3"};
getOptionParameter().parseOption(2, argv);
if(ToppersJsp::conv_kernelobject("test").compare("test") != 0)
TEST_FAIL;
} END_CASE;
} END_CASE;
Singleton<OptionParameter>::restoreContext(context);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -