summaryrefslogtreecommitdiff
path: root/ACE/apps/FaCE
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/FaCE')
-rw-r--r--ACE/apps/FaCE/ACE.icobin0 -> 1078 bytes
-rw-r--r--ACE/apps/FaCE/ACE_Racer.bmpbin0 -> 9918 bytes
-rw-r--r--ACE/apps/FaCE/CE_ARGV.CPP118
-rw-r--r--ACE/apps/FaCE/CE_ARGV.H90
-rw-r--r--ACE/apps/FaCE/CE_Screen_Output.cpp162
-rw-r--r--ACE/apps/FaCE/CE_Screen_Output.h97
-rw-r--r--ACE/apps/FaCE/FACE.icobin0 -> 1078 bytes
-rw-r--r--ACE/apps/FaCE/FaCE.cpp652
-rw-r--r--ACE/apps/FaCE/FaCE.h57
-rw-r--r--ACE/apps/FaCE/FaCE.mpc12
-rw-r--r--ACE/apps/FaCE/FaCE.rc268
-rw-r--r--ACE/apps/FaCE/FaCENOACE.mpc15
-rw-r--r--ACE/apps/FaCE/FaCE_OS.h38
-rw-r--r--ACE/apps/FaCE/License.txt27
-rw-r--r--ACE/apps/FaCE/Main.cpp49
-rw-r--r--ACE/apps/FaCE/README287
-rw-r--r--ACE/apps/FaCE/TAO.bmpbin0 -> 21798 bytes
-rw-r--r--ACE/apps/FaCE/newres.h43
-rw-r--r--ACE/apps/FaCE/resource.h45
19 files changed, 1960 insertions, 0 deletions
diff --git a/ACE/apps/FaCE/ACE.ico b/ACE/apps/FaCE/ACE.ico
new file mode 100644
index 00000000000..3efedc9021b
--- /dev/null
+++ b/ACE/apps/FaCE/ACE.ico
Binary files differ
diff --git a/ACE/apps/FaCE/ACE_Racer.bmp b/ACE/apps/FaCE/ACE_Racer.bmp
new file mode 100644
index 00000000000..a487f63f81c
--- /dev/null
+++ b/ACE/apps/FaCE/ACE_Racer.bmp
Binary files differ
diff --git a/ACE/apps/FaCE/CE_ARGV.CPP b/ACE/apps/FaCE/CE_ARGV.CPP
new file mode 100644
index 00000000000..6b97a30b640
--- /dev/null
+++ b/ACE/apps/FaCE/CE_ARGV.CPP
@@ -0,0 +1,118 @@
+// $Id$
+
+#include "CE_ARGV.H"
+
+
+CE_ARGV::CE_ARGV(wchar_t* cmdLine)
+: ce_argv_(0)
+, ce_argc_(0)
+{
+ const wchar_t* dummyArgv = L"root"; // dummy for the first argv
+ const wchar_t* separator = L" "; // blank space is a separator
+
+ int formattedCmdLineLength = wcslen(dummyArgv) +
+ wcslen(separator) +
+ 1; // 1 is for the NULL at the end
+
+ if (wcslen(cmdLine) > 0) {
+ formattedCmdLineLength += wcslen(cmdLine);
+ formattedCmdLineLength += wcslen(separator);
+ }
+
+ // formattedCmdLine will have dummyArgv and a separator at the beginning of cmdLine
+ // and a separator at the end to generalize format and reduce the amount of code
+ wchar_t* formattedCmdLine = 0;
+ formattedCmdLine = new wchar_t[formattedCmdLineLength];
+
+ wcscpy(formattedCmdLine, dummyArgv);
+ wcscat(formattedCmdLine, separator);
+
+ int max_possible_argc = 1; // start with 1 because of the dummyArgv at the beginning
+
+ if (wcslen(cmdLine) > 0) {
+ int formattedPos = wcslen(formattedCmdLine);
+ int cmdLineLength = wcslen(cmdLine);
+
+ // Inside of this for loop, it does same thing as strcat except it
+ // checks and puts only one single white space between two argv entries.
+ for (int i = 0; i < cmdLineLength; ++i) {
+ if (iswspace(cmdLine[i]) != 0) {
+ ++max_possible_argc; // counting the number of white spaces
+ }
+
+ formattedCmdLine[formattedPos++] = cmdLine[i];
+
+ if (iswspace(cmdLine[i]) != 0) {
+ // make sure there is only one white space between two argv entries.
+ while ((i < cmdLineLength) && (iswspace(cmdLine[i + 1]) != 0)) {
+ ++i;
+ }
+ }
+ }
+
+ formattedCmdLine[formattedPos] = 0;
+ wcscat(formattedCmdLine, separator); // make sure formattedCmdLine ends with a blank
+ }
+
+ int formattedCmdLength = wcslen(formattedCmdLine);
+
+ bool insideQuotation = false;
+ int* argv_strlen = 0;
+ int entry_size = 0;
+ argv_strlen = new int[max_possible_argc];
+
+ // determine argc
+ for (int i = 0; i < formattedCmdLength; ++i) {
+ if (formattedCmdLine[i] == '\\') {
+ ++i; // ignore the following character
+ ++entry_size;
+ }
+ else if (formattedCmdLine[i] == '"') {
+ insideQuotation = !insideQuotation;
+ }
+ else if ((!insideQuotation) && (iswspace(formattedCmdLine[i]) != 0)) {
+ // new argv entry end found
+ argv_strlen[ce_argc_++] = entry_size; // cache the size of this entry
+ entry_size = 0;
+ }
+ else {
+ ++entry_size;
+ }
+ }
+
+ ce_argv_ = new wchar_t*[ce_argc_ + 1];
+ ce_argv_[ce_argc_] = 0; // Last command line entry is a NULL.
+
+ for (int j = 0, cmdLinePos = 0; j < ce_argc_; ++j, ++cmdLinePos) {
+ int length = argv_strlen[j];
+
+ ce_argv_[j] = new wchar_t[length + 1];
+ ce_argv_[j][length] = 0; // string termination null
+
+ if (iswspace(formattedCmdLine[cmdLinePos]) != 0) {
+ // This is where prior argv has trailing '"' at the end.
+ ++cmdLinePos;
+ }
+
+ for (int n = 0; n < length; ++n, ++cmdLinePos) {
+ if ((formattedCmdLine[cmdLinePos] == '\\') || (formattedCmdLine[cmdLinePos] == '"')) {
+ ++cmdLinePos;
+ }
+
+ ce_argv_[j][n] = formattedCmdLine[cmdLinePos];
+ }
+ }
+
+ delete argv_strlen;
+ delete formattedCmdLine;
+}
+
+
+CE_ARGV::~CE_ARGV(void)
+{
+ for (int i = 0; i < ce_argc_; ++i) {
+ delete [] ce_argv_[i];
+ }
+
+ delete [] ce_argv_;
+}
diff --git a/ACE/apps/FaCE/CE_ARGV.H b/ACE/apps/FaCE/CE_ARGV.H
new file mode 100644
index 00000000000..78e848abae1
--- /dev/null
+++ b/ACE/apps/FaCE/CE_ARGV.H
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+//=============================================================================
+/**
+ * @file CE_ARGV.H
+ *
+ * $Id$
+ *
+ * @author Si Mong Park <spark@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef CE_ARGV_H
+#define CE_ARGV_H
+
+#include <windows.h>
+
+
+/**
+ * @class CE_ARGV
+ *
+ * @brief This class is to hash input parameters, argc and argv, for WinCE platform.
+ *
+ * Since WinCE only supports wchar_t as an input from OS, some implementation detail,
+ * especially for CORBA spec, will not support wchar_t (wchar_t) type parameter.
+ * Moreover, WinCE's input parameter type is totally different than any other OS;
+ * all command line parameters will be stored in a single wide-character string with
+ * each unit parameter divided by blank space, and it does not provide the name of
+ * executable (generally known as argv[0]).
+ * This class is to convert CE's command line parameters and simulate as in the same
+ * manner as other general platforms, adding 'root' as a first argc, which is for the
+ * name of executable in other OS.
+ */
+class CE_ARGV
+{
+public:
+ /**
+ * Ctor accepts CE command line as a paramter.
+ */
+ CE_ARGV(wchar_t* cmdLine);
+
+ /**
+ * Default Dtor that deletes any memory allocated for the converted string.
+ */
+ ~CE_ARGV(void);
+
+ /**
+ * Returns the number of command line paramters, same as argc on Unix.
+ */
+ int argc(void);
+
+ /**
+ * Returns the 'char**' that contains the converted command line parameters.
+ */
+ wchar_t** const argv(void);
+
+private:
+ /**
+ * Copy Ctor is not allowed.
+ */
+ CE_ARGV(void);
+
+ /**
+ * Copy Ctor is not allowed.
+ */
+ CE_ARGV(CE_ARGV&);
+
+ /**
+ * Pointer of converted command line paramters.
+ */
+ wchar_t** ce_argv_;
+
+ /**
+ * Integer that is same as argc on other OS's.
+ */
+ int ce_argc_;
+};
+
+
+inline int CE_ARGV::argc()
+{
+ return ce_argc_;
+}
+
+
+inline wchar_t** const CE_ARGV::argv()
+{
+ return ce_argv_;
+}
+
+#endif // CE_ARGV_H
diff --git a/ACE/apps/FaCE/CE_Screen_Output.cpp b/ACE/apps/FaCE/CE_Screen_Output.cpp
new file mode 100644
index 00000000000..59364523a8c
--- /dev/null
+++ b/ACE/apps/FaCE/CE_Screen_Output.cpp
@@ -0,0 +1,162 @@
+// $Id$
+
+#include "CE_Screen_Output.h"
+#include <string.h>
+
+
+HWND CE_Screen_Output::handler_ = 0;
+
+
+CE_Screen_Output::CE_Screen_Output()
+: pFile_(0)
+{
+}
+
+
+CE_Screen_Output::~CE_Screen_Output()
+{
+ if (pFile_ != 0) {
+ fclose(pFile_);
+ }
+}
+
+
+void CE_Screen_Output::SetOutputWindow(HWND hEdit)
+{
+ handler_ = hEdit;
+}
+
+
+void CE_Screen_Output::clear()
+{
+ SetWindowText(handler_, NULL);
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (wchar_t* output)
+{
+ int length = GetWindowTextLength(handler_);
+ SendMessage(handler_, EM_SETSEL, length, length);
+ SendMessage(handler_, EM_REPLACESEL, 0, (LPARAM)output);
+
+ if (pFile_ != NULL)
+ {
+ fwprintf(pFile_, L"%s", output);
+ }
+
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (const wchar_t* output)
+{
+ wchar_t* buffer = _wcsdup(output);
+ if (buffer != 0)
+ {
+ *this << buffer;
+ delete buffer;
+ }
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (char* output)
+{
+ int len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, output, -1, NULL, 0);
+ wchar_t* w_output = new wchar_t[len];
+
+ MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, output, -1, w_output, len);
+ *this << w_output;
+
+ delete w_output;
+
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (const char* output)
+{
+ int len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, output, -1, NULL, 0);
+ wchar_t* w_output = new wchar_t[len];
+
+ MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, output, -1, w_output, len);
+ *this << w_output;
+
+ delete w_output;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (char output)
+{
+ *this << (int)output;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (unsigned char output)
+{
+ *this << (int)output;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (unsigned short output)
+{
+ wchar_t buffer[20];
+ wsprintf(buffer, L"%u", output);
+ *this << buffer;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (int output)
+{
+ wchar_t buffer[20];
+ wsprintf(buffer, L"%d", output);
+ *this << buffer;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (unsigned int output)
+{
+ wchar_t buffer[20];
+ wsprintf(buffer, L"%du", output);
+ *this << buffer;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (float output)
+{
+ wchar_t buffer[20];
+ swprintf(buffer, L"%f", output);
+ *this << buffer;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (long output)
+{
+ wchar_t buffer[20];
+ wsprintf(buffer, L"%l", output);
+ *this << buffer;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (unsigned long output)
+{
+ wchar_t buffer[20];
+ wsprintf(buffer, L"%lu", output);
+ *this << buffer;
+ return *this;
+}
+
+
+CE_Screen_Output& CE_Screen_Output::operator << (FILE* pFile)
+{
+ pFile_ = pFile;
+ return *this;
+}
diff --git a/ACE/apps/FaCE/CE_Screen_Output.h b/ACE/apps/FaCE/CE_Screen_Output.h
new file mode 100644
index 00000000000..9f29c9cf30f
--- /dev/null
+++ b/ACE/apps/FaCE/CE_Screen_Output.h
@@ -0,0 +1,97 @@
+/**
+ * @file CE_Screen_Output.h
+ *
+ * $Id$
+ *
+ * @author Si Mong Park <spark@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef CE_Screen_Output_h
+#define CE_Screen_Output_h
+
+#include <windows.h>
+
+const wchar_t endl[] = L"\r\n";
+const wchar_t tab[] = L"\t";
+
+/**
+ * @class CE_Screen_Output
+ *
+ * @brief Replacement of text output for Windows CE.
+ *
+ * This class allows standard text output to be displayed on
+ * text window for Windows CE. Generally, all ACE output will
+ * go through under CE if and only if user uses WindozeCE
+ * implementation by using main_ce instead of main.
+ * Also, for the easier debugging purpose, object pointer of
+ * this class can be gotten from ACE_Log_Msg::msg_callback()
+ * and then can be used directly by user just like cout stream.
+ */
+class CE_Screen_Output
+{
+public:
+ /**
+ * Default Ctor
+ */
+ CE_Screen_Output();
+
+ /**
+ * Default Dtor
+ */
+ virtual ~CE_Screen_Output();
+
+ /**
+ * Interface to specify active window handle.
+ */
+ void SetOutputWindow(HWND hWnd);
+
+ /**
+ * Clears text screen.
+ */
+ void clear();
+
+ /**
+ * << operator that performs actual print out.
+ *
+ * Note: This is the only one operator that performs
+ * output. All other perators convert the type and
+ * use this operator underneath.
+ */
+ CE_Screen_Output& operator << (wchar_t*);
+ CE_Screen_Output& operator << (const wchar_t*);
+
+ CE_Screen_Output& operator << (char* output);
+ CE_Screen_Output& operator << (const char* output);
+
+ CE_Screen_Output& operator << (char output);
+ CE_Screen_Output& operator << (unsigned char output);
+
+ CE_Screen_Output& operator << (unsigned short output);
+
+ CE_Screen_Output& operator << (int output);
+ CE_Screen_Output& operator << (unsigned int output);
+
+ CE_Screen_Output& operator << (float output);
+
+ CE_Screen_Output& operator << (long output);
+ CE_Screen_Output& operator << (unsigned long output);
+
+ CE_Screen_Output& operator << (FILE* pFile);
+
+private:
+ /**
+ * Copy Ctor
+ */
+ CE_Screen_Output(CE_Screen_Output&);
+
+ static HWND handler_;
+
+ /**
+ * File pointer that used to save output to file.
+ * This class does not own the file handler pointer.
+ */
+ FILE* pFile_;
+};
+
+#endif // CE_Screen_Output_h
diff --git a/ACE/apps/FaCE/FACE.ico b/ACE/apps/FaCE/FACE.ico
new file mode 100644
index 00000000000..8a91925b128
--- /dev/null
+++ b/ACE/apps/FaCE/FACE.ico
Binary files differ
diff --git a/ACE/apps/FaCE/FaCE.cpp b/ACE/apps/FaCE/FaCE.cpp
new file mode 100644
index 00000000000..7d7c50ffcd3
--- /dev/null
+++ b/ACE/apps/FaCE/FaCE.cpp
@@ -0,0 +1,652 @@
+// $Id$
+
+#include "FaCE.h"
+
+#ifdef NO_ACE
+
+#include "CE_ARGV.h"
+
+#else
+
+#include <ace/ace.h>
+#include <ace/Log_Msg.h>
+
+#endif // NO_ACE
+
+#include <commctrl.h>
+#include <aygshell.h>
+#include <sipapi.h>
+
+
+ACE_TCHAR* g_ParameterFileName = ACE_LIB_TEXT("Parameters.txt");
+
+/**
+ * This simple and small class manages user-input command line
+ * parameters and parameter history file.
+ *
+ * @author Si Mong Park (spark@ociweb.com)
+ * @version $Revision$ $Date$
+ */
+class ParameterList
+{
+public:
+ /**
+ * Default Ctor.
+ */
+ ParameterList() : next_(0), param_(0) {};
+
+ /**
+ * Dtor: deletes all sub-PameterList objects as well as
+ * memory block allocated for the param_ by _wcsdup().
+ */
+ ~ParameterList() { free(param_); delete next_; };
+
+ /**
+ * Add a new parameter to the list.
+ */
+ void addParameter(char*);
+
+ /**
+ * Add a new parameter to the list.
+ */
+ void addParameter(ACE_TCHAR*);
+
+ /**
+ * Save all parameters stored in the list to the
+ * file.
+ * Note that 'outputFile' is only for the internal use
+ * and user must call this function without any parameter.
+ */
+ void saveParameter(FILE* outputFile = 0);
+
+ /**
+ * Send out windows message to load/update parameters.
+ */
+ void sendParameterMSG(HWND, UINT);
+
+private:
+ /**
+ * A pointer to the next ParameterList object.
+ * This attribute is totally hidden from user.
+ */
+ ParameterList* next_;
+
+ /**
+ * User-specified command line parameter.
+ * This attribute is totally hidden from user.
+ */
+ ACE_TCHAR* param_;
+};
+
+
+void ParameterList::addParameter(char* newParameter)
+{
+#ifdef NO_ACE
+ int len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, newParameter, -1, NULL, 0);
+ wchar_t* w_output = new wchar_t[len];
+
+ MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, newParameter, -1, w_output, len);
+ this->addParameter(w_output);
+
+ delete w_output;
+#else
+ this->addParameter(ACE_TEXT_CHAR_TO_TCHAR(newParameter));
+#endif // NO_ACE
+}
+
+
+void ParameterList::addParameter(ACE_TCHAR* newParameter)
+{
+ if (this->param_ == 0) {
+ this->param_ = _wcsdup(newParameter);
+ this->next_ = new ParameterList(); // create and add a new ParameterList object
+ }
+ else {
+ if (wcscmp(this->param_, newParameter) != 0) {
+ this->next_->addParameter(newParameter);
+ }
+ }
+}
+
+
+void ParameterList::saveParameter(FILE* outputFile)
+{
+ if ( (outputFile == 0) && (this->param_ != 0) ) {
+ outputFile = _wfopen(g_ParameterFileName, ACE_LIB_TEXT("w+"));
+ }
+
+ if (outputFile != 0) {
+ if (this->param_ != 0) {
+ fwprintf(outputFile, ACE_LIB_TEXT("%s\n"), this->param_);
+ this->next_->saveParameter(outputFile);
+ }
+ else {
+ fclose(outputFile);
+ }
+ }
+}
+
+
+void ParameterList::sendParameterMSG(HWND hDlg, UINT message)
+{
+ if (param_ != 0) {
+ SendDlgItemMessage(hDlg, IDC_CMDEDIT, message, 0, (LPARAM)this->param_);
+ this->next_->sendParameterMSG(hDlg, message);
+ }
+}
+
+
+// Global Variables:
+HINSTANCE g_hInst; // The current instance
+HWND g_hwndCB; // The command bar handle
+HWND hWndEdit; // Read only edit box for output display
+FILE* g_OutputFile; // File handler for output save
+
+ParameterList g_Parameter; // command line parameter list
+
+ACE_CE_Screen_Output cout; // Replacement of std::cout
+
+ACE_TCHAR g_CommandLine[MAX_COMMAND_LINE]; // User-specified command line parameter
+ACE_TCHAR g_SaveFileName[MAX_LOADSTRING]; // Name of the output file
+
+static SHACTIVATEINFO s_sai;
+
+// Forward declarations of functions included in this code module:
+ATOM MyRegisterClass (HINSTANCE, ACE_TCHAR*);
+BOOL InitInstance (HINSTANCE, int);
+LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK About (HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK CommandLine (HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK SaveFileName (HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK FileError (HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK FileExist (HWND, UINT, WPARAM, LPARAM);
+HWND CreateRpCommandBar(HWND);
+
+
+void InitSetup()
+{
+ g_OutputFile = 0;
+ memset(g_CommandLine, 0, MAX_COMMAND_LINE * sizeof(ACE_TCHAR));
+ memset(g_SaveFileName, 0, MAX_LOADSTRING * sizeof(ACE_TCHAR));
+}
+
+
+void LoadParameterHistory()
+{
+ FILE* parameterFile = _wfopen(g_ParameterFileName, ACE_LIB_TEXT("r"));
+
+ if (parameterFile != NULL) {
+ while (feof(parameterFile) == 0) {
+ // Note: Remember that fwprintf takes wide-character format specifier but
+ // save string as ASCII. Thus, history must be read as ASCII then converted
+ // to wide-character (Unicode on WinCE).
+ char singleParameter[MAX_COMMAND_LINE];
+ int size = 0;
+ fread(&singleParameter[size], sizeof(char), 1, parameterFile);
+
+ // WinCE does not have function that reads upto the end of line.
+ while (singleParameter[size] != '\n') {
+ fread(&singleParameter[++size], sizeof(char), 1, parameterFile);
+ }
+
+ if (size > 0) {
+ singleParameter[size] = 0; // NULL terminator
+ g_Parameter.addParameter(singleParameter);
+ }
+ }
+ fclose(parameterFile);
+ }
+}
+
+
+//
+// FUNCTION: MyRegisterClass()
+//
+// PURPOSE: Registers the window class.
+//
+// COMMENTS:
+//
+// It is important to call this function so that the application
+// will get 'well formed' small icons associated with it.
+//
+ATOM MyRegisterClass(HINSTANCE hInstance, ACE_TCHAR* szWindowClass)
+{
+ WNDCLASS wc;
+
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = (WNDPROC) WndProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_FACE));
+ wc.hCursor = 0;
+ wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
+ wc.lpszMenuName = 0;
+ wc.lpszClassName = szWindowClass;
+
+ return RegisterClass(&wc);
+}
+
+//
+// FUNCTION: InitInstance(HANDLE, int)
+//
+// PURPOSE: Saves instance handle and creates main window
+//
+// COMMENTS:
+//
+// In this function, we save the instance handle in a global variable and
+// create and display the main program window.
+//
+BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
+{
+ HWND hWnd = NULL;
+
+ ACE_TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
+ ACE_TCHAR szWindowClass[MAX_LOADSTRING]; // The window class name
+
+ g_hInst = hInstance; // Store instance handle in our global variable
+ // Initialize global strings
+ LoadString(hInstance, IDC_FACE, szWindowClass, MAX_LOADSTRING);
+ LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
+
+ //If it is already running, then focus on the window
+ hWnd = FindWindow(szWindowClass, szTitle);
+ if (hWnd)
+ {
+ // set focus to foremost child window
+ // The "| 0x01" is used to bring any owned windows to the foreground and
+ // activate them.
+ SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
+ return 0;
+ }
+
+ MyRegisterClass(hInstance, szWindowClass);
+
+ RECT rect;
+ GetClientRect(hWnd, &rect);
+
+ hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
+
+ if (!hWnd)
+ {
+ int error = 0;
+ error = GetLastError();
+ return FALSE;
+ }
+ //When the main window is created using CW_USEDEFAULT the height of the menubar (if one
+ // is created is not taken into account). So we resize the window after creating it
+ // if a menubar is present
+ {
+ RECT rc;
+ GetWindowRect(hWnd, &rc);
+ rc.bottom -= MENU_HEIGHT;
+ if (g_hwndCB)
+ MoveWindow(hWnd, rc.left, rc.top, rc.right, rc.bottom, FALSE);
+ }
+
+ ShowWindow(hWnd, nCmdShow);
+ UpdateWindow(hWnd);
+
+ return TRUE;
+}
+
+//
+// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
+//
+// PURPOSE: Processes messages for the main window.
+//
+// WM_COMMAND - process the application menu
+// WM_PAINT - Paint the main window
+// WM_DESTROY - post a quit message and return
+//
+//
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ HDC hdc;
+ int wmId, wmEvent, nCmdHt;
+ PAINTSTRUCT ps;
+ RECT textRect;
+
+ switch (message)
+ {
+ case WM_COMMAND:
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+ // Parse the menu selections:
+ switch (wmId)
+ {
+ case IDM_HELP_ABOUT:
+ DialogBox(g_hInst, (const ACE_TCHAR*)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
+ break;
+
+ case IDOK:
+ SendMessage(hWnd, WM_ACTIVATE, MAKEWPARAM(WA_INACTIVE, 0), (LPARAM)hWnd);
+ SendMessage(hWnd, WM_CLOSE, 0, 0);
+ break;
+
+ case ID_SETTING_RUN:
+ {
+#ifdef NO_ACE
+ cout << ACE_LIB_TEXT("START with command line: ") << g_CommandLine << endl;
+ CE_ARGV ce_argv(g_CommandLine);
+ main_i(ce_argv.argc(), ce_argv.argv());
+ cout << ACE_LIB_TEXT("END") << endl << endl;
+#else
+ cout << ACE_LIB_TEXT("START with command line: ") << g_CommandLine << endl;
+ ACE_CE_ARGV ce_argv(g_CommandLine);
+ ACE::init();
+ ACE_MAIN_OBJECT_MANAGER
+ ACE_LOG_MSG->msg_callback(&cout); // register call back
+ ACE_LOG_MSG->set_flags(ACE_Log_Msg::MSG_CALLBACK); // set call back flag
+ ace_main_i(ce_argv.argc(), ce_argv.argv());
+ ACE::fini();
+ cout << ACE_LIB_TEXT("END") << endl << endl;
+#endif // NO_ACE
+ }
+ break;
+
+ case ID_SETTING_EXIT:
+ SendMessage(hWnd, WM_DESTROY, 0, 0);
+ break;
+
+ case ID_TOOLS_SAVETOFILE:
+ // create a dialog box to get the file name
+ DialogBox(g_hInst, (const ACE_TCHAR*)IDD_OUTFILE, hWnd, (DLGPROC)SaveFileName);
+ break;
+
+ case ID_SETTING_COMMANDLINE:
+ // create a dialog box to get the command line
+ DialogBox(g_hInst, (const ACE_TCHAR*)IDD_CMDLINE, hWnd, (DLGPROC)CommandLine);
+ break;
+
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+ break;
+
+ case WM_CREATE:
+ SHMENUBARINFO mbi;
+
+ memset(&mbi, 0, sizeof(SHMENUBARINFO));
+ mbi.cbSize = sizeof(SHMENUBARINFO);
+ mbi.hwndParent = hWnd;
+ mbi.nToolBarId = IDM_MENU;
+ mbi.hInstRes = g_hInst;
+ mbi.nBmpId = 0;
+ mbi.cBmpImages = 0;
+
+ if (!SHCreateMenuBar(&mbi))
+ return NULL;
+
+ g_hwndCB = mbi.hwndMB;
+
+ // Initialize the shell activate info structure
+ memset (&s_sai, 0, sizeof (s_sai));
+ s_sai.cbSize = sizeof (s_sai);
+
+ GetClientRect(hWnd, &textRect);
+ nCmdHt = CommandBar_Height(mbi.hwndMB);
+
+ hWndEdit = CreateWindow(ACE_LIB_TEXT("EDIT"),
+ NULL,
+ WS_CHILD | WS_VISIBLE | ES_READONLY | ES_MULTILINE | WS_VSCROLL | WS_HSCROLL,
+ 0,
+ 0,
+ textRect.right,
+ textRect.bottom - MENU_HEIGHT,
+ hWnd,
+ NULL,
+ g_hInst,
+ NULL);
+ cout.SetOutputWindow(hWndEdit);
+ LoadParameterHistory();
+ break;
+
+ case WM_PAINT:
+ RECT rt;
+ hdc = BeginPaint(hWnd, &ps);
+ GetClientRect(hWnd, &rt);
+ EndPaint(hWnd, &ps);
+ break;
+
+ case WM_ACTIVATE:
+ // Notify shell of our activate message
+ SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
+ break;
+
+ case WM_SETTINGCHANGE:
+ SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
+ break;
+
+ case WM_HIBERNATE: // low power
+ case WM_CLOSE:
+ case WM_DESTROY:
+ g_Parameter.saveParameter(); // save parameters to history file
+ CommandBar_Destroy(g_hwndCB);
+ PostQuitMessage(0);
+ break;
+
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+ return 0;
+}
+
+
+HWND CreateRpCommandBar(HWND hwnd)
+{
+ SHMENUBARINFO mbi;
+
+ memset(&mbi, 0, sizeof(SHMENUBARINFO));
+ mbi.cbSize = sizeof(SHMENUBARINFO);
+ mbi.hwndParent = hwnd;
+ mbi.nToolBarId = IDM_MENU;
+ mbi.hInstRes = g_hInst;
+ mbi.nBmpId = 0;
+ mbi.cBmpImages = 0;
+
+ if (!SHCreateMenuBar(&mbi))
+ return NULL;
+
+ return mbi.hwndMB;
+}
+
+// Mesage handler for the About box.
+LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ SHINITDLGINFO shidi;
+
+ ACE_TCHAR* copyrightNote = ACE_LIB_TEXT(
+"ACE® and TAO® are copyrighted by Dr. Douglas C. Schmidt and Center for Distributed Object \
+Computing at Washington University,© 1993-2002, all rights reserved. \
+FaCE is copyrighted by Object Computing, Inc.,© 2002,\n all rights reserved.\n\
+See License.txt for more information.");
+
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ // Create a Done button and size it.
+ shidi.dwMask = SHIDIM_FLAGS;
+ shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
+ shidi.hDlg = hDlg;
+ SHInitDialog(&shidi);
+ SetDlgItemText(hDlg, IDC_COPYRIGHT, copyrightNote);
+ return TRUE;
+
+ case WM_COMMAND:
+ if (LOWORD(wParam) == IDOK)
+ {
+ EndDialog(hDlg, LOWORD(wParam));
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+
+LRESULT CALLBACK CommandLine(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ int wmId;
+ int wmEvent;
+
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ g_Parameter.sendParameterMSG(hDlg, CB_INSERTSTRING);
+ SetDlgItemText(hDlg, IDC_CMDEDIT, g_CommandLine); // pass existing command line for display
+ return TRUE;
+
+ case WM_COMMAND:
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+ // Parse the menu selections:
+ switch (wmId)
+ {
+ case IDOK:
+ // new command line accepted
+ GetDlgItemText(hDlg, IDC_CMDEDIT, g_CommandLine, MAX_COMMAND_LINE - 1);
+ EndDialog(hDlg, wmId);
+ g_Parameter.addParameter(g_CommandLine);
+ return TRUE;
+
+ case IDCANCEL:
+ EndDialog(hDlg, wmId);
+ return TRUE;
+
+ default:
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+
+LRESULT CALLBACK SaveFileName(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ int wmId;
+ int wmEvent;
+
+ ACE_TCHAR tempBuffer[MAX_LOADSTRING];
+ ACE_TCHAR fileMode[3] = { 0, '+', 0 }; // mode will either be "a+" or "w+"
+ FILE* tempFile;
+
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ SetDlgItemText(hDlg, IDC_SAVEFILE, g_SaveFileName);
+ return TRUE;
+
+ case WM_COMMAND:
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+ // Parse the menu selections:
+ switch (wmId)
+ {
+ case IDOK:
+ GetDlgItemText(hDlg, IDC_SAVEFILE, tempBuffer, MAX_LOADSTRING - 1);
+ EndDialog(hDlg, wmId);
+
+ tempFile = _wfopen(tempBuffer, ACE_LIB_TEXT("r"));
+
+ if (tempFile != NULL) // if file exists
+ {
+ fclose(tempFile); // close temp handler
+ int choice = DialogBox(g_hInst, (const ACE_TCHAR*)IDD_FILEEXIST, hDlg, (DLGPROC)FileExist);
+ switch (choice)
+ {
+ case IDOVERWRITE: // overwrite existing file
+ fileMode[0] = 'w';
+ break;
+
+ case IDC_APPEND: // append to existing file
+ fileMode[0] = 'a';
+ break;
+
+ case IDCANCEL: // cancel operation without changing g_OutputFile
+ return TRUE;
+ }
+ }
+ else // if file does not exist
+ {
+ fileMode[0] = 'w';
+ }
+
+ tempFile = _wfopen(tempBuffer, fileMode);
+
+ if (tempFile == NULL)
+ {
+ DialogBox(g_hInst, (const ACE_TCHAR*)IDD_ERRFILE, hDlg, (DLGPROC)FileError);
+ }
+ else
+ {
+ wcscpy(g_SaveFileName, tempBuffer);
+
+ if (g_OutputFile != NULL)
+ {
+ fclose(g_OutputFile); // close any open file
+ }
+
+ g_OutputFile = tempFile;
+
+ cout << g_OutputFile; // update FILE* for the CE_Screen_Output class object.
+ }
+
+ return TRUE;
+
+ case IDCANCEL:
+ EndDialog(hDlg, wmId);
+ return TRUE;
+
+ default:
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+
+LRESULT CALLBACK FileError(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ return TRUE;
+
+ case WM_COMMAND:
+ if (LOWORD(wParam) == IDOK)
+ {
+ EndDialog(hDlg, LOWORD(wParam));
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+
+LRESULT CALLBACK FileExist(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ return TRUE;
+ case WM_COMMAND:
+ EndDialog(hDlg, LOWORD(wParam));
+ return TRUE;
+ default:
+ return FALSE;
+ }
+
+ return FALSE;
+}
diff --git a/ACE/apps/FaCE/FaCE.h b/ACE/apps/FaCE/FaCE.h
new file mode 100644
index 00000000000..8a4b80425d9
--- /dev/null
+++ b/ACE/apps/FaCE/FaCE.h
@@ -0,0 +1,57 @@
+// -*- C++ -*-
+//=============================================================================
+/**
+ * @file FaCE.h
+ *
+ * $Id$
+ *
+ * @author Si Mong Park <spark@ociweb.com>
+ */
+//=============================================================================
+
+#if !defined(AFX_FACE_H__1043241E_A6A9_4246_A9E4_7A774E19EE73__INCLUDED_)
+#define AFX_FACE_H__1043241E_A6A9_4246_A9E4_7A774E19EE73__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#if (_WIN32_WCE <= 211)
+#error This project can not be built for H/PC Pro 2.11 or earlier platforms.
+#endif
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+//////
+// BEGIN FaCE specific preprocessor
+#ifdef NO_ACE
+
+#include <windows.h>
+#include "CE_Screen_Output.h"
+
+#define ACE_TCHAR wchar_t
+#define ACE_LIB_TEXT(STRING) L##STRING
+#define ACE_CE_Screen_Output CE_Screen_Output
+
+int main_i(int, wchar_t**);
+
+#else
+
+#include <ace/OS.h>
+#include <ace/CE_Screen_Output.h>
+
+int ace_main_i(int, ACE_TCHAR**);
+
+#endif // NO_ACE
+// END FaCE specific
+//////
+
+#include "resource.h"
+
+#define MENU_HEIGHT 26
+#define MAX_LOADSTRING 101
+#define MAX_COMMAND_LINE 1001 // Max number of characters + 1 (null at the end) for user-input argv
+
+extern ACE_CE_Screen_Output cout; // Replacement of std::cout
+
+#endif // !defined(AFX_FACE_H__1043241E_A6A9_4246_A9E4_7A774E19EE73__INCLUDED_)
diff --git a/ACE/apps/FaCE/FaCE.mpc b/ACE/apps/FaCE/FaCE.mpc
new file mode 100644
index 00000000000..6fc6b294a09
--- /dev/null
+++ b/ACE/apps/FaCE/FaCE.mpc
@@ -0,0 +1,12 @@
+// -*- MPC -*-
+// $Id$
+
+project: aceexe {
+ exename = FaCE
+ requires += wince
+
+ Source_Files {
+ FaCE.cpp
+ Main.cpp
+ }
+}
diff --git a/ACE/apps/FaCE/FaCE.rc b/ACE/apps/FaCE/FaCE.rc
new file mode 100644
index 00000000000..1d1b40df81e
--- /dev/null
+++ b/ACE/apps/FaCE/FaCE.rc
@@ -0,0 +1,268 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "newres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_FACE ICON DISCARDABLE "FACE.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""newres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Data
+//
+
+IDM_MENU SHMENUBAR MOVEABLE PURE
+BEGIN
+ IDM_MENU, 2,
+ I_IMAGENONE, ID_SETTING, TBSTATE_ENABLED,
+ TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_CAP_SETTING, 0, 0,
+ I_IMAGENONE, IDM_MAIN_COMMAND1, TBSTATE_ENABLED,
+ TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_HELP, 0, 1,
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menubar
+//
+
+IDM_MENU MENU DISCARDABLE
+BEGIN
+ POPUP "Setting"
+ BEGIN
+ MENUITEM "Command Line", ID_SETTING_COMMANDLINE
+ MENUITEM "Run", ID_SETTING_RUN
+ MENUITEM SEPARATOR
+ MENUITEM "Exit", ID_SETTING_EXIT
+ END
+ POPUP "Tools"
+ BEGIN
+ MENUITEM "About", IDM_HELP_ABOUT
+ MENUITEM "Save To File", ID_TOOLS_SAVETOFILE
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 148, 161
+STYLE WS_POPUP | WS_CAPTION
+EXSTYLE 0x80000000L
+CAPTION "About FACE"
+FONT 8, "System"
+BEGIN
+ CONTROL 113,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,33,6,
+ 69,52
+ CTEXT "Static",IDC_COPYRIGHT,7,86,128,68
+ CONTROL 114,IDC_TAO,"Static",SS_BITMAP,7,61,134,22
+END
+
+IDD_CMDLINE DIALOG DISCARDABLE 0, 0, 125, 50
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Command Line"
+FONT 8, "System"
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,7,29,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,68,29,50,14
+ COMBOBOX IDC_CMDEDIT,7,7,111,80,CBS_DROPDOWN | CBS_AUTOHSCROLL |
+ CBS_OEMCONVERT | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL |
+ WS_TABSTOP
+END
+
+IDD_OUTFILE DIALOG DISCARDABLE 0, 0, 127, 49
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Output File Name"
+FONT 8, "System"
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,7,28,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,70,28,50,14
+ EDITTEXT IDC_SAVEFILE,7,7,113,14,ES_AUTOHSCROLL
+END
+
+IDD_ERRFILE DIALOG DISCARDABLE 0, 0, 124, 49
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "ERROR"
+FONT 8, "System"
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,37,28,50,14
+ CTEXT "File Creation Error!",IDC_ERRFILE,13,7,98,17,
+ SS_CENTERIMAGE
+END
+
+IDD_FILEEXIST DIALOG DISCARDABLE 0, 0, 114, 90
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "File Exists"
+FONT 8, "System"
+BEGIN
+ DEFPUSHBUTTON "Overwrite",IDOVERWRITE,32,32,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,32,68,50,14
+ PUSHBUTTON "Append",IDC_APPEND,32,50,50,14
+ CTEXT "File already exists!",IDC_STATIC,7,15,100,11
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDC_FACE ACCELERATORS DISCARDABLE
+BEGIN
+ "A", IDM_HELP_ABOUT, VIRTKEY, CONTROL, NOINVERT
+ "Q", IDOK, VIRTKEY, CONTROL, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE
+BEGIN
+ IDD_ABOUTBOX, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 141
+ TOPMARGIN, 6
+ BOTTOMMARGIN, 154
+ END
+
+ IDD_CMDLINE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 118
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 43
+ END
+
+ IDD_OUTFILE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 120
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 42
+ END
+
+ IDD_ERRFILE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 117
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 42
+ END
+
+ IDD_FILEEXIST, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 107
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 82
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_ACERACER BITMAP DISCARDABLE "ACE_Racer.bmp"
+IDB_TAO BITMAP DISCARDABLE "TAO.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_APP_TITLE "FaCE"
+ IDC_FACE "FaCE"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_HELP "Tools"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_COMMAND1 "Done "
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_CAP_SETTING "Setting"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/ACE/apps/FaCE/FaCENOACE.mpc b/ACE/apps/FaCE/FaCENOACE.mpc
new file mode 100644
index 00000000000..1ad40844b2f
--- /dev/null
+++ b/ACE/apps/FaCE/FaCENOACE.mpc
@@ -0,0 +1,15 @@
+// -*- MPC -*-
+// $Id$
+
+project {
+ exename = FaCENOACE
+ requires += wince
+ macros += NO_ACE
+
+ Source_Files {
+ FaCE.cpp
+ Main.cpp
+ CE_ARGV.CPP
+ CE_Screen_Output.cpp
+ }
+}
diff --git a/ACE/apps/FaCE/FaCE_OS.h b/ACE/apps/FaCE/FaCE_OS.h
new file mode 100644
index 00000000000..79e0cf313ed
--- /dev/null
+++ b/ACE/apps/FaCE/FaCE_OS.h
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file FaCE_OS.h
+ *
+ * $Id$
+ *
+ * @author Si Mong Park <spark@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef FaCE_OS_h
+#define FaCE_OS_h
+
+// This definition is for the "int FaCE_MAIN(int, wchar_t**)" using FaCE.
+# define FaCE_MAIN \
+ace_main_i (int, ACE_TCHAR**); \
+extern BOOL InitInstance (HINSTANCE, int); \
+extern void InitSetup(); \
+int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, ACE_TCHAR* lpCmdLine, int nCmdShow) \
+{ \
+ MSG msg; \
+ HACCEL hAccelTable; \
+ if (!InitInstance (hInstance, nCmdShow)) return FALSE; \
+ hAccelTable = LoadAccelerators(hInstance, (const ACE_TCHAR*)IDC_FACE); \
+ InitSetup(); \
+ while (GetMessage(&msg, NULL, 0, 0)) { \
+ if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { \
+ TranslateMessage(&msg); \
+ DispatchMessage(&msg); \
+ } \
+ } \
+ return msg.wParam; \
+} \
+int ace_main_i
+
+#endif // FaCE_OS_h
diff --git a/ACE/apps/FaCE/License.txt b/ACE/apps/FaCE/License.txt
new file mode 100644
index 00000000000..ceaf85d3550
--- /dev/null
+++ b/ACE/apps/FaCE/License.txt
@@ -0,0 +1,27 @@
+==
+== Copyright and Licensing Information
+==
+
+ACE(tm) and TAO(tm) are copyrighted by Dr. Douglas C. Schmidt and the Center for Distributed
+Object Computing ('DOC' group) at Washington University, Copyright (C) 1993 - 2002, all rights
+reserved. Since ACE and TAO are open source, free software, you are free to use, modify, and
+distribute the ACE and TAO source code and object code produced from the source, as long as
+you include this copyright statement along with code built using ACE and TAO. Please refer to
+ACE and TAO documentations for detailed copyright and license information on ACE and TAO.
+
+FaCE is an additional front-end shell package designed for ACE and TAO testing work for Pocket
+PC 2002 platform, created and released by Object Computing, Inc. (OCI) and distributed with ACE
+and TAO under the same licensing terms. You can modify and change the source of FaCE for your
+own use as long as you provide attribution to OCI by including its copyright statement in your
+distributions of source and object code. OCI welcomes submissions of improvements to the FaCE
+code base.
+
+FaCE is copyrighted by Object Computing, Inc., St. Louis Missouri, Copyright (C) 2002,
+all rights reserved.
+
+
+==
+== Warranty Information
+==
+
+FaCE is provided 'as is' without warranties of any kind.
diff --git a/ACE/apps/FaCE/Main.cpp b/ACE/apps/FaCE/Main.cpp
new file mode 100644
index 00000000000..9c7df885341
--- /dev/null
+++ b/ACE/apps/FaCE/Main.cpp
@@ -0,0 +1,49 @@
+// $Id$
+
+// ************************************************
+// ** This file is NOT to be used for framework. **
+// ************************************************
+
+// This file defines the entry point for Windows CE, which is defined in OS.h for real applications.
+
+
+#include "FaCE.h"
+
+extern BOOL InitInstance (HINSTANCE, int);
+extern void InitSetup();
+
+
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, ACE_TCHAR* lpCmdLine, int nCmdShow)
+{
+ MSG msg;
+ HACCEL hAccelTable;
+ if (!InitInstance (hInstance, nCmdShow)) return FALSE;
+ hAccelTable = LoadAccelerators(hInstance, (const ACE_TCHAR*)IDC_FACE);
+ InitSetup();
+ while (GetMessage(&msg, NULL, 0, 0)) {
+ if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+ return msg.wParam;
+}
+
+
+#ifdef NO_ACE
+
+int main_i(int, ACE_TCHAR**)
+{
+ // this function will be replaced by user's main_ce function
+ return 0;
+}
+
+#else
+
+int ace_main_i(int, ACE_TCHAR**)
+{
+ // this function will be replaced by user's main_ce function
+ return 0;
+}
+
+#endif // NO_ACE
diff --git a/ACE/apps/FaCE/README b/ACE/apps/FaCE/README
new file mode 100644
index 00000000000..a4bd2d981b1
--- /dev/null
+++ b/ACE/apps/FaCE/README
@@ -0,0 +1,287 @@
+===
+=== FaCE (Front-end for ACE CE)
+===
+=== Object Computing, Inc. <http://www.ociweb.com>
+=== St. Louis, Missouri
+=== Copyright (C) 2002. All rights reserved.
+===
+=== V1.01, March 30th, 2002
+===
+
+
+== What's FaCE?
+
+FaCE is a simple front-end framework for testing and debugging non-Windows
+CE applications on the Pocket PC 2002 platform. Originally, FaCE was
+developed to test ACE and TAO components internally in Object Computing, Inc.
+However, since it has shown dramatic increase of productivity in a lot
+shorter amount of time, it has been prepared as a package for all programmers
+who want to test and run existing codes (non-WinCE native codes) on Pocket PC
+2002 and WinCE 3.0.
+
+The features of FaCE are:
+
+ 1. command line parameter support
+ 2. command line history support (never type in same command line again)
+ 3. output displayed on the windows screen
+ 4. output to file (with append and overwrite support)
+ 5. does not use MFC
+ 6. almost no modification to existing user code
+ 7. easy to enable and disable after install
+
+* Default project files only contain Pocket PC 2002 platform configuration.
+ A new configuration can be added for other WinCE 3.0 platform from eVC.
+
+
+== Package Contents
+
+Files contained in FaCE package are:
+
+ Main Framework Files for both ACE users and non-ACE users
+ - ACE_Racer.bmp
+ - FaCE.h & cpp
+ - FaCE.ico
+ - FaCE.rc
+ - newres.h
+ - resource.h
+ - TAO.bmp
+
+ ACE entry point definition file
+ - FaCE_OS.h
+
+ Additional Framework files for non-ACE users
+ - CE_ARGV.h & cpp
+ - CE_Screen_Output.h & cpp
+
+ Files for loading skeleton FaCE from eVC
+ - FaCE.vcp & vcw : FaCE Project files for ACE users
+ - FaCENOACE.vcp & vcw : FaCE Project files for non-ACE users
+ - Main.cpp : almost empty entry point function
+
+ Misc. Files
+ - ACE.ico : a bonus icon of ACE logo
+ - License.txt : license and warranty information
+ - ReadMe.txt : this document
+
+
+== Requirement
+
+ - Microsoft(C) eMbedded Visual Studio/C++ (eVC) 3.0
+ - Pocket PC 2002 SDK
+
+ ** For ACE-users only:
+ - ACE+TAO installed and configured for WinCE build only for ACE-users
+ - ace and ace_os libraries built for WinCE and loaded on machine
+
+
+== Important Note
+
+It has been reported that certain Pocket PC 2002 machines with ARM processor
+can be totally dead and will not even respond to the hard reset. While the
+real cause of this problem is unknown, HP has released a patch for this
+problem. We have tested it, and it seems working fine on our machine (HP
+Jornada 568), which is our 5th machine that has been running fine for the
+longest time.
+
+As this has been identified by hardware manufacturer and can be fixed as HP
+did, Object Computing, Inc. (OCI) or any member of ACE+TAO community cannot
+be responsible for this problem. If this problem happens during debugging,
+contact your hardware manufacturer for fix or replacement. It has found
+that almost all Pocket PC 2002 machines regardless of manufacturers have same
+problem.
+
+Also, Phil Mesnier at OCI has found that virtual function calls under certain
+situation can cause a problem that randomly changes parameter and pointer
+values over function calls. This is due to the incorrect instructions
+generated by eVC for ARM processor. So far, no solution or patch has been
+released by compiler vendor, although vendor is aware of this problem.
+
+Since Pocket PC 2002 is based on WinCE 3.0, ACE+TAO as well as FaCE should
+be able to run on any WinCE 3.0 platform by adding a new configuraion with
+minimal change.
+
+
+== Installation & Setup
+
+1. Create a subdirectory named 'FaCE' (or anything in your taste) under
+ your current project directory.
+
+2. Copy FaCE_OS.h to the ACE_ROOT/ace directory, and add following line at
+ the end of your ACE_ROOT/ace/config.h file:
+
+ #include "FaCE_OS.h"
+
+3. Copy main framework files listed above and add them into "your" project
+ (NOT FaCE.vcw/vcp). For non-ACE users, copy additional framework files
+ for non-ACE users in addition to the main framework files.
+ It would be a good idea to create a new folder in your project and put
+ all FaCE files into it. This way, it will be easy to disable FaCE by
+ setting the folder excluded from the build on the folder property option.
+
+ ** IMPORTANT! **
+ FaCE does NOT use MFC. Thus, if your project is already set for
+ 'Not using MFC', then do not change the setting.
+
+ * Note: Make sure those files are not shared by multiple executables.
+ Each project must have its own copy of those files.
+ It is a good idea to create a separate folder on your project
+ and put FaCE related files into that folder. In that case,
+ if you want to disable FaCE and run by using normal 'main',
+ then you can simply set the whole FaCE folder excluded from
+ build in the project setting menu.
+
+4. Change your 'main()' function part similar to the following example.
+
+ #ifdef ACE_HAS_WINCE
+ #include "FaCE/FaCE.h" // use the name of subdirectory you created
+ int FaCE_MAIN (int argc, ACE_TCHAR *argv[])
+ #else
+ int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) // ACE normal entry point
+ #endif
+
+ Change the directory name for "FaCE/FaCE.h" if necessary.
+ For non-ACE users, use 'UNDER_CE' instead of 'ACE_HAS_WINCE'.
+
+ == Possible Additional Change
+
+ Above change will be the only change if your program compiles and links
+ fine under eVC. It does not mean that your program is WinCE-ready but
+ just means that your program does not include the libraries that are not
+ supported by WinCE, such as iostream.
+
+ For ACE users, good examples will be the ACE test programs under
+ $ACE_ROOT/test.
+
+ For non-ACE users, I highly recommend to create a project for WinCE first
+ if it has not already been done and write your code using wmain.
+ Try compile and link your program without FaCE to check your program does
+ not include any libraries not supported by WinCE. FaCE supports text output
+ by aliasing 'cout' in FaCE.h; however, it is NOT a real iostream but an alias
+ for CE_Screen_Output class. You may need to use '#ifdef UNDER_CE' for your
+ iostream includes, if you want to share the code among different platforms.
+
+ Also, it is important to match the parameter types for 'wmain' function.
+ For WinCE, it MUST be in the format of:
+
+ int FaCE_MAIN (int, wchar_t**)
+
+ and you can leave your original wmain type as it was for non-CE platform
+ definition.
+
+5. Go to 'ResourceView' or double-click on the 'FaCE.rc'. Open 'String Table ->
+ String Table' from the resource browse view, and change the string value (caption)
+ defined for 'IDS_APP_TITLE' from 'FaCE' to your program name. This will
+ help identifying multiple FaCE-fied applications when you brose them
+ through system memory -> running programs in case of crash.
+
+6. That's it!
+
+** Optionally, you can personalize the icons defined for FaCE for your own.
+ To do this easily, load "FaCE.vcw" (requires ACE library) or "FaCENOACE.vcw"
+ from eVC. Also, FaCENOACE.vcw can be used as 'hello world'-type starting
+ frame-work for non-WinCE programmers.
+
+** Non-ACE users may see the warning messages saying, "Could not find the file xxx",
+ for ace.h, Log_Msg.h, OS.h, and CE_Screen_Output.h. This is due to the eVC's
+ not-so-perfect precompilation file checking and totally harmless.
+
+** Later if you don't want to use FaCE anymore, simply restore your original
+ main function and remove FaCE files from your project (or exclude FaCE files
+ from build). ACE library does not have to be rebuilt as FaCE_OS.h only
+ contains macro.
+
+== Running FaCE
+
+1. Command line option
+
+User can specify the command line option for the program by using 'Settings ->
+Command Line' from the FaCE menu. FaCE will automatically save all user-entered
+command line parameters as a ASCII format file named 'Parameters.txt' in the
+root directory of WinCE device/emulator. User can edit and change by openning
+this file from any text editor and save as a ASCII text file with DOS standard
+CR/LF combo. This will greatly save time especially when you are working on the
+Pocket PC machine that does not have keyboard. Remember NOT to convert file
+format to Unicode; it must be standard DOS ASCII text file.
+
+2. Output Saving
+
+You can save output to file by selecting 'Tools -> Save To File'. By default,
+FaCE will not create/save any file. Also, any output received before setting
+up this feature will not be saved.
+
+If the file with specified name exists, FaCE will ask whether you want to
+append to the end of file or erase and overwrite. All output files will be
+saved in the root directory of the system.
+
+3. Running Your Program
+
+'Setting -> Run' will execute your program. Two tags, 'START' and 'END'
+indicate the beginning and end of your code.
+
+For ACE users, any log message sent to ACE message log (ACE_DEBUG, for example)
+will be displayed on the screen. Also, if you have setup to save to file,
+the same contents will be saved to the file as well. Note that the output will
+NOT have ACE internal tags (i.e. Dec 04 14:51:12.000 2001@LM_DEBUG@) because
+FaCE uses callback message function, and ACE does not pass those tags along
+with the output message.
+
+For non-ACE users, you can declare your own local copy of CE_Screen_Output
+object. For example, you can declare CE_Screen_Output object in your cpp file
+like:
+
+ CE_Screen_Output cout;
+
+and use it like,
+
+ int a = 100;
+ wchar_t* strTemp = L"Hello, world!";
+ cout << L"String : " << strTemp << L"a = " << a << endl;
+
+Remember, CE_Screen_Output is just a simple text output function and does not
+have the full capabilities of iostream, which is not available for WinCE 3.0.
+
+4. In case of crash
+
+If you have started your code, but the code crashes, which can be easily
+identified by looking for the 'END' tag, then you can use Windows CE's memory
+program to kill the process (Start -> Settings -> System tag -> Memory ->
+Running Programs tag). If you have changed IDS_APP_TITLE in the resource
+viewer, then you will see the name you have specified; otherwise, FaCE will be
+listed. You can select the name and stop the process by clicking 'Stop' button.
+Sometimes, you may need to reset the machine if you cannot access memory program.
+
+
+== Note
+
+- This FaCE framework does not use any MFC; it only uses general Win32
+ API, thus, your project setting does not have to be changed.
+
+- FaCE is for the 'legacy' Unix/DOS style console applications that
+ do not use any Win32 and MFC for Windows OS. Programs that are already
+ using native Windows/WinCE API's will not need FaCE framework.
+
+- If you run your application from FaCE (Settings -> Run), 'START' and
+ 'END' will appear at the beginning and end of output messages from your
+ application. If you see 'END' lable after execution, you can run your
+ program again without exit and start up FaCE again.
+
+- Make sure to terminate FaCE by selecting 'Settings -> Exit'. It will
+ completely terminate FaCE session; Clicking on the 'X' button
+ at the top-left corner of the screen will not, just like most WinCE programs.
+
+- FaCE_MAIN is only for the WinCE port of ACE, ensuring proper windows system
+ message filtering along with proper registraion so that user can see the
+ process from memory setting and task switcher applications.
+
+- ACE and FaCE do not overrides native WinMain. If you are developing for
+ Windows OS only, your WinMain should be just safe from any overrides.
+ In this case, of course, you don't need to use FaCE package.
+
+
+== Question or Comment
+
+If you have question and/or comment specific to the FaCE, please contact
+Si Park at spark@ociweb.com or Justin Michel at michel_j@ociweb.com.
+
+For general ACE+TAO support, please refer to comp.soft-sys.ace or contact
+Object Computing, Inc. at http://www.ociweb.com.
diff --git a/ACE/apps/FaCE/TAO.bmp b/ACE/apps/FaCE/TAO.bmp
new file mode 100644
index 00000000000..1492f789509
--- /dev/null
+++ b/ACE/apps/FaCE/TAO.bmp
Binary files differ
diff --git a/ACE/apps/FaCE/newres.h b/ACE/apps/FaCE/newres.h
new file mode 100644
index 00000000000..0fdbcaa3bb0
--- /dev/null
+++ b/ACE/apps/FaCE/newres.h
@@ -0,0 +1,43 @@
+// $Id$
+
+#ifndef __NEWRES_H__
+#define __NEWRES_H__
+
+#if !defined(UNDER_CE)
+#define UNDER_CE _WIN32_WCE
+#endif
+
+#if defined(_WIN32_WCE)
+ #if !defined(WCEOLE_ENABLE_DIALOGEX)
+ #define DIALOGEX DIALOG DISCARDABLE
+ #endif
+ #include <commctrl.h>
+ #define SHMENUBAR RCDATA
+ #if defined(WIN32_PLATFORM_PSPC) && (_WIN32_WCE >= 300)
+ #include <aygshell.h>
+ #define AFXCE_IDR_SCRATCH_SHMENU 28700
+ #else
+ #define I_IMAGENONE (-2)
+ #define NOMENU 0xFFFF
+ #define IDS_SHNEW 1
+
+ #define IDM_SHAREDNEW 10
+ #define IDM_SHAREDNEWDEFAULT 11
+ #endif // _WIN32_WCE_PSPC
+ #define AFXCE_IDD_SAVEMODIFIEDDLG 28701
+#endif // _WIN32_WCE
+
+#ifdef RC_INVOKED
+#ifndef _INC_WINDOWS
+#define _INC_WINDOWS
+ #include "winuser.h" // extract from windows header
+ #include "winver.h"
+#endif
+#endif
+
+#ifdef IDC_STATIC
+#undef IDC_STATIC
+#endif
+#define IDC_STATIC (-1)
+
+#endif //__NEWRES_H__
diff --git a/ACE/apps/FaCE/resource.h b/ACE/apps/FaCE/resource.h
new file mode 100644
index 00000000000..a79d8345d1b
--- /dev/null
+++ b/ACE/apps/FaCE/resource.h
@@ -0,0 +1,45 @@
+// $Id$
+
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by FaCE.rc
+//
+#define IDS_APP_TITLE 1
+#define IDC_FACE 3
+#define IDI_FACE 101
+#define IDM_MENU 102
+#define IDD_ABOUTBOX 103
+#define IDS_HELP 104
+#define IDD_CMDLINE 104
+#define IDD_OUTFILE 105
+#define IDD_ERRFILE 107
+#define IDD_FILEEXIST 109
+#define IDB_ACERACER 113
+#define IDB_TAO 114
+#define IDS_COMMAND1 301
+#define IDC_CMDEDIT 1001
+#define IDC_SAVEFILE 1002
+#define IDC_ERRFILE 1003
+#define IDOVERWRITE 1004
+#define IDC_APPEND 1005
+#define IDC_COPYRIGHT 1007
+#define IDC_TAO 1008
+#define IDM_MAIN_COMMAND1 40001
+#define IDM_HELP_ABOUT 40003
+#define ID_SETTING 40004
+#define IDS_CAP_SETTING 40006
+#define ID_SETTING_COMMANDLINE 40007
+#define ID_SETTING_RUN 40008
+#define ID_SETTING_EXIT 40011
+#define ID_TOOLS_SAVETOFILE 40012
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 116
+#define _APS_NEXT_COMMAND_VALUE 40013
+#define _APS_NEXT_CONTROL_VALUE 1009
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif