This commit is contained in:
2024-08-07 09:16:27 -04:00
parent fdfadd5c7e
commit 5f971cf684
5200 changed files with 731717 additions and 0 deletions

BIN
m68hc11/BLANK.BMP Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

136
m68hc11/CMPDlg.cpp Normal file
View File

@@ -0,0 +1,136 @@
#include <m68hc11/cmpdlg.hpp>
#include <m68hc11/m68hc11.hpp>
#include <m68hc11/opendir.hpp>
#include <common/stdio.hpp>
CMPDlg::CMPDlg(void)
{
mInitHandler.setCallback(this,&CMPDlg::initHandler);
mCreateHandler.setCallback(this,&CMPDlg::createHandler);
mCloseHandler.setCallback(this,&CMPDlg::closeHandler);
mDestroyHandler.setCallback(this,&CMPDlg::destroyHandler);
mCommandHandler.setCallback(this,&CMPDlg::commandHandler);
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
}
CMPDlg::CMPDlg(const CMPDlg &someCMPDlg)
{ // private implementation
*this=someCMPDlg;
}
CMPDlg::~CMPDlg()
{
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
}
CMPDlg &CMPDlg::operator=(const CMPDlg &someCMPDlg)
{ // private implementation
return *this;
}
bool CMPDlg::perform(GUIWindow &parentWindow)
{
return ::DialogBoxParam(processInstance(),(LPSTR)"CMPDLG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
}
CallbackData::ReturnType CMPDlg::initHandler(CallbackData &someCallbackData)
{
setItems();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType CMPDlg::createHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType CMPDlg::closeHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType CMPDlg::destroyHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType CMPDlg::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case IDCANCEL :
case CMPDLG_CANCEL :
handleCancel();
break;
case CMPDLG_OK :
handleOk();
break;
case CMPDLG_LIST :
handleList(someCallbackData);
break;
case CMPDLG_BROWSE :
handleBrowse();
break;
}
return (CallbackData::ReturnType)FALSE;
}
void CMPDlg::handleCancel(void)
{
endDialog(false);
}
void CMPDlg::handleOk(void)
{
getItems();
endDialog(true);
}
void CMPDlg::handleList(CallbackData &cbData)
{
DWORD current;
switch(cbData.wmCommandCommand())
{
case LBN_DBLCLK :
current=sendMessage(CMPDLG_LIST,LB_GETCURSEL,0,0L);
sendMessage(CMPDLG_LIST,LB_DELETESTRING,current,0L);
break;
}
}
void CMPDlg::handleBrowse()
{
String strDirectory;
OpenDirectory openDirectory;
if(!openDirectory.getOpenDirectory(*this,"Choose Folder",".",strDirectory))return;
sendMessage(CMPDLG_LIST,LB_INSERTSTRING,-1,(LPARAM)(LPCSTR)strDirectory);
}
void CMPDlg::getItems(void)
{
String strItem;
DWORD count;
mIncludePath.remove();
count=sendMessage(CMPDLG_LIST,LB_GETCOUNT,0,0L);
for(int index=0;index<count;index++)
{
sendMessage(CMPDLG_LIST,LB_GETTEXT,index,(LPARAM)(LPSTR)strItem);
mIncludePath.insert(&strItem);
}
}
void CMPDlg::setItems(void)
{
for(int index=0;index<mIncludePath.size();index++)
sendMessage(CMPDLG_LIST,LB_INSERTSTRING,-1,(LPARAM)(LPCSTR)mIncludePath[index]);
}

55
m68hc11/CMPDlg.hpp Normal file
View File

@@ -0,0 +1,55 @@
#ifndef _M68HC11_CMPDLG_HPP_
#define _M68HC11_CMPDLG_HPP_
#ifndef _COMMON_DWINDOW_HPP_
#include <common/dwindow.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
class CMPDlg : public DWindow
{
public:
CMPDlg(void);
virtual ~CMPDlg();
bool perform(GUIWindow &parentWindow);
void setIncludePath(Block<String> &includePath);
void getIncludePath(Block<String> &includePath);
private:
CMPDlg(const CMPDlg &someCMPDlg);
CMPDlg &operator=(const CMPDlg &someCMPDlg);
CallbackData::ReturnType initHandler(CallbackData &someCallbackData);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
void handleCancel(void);
void handleOk(void);
void handleList(CallbackData &cbData);
void handleBrowse(void);
void getItems(void);
void setItems(void);
Callback<CMPDlg> mInitHandler;
Callback<CMPDlg> mCreateHandler;
Callback<CMPDlg> mCloseHandler;
Callback<CMPDlg> mDestroyHandler;
Callback<CMPDlg> mCommandHandler;
Block<String> mIncludePath;
};
inline
void CMPDlg::setIncludePath(Block<String> &includePath)
{
mIncludePath=includePath;
}
inline
void CMPDlg::getIncludePath(Block<String> &includePath)
{
includePath=mIncludePath;
}
#endif

228
m68hc11/COMMCTRL.HPP Normal file
View File

@@ -0,0 +1,228 @@
#ifndef _COMMON_COMMCONTROL_HPP_
#define _COMMON_COMMCONTROL_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_OPENFILE_HPP_
#include <common/openfile.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_
#include <m68hc11/dcb.hpp>
#endif
#ifndef _M68HC11_COMMSTATUS_HPP_
#include <m68hc11/commstat.hpp>
#endif
#ifndef _THREAD_EVENT_HPP_
#include <thread/event.hpp>
#endif
class CommControl
{
public:
enum {TimeOut=5000};
enum Port{PortCOM1,PortCOM2,PortCOM3,PortCOM4};
enum EventMask{EventBreak=EV_BREAK,EventCts=EV_CTS,EventDsr=EV_DSR,EventErr=EV_ERR,EventRing=EV_RING,
EventRlsd=EV_RLSD,EventRxChar=EV_RXCHAR,EventRxFlag=EV_RXFLAG,EventTxEmpty=EV_TXEMPTY,
EventAll=EV_BREAK|EV_CTS|EV_DSR|EV_ERR|EV_RING|EV_RLSD|EV_RXCHAR|EV_RXFLAG|EV_TXEMPTY};
CommControl(void);
virtual ~CommControl();
bool open(Port commPort,BOOL overlappedIO=false);
void close();
bool getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const;
bool setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const;
bool setDeviceControlBlock(String strControlBlock)const; // (ie) "baud=1200 parity=N data=8 stop=1"
DWORD readLine(String &strLine);
DWORD writeLine(const String &strLine)const;
DWORD read(void *pBuffer,int length,DWORD timeout=0L);
DWORD write(BYTE *pBuffer,int length)const;
DWORD write(GlobalData<BYTE> &sndBuffer);
DWORD enumerateDevices(Block<Port> &deviceList);
DWORD enumerateDevices(Block<String> &deviceList);
bool clearError(void)const;
bool clearError(CommStatus &commStatus)const;
bool clearBreak(void)const;
bool clearReceiveQueue(void);
bool readFully(GlobalData<BYTE> &dataBytes);
bool readFully(BYTE *pBuffer,DWORD byteCount);
bool setBreak(void)const;
bool waitEvent(DWORD &eventMask,DWORD timeout);
bool waitEvent(DWORD timeout=TimeOut);
bool waitForBreak(DWORD timeout=TimeOut);
bool waitForData(DWORD timeout=TimeOut);
bool waitForTransmit(DWORD timeout=TimeOut);
bool setEventMask(DWORD eventMask)const;
bool hasData(void);
bool isOkay(void)const;
static void portToString(CommControl::Port port,String &strPort);
static CommControl::Port stringToPort(const String &strPort);
static void showBytes(GlobalData<BYTE> rcvBytes);
static void showBytes(BYTE *pBuffer,DWORD byteCount);
private:
CommControl(const CommControl &someCommControl);
CommControl &operator=(const CommControl &someCommControl);
void showError(DWORD errorMask)const;
FileHandle mCommDevice;
Block<String> mStrPorts;
CommStatus mCommStatus;
Event mIOEvent;
Overlapped mOverlapped;
};
inline
CommControl::CommControl(void)
{
mOverlapped.event((HANDLE)mIOEvent);
mStrPorts.insert(&String("\\.\\COM1"));
mStrPorts.insert(&String("\\.\\COM2"));
mStrPorts.insert(&String("\\.\\COM3"));
mStrPorts.insert(&String("\\.\\COM4"));
}
inline
CommControl::CommControl(const CommControl &someCommControl)
{ // private implementation
*this=someCommControl;
}
inline
CommControl::~CommControl()
{
close();
}
inline
CommControl &CommControl::operator=(const CommControl &/*someCommControl*/)
{ // private implementation
return *this;
}
inline
bool CommControl::open(Port commPort,BOOL overlappedIO)
{
close();
mCommDevice.open(mStrPorts[commPort],FileHandle::ReadWrite,FileHandle::ShareNone,FileHandle::Open,(overlappedIO?FileHandle::FlagOverlapped:FileHandle::Normal));
return isOkay();
}
inline
void CommControl::close(void)
{
if(!isOkay())return;
mCommDevice.close();
}
inline
DWORD CommControl::readLine(String &strLine)
{
strLine.reserve(1024);
if(!isOkay())return FALSE;
clearError(mCommStatus);
if(!mCommStatus.bytesInReceiveQueue())return FALSE;
return mCommDevice.getLine(strLine);
}
inline
DWORD CommControl::writeLine(const String &strLine)const
{
if(!isOkay()||strLine.isNull())return FALSE;
return mCommDevice.writeLine(strLine);
}
inline
DWORD CommControl::write(GlobalData<BYTE> &sndBuffer)
{
if(!isOkay()||!sndBuffer.size())return 0;
return write(&sndBuffer[0],sndBuffer.size());
}
inline
DWORD CommControl::write(BYTE *pBuffer,int length)const
{
if(!isOkay()||!pBuffer||!length)return 0;
return mCommDevice.write(pBuffer,length);
}
inline
bool CommControl::setBreak(void)const
{
if(!isOkay())return false;
return ::SetCommBreak((HANDLE)mCommDevice);
}
inline
bool CommControl::clearBreak(void)const
{
if(!isOkay())return false;
return ::ClearCommBreak((HANDLE)mCommDevice);
}
inline
bool CommControl::getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const
{
if(!isOkay())return false;
return ::GetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB());
}
inline
bool CommControl::setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const
{
if(!isOkay())return false;
return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB());
}
inline
bool CommControl::setDeviceControlBlock(String strControlBlock)const // (ie) "baud=1200 parity=N data=8 stop=1"
{
DeviceControlBlock deviceControlBlock;
if(!::BuildCommDCB(strControlBlock.str(),&((DeviceControlBlock&)deviceControlBlock).getDCB()))return false;
return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB());
}
inline
bool CommControl::setEventMask(DWORD eventMask)const
{
if(!isOkay())return false;
return ::SetCommMask((HANDLE)mCommDevice,eventMask);
}
inline
bool CommControl::waitEvent(DWORD timeout)
{
DWORD eventMask;
return waitEvent(eventMask,timeout);
}
inline
bool CommControl::waitForBreak(DWORD timeout)
{
if(!isOkay())return false;
setEventMask(EventBreak);
return waitEvent(timeout);
}
inline
bool CommControl::waitForData(DWORD timeout)
{
if(!isOkay())return false;
setEventMask(EventRxChar);
return waitEvent(timeout);
}
inline
bool CommControl::waitForTransmit(DWORD timeout)
{
if(!isOkay())return false;
setEventMask(EventTxEmpty);
return waitEvent(timeout);
}
#endif

213
m68hc11/COMMSTAT.HPP Normal file
View File

@@ -0,0 +1,213 @@
#ifndef _M68HC11_COMMSTATUS_HPP_
#define _M68HC11_COMMSTATUS_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
class CommStatus : private _COMSTAT
{
public:
CommStatus(void);
CommStatus(const CommStatus &someCommStatus);
virtual ~CommStatus();
CommStatus &operator=(const CommStatus &someCommStatus);
BOOL operator==(const CommStatus &someCommStatus)const;
BOOL waitingForCts(void)const;
BOOL waitingForDsr(void)const;
BOOL waitingForRlsd(void)const;
BOOL waitingRcvdXOff(void)const;
BOOL waitingSentXOff(void)const;
BOOL waitingRcvdEof(void)const;
BOOL waitingForTx(void)const;
DWORD bytesInReceiveQueue(void)const;
DWORD bytesInSendQueue(void)const;
_COMSTAT &getCOMSTAT(void);
private:
void waitingForCts(BOOL waitingForCts);
void waitingForDsr(BOOL waitingForDsr);
void waitingForRlsd(BOOL waitingForRlsd);
void waitingRcvdXOff(BOOL waitingRcvdXOff);
void waitingSentXOff(BOOL waitingSentXOff);
void waitingRcvdEof(BOOL waitingRcvdEof);
void waitingForTx(BOOL waitingForTx);
void bytesInReceiveQueue(DWORD bytesInReceiveQueue);
void bytesInSendQueue(DWORD bytesInSendQueue);
void setZero(void);
};
inline
CommStatus::CommStatus(void)
{
setZero();
}
inline
CommStatus::CommStatus(const CommStatus &someCommStatus)
{
*this=someCommStatus;
}
inline
CommStatus::~CommStatus()
{
}
inline
CommStatus &CommStatus::operator=(const CommStatus &someCommStatus)
{
waitingForCts(someCommStatus.waitingForCts());
waitingForDsr(someCommStatus.waitingForDsr());
waitingForRlsd(someCommStatus.waitingForRlsd());
waitingRcvdXOff(someCommStatus.waitingRcvdXOff());
waitingSentXOff(someCommStatus.waitingSentXOff());
waitingRcvdEof(someCommStatus.waitingRcvdEof());
waitingForTx(someCommStatus.waitingForTx());
bytesInReceiveQueue(someCommStatus.bytesInReceiveQueue());
bytesInSendQueue(someCommStatus.bytesInSendQueue());
return *this;
}
inline
BOOL CommStatus::operator==(const CommStatus &someCommStatus)const
{
return (waitingForCts()==someCommStatus.waitingForCts()&&
waitingForDsr()==someCommStatus.waitingForDsr()&&
waitingForRlsd()==someCommStatus.waitingForRlsd()&&
waitingRcvdXOff()==someCommStatus.waitingRcvdXOff()&&
waitingSentXOff()==someCommStatus.waitingSentXOff()&&
waitingRcvdEof()==someCommStatus.waitingRcvdEof()&&
waitingForTx()==someCommStatus.waitingForTx()&&
bytesInReceiveQueue()==someCommStatus.bytesInReceiveQueue()&&
bytesInSendQueue()==someCommStatus.bytesInSendQueue());
}
inline
BOOL CommStatus::waitingForCts(void)const
{
return _COMSTAT::fCtsHold;
}
inline
void CommStatus::waitingForCts(BOOL waitingForCts)
{
_COMSTAT::fCtsHold=waitingForCts;
}
inline
BOOL CommStatus::waitingForDsr(void)const
{
return _COMSTAT::fDsrHold;
}
inline
void CommStatus::waitingForDsr(BOOL waitingForDsr)
{
_COMSTAT::fDsrHold=waitingForDsr;
}
inline
BOOL CommStatus::waitingForRlsd(void)const
{
return _COMSTAT::fRlsdHold;
}
inline
void CommStatus::waitingForRlsd(BOOL waitingForRlsd)
{
_COMSTAT::fRlsdHold=waitingForRlsd;
}
inline
BOOL CommStatus::waitingRcvdXOff(void)const
{
return _COMSTAT::fXoffHold;
}
inline
void CommStatus::waitingRcvdXOff(BOOL waitingRcvdXOff)
{
_COMSTAT::fXoffHold=waitingRcvdXOff;
}
inline
BOOL CommStatus::waitingSentXOff(void)const
{
return _COMSTAT::fXoffSent;
}
inline
void CommStatus::waitingSentXOff(BOOL waitingSentXOff)
{
_COMSTAT::fXoffSent=waitingSentXOff;
}
inline
BOOL CommStatus::waitingRcvdEof(void)const
{
return _COMSTAT::fEof;
}
inline
void CommStatus::waitingRcvdEof(BOOL waitingRcvdEof)
{
_COMSTAT::fEof=waitingRcvdEof;
}
inline
BOOL CommStatus::waitingForTx(void)const
{
return _COMSTAT::fTxim;
}
inline
void CommStatus::waitingForTx(BOOL waitingForTx)
{
_COMSTAT::fTxim=waitingForTx;
}
inline
DWORD CommStatus::bytesInReceiveQueue(void)const
{
return _COMSTAT::cbInQue;
}
inline
void CommStatus::bytesInReceiveQueue(DWORD bytesInReceiveQueue)
{
_COMSTAT::cbInQue=bytesInReceiveQueue;
}
inline
DWORD CommStatus::bytesInSendQueue(void)const
{
return _COMSTAT::cbOutQue;
}
inline
void CommStatus::bytesInSendQueue(DWORD bytesInSendQueue)
{
_COMSTAT::cbOutQue=bytesInSendQueue;
}
inline
_COMSTAT &CommStatus::getCOMSTAT(void)
{
return *this;
}
inline
void CommStatus::setZero(void)
{
_COMSTAT::fCtsHold=0;
_COMSTAT::fDsrHold=0;
_COMSTAT::fRlsdHold=0;
_COMSTAT::fXoffHold=0;
_COMSTAT::fXoffSent=0;
_COMSTAT::fEof=0;
_COMSTAT::fTxim=0;
_COMSTAT::fReserved=0;
_COMSTAT::cbInQue=0;
_COMSTAT::cbOutQue=0;
}
#endif

BIN
m68hc11/DASH.BMP Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

318
m68hc11/DCB.CPP Normal file
View File

@@ -0,0 +1,318 @@
#include <m68hc11/dcb.hpp>
DeviceControlBlock::DeviceControlBlock(void)
{
setZero();
}
DeviceControlBlock::DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock)
{
*this=someDeviceControlBlock;
}
DeviceControlBlock::~DeviceControlBlock()
{
}
DeviceControlBlock &DeviceControlBlock::operator=(const DeviceControlBlock &someDeviceControlBlock)
{
baudRate(someDeviceControlBlock.baudRate());
binaryEnabled(someDeviceControlBlock.binaryEnabled());
enableParity(someDeviceControlBlock.enableParity());
ctsFlowControlOutMonitor(someDeviceControlBlock.ctsFlowControlOutMonitor());
dsrFlowControlOutMonitor(someDeviceControlBlock.dsrFlowControlOutMonitor());
dtrControl(someDeviceControlBlock.dtrControl());
dsrSensitivityEnable(someDeviceControlBlock.dsrSensitivityEnable());
continueOnXOff(someDeviceControlBlock.continueOnXOff());
xonXOffEnableTransmit(someDeviceControlBlock.xonXOffEnableTransmit());
xonXOffEnableReceive(someDeviceControlBlock.xonXOffEnableReceive());
errorCharEnable(someDeviceControlBlock.errorCharEnable());
discardNullEnable(someDeviceControlBlock.discardNullEnable());
rtsControl(someDeviceControlBlock.rtsControl());
abortOnErrorEnable(someDeviceControlBlock.abortOnErrorEnable());
xonLimit(someDeviceControlBlock.xonLimit());
xoffLimit(someDeviceControlBlock.xoffLimit());
dataBits(someDeviceControlBlock.dataBits());
parity(someDeviceControlBlock.parity());
stopBits(someDeviceControlBlock.stopBits());
xonChar(someDeviceControlBlock.xonChar());
xoffChar(someDeviceControlBlock.xoffChar());
errorChar(someDeviceControlBlock.errorChar());
eofChar(someDeviceControlBlock.eofChar());
evtChar(someDeviceControlBlock.evtChar());
return *this;
}
BOOL DeviceControlBlock::operator==(const DeviceControlBlock &someDeviceControlBlock)
{
return(baudRate()==someDeviceControlBlock.baudRate()&&
binaryEnabled()==someDeviceControlBlock.binaryEnabled()&&
enableParity()==someDeviceControlBlock.enableParity()&&
ctsFlowControlOutMonitor()==someDeviceControlBlock.ctsFlowControlOutMonitor()&&
dsrFlowControlOutMonitor()==someDeviceControlBlock.dsrFlowControlOutMonitor()&&
dtrControl()==someDeviceControlBlock.dtrControl()&&
dsrSensitivityEnable()==someDeviceControlBlock.dsrSensitivityEnable()&&
continueOnXOff()==someDeviceControlBlock.continueOnXOff()&&
xonXOffEnableTransmit()==someDeviceControlBlock.xonXOffEnableTransmit()&&
xonXOffEnableReceive()==someDeviceControlBlock.xonXOffEnableReceive()&&
errorCharEnable()==someDeviceControlBlock.errorCharEnable()&&
discardNullEnable()==someDeviceControlBlock.discardNullEnable()&&
rtsControl()==someDeviceControlBlock.rtsControl()&&
abortOnErrorEnable()==someDeviceControlBlock.abortOnErrorEnable()&&
xonLimit()==someDeviceControlBlock.xonLimit()&&
xoffLimit()==someDeviceControlBlock.xoffLimit()&&
dataBits()==someDeviceControlBlock.dataBits()&&
parity()==someDeviceControlBlock.parity()&&
stopBits()==someDeviceControlBlock.stopBits()&&
xonChar()==someDeviceControlBlock.xonChar()&&
xoffChar()==someDeviceControlBlock.xoffChar()&&
errorChar()==someDeviceControlBlock.errorChar()&&
eofChar()==someDeviceControlBlock.eofChar()&&
evtChar()==someDeviceControlBlock.evtChar());
}
DWORD DeviceControlBlock::baudRate(void)const
{
return _DCB::BaudRate;
}
void DeviceControlBlock::baudRate(DWORD baudRate)
{
_DCB::BaudRate=baudRate;
}
BOOL DeviceControlBlock::binaryEnabled(void)const
{
return _DCB::fBinary;
}
void DeviceControlBlock::binaryEnabled(BOOL binaryEnabled)
{
_DCB::fBinary=binaryEnabled;
}
BOOL DeviceControlBlock::enableParity(void)const
{
return _DCB::fParity;
}
void DeviceControlBlock::enableParity(BOOL parity)
{
_DCB::fParity=parity;
}
BOOL DeviceControlBlock::ctsFlowControlOutMonitor(void)const
{
return _DCB::fOutxCtsFlow;
}
void DeviceControlBlock::ctsFlowControlOutMonitor(BOOL ctsFlowControlOut)
{
_DCB::fOutxCtsFlow=ctsFlowControlOut;
}
BOOL DeviceControlBlock::dsrFlowControlOutMonitor(void)const
{
return _DCB::fOutxDsrFlow;
}
void DeviceControlBlock::dsrFlowControlOutMonitor(BOOL dsrFlowControlOut)
{
_DCB::fOutxDsrFlow=dsrFlowControlOut;
}
DeviceControlBlock::DtrControl DeviceControlBlock::dtrControl(void)const
{
return DtrControl(_DCB::fDtrControl);
}
void DeviceControlBlock::dtrControl(DtrControl dtrControl)
{
_DCB::fDtrControl=(DWORD)dtrControl;
}
BOOL DeviceControlBlock::dsrSensitivityEnable(void)const
{
return _DCB::fDsrSensitivity;
}
void DeviceControlBlock::dsrSensitivityEnable(BOOL dsrSensitivityEnable)
{
_DCB::fDsrSensitivity=dsrSensitivityEnable;
}
BOOL DeviceControlBlock::continueOnXOff(void)const
{
return _DCB::fTXContinueOnXoff;
}
void DeviceControlBlock::continueOnXOff(BOOL continueOnXOff)
{
_DCB::fTXContinueOnXoff=continueOnXOff;
}
BOOL DeviceControlBlock::xonXOffEnableTransmit(void)const
{
return _DCB::fOutX;
}
void DeviceControlBlock::xonXOffEnableTransmit(BOOL xonXOffEnable)
{
_DCB::fOutX=xonXOffEnable;
}
BOOL DeviceControlBlock::xonXOffEnableReceive(void)const
{
return _DCB::fInX;
}
void DeviceControlBlock::xonXOffEnableReceive(BOOL xonXOffEnable)
{
_DCB::fInX=xonXOffEnable;
}
BOOL DeviceControlBlock::errorCharEnable(void)const
{
return _DCB::fErrorChar;
}
void DeviceControlBlock::errorCharEnable(BOOL errorCharEnable)
{
_DCB::fErrorChar=errorCharEnable;
}
BOOL DeviceControlBlock::discardNullEnable(void)const
{
return _DCB::fNull;
}
void DeviceControlBlock::discardNullEnable(BOOL discardNullEnable)
{
_DCB::fNull=discardNullEnable;
}
DeviceControlBlock::RtsControl DeviceControlBlock::rtsControl(void)const
{
return RtsControl(_DCB::fRtsControl);
}
void DeviceControlBlock::rtsControl(RtsControl rtsControl)
{
_DCB::fRtsControl=(DWORD)rtsControl;
}
BOOL DeviceControlBlock::abortOnErrorEnable(void)const
{
return _DCB::fAbortOnError;
}
void DeviceControlBlock::abortOnErrorEnable(BOOL abortOnError)
{
_DCB::fAbortOnError=abortOnError;
}
WORD DeviceControlBlock::xonLimit(void)const
{
return _DCB::XonLim;
}
void DeviceControlBlock::xonLimit(WORD xonLimit)
{
_DCB::XonLim=xonLimit;
}
WORD DeviceControlBlock::xoffLimit(void)const
{
return _DCB::XoffLim;
}
void DeviceControlBlock::xoffLimit(WORD xoffLimit)
{
_DCB::XoffLim=xoffLimit;
}
BYTE DeviceControlBlock::dataBits(void)const
{
return _DCB::ByteSize;
}
void DeviceControlBlock::dataBits(BYTE dataBits)
{
_DCB::ByteSize=dataBits;
}
DeviceControlBlock::Parity DeviceControlBlock::parity(void)const
{
return Parity(_DCB::Parity);
}
void DeviceControlBlock::parity(Parity parity)
{
_DCB::Parity=BYTE(parity);
}
BYTE DeviceControlBlock::stopBits(void)const
{
return _DCB::StopBits;
}
void DeviceControlBlock::stopBits(BYTE stopBits)
{
_DCB::StopBits=stopBits;
}
char DeviceControlBlock::xonChar(void)const
{
return _DCB::XonChar;
}
void DeviceControlBlock::xonChar(char xonChar)
{
_DCB::XonChar=xonChar;
}
char DeviceControlBlock::xoffChar(void)const
{
return _DCB::XoffChar;
}
void DeviceControlBlock::xoffChar(char xoffChar)
{
_DCB::XoffChar=xoffChar;
}
char DeviceControlBlock::errorChar(void)const
{
return _DCB::ErrorChar;
}
void DeviceControlBlock::errorChar(char errorChar)
{
_DCB::ErrorChar=errorChar;
}
char DeviceControlBlock::eofChar(void)const
{
return _DCB::EofChar;
}
void DeviceControlBlock::eofChar(char eofChar)
{
_DCB::EofChar;
}
char DeviceControlBlock::evtChar(void)const
{
return _DCB::EvtChar;
}
void DeviceControlBlock::evtChar(char evtChar)
{
_DCB::EvtChar=evtChar;
}
void DeviceControlBlock::setZero(void)
{
::memset(&(_DCB&)*this,0,sizeof(_DCB));
_DCB::DCBlength=sizeof(_DCB);
}

79
m68hc11/DCB.HPP Normal file
View File

@@ -0,0 +1,79 @@
#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_
#define _M68HC11_DEVICECONTROLBLOCK_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STDLIB_HPP_
#include <common/stdlib.hpp>
#endif
class DeviceControlBlock : private _DCB
{
public:
enum DtrControl{DtrControlDisable=DTR_CONTROL_DISABLE,DtrControlEnable=DTR_CONTROL_ENABLE,DtrControlHandshake=DTR_CONTROL_HANDSHAKE};
enum RtsControl{RtsControlDisable=RTS_CONTROL_DISABLE,RtsControlEnable=RTS_CONTROL_ENABLE,RtsControlHandshake=RTS_CONTROL_HANDSHAKE,RtsControlToggle=RTS_CONTROL_TOGGLE};
enum Parity{ParityNone,ParityOdd,ParityEven,ParityMark};
DeviceControlBlock(void);
DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock);
virtual ~DeviceControlBlock();
DeviceControlBlock &operator=(const DeviceControlBlock &someDeviceControlBlock);
BOOL operator==(const DeviceControlBlock &someDeviceControlBlock);
DWORD baudRate(void)const;
void baudRate(DWORD baudRate);
BOOL binaryEnabled(void)const;
void binaryEnabled(BOOL binaryEnabled);
BOOL enableParity(void)const;
void enableParity(BOOL parity);
BOOL ctsFlowControlOutMonitor(void)const;
void ctsFlowControlOutMonitor(BOOL ctsFlowControlOut);
BOOL dsrFlowControlOutMonitor(void)const;
void dsrFlowControlOutMonitor(BOOL dsrFlowControlOut);
DtrControl dtrControl(void)const;
void dtrControl(DtrControl dtrControl);
BOOL dsrSensitivityEnable(void)const;
void dsrSensitivityEnable(BOOL dsrSensitivityEnable);
BOOL continueOnXOff(void)const;
void continueOnXOff(BOOL continueOnXOff);
BOOL xonXOffEnableTransmit(void)const;
void xonXOffEnableTransmit(BOOL xonXOffEnable);
BOOL xonXOffEnableReceive(void)const;
void xonXOffEnableReceive(BOOL xonXOffEnable);
BOOL errorCharEnable(void)const;
void errorCharEnable(BOOL errorCharEnable);
BOOL discardNullEnable(void)const;
void discardNullEnable(BOOL discardNullEnable);
RtsControl rtsControl(void)const;
void rtsControl(RtsControl rtsControl);
BOOL abortOnErrorEnable(void)const;
void abortOnErrorEnable(BOOL abortOnError);
WORD xonLimit(void)const;
void xonLimit(WORD xonLimit);
WORD xoffLimit(void)const;
void xoffLimit(WORD xoffLimit);
BYTE dataBits(void)const;
void dataBits(BYTE dataBits);
Parity parity(void)const;
void parity(Parity parity);
BYTE stopBits(void)const;
void stopBits(BYTE stopBits);
char xonChar(void)const;
void xonChar(char xonChar);
char xoffChar(void)const;
void xoffChar(char xoffChar);
char errorChar(void)const;
void errorChar(char errorChar);
char eofChar(void)const;
void eofChar(char eofChar);
char evtChar(void)const;
void evtChar(char evtChar);
_DCB &getDCB(void);
private:
void setZero(void);
};
inline
_DCB &DeviceControlBlock::getDCB(void)
{
return *this;
}
#endif

BIN
m68hc11/DOC.ICO Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

51
m68hc11/Editfnd.cpp Normal file
View File

@@ -0,0 +1,51 @@
#include <m68hc11/editfnd.hpp>
EditFind::EditFind(void)
{
}
EditFind::~EditFind()
{
}
// virtuals
void EditFind::init(void)
{
CharRange searchRange;
searchRange.posMin(0);
searchRange.posMax(0);
mFindTextEx.searchRange(searchRange);
}
void EditFind::leaveEdit(const String &strText)
{
findNext();
}
void EditFind::find(void)
{
findNext();
}
void EditFind::findNext(void)
{
String currText;
getText(currText);
if(currText.isNull())return;
if(!(currText==lastSearchText()))lastFindIndex(-1);
mFindTextEx.strFind(currText);
if(!mFindTextEx.searchRange().posMin()&&!mFindTextEx.searchRange().posMax())mFindTextEx.searchRange(CharRange(0,-1));
else
{
CharRange searchRange(mFindTextEx.foundRange());
searchRange.posMin(searchRange.posMax());
searchRange.posMax(-1);
mFindTextEx.searchRange(searchRange);
}
// mRichEditControl->setFocus();
mRichEditControl->findText(mFindTextEx);
// setFocus();
}

35
m68hc11/Editfnd.hpp Normal file
View File

@@ -0,0 +1,35 @@
#ifndef _M68HC11_EDITFIND_HPP_
#define _M68HC11_EDITFIND_HPP_
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_RICHEDIT_HPP_
#include <common/richedit.hpp>
#endif
#ifndef _M68HC11_FIND_HPP_
#include <m68hc11/find.hpp>
#endif
class EditFind : private Find
{
public:
EditFind(void);
virtual ~EditFind();
void perform(GUIWindow &parentWindow,RichEditControl &richEditControl);
protected:
virtual void findNext(void);
virtual void init(void);
virtual void find(void);
virtual void leaveEdit(const String &strText);
private:
SmartPointer<RichEditControl> mRichEditControl;
FindTextEx mFindTextEx;
};
inline
void EditFind::perform(GUIWindow &parentWindow,RichEditControl &richEditControl)
{
mRichEditControl=&richEditControl;
Find::perform(parentWindow);
}
#endif

192
m68hc11/Find.cpp Normal file
View File

@@ -0,0 +1,192 @@
#include <m68hc11/find.hpp>
#include <common/keydata.hpp>
Find::Find(void)
: mLastFindIndex(-1)
{
mKeyDownHandler.setCallback(this,&Find::keyDownHandler);
mDlgCodeHandler.setCallback(this,&Find::dlgCodeHandler);
mEditHook.insertHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler);
mEditHook.insertHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler);
}
Find::Find(const Find &find)
{ // private implementation
*this=find;
}
Find::~Find()
{
mEditHook.removeHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler);
mEditHook.removeHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler);
}
Find &Find::operator=(const Find &find)
{ // private implementation
return *this;
}
void Find::perform(GUIWindow &parentWindow)
{
create(parentWindow);
}
void Find::create(GUIWindow &parentWindow)
{
String staticName("STATIC");
String editName("EDIT");
String buttonName("BUTTON");
DialogTemplate dlgTemplate;
DialogItemTemplate staticFind;
DialogItemTemplate editFind;
DialogItemTemplate cancelButton;
DialogItemTemplate fnButton;
DialogItemTemplate wmButton;
dlgTemplate.titleText("Find");
dlgTemplate.posRect(Rect(10,73,236,62));
dlgTemplate.pointSize(8);
dlgTemplate.typeFace("Helv");
dlgTemplate.style(DS_MODALFRAME|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); // WS_POPUP
staticFind.className(staticName);
staticFind.titleText("Fi&nd what:");
staticFind.style(WS_CHILD|WS_VISIBLE);
staticFind.posRect(Rect(4,8,42,8));
staticFind.itemID(-1);
editFind.className(editName);
editFind.titleText("");
editFind.style(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP|WS_GROUP);
editFind.posRect(Rect(47,7,128,12));
editFind.itemID(FindText);
fnButton.className(buttonName);
fnButton.titleText("&Find Next");
fnButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|BS_DEFPUSHBUTTON);
fnButton.posRect(Rect(182,5,50,14));
fnButton.itemID(FindNext);
wmButton.className(buttonName);
wmButton.titleText("Match &whole word only");
wmButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX|WS_GROUP);
wmButton.posRect(Rect(4,26,100,12));
wmButton.itemID(FindWhole);
cancelButton.className(buttonName);
cancelButton.titleText("Cancel");
cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP);
cancelButton.posRect(Rect(182,23,50,14));
cancelButton.itemID(CancelFind);
dlgTemplate+=staticFind;
dlgTemplate+=editFind;
dlgTemplate+=cancelButton;
dlgTemplate+=fnButton;
dlgTemplate+=wmButton;
createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog);
}
CallbackData::ReturnType Find::keyDownHandler(CallbackData &someCallbackData)
{
KeyData keyData(someCallbackData);
String strEditText;
if(keyData.isEscapeKey())GUIWindow::postMessage(*this,WM_CLOSE,0,0L);
else if(keyData.isEnterKey())
{
getText(strEditText);
leaveEdit(strEditText);
}
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType Find::dlgCodeHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)DLGC_WANTALLKEYS;
}
WORD Find::dlgCommand(DWORD commandID,CallbackData &someCallbackData)
{
switch(commandID)
{
case FindText :
break;
case FindNext :
handleFindNext();
break;
case CancelFind :
destroy();
break;
}
return FALSE;
}
WORD Find::dlgCode(CallbackData &someCallbackData)
{
return DLGC_WANTALLKEYS;
}
BOOL Find::dlgInitDialog(CallbackData &/*someCallbackData*/)
{
mEditHook.hookWin(getItem(FindText));
init();
return TRUE;
}
void Find::dlgDestroyDialog(CallbackData &/*someCallbackData*/)
{
mEditHook.unhookWin();
return;
}
void Find::getText(String &strEditText)
{
String strText;
DynamicDialog::getText(FindText,strText);
strEditText=strText;
}
BOOL Find::matchWholeWordOnly(void)const
{
return ::SendMessage(getItem(FindWhole),BM_GETCHECK,0,0L);
}
void Find::handleFind(void)
{
find();
}
void Find::handleFindNext(void)
{
findNext();
}
// virtuals
void Find::init(void)
{
}
void Find::find(void)
{
String currText;
getText(currText);
lastSearchText(currText);
}
void Find::findNext(void)
{
String currText;
getText(currText);
lastSearchText(currText);
}
void Find::leaveEdit(const String &strEditText)
{
lastSearchText(strEditText);
}

81
m68hc11/Find.hpp Normal file
View File

@@ -0,0 +1,81 @@
#ifndef _M68HC11_FIND_HPP_
#define _M68HC11_FIND_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _DIALOG_DYNAMICDIALOG_HPP_
#include <dialog/dyndlg.hpp>
#endif
#ifndef _COMMON_HOOKPROC_HPP_
#include <common/hookproc.hpp>
#endif
class Find : private DynamicDialog
{
public:
Find(void);
virtual ~Find();
void perform(GUIWindow &parentWindow);
int lastFindIndex(void)const;
const String &lastSearchText(void)const;
void setFocus(void)const;
protected:
virtual void init(void);
virtual void find(void);
virtual void findNext(void);
virtual void leaveEdit(const String &strText);
void getText(String &strEditText);
void lastFindIndex(int lastFindIndex);
void lastSearchText(const String &lastSearchText);
BOOL matchWholeWordOnly(void)const;
private:
enum{FindText=101,CancelFind=IDCANCEL,FindNext=103,FindWhole=104};
Find(const Find &find);
Find &operator=(const Find &find);
CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData);
void handleFind(void);
void handleFindNext(void);
void create(GUIWindow &parentWindow);
WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData);
WORD dlgCode(CallbackData &someCallbackData);
BOOL dlgInitDialog(CallbackData &someCallbackData);
void dlgDestroyDialog(CallbackData &someCallbackData);
Callback<Find> mKeyDownHandler;
Callback<Find> mDlgCodeHandler;
String mLastSearchText;
int mLastFindIndex;
WinHookProc mEditHook;
};
inline
const String &Find::lastSearchText(void)const
{
return mLastSearchText;
}
inline
void Find::lastSearchText(const String &lastSearchText)
{
mLastSearchText=lastSearchText;
}
inline
void Find::lastFindIndex(int lastFindIndex)
{
mLastFindIndex=lastFindIndex;
}
inline
int Find::lastFindIndex(void)const
{
return mLastFindIndex;
}
inline
void Find::setFocus(void)const
{
GUIWindow::setFocus();
}
#endif

BIN
m68hc11/HELP/M68HC11.FTS Normal file

Binary file not shown.

BIN
m68hc11/HELP/M68HC11.HLP Normal file

Binary file not shown.

15
m68hc11/HELP/M68HC11.HPJ Normal file
View File

@@ -0,0 +1,15 @@
[OPTIONS]
ERRORLOG = error.log
COMPRESS = No
[BUILDTAGS]
[FILES]
M68HC11.RTF
[BITMAPS]
[ALIAS]
[CONFIG]
BrowseButtons()
[WINDOWS]
[BAGGAGE]

21
m68hc11/HELP/M68HC11.HPS Normal file
View File

@@ -0,0 +1,21 @@
[OPTIONS]
COMPRESS = No
OLDKEYPHRASE = No
CONTEXTSENS = No
PASCALINCLUDE = No
PASCALINCLUDENAME = noname.inc
CINCLUDENAME = noname.h
HC30NAME = hc30.exe
HC31NAME = hc31.exe
[BUILDTAGS]
[FILES]
C:\WORK\M68HC11\HELP\M68HC11.TPC
[BITMAPS]
[ALIAS]
[MAP]
[CONFIG]
[WINDOWS]
[BAGGAGE]

1244
m68hc11/HELP/M68HC11.RTF Normal file

File diff suppressed because it is too large Load Diff

1952
m68hc11/HELP/M68HC11.TPC Normal file

File diff suppressed because it is too large Load Diff

1567
m68hc11/M68HC11.BAK Normal file

File diff suppressed because it is too large Load Diff

BIN
m68hc11/M68HC11.GID Normal file

Binary file not shown.

BIN
m68hc11/M68HC11.HLP Normal file

Binary file not shown.

6
m68hc11/M68HC11.HPP Normal file
View File

@@ -0,0 +1,6 @@
#ifndef _M68HC11_M68HC11_HPP_
#define _M68HC11_M68HC11_HPP_
#ifndef _M68HC11_M68HC11_H_
#include <m68hc11/m68hc11.h>
#endif
#endif

580
m68hc11/M68HC11.PLG Normal file
View File

@@ -0,0 +1,580 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: bsptree - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16E.tmp" with contents
[
/nologo /Gz /MTd /GX /Zi /O2 /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "_WINDOWS" /D "WIN32" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c
"F:\work\BSPTREE\Bsptmpl.cpp"
"F:\work\BSPTREE\Rgbtree.cpp"
"F:\work\BSPTREE\Stdtmpl.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16E.tmp"
Creating command line "link.exe -lib /nologo /out:"..\exe\msbsp.lib" .\msvcobj\Bsptmpl.obj .\msvcobj\Rgbtree.obj .\msvcobj\Stdtmpl.obj "
<h3>Output Window</h3>
Compiling...
Bsptmpl.cpp
Rgbtree.cpp
Stdtmpl.cpp
Generating Code...
Creating library...
<h3>
--------------------Configuration: common - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16F.tmp" with contents
[
/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c
"F:\work\COMMON\accelerator.cpp"
"F:\work\COMMON\Bitmap.cpp"
"F:\work\COMMON\Bminfo.cpp"
"F:\work\COMMON\Bmplnk.cpp"
"F:\work\COMMON\Brush.cpp"
"F:\work\COMMON\Btnlnk.cpp"
"F:\work\COMMON\calendar.cpp"
"F:\work\COMMON\Catmull.cpp"
"F:\work\COMMON\Cbdata.cpp"
"F:\work\COMMON\Cbdatahk.cpp"
"F:\work\COMMON\Clipbrd.cpp"
"F:\work\COMMON\Console.cpp"
"F:\work\COMMON\Control.cpp"
"F:\work\COMMON\Crsctrl.cpp"
"F:\work\COMMON\Ddemsg.cpp"
"F:\work\COMMON\Dib.cpp"
"F:\work\COMMON\Diskinfo.cpp"
"F:\work\COMMON\Drawbmp.cpp"
"F:\work\COMMON\Dwindow.cpp"
"F:\work\COMMON\elastic.cpp"
"F:\work\COMMON\errormsg.cpp"
"F:\work\COMMON\File.cpp"
"F:\work\COMMON\Fileio.cpp"
"F:\work\COMMON\Filemap.cpp"
"F:\work\COMMON\Finddata.cpp"
"F:\work\COMMON\Font.cpp"
"F:\work\COMMON\gdipoint.cpp"
"F:\work\COMMON\Guiwnd.cpp"
"F:\work\COMMON\Hookproc.cpp"
"F:\work\COMMON\Iconfrm.cpp"
"F:\work\COMMON\Infowin.cpp"
"F:\work\COMMON\Intel.cpp"
"F:\work\COMMON\Iobuff.cpp"
"F:\work\COMMON\Logowin.cpp"
"F:\work\COMMON\Macro.cpp"
"F:\work\COMMON\Math.cpp"
"F:\work\COMMON\Mdifrm.cpp"
"F:\work\COMMON\Mdiwin.cpp"
"F:\work\COMMON\Memfile.cpp"
"F:\work\COMMON\Mmtimer.cpp"
"F:\work\COMMON\Odbutton.cpp"
"F:\work\COMMON\Odlist.cpp"
"F:\work\COMMON\Odlstalt.cpp"
"F:\work\COMMON\Odlstchk.cpp"
"F:\work\COMMON\opendlg.Cpp"
"F:\work\COMMON\Openfile.cpp"
"F:\work\COMMON\opndlgex.cpp"
"F:\work\COMMON\Owner.cpp"
"F:\work\COMMON\Pathfnd.cpp"
"F:\work\COMMON\Point.cpp"
"F:\work\COMMON\Process.cpp"
"F:\work\COMMON\Profile.cpp"
"F:\work\COMMON\Progress.cpp"
"F:\work\COMMON\Purebmp.cpp"
"F:\work\COMMON\Purebyte.cpp"
"F:\work\COMMON\puredbl.cpp"
"F:\work\COMMON\Puredwrd.cpp"
"F:\work\COMMON\Purehdc.cpp"
"F:\work\COMMON\puremenu.Cpp"
"F:\work\COMMON\Purepal.cpp"
"F:\work\COMMON\purewrd.cpp"
"F:\work\COMMON\Pview.cpp"
"F:\work\COMMON\Regkey.cpp"
"F:\work\COMMON\resbmp.cpp"
"F:\work\COMMON\Richedit.cpp"
"F:\work\COMMON\rubber.cpp"
"F:\work\COMMON\Sdate.cpp"
"F:\work\COMMON\Smrtstrm.cpp"
"F:\work\COMMON\snapshot.cpp"
"F:\work\COMMON\static.cpp"
"F:\work\COMMON\String.cpp"
"F:\work\COMMON\Systime.cpp"
"F:\work\COMMON\Vhandler.cpp"
"F:\work\COMMON\Vxdctrl.cpp"
"F:\work\COMMON\widestr.Cpp"
"F:\work\COMMON\Window.cpp"
"F:\work\COMMON\Wintimer.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16F.tmp"
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP170.tmp" with contents
[
/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fp"msvcobj/common.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c
"F:\work\COMMON\Bmdata.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP170.tmp"
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP171.tmp" with contents
[
/nologo /out:"..\exe\mscommon.lib"
.\msvcobj\accelerator.obj
.\msvcobj\Bitmap.obj
.\msvcobj\Bmdata.obj
.\msvcobj\Bminfo.obj
.\msvcobj\Bmplnk.obj
.\msvcobj\Brush.obj
.\msvcobj\Btnlnk.obj
.\msvcobj\calendar.obj
.\msvcobj\Catmull.obj
.\msvcobj\Cbdata.obj
.\msvcobj\Cbdatahk.obj
.\msvcobj\Clipbrd.obj
.\msvcobj\Console.obj
.\msvcobj\Control.obj
.\msvcobj\Crsctrl.obj
.\msvcobj\Ddemsg.obj
.\msvcobj\Dib.obj
.\msvcobj\Diskinfo.obj
.\msvcobj\Drawbmp.obj
.\msvcobj\Dwindow.obj
.\msvcobj\elastic.obj
.\msvcobj\errormsg.obj
.\msvcobj\File.obj
.\msvcobj\Fileio.obj
.\msvcobj\Filemap.obj
.\msvcobj\Finddata.obj
.\msvcobj\Font.obj
.\msvcobj\gdipoint.obj
.\msvcobj\Guiwnd.obj
.\msvcobj\Hookproc.obj
.\msvcobj\Iconfrm.obj
.\msvcobj\Infowin.obj
.\msvcobj\Intel.obj
.\msvcobj\Iobuff.obj
.\msvcobj\Logowin.obj
.\msvcobj\Macro.obj
.\msvcobj\Math.obj
.\msvcobj\Mdifrm.obj
.\msvcobj\Mdiwin.obj
.\msvcobj\Memfile.obj
.\msvcobj\Mmtimer.obj
.\msvcobj\Odbutton.obj
.\msvcobj\Odlist.obj
.\msvcobj\Odlstalt.obj
.\msvcobj\Odlstchk.obj
.\msvcobj\opendlg.obj
.\msvcobj\Openfile.obj
.\msvcobj\opndlgex.obj
.\msvcobj\Owner.obj
.\msvcobj\Pathfnd.obj
.\msvcobj\Point.obj
.\msvcobj\Process.obj
.\msvcobj\Profile.obj
.\msvcobj\Progress.obj
.\msvcobj\Purebmp.obj
.\msvcobj\Purebyte.obj
.\msvcobj\puredbl.obj
.\msvcobj\Puredwrd.obj
.\msvcobj\Purehdc.obj
.\msvcobj\puremenu.obj
.\msvcobj\Purepal.obj
.\msvcobj\purewrd.obj
.\msvcobj\Pview.obj
.\msvcobj\Regkey.obj
.\msvcobj\resbmp.obj
.\msvcobj\Richedit.obj
.\msvcobj\rubber.obj
.\msvcobj\Sdate.obj
.\msvcobj\Smrtstrm.obj
.\msvcobj\snapshot.obj
.\msvcobj\static.obj
.\msvcobj\String.obj
.\msvcobj\Systime.obj
.\msvcobj\Vhandler.obj
.\msvcobj\Vxdctrl.obj
.\msvcobj\widestr.obj
.\msvcobj\Window.obj
.\msvcobj\Wintimer.obj
]
Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP171.tmp"
<h3>Output Window</h3>
Compiling...
accelerator.cpp
Bitmap.cpp
Bminfo.cpp
Bmplnk.cpp
Brush.cpp
Btnlnk.cpp
calendar.cpp
Catmull.cpp
Cbdata.cpp
Cbdatahk.cpp
Clipbrd.cpp
Console.cpp
Control.cpp
Crsctrl.cpp
Ddemsg.cpp
Dib.cpp
Diskinfo.cpp
Drawbmp.cpp
Dwindow.cpp
elastic.cpp
Generating Code...
Compiling...
errormsg.cpp
File.cpp
Fileio.cpp
Filemap.cpp
Finddata.cpp
Font.cpp
gdipoint.cpp
Guiwnd.cpp
Hookproc.cpp
Iconfrm.cpp
Infowin.cpp
Intel.cpp
Iobuff.cpp
Logowin.cpp
Macro.cpp
Math.cpp
Mdifrm.cpp
Mdiwin.cpp
Memfile.cpp
Mmtimer.cpp
Generating Code...
Compiling...
Odbutton.cpp
Odlist.cpp
Odlstalt.cpp
Odlstchk.cpp
opendlg.Cpp
Openfile.cpp
opndlgex.cpp
Owner.cpp
Pathfnd.cpp
Point.cpp
Process.cpp
Profile.cpp
Progress.cpp
Purebmp.cpp
Purebyte.cpp
puredbl.cpp
Puredwrd.cpp
Purehdc.cpp
puremenu.Cpp
Purepal.cpp
Generating Code...
Compiling...
purewrd.cpp
Pview.cpp
Regkey.cpp
resbmp.cpp
Richedit.cpp
rubber.cpp
Sdate.cpp
Smrtstrm.cpp
snapshot.cpp
static.cpp
String.cpp
Systime.cpp
Vhandler.cpp
Vxdctrl.cpp
widestr.Cpp
Window.cpp
Wintimer.cpp
Generating Code...
Compiling...
Bmdata.cpp
Creating library...
<h3>
--------------------Configuration: dialog - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP172.tmp" with contents
[
/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c
"F:\work\DIALOG\Dlgtmpl.cpp"
"F:\work\DIALOG\Dyndlg.cpp"
"F:\work\DIALOG\Stdtmpl.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP172.tmp"
Creating command line "link.exe -lib /nologo /out:"..\exe\msdialog.lib" .\msvcobj\Dlgtmpl.obj .\msvcobj\Dyndlg.obj .\msvcobj\Stdtmpl.obj "
<h3>Output Window</h3>
Compiling...
Dlgtmpl.cpp
Dyndlg.cpp
Stdtmpl.cpp
Creating library...
<h3>
--------------------Configuration: fileio - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP173.bat" with contents
[
@echo off
c:\masm32\bin\ml /c /Zi /coff cfile.asm
]
Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP173.bat"
Creating command line "link.exe -lib /nologo /out:"..\exe\msfileio.lib" .\cfile.obj "
Performing Custom Build Step on .\cfile.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: cfile.asm
<h3>Output Window</h3>
Creating library...
<h3>
--------------------Configuration: libasm68 - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP174.tmp" with contents
[
/nologo /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/libasm68.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c
"F:\work\AS68HC11\asm6811.cpp"
"F:\work\AS68HC11\Cacheblk.cpp"
"F:\work\AS68HC11\Fmtlines.cpp"
"F:\work\AS68HC11\instrctn.cpp"
"F:\work\AS68HC11\Main.cpp"
"F:\work\AS68HC11\mode.cpp"
"F:\work\AS68HC11\Parse.cpp"
"F:\work\AS68HC11\S19Generator.cpp"
"F:\work\AS68HC11\Scan.cpp"
"F:\work\AS68HC11\symbol.cpp"
"F:\work\AS68HC11\Table.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP174.tmp"
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP175.tmp" with contents
[
/nologo /out:"..\exe\asm6811.lib"
.\msvcobj\asm6811.obj
.\msvcobj\Cacheblk.obj
.\msvcobj\Fmtlines.obj
.\msvcobj\instrctn.obj
.\msvcobj\Main.obj
.\msvcobj\mode.obj
.\msvcobj\Parse.obj
.\msvcobj\S19Generator.obj
.\msvcobj\Scan.obj
.\msvcobj\symbol.obj
.\msvcobj\Table.obj
]
Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP175.tmp"
<h3>Output Window</h3>
Compiling...
asm6811.cpp
Cacheblk.cpp
Fmtlines.cpp
instrctn.cpp
Main.cpp
mode.cpp
Parse.cpp
S19Generator.cpp
Scan.cpp
symbol.cpp
Table.cpp
Creating library...
<h3>
--------------------Configuration: printman - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP176.tmp" with contents
[
/nologo /Gz /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/Printman.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c
"F:\work\printman\Abortdlg.cpp"
"F:\work\printman\pickdlg.cpp"
"F:\work\printman\Printman.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP176.tmp"
Creating command line "link.exe -lib /nologo /out:"..\exe\printman.lib" .\msvcobj\Abortdlg.obj .\msvcobj\pickdlg.obj .\msvcobj\Printman.obj "
<h3>Output Window</h3>
Compiling...
Abortdlg.cpp
pickdlg.cpp
Printman.cpp
Creating library...
<h3>
--------------------Configuration: statbar - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP177.tmp" with contents
[
/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"\work\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c
"F:\work\STATBAR\Popup.cpp"
"F:\work\STATBAR\Statbar.cpp"
"F:\work\STATBAR\statbarx.cpp"
"F:\work\STATBAR\Statinfo.cpp"
"F:\work\STATBAR\statlogo.cpp"
"F:\work\STATBAR\Statmenu.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP177.tmp"
Creating command line "link.exe -lib /nologo /out:"..\exe\statbar.lib" .\msvcobj\Popup.obj .\msvcobj\Statbar.obj .\msvcobj\statbarx.obj .\msvcobj\Statinfo.obj .\msvcobj\statlogo.obj .\msvcobj\Statmenu.obj "
<h3>Output Window</h3>
Compiling...
Popup.cpp
Statbar.cpp
statbarx.cpp
Statinfo.cpp
statlogo.cpp
Statmenu.cpp
Creating library...
<h3>
--------------------Configuration: thread - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP178.tmp" with contents
[
/nologo /Gz /MTd /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c
"F:\work\THREAD\Event.cpp"
"F:\work\THREAD\Msgqueue.cpp"
"F:\work\THREAD\Mthread.cpp"
"F:\work\THREAD\Mutex.cpp"
"F:\work\THREAD\Ptcllbck.cpp"
"F:\work\THREAD\Qthread.cpp"
"F:\work\THREAD\Stdtmpl.cpp"
"F:\work\THREAD\Thread.cpp"
"F:\work\THREAD\thtimer.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP178.tmp"
Creating command line "link.exe -lib /nologo /out:"..\exe\msthread.lib" .\msvcobj\Event.obj .\msvcobj\Msgqueue.obj .\msvcobj\Mthread.obj .\msvcobj\Mutex.obj .\msvcobj\Ptcllbck.obj .\msvcobj\Qthread.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Thread.obj .\msvcobj\thtimer.obj "
<h3>Output Window</h3>
Compiling...
Event.cpp
Msgqueue.cpp
Mthread.cpp
Mutex.cpp
Ptcllbck.cpp
Qthread.cpp
Stdtmpl.cpp
Thread.cpp
thtimer.cpp
Creating library...
<h3>
--------------------Configuration: toolbar - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP179.tmp" with contents
[
/nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/Toolbar.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c
"F:\work\TOOLBAR\toolbar.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP179.tmp"
Creating command line "link.exe -lib /nologo /out:"..\exe\toolbar.lib" .\msvcobj\toolbar.obj "
<h3>Output Window</h3>
Compiling...
toolbar.cpp
Creating library...
<h3>
--------------------Configuration: hookproc - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17A.tmp" with contents
[
/nologo /Gz /MTd /GX /ZI /Od /I "\cortex" /I "\parts" /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/hookproc.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c
"F:\work\hookproc\Apientry.cpp"
"F:\work\hookproc\enumdesk.cpp"
"F:\work\hookproc\enumstation.cpp"
"F:\work\hookproc\enumwin.cpp"
"F:\work\hookproc\Msghook.cpp"
"F:\work\hookproc\ofnhook.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17A.tmp"
Creating command line "link.exe -lib /nologo /out:"..\exe\mshook.lib" .\msvcobj\Apientry.obj .\msvcobj\enumdesk.obj .\msvcobj\enumstation.obj .\msvcobj\enumwin.obj .\msvcobj\Msghook.obj .\msvcobj\ofnhook.obj "
<h3>Output Window</h3>
Compiling...
Apientry.cpp
enumdesk.cpp
enumstation.cpp
enumwin.cpp
Msghook.cpp
ofnhook.cpp
Creating library...
<h3>
--------------------Configuration: m68hc11 - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating command line "rc.exe /l 0x409 /fo".\msvcobj/m68hc11.res" /d "_DEBUG" "F:\work\m68hc11\m68hc11.rc""
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17B.tmp" with contents
[
/nologo /MTd /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/m68hc11.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c
"F:\work\m68hc11\CMPDlg.cpp"
"F:\work\m68hc11\codeview.cpp"
"F:\work\m68hc11\commctrl.cpp"
"F:\work\m68hc11\dcb.cpp"
"F:\work\m68hc11\Editfnd.cpp"
"F:\work\m68hc11\Find.cpp"
"F:\work\m68hc11\fmtlines.cpp"
"F:\work\m68hc11\m68reg.cpp"
"F:\work\m68hc11\Main.cpp"
"F:\work\m68hc11\mainfrm.cpp"
"F:\work\m68hc11\mcudlg.cpp"
"F:\work\m68hc11\mcuthrd.cpp"
"F:\work\m68hc11\mcuview.cpp"
"F:\work\m68hc11\Odlstled.cpp"
"F:\work\m68hc11\OPENDIR.CPP"
"F:\work\m68hc11\Serdlg.cpp"
"F:\work\m68hc11\Splash.cpp"
]
Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17B.tmp"
Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17C.tmp" with contents
[
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/m68hc11.pdb" /debug /machine:I386 /out:".\msvcobj/m68hc11.exe"
.\msvcobj\CMPDlg.obj
.\msvcobj\codeview.obj
.\msvcobj\commctrl.obj
.\msvcobj\dcb.obj
.\msvcobj\Editfnd.obj
.\msvcobj\Find.obj
.\msvcobj\fmtlines.obj
.\msvcobj\m68reg.obj
.\msvcobj\Main.obj
.\msvcobj\mainfrm.obj
.\msvcobj\mcudlg.obj
.\msvcobj\mcuthrd.obj
.\msvcobj\mcuview.obj
.\msvcobj\Odlstled.obj
.\msvcobj\OPENDIR.OBJ
.\msvcobj\Serdlg.obj
.\msvcobj\Splash.obj
.\msvcobj\m68hc11.res
\work\exe\msbsp.lib
\work\exe\mscommon.lib
\work\exe\msdialog.lib
\work\exe\msfileio.lib
\work\exe\asm6811.lib
\work\exe\printman.lib
\work\exe\statbar.lib
\work\exe\msthread.lib
\work\exe\toolbar.lib
\work\exe\mshook.lib
]
Creating command line "link.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17C.tmp"
<h3>Output Window</h3>
Compiling resources...
Compiling...
CMPDlg.cpp
codeview.cpp
commctrl.cpp
dcb.cpp
Editfnd.cpp
Find.cpp
fmtlines.cpp
m68reg.cpp
Main.cpp
mainfrm.cpp
mcudlg.cpp
mcuthrd.cpp
mcuview.cpp
Odlstled.cpp
OPENDIR.CPP
Serdlg.cpp
Splash.cpp
Linking...
Creating library .\msvcobj/m68hc11.lib and object .\msvcobj/m68hc11.exp
<h3>Results</h3>
m68hc11.exe - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

BIN
m68hc11/M68HC11.RWS Normal file

Binary file not shown.

149
m68hc11/M68HC11.~H Normal file
View File

@@ -0,0 +1,149 @@
#ifndef _M68HC11_M68HC11_H_
#define _M68HC11_M68HC11_H_
#define MCUDLG_REGISTERS 101
#define MCUDLG_CCR 102
#define MCUDLG_PC 103
#define MCUDLG_SP 104
#define MCUDLG_Y 105
#define MCUDLG_X 106
#define MCUDLG_A 107
#define IDC_LISTBOX1 109
#define MCUDLG_B 108
#define SERIAL_STOP 104
#define SERIAL_PARITY 105
#define SERIAL_APPLY 106
#define SERIAL_TEST 107
#define SERIAL_DATA 103
#define SERIAL_BAUD 102
#define SERIAL_PORT 101
#define SBCMENU_FILENEW 500
#define SBCMENU_FILEOPEN 501
#define SBCMENU_FILESAVE 502
#define SBCMENU_FILESAVEAS 503
#define SBCMENU_FILEPRINT 504
#define SBCMENU_FILEQUIT 505
#define SBCMENU_FILECLOSE 506
#define SBCMENU_EDITCUT 507
#define SBCMENU_EDITCOPY 508
#define SBCMENU_EDITPASTE 509
#define SBCMENU_EDITFIND 510
#define SBCMENU_SETTINGSSERIAL 511
#define SBCMENU_CODECOMPILE 512
#define SBCMENU_CODECOMPILEANDLOAD 513
#define SBCMENU_HELPCONTENTS 514
#define SBCMENU_HELPSEARCH 515
#define SBCMENU_REGISTRATION 516
#define SBCMENU_HELPABOUT 517
#define IDM_CASCADE 10013
#define IDM_TILE 10014
#define IDM_ARRANGE 10015
#define IDM_CLOSEALL 10016
#define IDM_MINIMIZEALL 10017
#define IDM_RESTOREALL 10018
#define STRING_M68KEYNAME 600
#define STRING_HISTORYKEYNAME 601
#define STRING_SETTINGSKEYNAME 602
#define STRING_SERIALKEYNAME 603
#define STRING_HISTORYKEYSHORTNAME 604
#define STRING_SETTINGSEMAIL 605
#define STRING_SERIALPORT 606
#define STRING_SERIALBAUD 607
#define STRING_SERIALDATA 608
#define STRING_SERIALPARITY 609
#define STRING_SERIALSTOP 610
#define STRING_COM1 611
#define STRING_COM2 612
#define STRING_COM3 613
#define STRING_COM4 614
#define STRING_CODEVIEWCLASSNAME 500
#define STRING_MCUVIEWCLASSNAME 501
#define STRING_UNTITLED 502
#define STRING_HELPFILENAME 503
#define STRING_REGISTERPORTA 700
#define STRING_REGISTERRESERVED1 701
#define STRING_REGISTERPIOC 702
#define STRING_REGISTERPORTC 703
#define STRING_REGISTERPORTB 704
#define STRING_REGISTERPORTCL 705
#define STRING_REGISTERRESERVED2 706
#define STRING_REGISTERDDRC 707
#define STRING_REGISTERPORTD 708
#define STRING_REGISTERDDRD 709
#define STRING_REGISTERPORTE 710
#define STRING_REGISTERCFORC 711
#define STRING_REGISTEROC1M 712
#define STRING_REGISTEROC1D 713
#define STRING_REGISTERTCNTH1 714
#define STRING_REGISTERTCNTLO 715
#define STRING_REGISTERTIC1HI 716
#define STRING_REGISTERTIC1LO 717
#define STRING_REGISTERTIC2HI 718
#define STRING_REGISTERTIC2LO 719
#define STRING_REGISTERTIC3HI 720
#define STRING_REGISTERTIC3LO 721
#define STRING_REGISTERTOC1HI 722
#define STRING_REGISTERTOC1LO 723
#define STRING_REGISTERTOC2HI 724
#define STRING_REGISTERTOC2LO 725
#define STRING_REGISTERTOC3HI 726
#define STRING_REGISTERTOC3LO 727
#define STRING_REGISTERTOC4HI 728
#define STRING_REGISTERTOC4LO 729
#define STRING_REGISTERTI405HI 730
#define STRING_REGISTERTI405LO 731
#define STRING_REGISTERTCTL1 732
#define STRING_REGISTERTCTL2 733
#define STRING_REGISTERTMSK1 734
#define STRING_REGISTERTFLG1 735
#define STRING_REGISTERTMSK2 736
#define STRING_REGISTERTFLG2 737
#define STRING_REGISTERPACTL 738
#define STRING_REGISTERPACNT 739
#define STRING_REGISTERSPCR 740
#define STRING_REGISTERSPSR 741
#define STRING_REGISTERSPDR 742
#define STRING_REGISTERBAUD 743
#define STRING_REGISTERSCCR1 744
#define STRING_REGISTERSCCR2 745
#define STRING_REGISTERSCSR 746
#define STRING_REGISTERSCDR 747
#define STRING_REGISTERADCTL 748
#define STRING_REGISTERADR1 749
#define STRING_REGISTERADR2 750
#define STRING_REGISTERADR3 751
#define STRING_REGISTERADR4 752
#define STRING_REGISTERBPROT 753
#define STRING_REGISTEREPROG 754
#define STRING_REGISTERRESERVED3 755
#define STRING_REGISTERRESERVED4 756
#define STRING_REGISTEROPTION 757
#define STRING_REGISTERCOPRST 758
#define STRING_REGISTERPPROG 759
#define STRING_REGISTERHPRIO 760
#define STRING_REGISTERINIT 761
#define STRING_REGISTERTEST1 762
#define STRING_REGISTERCONFIG 763
#define STRING_ERRORFILEOPEN 764
#define STRING_ERRORPORTOPEN 765
#define STRING_ERRORPORTSETTINGS 766
#define STRING_ERRORTIMEOUT 767
#define STRING_ERRORREADERROR 768
#define STRING_ERRORTALKBACKFAILURE 769
#define STRING_ERRORTALKBACKDATA 770
#define STRING_EVENTSINGLEBYTE 771
#define STRING_EVENTQUADBYTE 772
#define STRING_EVENTVARBYTE 773
#define STRING_EVENTREGDATASTART 774
#define STRING_EVENTREGDATACOMPLETE 775
#define STRING_EVENTCODECOMPLETE 776
#define STRING_EVENTDOUBLEBYTE 777
#endif

295
m68hc11/M68HC11.~RC Normal file
View File

@@ -0,0 +1,295 @@
#include <windows.h>
#include <m68hc11/m68hc11.h>
APP ICON "MOT.ICO"
MOT ICON "MOT.ICO"
DOC ICON "DOC.ICO"
BLANK BITMAP "BLANK.BMP"
ONE BITMAP "ONE.BMP"
ZERO BITMAP "ZERO.BMP"
DASH BITMAP "DASH.BMP"
SPLASH BITMAP "SPLASH.BMP"
mainMenu MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW
MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN
MENUITEM SEPARATOR
MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT
MENUITEM SEPARATOR
MENUITEM "E&xit", SBCMENU_FILEQUIT
END
POPUP "&Settings"
BEGIN
MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL
END
POPUP "&Help"
BEGIN
MENUITEM "&Contents", SBCMENU_HELPCONTENTS
MENUITEM "&Search", SBCMENU_HELPSEARCH
MENUITEM SEPARATOR
MENUITEM "&Registration...", SBCMENU_REGISTRATION
MENUITEM SEPARATOR
MENUITEM "&About ...", SBCMENU_HELPABOUT
END
END
codeMenu MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW
MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN
MENUITEM "&Close", SBCMENU_FILECLOSE
MENUITEM SEPARATOR
MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE
MENUITEM "Save &As...", SBCMENU_FILESAVEAS
MENUITEM SEPARATOR
MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT
MENUITEM SEPARATOR
MENUITEM "E&xit", SBCMENU_FILEQUIT
END
POPUP "&Edit"
BEGIN
MENUITEM "Cu&t\tCtrl+X" SBCMENU_EDITCUT
MENUITEM "&Copy\tCtrl+C" SBCMENU_EDITCOPY
MENUITEM "&Paste\tCtrl+V" SBCMENU_EDITPASTE
MENUITEM SEPARATOR
MENUITEM "&Find...\tAlt+F3" SBCMENU_EDITFIND
END
POPUP "&Settings"
BEGIN
MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL
END
POPUP "&Code"
BEGIN
MENUITEM "&Compile\tCtrl+C", SBCMENU_CODECOMPILE
MENUITEM "Compile and Load\tCtrl+P", SBCMENU_CODECOMPILEANDLOAD
END
POPUP "&Window"
BEGIN
MENUITEM "&Cascade\tShift+F5", IDM_CASCADE
MENUITEM "&Tile\tShift+F4", IDM_TILE
MENUITEM "&Arrange &icons", IDM_ARRANGE
MENUITEM SEPARATOR
MENUITEM "Close &all", IDM_CLOSEALL
MENUITEM "Mi&nimize all", IDM_MINIMIZEALL
MENUITEM "&Restore all", IDM_RESTOREALL
END
POPUP "&Help"
BEGIN
MENUITEM "&Contents", SBCMENU_HELPCONTENTS
MENUITEM "&Search", SBCMENU_HELPSEARCH
MENUITEM SEPARATOR
MENUITEM "&Registration...", SBCMENU_REGISTRATION
MENUITEM SEPARATOR
MENUITEM "&About ...", SBCMENU_HELPABOUT
END
END
mcuMenu MENU
{
POPUP "&File"
{
MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW, GRAYED
MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN, GRAYED
MENUITEM "&Close", SBCMENU_FILECLOSE
MENUITEM SEPARATOR
MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE, GRAYED
MENUITEM "Save &As...", SBCMENU_FILESAVEAS, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT
MENUITEM SEPARATOR
MENUITEM "E&xit", SBCMENU_FILEQUIT
}
POPUP "&Edit"
{
MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT
MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY
MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE
MENUITEM SEPARATOR
MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND
}
POPUP "&Window"
{
MENUITEM "&Cascade\tShift+F5", IDM_CASCADE
MENUITEM "&Tile\tShift+F4", IDM_TILE
MENUITEM "&Arrange &icons", IDM_ARRANGE
MENUITEM SEPARATOR
MENUITEM "Close &all", IDM_CLOSEALL
MENUITEM "Mi&nimize all", IDM_MINIMIZEALL
MENUITEM "&Restore all", IDM_RESTOREALL
}
POPUP "&Help"
{
MENUITEM "&Contents", SBCMENU_HELPCONTENTS
MENUITEM "&Search", SBCMENU_HELPSEARCH
MENUITEM SEPARATOR
MENUITEM "&Registration...", SBCMENU_REGISTRATION
MENUITEM SEPARATOR
MENUITEM "&About ...", SBCMENU_HELPABOUT
}
}
SERIAL DIALOG 6, 15, 207, 111
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Serial Setup"
FONT 6, "MS Sans Serif"
{
DEFPUSHBUTTON "OK", IDOK, 153, 3, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 153, 18, 50, 14
PUSHBUTTON "Test", SERIAL_TEST, 153, 32, 50, 14
PUSHBUTTON "Apply", SERIAL_APPLY, 153, 46, 50, 14
COMBOBOX SERIAL_BAUD, 30, 24, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX SERIAL_DATA, 30, 37, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX SERIAL_PARITY, 30, 63, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX SERIAL_PORT, 30, 11, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Port:", -1, 3, 14, 18, 8
LTEXT "Baud:", -1, 3, 27, 21, 8
LTEXT "Data:", -1, 3, 40, 20, 8
LTEXT "Stop:", -1, 4, 53, 19, 8
LTEXT "Parity:", -1, 3, 65, 19, 8
COMBOBOX SERIAL_STOP, 30, 50, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
}
MCUDLG DIALOG 6, 5, 358, 174
STYLE DS_MODALFRAME | 0x4L | WS_CHILD | WS_VISIBLE
FONT 6, "MS Sans Serif"
{
DEFPUSHBUTTON "Start", IDOK, 254, 5, 50, 14
PUSHBUTTON "Quit", IDCANCEL, 304, 5, 50, 14
LISTBOX MCUDLG_REGISTERS, 15, 38, 144, 129, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS
EDITTEXT MCUDLG_A, 217, 37, 38, 12
EDITTEXT MCUDLG_B, 256, 37, 38, 12
EDITTEXT MCUDLG_X, 217, 50, 38, 12
EDITTEXT MCUDLG_Y, 256, 50, 38, 12
EDITTEXT MCUDLG_SP, 217, 63, 38, 12
EDITTEXT MCUDLG_PC, 256, 63, 38, 12
EDITTEXT MCUDLG_CCR, 217, 76, 38, 12
LISTBOX IDC_LISTBOX1, 168, 107, 177, 60, LBS_STANDARD
CTEXT "MCU Registers", -1, 44, 26, 60, 8
CTEXT "Processor", -1, 203, 26, 49, 8
LTEXT "Accumulator A", -1, 165, 40, 51, 8
LTEXT "Accumulator B", -1, 297, 39, 49, 8
LTEXT "Index Register X", -1, 163, 52, 56, 8
LTEXT "Index Register Y", -1, 296, 51, 55, 8
LTEXT "SP", -1, 201, 65, 13, 8
LTEXT "PC", -1, 297, 64, 10, 8
LTEXT "CCR", -1, 198, 78, 16, 8
GROUPBOX "", -1, 2, 19, 349, 154, BS_GROUPBOX
LTEXT "Debug Messages", -1, 225, 95, 60, 8
}
STRINGTABLE
{
STRING_M68KEYNAME, "Software\\Diversified\\M68HC11"
STRING_HISTORYKEYNAME, "Software\\Diversified\\M68HC11\\History"
STRING_SETTINGSKEYNAME, "Software\\Diversified\\M68HC11\\Settings"
STRING_SERIALKEYNAME, "Software\\Diversified\\M68HC11\\Serial"
STRING_HISTORYKEYSHORTNAME, "History"
STRING_SETTINGSEMAIL, "EMAIL"
STRING_SERIALPORT, "Port"
STRING_SERIALBAUD, "Baud"
STRING_SERIALDATA, "Data"
STRING_SERIALPARITY, "Parity"
STRING_SERIALSTOP, "Stop"
STRING_COM1, "COM1"
STRING_COM2, "COM2"
STRING_COM3, "COM3"
STRING_COM4, "COM4"
}
STRINGTABLE
{
STRING_CODEVIEWCLASSNAME, "CodeView"
STRING_MCUVIEWCLASSNAME, "MCUView"
STRING_UNTITLED, "Untitled"
STRING_HELPFILENAME, "m68hc11.hlp"
STRING_ERRORFILEOPEN, "Error opening '"
STRING_ERRORPORTOPEN, "Error opening communications port."
STRING_ERRORPORTSETTINGS, "Error initializing port settings."
STRING_ERRORTIMEOUT, "Timeout waiting for device."
STRING_ERRORREADERROR, "Error reading from device."
STRING_ERRORTALKBACKFAILURE, "Error receiving response from device"
STRING_ERRORTALKBACKDATA, "Error validating code load"
STRING_EVENTSINGLEBYTE, "Received single-byte event."
STRING_EVENTQUADBYTE, "Received quad-byte event."
STRING_EVENTDOUBLEBYTE, "Received double-byte event."
STRING_EVENTVARBYTE, "Received variable-byte event."
STRING_EVENTREGDATASTART, "Receiving register data..."
STRING_EVENTREGDATACOMPLETE, "Register receive complete."
STRING_EVENTCODECOMPLETE, "Received code completion event."
}
STRINGTABLE
{
STRING_REGISTERPORTA, "PORTA"
STRING_REGISTERRESERVED1, "RESERVED"
STRING_REGISTERPIOC, "PIOC"
STRING_REGISTERPORTC, "PORTC"
STRING_REGISTERPORTB, "PORTB"
STRING_REGISTERPORTCL, "PORTCL"
STRING_REGISTERRESERVED2, "RESERVED"
STRING_REGISTERDDRC, "DDRC"
STRING_REGISTERPORTD, "PORTD"
STRING_REGISTERDDRD, "DDRD"
STRING_REGISTERPORTE, "PORTE"
STRING_REGISTERCFORC, "CFORC"
STRING_REGISTEROC1M, "OC1M"
STRING_REGISTEROC1D, "OC1D"
STRING_REGISTERTCNTH1, "TCNT(Hi)"
STRING_REGISTERTCNTLO, "TCNT(Lo)"
STRING_REGISTERTIC1HI, "TIC1(Hi)"
STRING_REGISTERTIC1LO, "TIC1(Lo)"
STRING_REGISTERTIC2HI, "TIC2(Hi)"
STRING_REGISTERTIC2LO, "TIC2(Lo)"
STRING_REGISTERTIC3HI, "TIC3(Hi)"
STRING_REGISTERTIC3LO, "TIC3(Lo)"
STRING_REGISTERTOC1HI, "TOC1(Hi)"
STRING_REGISTERTOC1LO, "TOC1(Lo)"
STRING_REGISTERTOC2HI, "TOC2(Hi)"
STRING_REGISTERTOC2LO, "TOC2(Lo)"
STRING_REGISTERTOC3HI, "TOC3(Hi)"
STRING_REGISTERTOC3LO, "TOC3(Lo)"
STRING_REGISTERTOC4HI, "TOC4(Hi)"
STRING_REGISTERTOC4LO, "TOC4(Lo)"
STRING_REGISTERTI405HI, "TI405(Hi)"
STRING_REGISTERTI405LO, "TI4O5(Lo)"
STRING_REGISTERTCTL1, "TCTL1"
STRING_REGISTERTCTL2, "TCTL2"
STRING_REGISTERTMSK1, "TMSK1"
STRING_REGISTERTFLG1, "TFLG1"
STRING_REGISTERTMSK2, "TMSK2"
STRING_REGISTERTFLG2, "TFLG2"
STRING_REGISTERPACTL, "PACTL"
STRING_REGISTERPACNT, "PACNT"
STRING_REGISTERSPCR, "SPCR"
STRING_REGISTERSPSR, "SPSR"
STRING_REGISTERSPDR, "SPDR"
STRING_REGISTERBAUD, "BAUD"
STRING_REGISTERSCCR1, "SCCR1"
STRING_REGISTERSCCR2, "SCCR2"
STRING_REGISTERSCSR, "SCSR"
STRING_REGISTERSCDR, "SCDR"
STRING_REGISTERADCTL, "ADCTL"
STRING_REGISTERADR1, "ADR1"
STRING_REGISTERADR2, "ADR2"
STRING_REGISTERADR3, "ADR3"
STRING_REGISTERADR4, "ADR4"
STRING_REGISTERBPROT, "BPROT"
STRING_REGISTEREPROG, "EPROG"
STRING_REGISTERRESERVED3, "RESERVED"
STRING_REGISTERRESERVED4, "RESERVED"
STRING_REGISTEROPTION, "OPTION"
STRING_REGISTERCOPRST, "COPRST"
STRING_REGISTERPPROG, "PPROG"
STRING_REGISTERHPRIO, "HPRIO"
STRING_REGISTERINIT, "INIT"
STRING_REGISTERTEST1, "TEST1"
STRING_REGISTERCONFIG, "CONFIG"
}

261
m68hc11/M68REG.CPP Normal file
View File

@@ -0,0 +1,261 @@
#include <m68hc11/m68reg.hpp>
#include <m68hc11/commctrl.hpp>
M68Reg::M68Reg(void)
: mM68KeyName(STRING_M68KEYNAME),
mHistoryKeyName(STRING_HISTORYKEYNAME),
mSettingsKeyName(STRING_SETTINGSKEYNAME),
mSerialKeyName(STRING_SERIALKEYNAME),
mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME),
mSettingsEMAIL(STRING_SETTINGSEMAIL),
mSerialPort(STRING_SERIALPORT),
mSerialBaud(STRING_SERIALBAUD),
mSerialData(STRING_SERIALDATA),
mSerialParity(STRING_SERIALPARITY),
mSerialStop(STRING_SERIALSTOP),
mRegKeySettings(RegKey::CurrentUser),
mRegKeyHistory(RegKey::CurrentUser),
mRegKeySerial(RegKey::CurrentUser),
mPathDirKeyName(STRING_PATHDIRKEYNAME),
mPathDirKeyShortName(STRING_PATHDIRKEYSHORTNAME),
mRegKeyPathDir(RegKey::CurrentUser)
{
guarantee();
getCacheNames();
}
M68Reg::M68Reg(const M68Reg &someM68Reg)
: mM68KeyName(STRING_M68KEYNAME),
mHistoryKeyName(STRING_HISTORYKEYNAME),
mSettingsKeyName(STRING_SETTINGSKEYNAME),
mSerialKeyName(STRING_SERIALKEYNAME),
mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME),
mSettingsEMAIL(STRING_SETTINGSEMAIL),
mSerialPort(STRING_SERIALPORT),
mSerialBaud(STRING_SERIALBAUD),
mSerialData(STRING_SERIALDATA),
mSerialParity(STRING_SERIALPARITY),
mSerialStop(STRING_SERIALSTOP),
mRegKeySettings(RegKey::CurrentUser),
mRegKeyHistory(RegKey::CurrentUser),
mRegKeySerial(RegKey::CurrentUser),
mPathDirKeyName(STRING_PATHDIRKEYNAME),
mPathDirKeyShortName(STRING_PATHDIRKEYSHORTNAME),
mRegKeyPathDir(RegKey::CurrentUser)
{
*this=someM68Reg;
}
M68Reg::~M68Reg()
{
}
M68Reg &M68Reg::operator=(const M68Reg &/*someM68Reg*/)
{
return *this;
}
void M68Reg::getCacheNames(void)
{
int itemIndex(0);
String entryName;
DWORD status;
mCachedNames.remove();
while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName);
}
String M68Reg::email(void)
{
String strEMAIL;
mRegKeySettings.queryValue(mSettingsEMAIL,strEMAIL);
return strEMAIL;
}
void M68Reg::email(const String &email)
{
mRegKeySettings.setValue(mSettingsEMAIL,email);
}
bool M68Reg::setBaud(const String &strBaud)
{
return mRegKeySerial.setValue(mSerialBaud,strBaud);
}
String M68Reg::getBaud(void)
{
String strBaud;
mRegKeySerial.queryValue(mSerialBaud,strBaud);
return strBaud;
}
bool M68Reg::setParity(const String &strParity)
{
return mRegKeySerial.setValue(mSerialParity,strParity);
}
String M68Reg::getParity(void)
{
String strParity;
mRegKeySerial.queryValue(mSerialParity,strParity);
return strParity;
}
bool M68Reg::setDataBits(const String &strDataBits)
{
return mRegKeySerial.setValue(mSerialData,strDataBits);
}
String M68Reg::getDataBits(void)
{
String strData;
mRegKeySerial.queryValue(mSerialData,strData);
return strData;
}
bool M68Reg::setStopBits(const String &stopBits)
{
return mRegKeySerial.setValue(mSerialStop,stopBits);
}
String M68Reg::getStopBits(void)
{
String strStop;
mRegKeySerial.queryValue(mSerialStop,strStop);
return strStop;
}
bool M68Reg::setPort(const String &strPort)
{
return mRegKeySerial.setValue(mSerialPort,strPort);
}
String M68Reg::getPort(void)
{
String strPort;
mRegKeySerial.queryValue(mSerialPort,strPort);
return strPort;
}
String M68Reg::getSerialSettings(void)
{
String serialSettings;
serialSettings+="baud=";
serialSettings+=getBaud();
serialSettings+=" ";
serialSettings+="parity=";
serialSettings+=getParity();
serialSettings+=" ";
serialSettings+="data=";
serialSettings+=getDataBits();
serialSettings+=" ";
serialSettings+="stop=";
serialSettings+=getStopBits();
return serialSettings;
}
void M68Reg::guarantee(void)
{
if(!mRegKeySettings.openKey(mSettingsKeyName))
{
mRegKeySettings.createKey(mSettingsKeyName,"");
mRegKeySettings.openKey(mSettingsKeyName);
}
if(!mRegKeyHistory.openKey(mHistoryKeyName))
{
mRegKeyHistory.createKey(mHistoryKeyName,"");
mRegKeyHistory.openKey(mHistoryKeyName);
}
if(!mRegKeyPathDir.openKey(mPathDirKeyName))
{
mRegKeyPathDir.createKey(mPathDirKeyName,"");
mRegKeyPathDir.openKey(mPathDirKeyName);
}
if(!mRegKeySerial.openKey(mSerialKeyName))
{
CommControl commControl;
Block<String> deviceList;
commControl.enumerateDevices(deviceList);
mRegKeySerial.createKey(mSerialKeyName,"");
mRegKeySerial.openKey(mSerialKeyName);
setBaud("1200");
setParity("N");
setDataBits("8");
setStopBits("1");
setPort(deviceList.size()?deviceList[0]:"COM1");
}
}
BOOL M68Reg::isOkay(void)const
{
return mRegKeySettings.isOkay()&&mRegKeyHistory.isOkay()&&mRegKeySerial.isOkay();
}
bool M68Reg::getHistory(Block<String> &nameList)
{
nameList=mCachedNames;
return nameList.size()?TRUE:FALSE;
}
bool M68Reg::setHistory(Block<String> &nameList)
{
RegKey regKey(RegKey::CurrentUser);
mRegKeyHistory.closeKey();
regKey.openKey(mM68KeyName);
regKey.deleteKey(mHistoryKeyShortName);
regKey.closeKey();
mRegKeyHistory.createKey(mHistoryKeyName,"");
mRegKeyHistory.openKey(mHistoryKeyName);
for(int itemIndex=0;itemIndex<nameList.size();itemIndex++)mRegKeyHistory.setValue(nameList[itemIndex],0);
return nameList.size()?TRUE:FALSE;
}
bool M68Reg::insertHistory(const String &strName)
{
for(int itemIndex=0;itemIndex<mCachedNames.size();itemIndex++)if(mCachedNames[itemIndex]==strName)return FALSE;
mCachedNames.insert(&strName);
if(mCachedNames.size()>MaxCachedNames)
{
Block<String> mruCachedNames;
for(int itemIndex=0;itemIndex<MaxCachedNames;itemIndex++)mruCachedNames.insert(&String());
for(itemIndex=0;itemIndex<MaxCachedNames;itemIndex++)mruCachedNames[mruCachedNames.size()-itemIndex-1]=mCachedNames[mCachedNames.size()-itemIndex-1];
mCachedNames=mruCachedNames;
setHistory(mCachedNames);
}
else mRegKeyHistory.setValue(strName,0);
return TRUE;
}
bool M68Reg::getIncludePath(Block<String> &pathDirList)
{
int itemIndex(0);
String entryName;
DWORD status;
pathDirList.remove();
while(mRegKeyPathDir.enumValue(itemIndex++,entryName,status))
pathDirList.insert(&entryName);
return true;
}
bool M68Reg::setIncludePath(Block<String> &pathDirList)
{
removeIncludePath();
for(int itemIndex=0;itemIndex<pathDirList.size();itemIndex++)mRegKeyPathDir.setValue(pathDirList[itemIndex],0);
return pathDirList.size()?true:false;
}
bool M68Reg::removeIncludePath(void)
{
int itemIndex(0);
Block<String> values;
String entryName;
DWORD status;
while(mRegKeyPathDir.enumValue(itemIndex++,entryName,status))values.insert(&entryName);
for(int index=0;index<values.size();index++)mRegKeyPathDir.deleteValue(values[index]);
return true;
}

67
m68hc11/M68REG.HPP Normal file
View File

@@ -0,0 +1,67 @@
#ifndef _M68HC11_M68REG_HPP_
#define _M68HC11_M68REG_HPP_
#ifndef _COMMON_REGKEY_HPP_
#include <common/regkey.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _M68HC11_M68HC11_HPP_
#include <m68hc11/m68hc11.hpp>
#endif
class M68Reg
{
public:
M68Reg(void);
M68Reg(const M68Reg &someM68Reg);
virtual ~M68Reg();
M68Reg &operator=(const M68Reg &someM68Reg);
bool getHistory(Block<String> &nameList);
bool setHistory(Block<String> &nameList);
bool insertHistory(const String &strName);
bool getIncludePath(Block<String> &pathDirList);
bool setIncludePath(Block<String> &pathDirList);
bool removeIncludePath(void);
bool setBaud(const String &strBaud);
String getBaud(void);
bool setParity(const String &strParity);
String getParity(void);
bool setDataBits(const String &strDataBits);
String getDataBits(void);
bool setStopBits(const String &stopBits);
String getStopBits(void);
bool setPort(const String &strPort);
String getPort(void);
String getSerialSettings(void);
String email(void);
void email(const String &email);
BOOL isOkay(void)const;
private:
enum {MaxCachedNames=5};
void guarantee(void);
void getCacheNames(void);
Block<String> mCachedNames;
String mPathDirKeyName;
String mHistoryKeyName;
String mSettingsKeyName;
String mSerialKeyName;
String mHistoryKeyShortName;
String mPathDirKeyShortName;
String mSettingsEMAIL;
String mM68KeyName;
String mSerialPort;
String mSerialBaud;
String mSerialData;
String mSerialParity;
String mSerialStop;
RegKey mRegKeySettings;
RegKey mRegKeyHistory;
RegKey mRegKeyPathDir;
RegKey mRegKeySerial;
};
#endif

160
m68hc11/M68hc11.h Normal file
View File

@@ -0,0 +1,160 @@
#ifndef _M68HC11_M68HC11_H_
#define _M68HC11_M68HC11_H_
#define M68ACCELERATORS 10000
#define CMPDLG_BROWSE 100
#define CMPDLG_LIST 101
#define CMPDLG_CANCEL 102
#define CMPDLG_OK 103
#define MCUDLG_REGISTERS 101
#define MCUDLG_CCR 102
#define MCUDLG_MESSAGES 109
#define MCUDLG_PC 103
#define MCUDLG_SP 104
#define MCUDLG_Y 105
#define MCUDLG_X 106
#define MCUDLG_A 107
#define MCUDLG_B 108
#define SERIAL_STOP 104
#define SERIAL_PARITY 105
#define SERIAL_APPLY 106
#define SERIAL_TEST 107
#define SERIAL_DATA 103
#define SERIAL_BAUD 102
#define SERIAL_PORT 101
#define SBCMENU_FILENEW 500
#define SBCMENU_FILEOPEN 501
#define SBCMENU_FILESAVE 502
#define SBCMENU_FILESAVEAS 503
#define SBCMENU_FILEPRINT 504
#define SBCMENU_FILEQUIT 505
#define SBCMENU_FILECLOSE 506
#define SBCMENU_EDITCUT 507
#define SBCMENU_EDITCOPY 508
#define SBCMENU_EDITPASTE 509
#define SBCMENU_EDITFIND 510
#define SBCMENU_SETTINGSSERIAL 511
#define SBCMENU_CODECOMPILE 512
#define SBCMENU_CODECOMPILEANDLOAD 513
#define SBCMENU_HELPCONTENTS 514
#define SBCMENU_HELPSEARCH 515
#define SBCMENU_REGISTRATION 516
#define SBCMENU_HELPABOUT 517
#define SBCMENU_COMPILER 518
#define IDM_CASCADE 10013
#define IDM_TILE 10014
#define IDM_ARRANGE 10015
#define IDM_CLOSEALL 10016
#define IDM_MINIMIZEALL 10017
#define IDM_RESTOREALL 10018
#define STRING_M68KEYNAME 600
#define STRING_HISTORYKEYNAME 601
#define STRING_SETTINGSKEYNAME 602
#define STRING_SERIALKEYNAME 603
#define STRING_HISTORYKEYSHORTNAME 604
#define STRING_SETTINGSEMAIL 605
#define STRING_SERIALPORT 606
#define STRING_SERIALBAUD 607
#define STRING_SERIALDATA 608
#define STRING_SERIALPARITY 609
#define STRING_SERIALSTOP 610
#define STRING_COM1 611
#define STRING_COM2 612
#define STRING_COM3 613
#define STRING_COM4 614
#define STRING_PATHDIRKEYNAME 615
#define STRING_PATHDIRKEYSHORTNAME 616
#define STRING_CODEVIEWCLASSNAME 500
#define STRING_MCUVIEWCLASSNAME 501
#define STRING_UNTITLED 502
#define STRING_HELPFILENAME 503
#define STRING_REGISTERPORTA 700
#define STRING_REGISTERRESERVED1 701
#define STRING_REGISTERPIOC 702
#define STRING_REGISTERPORTC 703
#define STRING_REGISTERPORTB 704
#define STRING_REGISTERPORTCL 705
#define STRING_REGISTERRESERVED2 706
#define STRING_REGISTERDDRC 707
#define STRING_REGISTERPORTD 708
#define STRING_REGISTERDDRD 709
#define STRING_REGISTERPORTE 710
#define STRING_REGISTERCFORC 711
#define STRING_REGISTEROC1M 712
#define STRING_REGISTEROC1D 713
#define STRING_REGISTERTCNTH1 714
#define STRING_REGISTERTCNTLO 715
#define STRING_REGISTERTIC1HI 716
#define STRING_REGISTERTIC1LO 717
#define STRING_REGISTERTIC2HI 718
#define STRING_REGISTERTIC2LO 719
#define STRING_REGISTERTIC3HI 720
#define STRING_REGISTERTIC3LO 721
#define STRING_REGISTERTOC1HI 722
#define STRING_REGISTERTOC1LO 723
#define STRING_REGISTERTOC2HI 724
#define STRING_REGISTERTOC2LO 725
#define STRING_REGISTERTOC3HI 726
#define STRING_REGISTERTOC3LO 727
#define STRING_REGISTERTOC4HI 728
#define STRING_REGISTERTOC4LO 729
#define STRING_REGISTERTI405HI 730
#define STRING_REGISTERTI405LO 731
#define STRING_REGISTERTCTL1 732
#define STRING_REGISTERTCTL2 733
#define STRING_REGISTERTMSK1 734
#define STRING_REGISTERTFLG1 735
#define STRING_REGISTERTMSK2 736
#define STRING_REGISTERTFLG2 737
#define STRING_REGISTERPACTL 738
#define STRING_REGISTERPACNT 739
#define STRING_REGISTERSPCR 740
#define STRING_REGISTERSPSR 741
#define STRING_REGISTERSPDR 742
#define STRING_REGISTERBAUD 743
#define STRING_REGISTERSCCR1 744
#define STRING_REGISTERSCCR2 745
#define STRING_REGISTERSCSR 746
#define STRING_REGISTERSCDR 747
#define STRING_REGISTERADCTL 748
#define STRING_REGISTERADR1 749
#define STRING_REGISTERADR2 750
#define STRING_REGISTERADR3 751
#define STRING_REGISTERADR4 752
#define STRING_REGISTERBPROT 753
#define STRING_REGISTEREPROG 754
#define STRING_REGISTERRESERVED3 755
#define STRING_REGISTERRESERVED4 756
#define STRING_REGISTEROPTION 757
#define STRING_REGISTERCOPRST 758
#define STRING_REGISTERPPROG 759
#define STRING_REGISTERHPRIO 760
#define STRING_REGISTERINIT 761
#define STRING_REGISTERTEST1 762
#define STRING_REGISTERCONFIG 763
#define STRING_ERRORFILEOPEN 764
#define STRING_ERRORPORTOPEN 765
#define STRING_ERRORPORTSETTINGS 766
#define STRING_ERRORTIMEOUT 767
#define STRING_ERRORREADERROR 768
#define STRING_ERRORTALKBACKFAILURE 769
#define STRING_ERRORTALKBACKDATA 770
#define STRING_EVENTSINGLEBYTE 771
#define STRING_EVENTQUADBYTE 772
#define STRING_EVENTVARBYTE 773
#define STRING_EVENTREGDATASTART 774
#define STRING_EVENTREGDATACOMPLETE 775
#define STRING_EVENTCODECOMPLETE 776
#define STRING_EVENTDOUBLEBYTE 777
#define STRING_EVENTSTRING 778
#endif

1774
m68hc11/M68hc11.mak Normal file

File diff suppressed because it is too large Load Diff

10
m68hc11/MAIN.CPP Normal file
View File

@@ -0,0 +1,10 @@
#include <m68hc11/mainfrm.hpp>
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
{
MainFrame frameWindow;
frameWindow.createWindow("M68HC11","M68HC11 v1.00","mainMenu","MOT");
frameWindow.loadAccelerators(M68ACCELERATORS);
return frameWindow.messageLoop();
}

147
m68hc11/MCUDLG.CPP Normal file
View File

@@ -0,0 +1,147 @@
#include <m68hc11/mcudlg.hpp>
#include <m68hc11/odlstled.hpp>
#include <m68hc11/m68hc11.hpp>
#include <common/stdio.hpp>
MCUDlg::MCUDlg(void)
{
mInitHandler.setCallback(this,&MCUDlg::initHandler);
mCreateHandler.setCallback(this,&MCUDlg::createHandler);
mCloseHandler.setCallback(this,&MCUDlg::closeHandler);
mDestroyHandler.setCallback(this,&MCUDlg::destroyHandler);
mCommandHandler.setCallback(this,&MCUDlg::commandHandler);
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
}
MCUDlg::MCUDlg(const MCUDlg &someMCUDlg)
{ // private implementation
*this=someMCUDlg;
}
MCUDlg::~MCUDlg()
{
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
}
MCUDlg &MCUDlg::operator=(const MCUDlg &someMCUDlg)
{ // private implementation
return *this;
}
BOOL MCUDlg::perform(GUIWindow &parentWindow)
{
::CreateDialogParam(processInstance(),(LPSTR)"MCUDLG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
return isValid();
}
CallbackData::ReturnType MCUDlg::initHandler(CallbackData &someCallbackData)
{
mOwnerDrawList=::new OwnerDrawListBinaryLed(*this,getItem(MCUDLG_REGISTERS),MCUDLG_REGISTERS);
mOwnerDrawList.disposition(PointerDisposition::Delete);
for(int index=STRING_REGISTERPORTA;index<=STRING_REGISTERCONFIG;index++)mOwnerDrawList->insertString(String(index));
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::createHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::closeHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::destroyHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case IDCANCEL :
handleCancel();
break;
case IDOK :
handleOk();
break;
}
return (CallbackData::ReturnType)FALSE;
}
void MCUDlg::setRegister(int mcuRegister,BYTE value)
{
String stringData;
String strItem;
String strData;
if(LB_ERR==mOwnerDrawList->getText(stringData,mcuRegister))return;
strItem=stringData.betweenString(0,'\t');
if(strItem.isNull())::sprintf(strData,"%s\t%d",(LPSTR)stringData,value);
else ::sprintf(strData,"%s\t%d",(LPSTR)strItem,value);
mOwnerDrawList->deleteString(mcuRegister);
mOwnerDrawList->insertString(strData,mcuRegister);
}
void MCUDlg::setRegisters(GlobalData<BYTE> &regData)
{
mOwnerDrawList->setRedraw(FALSE);
for(int index=0;index<regData.size();index++)setRegister(index,regData[index]);
mOwnerDrawList->setRedraw(TRUE);
}
void MCUDlg::setVarByteData(GlobalData<BYTE> &byteData)
{
String strData;
String strLine;
String strHexLine;
for(int index=0;index<byteData.size();index++)
{
::sprintf(strData,"%c",byteData[index]);
strLine+=strData;
}
for(index=0;index<byteData.size();index++)
{
::sprintf(strData,"%02lx",int(byteData[index]));
strHexLine+=strData;
}
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strLine);
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strHexLine);
}
void MCUDlg::setSingleByteData(BYTE singleByteData)
{
String strLine;
if(isprint(singleByteData))::sprintf(strLine,"%c (%02lxh)",singleByteData,(int)singleByteData);
else ::sprintf(strLine,"'' (%02lxh)",(int)singleByteData);
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strLine);
// ::sprintf(strLine,"%02lx",int(singleByteData));
// sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strLine);
}
void MCUDlg::setStringData(const String &string)
{
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)string.str());
}
void MCUDlg::setQuadByteData(DWORD quadByteData)
{
}
void MCUDlg::setDoubleByteData(WORD doubleByteData)
{
}

81
m68hc11/MCUDLG.HPP Normal file
View File

@@ -0,0 +1,81 @@
#ifndef _M68HC11_MCUDLG_HPP_
#define _M68HC11_MCUDLG_HPP_
#ifndef _COMMON_DWINDOW_HPP_
#include <common/dwindow.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
class OwnerDrawListBinaryLed;
class MCUDlg : public DWindow
{
public:
MCUDlg(void);
virtual ~MCUDlg();
BOOL perform(GUIWindow &parentWindow);
void setCancelHandler(PureCallback *pCallback);
void setStartHandler(PureCallback *pCallback);
void setRegister(int mcuRegister,BYTE value);
void setRegisters(GlobalData<BYTE> &regData);
void setVarByteData(GlobalData<BYTE> &byteData);
void setQuadByteData(DWORD quadByteData);
void setDoubleByteData(WORD doubleByteData);
void setSingleByteData(BYTE singleByteData);
void setStringData(const String &string);
void enableStart(BOOL enable);
private:
MCUDlg(const MCUDlg &someMCUDlg);
MCUDlg &operator=(const MCUDlg &someMCUDlg);
CallbackData::ReturnType initHandler(CallbackData &someCallbackData);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
void handleCancel(void);
void handleOk(void);
Callback<MCUDlg> mInitHandler;
Callback<MCUDlg> mCreateHandler;
Callback<MCUDlg> mCloseHandler;
Callback<MCUDlg> mDestroyHandler;
Callback<MCUDlg> mCommandHandler;
SmartPointer<OwnerDrawListBinaryLed> mOwnerDrawList;
CallbackPointer mCancelHandler;
CallbackPointer mStartHandler;
};
inline
void MCUDlg::setCancelHandler(PureCallback *pCallback)
{
mCancelHandler=CallbackPointer(pCallback);
}
inline
void MCUDlg::setStartHandler(PureCallback *pCallback)
{
mStartHandler=CallbackPointer(pCallback);
}
inline
void MCUDlg::handleCancel(void)
{
mCancelHandler.callback(CallbackData());
}
inline
void MCUDlg::handleOk(void)
{
mStartHandler.callback(CallbackData());
}
inline
void MCUDlg::enableStart(BOOL enable)
{
::EnableWindow(getItem(IDOK),enable);
}
#endif

238
m68hc11/MCUTHRD.CPP Normal file
View File

@@ -0,0 +1,238 @@
#include <m68hc11/mcuthrd.hpp>
#include <m68hc11/commctrl.hpp>
#include <m68hc11/m68hc11.hpp>
#include <m68hc11/m68reg.hpp>
#include <common/openfile.hpp>
#include <common/gdata.hpp>
MCUThread::MCUThread(void)
: mIsInEvents(false)
{
mThreadHandler.setCallback(this,&MCUThread::threadHandler);
insertHandler(&mThreadHandler);
}
MCUThread::MCUThread(const MCUThread &someMCUThread)
: mIsInEvents(false)
{ // private implementation
*this=someMCUThread;
}
MCUThread::~MCUThread()
{
removeHandler(&mThreadHandler);
}
MCUThread &MCUThread::operator=(const MCUThread &someMCUThread)
{ // private implementation
return *this;
}
void MCUThread::listen(const String &strPathBinary)
{
String *pString=::new String(strPathBinary);
ThreadMessage threadMessage(ThreadMessage::TM_USER,ThMsgListen,int(pString));
postMessage(threadMessage);
return;
}
DWORD MCUThread::threadHandler(ThreadMessage &someThreadMessage)
{
switch(someThreadMessage.message())
{
case ThreadMessage::TM_CREATE :
break;
case ThreadMessage::TM_DESTROY :
break;
case ThreadMessage::TM_USER :
if(ThMsgListen==someThreadMessage.userDataOne())
{
String *pString=(String*)someThreadMessage.userDataTwo();
thListen(*pString);
::delete pString;
}
break;
}
return FALSE;
}
void MCUThread::thListen(const String &strPathBinary)
{
CommControl commControl;
sendMessage("Initializing device...");
if(!openDevice(commControl))return;
sendMessage("Loading code...");
if(!codeLoad(commControl,strPathBinary))return;
sendMessage("Processing events...");
processEvents(commControl);
return;
}
BOOL MCUThread::openDevice(CommControl &commControl,bool useOverlappedIO)
{
M68Reg mcuReg;
if(!commControl.open(CommControl::stringToPort(mcuReg.getPort()),useOverlappedIO))
{
mErrorEventHandler.callback(CallbackData(ErrorPortOpen,0L));
return FALSE;
}
if(!commControl.setDeviceControlBlock(mcuReg.getSerialSettings()))
{
mErrorEventHandler.callback(CallbackData(ErrorPortSettings,0L));
return FALSE;
}
commControl.setEventMask(CommControl::EventBreak);
if(!commControl.waitEvent())
{
mErrorEventHandler.callback(CallbackData(ErrorTimeout,0L));
return FALSE;
}
return TRUE;
}
BOOL MCUThread::codeLoad(CommControl &commControl,const String &strPathBinary)
{
FileHandle inFile;
BYTE sndBuffer[256];
// BYTE rcvBuffer[256];
GlobalData<BYTE> rcvBuffer;
WORD codeLength(0);
BYTE prefix(0xFF);
BYTE *ptrByte;
if(!inFile.open(strPathBinary))
{
mErrorEventHandler.callback(CallbackData(ErrorFileOpen,int(&(String&)strPathBinary)));
return FALSE;
}
::memset(sndBuffer,1,sizeof(sndBuffer));
// ::memset(&rcvBuffer,0,sizeof(rcvBuffer));
ptrByte=sndBuffer;
while(inFile.read(*ptrByte)&&codeLength<=256){codeLength++;ptrByte++;}
commControl.write(&prefix,sizeof(prefix));
commControl.clearReceiveQueue();
commControl.write(sndBuffer,sizeof(sndBuffer));
if(!commControl.waitForData())
{
mErrorEventHandler.callback(CallbackData(ErrorTalkBackFailure,0L));
return false;
}
rcvBuffer.size(sizeof(sndBuffer));
rcvBuffer.setZero();
commControl.readFully(rcvBuffer);
// commControl.readFully(rcvBuffer,sizeof(rcvBuffer));
if(::memcmp(&rcvBuffer[0],sndBuffer,sizeof(sndBuffer)))
{
mErrorEventHandler.callback(CallbackData(ErrorTalkBackData,0L));
return false;
}
return true;
}
// event types
// 0x00 - character
// 0x01 - WORD
// 0x02 - DWORD
// 0x03 - varchar : [WORD:count,countcharacters]
// 0xFF - end
BOOL MCUThread::processEvents(CommControl &commControl)
{
GlobalData<BYTE> byteData;
String strString;
BYTE event(0x00);
BYTE ack(0x00);
WORD wordData;
DWORD dwordData;
char charData;
int index;
int map(0x1000);
::OutputDebugString("MCUThread::processEvents[Thread is starting]");
isInEvents(true);
while(isInEvents())
{
if(!commControl.hasData())continue;
commControl.read(&event,sizeof(event));
switch(MCUEvent(event))
{
case EventString :
{
String str;
sendMessage(STRING_EVENTSTRING);
while(true)
{
commControl.read(&charData,sizeof(charData));
if(!charData)break;
str+=charData;
}
mMCUEventHandler.callback(CallbackData(EventString,int(&str)));
commControl.write(&ack,sizeof(ack));
}
break;
case EventSingleByte :
sendMessage(STRING_EVENTSINGLEBYTE);
commControl.read(&charData,sizeof(charData));
mMCUEventHandler.callback(CallbackData(EventSingleByte,int(&charData)));
commControl.write(&ack,sizeof(ack));
break;
case EventDoubleByte :
sendMessage(STRING_EVENTDOUBLEBYTE);
commControl.read(&wordData,sizeof(wordData));
mMCUEventHandler.callback(CallbackData(EventDoubleByte,int(&wordData)));
commControl.write(&ack,sizeof(ack));
break;
case EventQuadByte :
sendMessage(STRING_EVENTQUADBYTE);
commControl.read(&dwordData,sizeof(dwordData));
mMCUEventHandler.callback(CallbackData(EventQuadByte,(int)&dwordData));
commControl.write(&ack,sizeof(ack));
break;
case EventVarByte :
sendMessage(STRING_EVENTVARBYTE);
commControl.read(&wordData,sizeof(wordData));
byteData.size(wordData);
for(index=0;index<byteData.size();index++)
{
commControl.read(&charData,sizeof(charData));
byteData[index]=charData;
}
mMCUEventHandler.callback(CallbackData(EventVarByte,int(&byteData)));
commControl.write(&ack,sizeof(ack));
break;
case EventRegs :
map=0x1000;
byteData.size(64);
sendMessage(STRING_EVENTREGDATASTART);
for(index=0;index<byteData.size();index++)
{
commControl.read(&charData,sizeof(charData));
byteData[index]=charData;
}
sendMessage(STRING_EVENTREGDATACOMPLETE);
mMCUEventHandler.callback(CallbackData(EventRegs,int(&byteData)));
commControl.write(&ack,sizeof(ack));
break;
case EventEnd :
sendMessage(STRING_EVENTCODECOMPLETE);
mMCUEventHandler.callback(CallbackData(EventEnd,0L));
isInEvents(false);
break;
default :
{
String str;
::sprintf(str,"unexpected character : 0x%04lx\n",(int)event);
::OutputDebugString(str);
}
}
}
::OutputDebugString("MCUThread::processEvents[Thread is ending normally]");
return TRUE;
}
void MCUThread::sendMessage(const String &strMessage)
{
mMessageHandler.callback(CallbackData(0,int(&(String&)strMessage)));
}

72
m68hc11/MCUTHRD.HPP Normal file
View File

@@ -0,0 +1,72 @@
#ifndef _M68HC11_MCUTHREAD_HPP_
#define _M68HC11_MCUTHREAD_HPP_
#ifndef _THREAD_MESSAGETHREAD_HPP_
#include <thread/mthread.hpp>
#endif
#ifndef _COMMON_CALLBACK_HPP_
#include <common/callback.hpp>
#endif
class CommControl;
class MCUThread : protected MessageThread
{
public:
enum MCUEvent{EventSingleByte=0x00,EventDoubleByte=0x01,EventQuadByte=0x02,EventVarByte=0x03,EventRegs=0x04,EventString=0x05,EventEnd=0xFF};
enum ErrorEvent{ErrorFileOpen,ErrorPortOpen,ErrorPortSettings,ErrorTimeout,ErrorReadError,ErrorTalkBackFailure,ErrorTalkBackData};
MCUThread(void);
virtual ~MCUThread();
void listen(const String &strPathBinary);
void setErrorEventHandler(PureCallback *pCallback);
void setMCUEventHandler(PureCallback *pCallback);
void setMessageHandler(PureCallback *pCallback);
bool isInEvents(void)const;
void isInEvents(bool isInEvents);
private:
enum{ThMsgListen};
MCUThread(const MCUThread &someMCUThread);
MCUThread &operator=(const MCUThread &someMCUThread);
DWORD threadHandler(ThreadMessage &someThreadMessage);
void thListen(const String &strPathBinary);
BOOL openDevice(CommControl &commControl,bool userOverlappedIO=false);
BOOL codeLoad(CommControl &commControl,const String &strPathBinary);
BOOL processEvents(CommControl &commControl);
void sendMessage(const String &strMessage);
ThreadCallback<MCUThread> mThreadHandler;
CallbackPointer mErrorEventHandler;
CallbackPointer mMCUEventHandler;
CallbackPointer mMessageHandler;
bool mIsInEvents;
};
inline
void MCUThread::setErrorEventHandler(PureCallback *pCallback)
{
mErrorEventHandler=CallbackPointer(pCallback);
}
inline
void MCUThread::setMCUEventHandler(PureCallback *pCallback)
{
mMCUEventHandler=CallbackPointer(pCallback);
}
inline
void MCUThread::setMessageHandler(PureCallback *pCallback)
{
mMessageHandler=CallbackPointer(pCallback);
}
inline
bool MCUThread::isInEvents(void)const
{
return mIsInEvents;
}
inline
void MCUThread::isInEvents(bool isInEvents)
{
mIsInEvents=isInEvents;
}
#endif

193
m68hc11/MCUVIEW.CPP Normal file
View File

@@ -0,0 +1,193 @@
#include <m68hc11/mcuview.hpp>
#include <m68hc11/m68hc11.hpp>
#include <statbar/statbarx.hpp>
MCUView::MCUView(void)
{
mCreateHandler.setCallback(this,&MCUView::createHandler);
mSizeHandler.setCallback(this,&MCUView::sizeHandler);
mCloseHandler.setCallback(this,&MCUView::closeHandler);
mDestroyHandler.setCallback(this,&MCUView::destroyHandler);
mCommandHandler.setCallback(this,&MCUView::commandHandler);
mCancelHandler.setCallback(this,&MCUView::cancelHandler);
mStartHandler.setCallback(this,&MCUView::startHandler);
mErrorEventHandler.setCallback(this,&MCUView::errorEventHandler);
mMCUEventHandler.setCallback(this,&MCUView::mcuEventHandler);
mMessageHandler.setCallback(this,&MCUView::messageHandler);
MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler);
MCUThread::setErrorEventHandler(&mErrorEventHandler);
MCUThread::setMCUEventHandler(&mMCUEventHandler);
MCUThread::setMessageHandler(&mMessageHandler);
}
MCUView::~MCUView()
{
MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler);
MCUThread::setErrorEventHandler(0);
MCUThread::setMCUEventHandler(0);
MCUThread::setMessageHandler(0);
}
CallbackData::ReturnType MCUView::createHandler(CallbackData &someCallbackData)
{
mMCUDialog.setCancelHandler(&mCancelHandler);
mMCUDialog.setStartHandler(&mStartHandler);
mMCUDialog.perform(*this);
mStatusBar=::new StatusBarEx(*this,StatusBarID);
mStatusBar.disposition(PointerDisposition::Delete);
mStatusBar->setText("Press start and then switch on the device.");
return FALSE;
}
CallbackData::ReturnType MCUView::sizeHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::closeHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::destroyHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::commandHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::cancelHandler(CallbackData &/*someCallbackData*/)
{
isInEvents(false);
MDIWindow::postMessage(*this,WM_CLOSE,0,0L);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUView::startHandler(CallbackData &/*someCallbackData*/)
{
mMCUDialog.enableStart(FALSE);
listen(mStrPathBinary);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUView::messageHandler(CallbackData &someCallbackData)
{
mStatusBar->setText(*((String*)someCallbackData.lParam()));
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUView::errorEventHandler(CallbackData &someCallbackData)
{
switch(MCUThread::ErrorEvent(someCallbackData.wParam()))
{
case MCUThread::ErrorFileOpen :
mStatusBar->setText(String(STRING_ERRORFILEOPEN)+*((String*)someCallbackData.lParam())+String("'."));
break;
case MCUThread::ErrorPortOpen :
mStatusBar->setText(STRING_ERRORPORTOPEN);
break;
case MCUThread::ErrorPortSettings :
mStatusBar->setText(STRING_ERRORPORTSETTINGS);
break;
case MCUThread::ErrorTimeout :
mStatusBar->setText(STRING_ERRORTIMEOUT);
break;
case MCUThread::ErrorReadError :
mStatusBar->setText(STRING_ERRORREADERROR);
break;
case MCUThread::ErrorTalkBackFailure :
mStatusBar->setText(STRING_ERRORTALKBACKFAILURE);
break;
case MCUThread::ErrorTalkBackData :
mStatusBar->setText(STRING_ERRORTALKBACKDATA);
break;
}
mMCUDialog.enableStart(TRUE);
return FALSE;
}
CallbackData::ReturnType MCUView::mcuEventHandler(CallbackData &someCallbackData)
{
switch(MCUThread::MCUEvent(someCallbackData.wParam()))
{
case MCUThread::EventString :
handleStringData(someCallbackData);
break;
case MCUThread::EventSingleByte :
handleSingleByteData(someCallbackData);
break;
case MCUThread::EventDoubleByte :
handleEventDoubleByte(someCallbackData);
break;
case MCUThread::EventQuadByte :
handleEventQuadByte(someCallbackData);
break;
case MCUThread::EventVarByte :
handleEventVarByte(someCallbackData);
break;
case MCUThread::EventRegs :
handleEventRegs(someCallbackData);
break;
case MCUThread::EventEnd :
mMCUDialog.enableStart(TRUE);
break;
}
return FALSE;
}
void MCUView::handleEventRegs(CallbackData &someCallbackData)
{
GlobalData<BYTE> &regData=(GlobalData<BYTE> &)*((GlobalData<BYTE> *)someCallbackData.lParam());
mMCUDialog.setRegisters(regData);
}
void MCUView::handleEventVarByte(CallbackData &someCallbackData)
{
GlobalData<BYTE> &byteData=(GlobalData<BYTE> &)*((GlobalData<BYTE> *)someCallbackData.lParam());
mMCUDialog.setVarByteData(byteData);
}
void MCUView::handleEventQuadByte(CallbackData &someCallbackData)
{
mMCUDialog.setQuadByteData(*((DWORD*)someCallbackData.lParam()));
}
void MCUView::handleEventDoubleByte(CallbackData &someCallbackData)
{
mMCUDialog.setDoubleByteData(*((WORD*)someCallbackData.lParam()));
}
void MCUView::handleSingleByteData(CallbackData &someCallbackData)
{
mMCUDialog.setSingleByteData(*((BYTE*)someCallbackData.lParam()));
}
void MCUView::handleStringData(CallbackData &someCallbackData)
{
mMCUDialog.setStringData(*((String*)someCallbackData.lParam()));
}
// *** virtuals
void MCUView::preRegister(WNDCLASS &wndClass)
{
wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE;
}
void MCUView::preCreate(MDICREATESTRUCT &createStruct)
{
createStruct.cx=InitialWidth;
createStruct.cy=InitialHeight;
createStruct.style^=WS_THICKFRAME;
}

66
m68hc11/MCUVIEW.HPP Normal file
View File

@@ -0,0 +1,66 @@
#ifndef _M68HC11_MCUVIEW_HPP_
#define _M68HC11_MCUVIEW_HPP_
#ifndef _COMMON_MDIWIN_HPP_
#include <common/mdiwin.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
#ifndef _M68HC11_MCUDLG_HPP_
#include <m68hc11/mcudlg.hpp>
#endif
#ifndef _M68HC11_MCUTHREAD_HPP_
#include <m68hc11/mcuthrd.hpp>
#endif
class StatusBarEx;
class MCUView : public MDIWindow, public MCUThread
{
public:
MCUView(void);
virtual ~MCUView();
void setCode(const String &strPathBinary);
protected:
virtual void preRegister(WNDCLASS &wndClass);
virtual void preCreate(MDICREATESTRUCT &createStruct);
private:
enum {StatusBarID=101,InitialWidth=565,InitialHeight=360};
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType cancelHandler(CallbackData &someCallbackData);
CallbackData::ReturnType startHandler(CallbackData &someCallbackData);
CallbackData::ReturnType errorEventHandler(CallbackData &someCallbackData);
CallbackData::ReturnType mcuEventHandler(CallbackData &someCallbackData);
CallbackData::ReturnType messageHandler(CallbackData &someCallbackData);
void handleEventRegs(CallbackData &someCallbackData);
void handleEventVarByte(CallbackData &someCallbackData);
void handleEventQuadByte(CallbackData &someCallbackData);
void handleEventDoubleByte(CallbackData &someCallbackData);
void handleSingleByteData(CallbackData &someCallbackData);
void handleStringData(CallbackData &someCallbackData);
Callback<MCUView> mCreateHandler;
Callback<MCUView> mSizeHandler;
Callback<MCUView> mCloseHandler;
Callback<MCUView> mDestroyHandler;
Callback<MCUView> mCommandHandler;
Callback<MCUView> mCancelHandler;
Callback<MCUView> mStartHandler;
Callback<MCUView> mErrorEventHandler;
Callback<MCUView> mMCUEventHandler;
Callback<MCUView> mMessageHandler;
SmartPointer<StatusBarEx> mStatusBar;
MCUDlg mMCUDialog;
String mStrPathBinary;
};
inline
void MCUView::setCode(const String &strPathBinary)
{
mStrPathBinary=strPathBinary;
}
#endif

BIN
m68hc11/MOT.BMP Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

BIN
m68hc11/MOT.ICO Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

BIN
m68hc11/MOT.~IC Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

529
m68hc11/Mainfrm.cpp Normal file
View File

@@ -0,0 +1,529 @@
#include <m68hc11/mainfrm.hpp>
#include <m68hc11/serdlg.hpp>
#include <m68hc11/codeview.hpp>
#include <m68hc11/mcuview.hpp>
#include <m68hc11/cmpdlg.hpp>
#include <m68hc11/m68reg.hpp>
#include <m68hc11/splash.hpp>
#include <printman/printman.hpp>
#include <common/assert.hpp>
#include <common/opendlg.hpp>
#include <common/gdata.hpp>
#include <common/crsctrl.hpp>
#include <common/diskinfo.hpp>
char MainFrame::szClassName[]="M68HC11";
char MainFrame::szMenuName[]="mainMenu";
MainFrame::MainFrame(void)
{
mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler);
mPaintHandler.setCallback(this,&MainFrame::paintHandler);
mDestroyHandler.setCallback(this,&MainFrame::destroyHandler);
mCommandHandler.setCallback(this,&MainFrame::commandHandler);
mSizeHandler.setCallback(this,&MainFrame::sizeHandler);
mCreateHandler.setCallback(this,&MainFrame::createHandler);
mLineHandler.setCallback(this,&MainFrame::lineHandler);
insertHandlers();
}
MainFrame::~MainFrame()
{
destroy();
}
void MainFrame::insertHandlers(void)
{
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler);
}
void MainFrame::removeHandlers(void)
{
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler);
}
CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/)
{
GlobalData<int> statParts;
createToolBar();
mStatusBar=::new StatusBarEx(*this,StatusBarID);
mStatusBar.disposition(PointerDisposition::Delete);
statParts.size(2);
*((int*)&statParts[0])=300;
*((int*)&statParts[1])=400;
mStatusBar->setParts(statParts);
mStatusBar->setText("Ready");
applyHistory(getFrameMenu());
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/)
{
removeHandlers();
::PostQuitMessage(0);
::WinHelp(*this,0,HELP_QUIT,0);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData)
{
if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE;
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData)
{
Rect statusRect;
Rect toolRect;
Rect cRect;
mToolBar.windowRect(toolRect);
mStatusBar->windowRect(statusRect);
cRect.right(someCallbackData.loWord());
cRect.bottom(someCallbackData.hiWord());
getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top())));
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::lineHandler(CallbackData &someCallbackData)
{
String msg;
::sprintf(msg,"Ln %d, Col %d",someCallbackData.loWord(),someCallbackData.hiWord());
mStatusBar->setText(msg,1);
mStatusBar->update();
return FALSE;
}
CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case MenuCodeCompile :
handleCodeCompile();
break;
case MenuCodeCompileAndLoad :
handleCodeCompileAndLoad();
break;
case MenuEditCut :
handleEditCut();
break;
case MenuEditCopy :
handleEditCopy();
break;
case MenuEditPaste :
handleEditPaste();
break;
case MenuEditFind :
handleEditFind();
break;
case MenuCascade :
cascade();
break;
case MenuTile :
tile();
break;
case MenuArrange :
arrange();
break;
case MenuCloseAll :
closeAll();
break;
case MenuMinimizeAll :
minimizeAll();
break;
case MenuRestoreAll :
restoreAll();
break;
case MenuFileNew :
handleFileNew();
break;
case MenuFileOpen :
handleFileOpen();
break;
case MenuFileSave :
handleFileSave();
break;
case MenuFilePrint :
handleFilePrint();
break;
case MenuFileSaveAs :
handleFileSaveAs();
break;
case MenuFileClose :
handleFileClose();
break;
case MenuCompiler :
handleMenuCompiler();
break;
case MenuFileQuit :
handleQuit();
break;
case MenuSettingsSerial :
handleCommunications();
break;
case MenuHelpContents :
handleHelp();
break;
case MenuHelpSearch :
handleHelp();
break;
case MenuRegistration :
break;
case MenuHelpAbout :
break;
}
if(someCallbackData.wParam()>=StartDynamicID)handleFileOpen(someCallbackData);
return (CallbackData::ReturnType)FALSE;
}
// handlers
void MainFrame::handleCodeCompile(void)
{
CursorControl cursorControl;
SmartPointer<MDIWindow> mdiWindow;
Block<String> includePath;
String strMessage;
M68Reg m68Reg;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
CodeView &codeView=(CodeView&)*mdiWindow;
if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return;
mStatusBar->setText("compiling...");
cursorControl.waitCursor(TRUE);
m68Reg.getIncludePath(includePath);
m68Assembler.assemble(codeView.getTitle(),includePath);
cursorControl.waitCursor(FALSE);
strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s).");
mStatusBar->setText(strMessage);
}
void MainFrame::handleCodeCompileAndLoad(void)
{
CursorControl cursorControl;
Block<String> includePath;
bool assembleResult;
String strPathBinary;
String strMessage;
M68Reg m68Reg;
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
CodeView &codeView=(CodeView&)*mdiWindow;
if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return;
mStatusBar->setText("compiling...");
cursorControl.waitCursor(TRUE);
m68Reg.getIncludePath(includePath);
assembleResult=m68Assembler.assemble(codeView.getTitle(),includePath);
cursorControl.waitCursor(FALSE);
strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s).");
mStatusBar->setText(strMessage);
if(!assembleResult)return;
strPathBinary=codeView.getTitle().betweenString(0,'.');
strPathBinary+=".bin";
codeLoad(strPathBinary);
}
void MainFrame::handleEditCut(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).cut();
}
void MainFrame::handleEditCopy(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).copy();
}
void MainFrame::handleEditPaste(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).paste();
}
void MainFrame::handleEditFind(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).find();
}
void MainFrame::handleFileNew(void)
{
CodeView *pCodeView;
pCodeView=::new CodeView;
pCodeView->setLineHandler(&mLineHandler);
pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc");
insert(*pCodeView);
}
void MainFrame::handleFileOpen(CallbackData &someCallbackData)
{
PureMenu fileMenu;
String menuItemString;
getFrameMenu().getSubMenu(0,fileMenu);
menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand);
if(menuItemString.isNull())return;
menuItemString=menuItemString.betweenString(')',0);
menuItemString.trimLeft();
handleFileOpen(menuItemString);
}
void MainFrame::handleFileOpen(void)
{
OpenDialog openDialog;
String strPathFileName;
if(!openDialog.getOpenFileName(*this,"*.asm","Open File","*.asm",strPathFileName))return;
handleFileOpen(strPathFileName);
}
void MainFrame::handleFileOpen(const String &strPathFileName)
{
CodeView *pCodeView;
CursorControl cursorControl;
if(bringDocumentToFront(strPathFileName))return;
mStatusBar->setText("Loading...");
cursorControl.waitCursor(TRUE);
pCodeView=::new CodeView;
insert(*pCodeView); // insert the pointer before creating/activating the window
pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc");
pCodeView->setLineHandler(&mLineHandler);
pCodeView->open(strPathFileName);
mStatusBar->setText("Ready");
cursorControl.waitCursor(FALSE);
updateHistory(strPathFileName);
}
void MainFrame::handleFileClose(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
mdiWindow->close();
}
void MainFrame::handleFilePrint(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).print();
}
BOOL MainFrame::handleFileSave(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE;
CodeView &codeView=(CodeView&)*mdiWindow;
if(codeView.getTitle()==String(STRING_UNTITLED))return handleFileSaveAs();
if(!codeView.save())return mStatusBar->setText(codeView.getTitle()+String(" save failed.")),FALSE;
return mStatusBar->setText(codeView.getTitle()+String(" saved.")),TRUE;
return TRUE;
}
BOOL MainFrame::handleFileSaveAs(void)
{
SmartPointer<MDIWindow> mdiWindow;
OpenDialog openDialog;
String strPathFileName;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE;
if(!openDialog.getSaveFileName(*this,"Assembly Files","File Save","*.asm",strPathFileName))return FALSE;
if(!strPathFileName.strstr(".asm"))strPathFileName+=".asm";
if(!((CodeView&)*mdiWindow).save(strPathFileName))return mStatusBar->setText(strPathFileName+String(" save failed!.")),FALSE;
return mStatusBar->setText(strPathFileName+String(" saved.")),TRUE;
}
void MainFrame::handleCommunications(void)
{
SerialDlg serDlg;
serDlg.perform(*this);
}
void MainFrame::handleHelp(void)
{
String strPathHelpFileName;
DiskInfo diskInfo;
diskInfo.getCurrentDirectory(strPathHelpFileName);
strPathHelpFileName+=String(STRING_HELPFILENAME);
::WinHelp(*this,strPathHelpFileName,HELP_CONTENTS,0);
}
void MainFrame::handleMenuCompiler()
{
M68Reg m68Reg;
CMPDlg cmpDlg;
Block<String> pathDirList;
m68Reg.getIncludePath(pathDirList);
cmpDlg.setIncludePath(pathDirList);
if(cmpDlg.perform(*this))
{
cmpDlg.getIncludePath(pathDirList);
m68Reg.setIncludePath(pathDirList);
}
return;
}
void MainFrame::handleQuit()
{
postMessage(*this,WM_CLOSE,0,0L);
}
// support & testing
BOOL MainFrame::codeLoad(const String &strPathBinary)
{
MCUView *pMCUView;
pMCUView=::new MCUView;
pMCUView->createWindow(*this,STRING_MCUVIEWCLASSNAME,STRING_MCUVIEWCLASSNAME,"mcuMenu","Doc");
insert(*pMCUView);
pMCUView->setCode(strPathBinary);
return TRUE;
}
void MainFrame::setParts(int numParts)
{
GlobalData<int> statParts;
if(1==numParts){statParts.size(1);*((int*)&statParts[0])=FirstPartWidth;}
else {statParts.size(2);*((int*)&statParts[0])=FirstPartWidth;*((int*)&statParts[0]+1)=SecondPartWidth;}
mStatusBar->setParts(statParts);
}
void MainFrame::updateHistory(const String &pathFileName)
{
M68Reg m68Reg;
Array<SmartPointer<MDIWindow> >mdiWindows;
if(!m68Reg.insertHistory(pathFileName))return;
removeHistory(getFrameMenu());
applyHistory(getFrameMenu());
getDocuments(mdiWindows);
for(int index=0;index<mdiWindows.size();index++)
{
SmartPointer<MDIWindow> &mdiWindow=mdiWindows[index];
removeHistory(mdiWindow->getMenu());
applyHistory(mdiWindow->getMenu());
}
}
void MainFrame::removeHistory(PureMenu &pureMenu)
{
M68Reg m68Reg;
UINT startID(StartDynamicID);
Block<String> nameList;
PureMenu fileMenu;
m68Reg.getHistory(nameList);
if(!nameList.size())return;
pureMenu.getSubMenu(0,fileMenu);
for(int itemIndex=0;itemIndex<nameList.size();itemIndex++)fileMenu.removeMenu(startID++,PureMenu::ByCommand);
int entries(fileMenu.size());
if((int)PureMenu::TypeSeparator&(int)fileMenu.getMenuItemType(entries-1,PureMenu::ByPosition))fileMenu.removeMenu(entries-1,PureMenu::ByPosition);
}
void MainFrame::applyHistory(PureMenu &pureMenu)
{
M68Reg m68Reg;
Block<String> nameList;
PureMenu fileMenu;
String strItem;
m68Reg.getHistory(nameList);
if(!nameList.size())return;
pureMenu.getSubMenu(0,fileMenu);
fileMenu.appendSeparator();
for(int itemIndex=0;itemIndex<nameList.size();itemIndex++)
{
::sprintf(strItem,"%d) %s",itemIndex+1,(char*)nameList[itemIndex]);
fileMenu.appendMenu(StartDynamicID+itemIndex,strItem);
}
}
void MainFrame::createToolBar(void)
{
Block<AddBitmap> addBitmaps;
mToolBar.create(*this,ToolBarID);
addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL));
if(!mToolBar.addBitmaps(addBitmaps))return;
mToolBar.addButton(ToolBarButton(STD_FILENEW,MenuFileNew,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MenuFileOpen,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FILESAVE,MenuFileSave,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_CUT,MenuEditCut,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_COPY,MenuEditCopy,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_PASTE,MenuEditPaste,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FIND,MenuEditFind,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
}
BOOL MainFrame::bringDocumentToFront(const String &strTitle)
{
Array<SmartPointer<MDIWindow> >mdiWindows;
getDocuments(mdiWindows);
for(int index=0;index<mdiWindows.size();index++)
{
SmartPointer<MDIWindow> &mdiWindow=mdiWindows[index];
if(((CodeView&)*mdiWindow).getTitle()==strTitle){mdiWindow->bringWindowToTop();return TRUE;}
}
return false;
}
void MainFrame::splash(void)
{
SplashScreen splashScreen("SPLASH","M68HC11");
splashScreen.perform();
}
// virtuals
void MainFrame::mdiDestroy(MDIWindow &mdiWindow)
{
Array<SmartPointer<MDIWindow> >mdiWindows;
WORD winCount(0);
getDocuments(mdiWindows);
for(int index=0;index<mdiWindows.size();index++)
{
SmartPointer<MDIWindow> &mdiWindowPtr=mdiWindows[index];
if(mdiWindowPtr->className()==String(STRING_CODEVIEWCLASSNAME)&&((MDIWindow*)mdiWindowPtr!=&mdiWindow))winCount++;
}
if(!winCount)setParts(SinglePart);
}
void MainFrame::mdiActivate(MDIWindow &mdiWindow)
{
if(mdiWindow.className()==String(STRING_CODEVIEWCLASSNAME))setParts(DoublePart);
removeHistory(mdiWindow.getMenu());
applyHistory(mdiWindow.getMenu());
}
void MainFrame::mdiDeactivate(MDIWindow &/*mdiWindow*/)
{
}

112
m68hc11/Mainfrm.hpp Normal file
View File

@@ -0,0 +1,112 @@
#ifndef _M68HC11_MAINFRAME_HPP_
#define _M68HC11_MAINFRAME_HPP_
#ifndef _COMMON_MDIFRM_HPP_
#include <common/mdifrm.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _STATBAR_STATUSBAREX_HPP_
#include <statbar/statbarx.hpp>
#endif
#ifndef _TOOLBAR_TOOLBAR_HPP_
#include <toolbar/toolbar.hpp>
#endif
#ifndef _M68HC11_COMMCONTROL_HPP_
#include <m68hc11/commctrl.hpp>
#endif
#ifndef _M68HC11_M68HC11_HPP_
#include <m68hc11/m68hc11.hpp>
#endif
#ifndef _AS68HC11_M68ASSEMBLER_HPP_
#include <as68hc11/asm6811.hpp>
#endif
class MainFrame : public FrameWindow
{
public:
MainFrame(void);
virtual ~MainFrame();
static String className(void);
void splash(void);
protected:
virtual void mdiDestroy(MDIWindow &mdiWindow);
virtual void mdiActivate(MDIWindow &mdiWindow);
virtual void mdiDeactivate(MDIWindow &mdiWindow);
private:
enum {StatusBarID=500,ToolBarID=501,StartDynamicID=30000};
enum{SinglePart=1,DoublePart=2,FirstPartWidth=340,SecondPartWidth=420};
enum{MenuFileSave=SBCMENU_FILESAVE,MenuFileQuit=SBCMENU_FILEQUIT,MenuFilePrint=SBCMENU_FILEPRINT,
MenuSettingsSerial=SBCMENU_SETTINGSSERIAL,MenuHelpContents=SBCMENU_HELPCONTENTS,
MenuHelpSearch=SBCMENU_HELPSEARCH,MenuRegistration=SBCMENU_REGISTRATION,MenuFileNew=SBCMENU_FILENEW,
MenuFileOpen=SBCMENU_FILEOPEN,MenuHelpAbout=SBCMENU_HELPABOUT,MenuFileClose=SBCMENU_FILECLOSE,
MenuFileSaveAs=SBCMENU_FILESAVEAS,MenuCascade=IDM_CASCADE,MenuTile=IDM_TILE,MenuArrange=IDM_ARRANGE,
MenuCloseAll=IDM_CLOSEALL,MenuMinimizeAll=IDM_MINIMIZEALL,MenuRestoreAll=IDM_RESTOREALL,
MenuEditCut=SBCMENU_EDITCUT,MenuEditCopy=SBCMENU_EDITCOPY,MenuEditPaste=SBCMENU_EDITPASTE,
MenuEditFind=SBCMENU_EDITFIND,MenuCodeCompile=SBCMENU_CODECOMPILE,MenuCompiler=SBCMENU_COMPILER,
MenuCodeCompileAndLoad=SBCMENU_CODECOMPILEANDLOAD};
CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData);
CallbackData::ReturnType paintHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType timerHandler(CallbackData &someCallbackData);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType activateAppHandler(CallbackData &someCallbackData);
CallbackData::ReturnType displayChangeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType lineHandler(CallbackData &someCallbackData);
void createToolBar(void);
void handleMenuCompiler();
void handleCodeCompile(void);
void handleCodeCompileAndLoad(void);
void handleCommunications(void);
void handleEditCut(void);
void handleEditCopy(void);
void handleEditPaste(void);
void handleEditFind(void);
void handleFileNew(void);
void handleFileOpen(void);
void handleFileOpen(CallbackData &someCallbackData);
void handleFileOpen(const String &strPathFileName);
void handleFileClose(void);
void handleFilePrint(void);
void handleHelp(void);
void handleQuit(void);
BOOL handleFileSave(void);
BOOL handleFileSaveAs(void);
BOOL codeLoad(const String &strPathBinary);
void registerClass(void)const;
void insertHandlers(void);
void removeHandlers(void);
void setParts(int numParts);
void applyHistory(PureMenu &pureMenu);
void updateHistory(const String &pathFileName);
void removeHistory(PureMenu &pureMenu);
BOOL bringDocumentToFront(const String &strTitle);
Callback<MainFrame> mQueryEndSessionHandler;
Callback<MainFrame> mPaintHandler;
Callback<MainFrame> mDestroyHandler;
Callback<MainFrame> mCommandHandler;
Callback<MainFrame> mSizeHandler;
Callback<MainFrame> mCreateHandler;
Callback<MainFrame> mLineHandler;
SmartPointer<StatusBarEx> mStatusBar;
CommControl mCommControl;
ToolBar mToolBar;
// SerialSettings mSerialSettings;
M68Assembler m68Assembler;
static char szClassName[];
static char szMenuName[];
};
inline
String MainFrame::className(void)
{
return String(szClassName);
}
#endif

129
m68hc11/ODLSTLED.CPP Normal file
View File

@@ -0,0 +1,129 @@
#include <m68hc11/odlstled.hpp>
#include <common/drawitem.hpp>
#include <common/measure.hpp>
#include <common/purebmp.hpp>
OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID)
: OwnerDrawList(parentWnd,hControlWnd,controlID), mRGBGray(192,192,192), mGrayBrush(mRGBGray),
mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"),
mDashBitmap("DASH"), mFont("Courier",14)
{
}
OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style)
: OwnerDrawList(parentWnd,initRect,controlID,style), mRGBGray(192,192,192), mGrayBrush(mRGBGray),
mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"),
mDashBitmap("DASH"), mFont("Courier",14)
{
}
OwnerDrawListBinaryLed::~OwnerDrawListBinaryLed()
{
}
OwnerDrawListBinaryLed &OwnerDrawListBinaryLed::operator=(const OwnerDrawListBinaryLed &/*someOwnerDrawListBinaryLed*/)
{ // private implementation
return *this;
}
// **** virtuals
LPARAM OwnerDrawListBinaryLed::handleControlColor(PureDevice &/*pureDevice*/,Control &/*wndListBox*/)
{
return (LPARAM)(GDIObj)mGrayBrush;
}
WORD OwnerDrawListBinaryLed::handleDraw(const DrawItem &drawItem)
{
if(!isOkay()||-1==drawItem.itemID()||DrawItem::ListBox!=drawItem.controlType())return FALSE;
PureDevice pureDevice(drawItem.deviceContext());
pureDevice.setBkColor(mRGBGray);
switch(drawItem.itemAction())
{
case DrawItem::Select :
case DrawItem::DrawEntire :
case DrawItem::Focus :
drawEntire(drawItem);
break;
}
return TRUE;
}
WORD OwnerDrawListBinaryLed::handleMeasureItem(MeasureItem &measureItem)
{
measureItem.itemHeight(20);
return TRUE;
}
void OwnerDrawListBinaryLed::drawEntire(const DrawItem &drawItem)
{
PureDevice pureDevice(drawItem.deviceContext());
PureDevice memDevice;
String stringData;
String strNumber;
TEXTMETRIC textMetric;
Rect drawRect;
SIZE sizeExtent;
HFONT hPrevFont;
if(!isOkay())return;
stringData.reserve(256);
drawRect=drawItem.rectItem();
hPrevFont=(HFONT)::SelectObject(drawItem.deviceContext(),(GDIObj)mFont);
memDevice.compatibleDevice(pureDevice);
sendMessage(drawItem.hwndItem(),LB_GETTEXT,drawItem.itemID(),(LPARAM)(LPSTR)stringData);
strNumber=stringData.betweenString('\t',0);
if(strNumber.isNull())setBitmap();
else
{
setBitmap(::atoi(strNumber));
stringData=stringData.betweenString(0,'\t');
}
if(stringData.isNull())::MessageBeep(0);
::GetTextMetrics(drawItem.deviceContext(),&textMetric);
::GetTextExtentPoint32(drawItem.deviceContext(),(LPSTR)stringData,stringData.length(),&sizeExtent);
if(drawItem.itemState()&ODS_DISABLED)
{
::GrayString(drawItem.deviceContext(),(HBRUSH)(GDIObj)mDisabledBrush,(GRAYSTRINGPROC)0,(LPARAM)(LPSTR)stringData,stringData.length(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,0,0);
memDevice.select(mBlankBitmap,TRUE);
Rect stretchRect(drawRect);
stretchRect.right(mBlankBitmap.width());
stretchRect.bottom(sizeExtent.cy);
pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy);
memDevice.select(mBlankBitmap,FALSE);
}
else
{
::TextOut(drawItem.deviceContext(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,(LPSTR)stringData,stringData.length());
memDevice.select(mBlankBitmap,TRUE);
Rect stretchRect(drawRect);
stretchRect.right(mBlankBitmap.width());
stretchRect.bottom(sizeExtent.cy);
pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy);
memDevice.select(mBlankBitmap,FALSE);
}
if((((UINT)drawItem.itemState())&ODS_FOCUS))
{
Rect bmpRect(drawRect);
bmpRect.right(bmpRect.left()+mBlankBitmap.width());
bmpRect.bottom(bmpRect.top()+sizeExtent.cy);
::DrawFocusRect(drawItem.deviceContext(),(RECT*)&bmpRect);
}
::SelectObject(drawItem.deviceContext(),hPrevFont);
}
void OwnerDrawListBinaryLed::setBitmap(BYTE value)
{
for(int index=0,mask=0x80;index<8;index++,mask/=2)
mBlankBitmap.setFrom(value&mask?mOneBitmap:mZeroBitmap,getPlacementRect(index));
}
void OwnerDrawListBinaryLed::setBitmap(void)
{
for(int index=0,mask=0x80;index<8;index++,mask/=2)mBlankBitmap.setFrom(mDashBitmap,getPlacementRect(index));
}
Rect OwnerDrawListBinaryLed::getPlacementRect(int position)
{
return Rect(position*CellWidth,0,CellWidth,CellHeight);
}

44
m68hc11/ODLSTLED.HPP Normal file
View File

@@ -0,0 +1,44 @@
#ifndef _COMMON_OWNERDRAWLISTBINARYLED_HPP_
#define _COMMON_OWNERDRAWLISTBINARYLED_HPP_
#ifndef _COMMON_BRUSH_HPP_
#include <common/brush.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_OWNERDRAWLIST_HPP_
#include <common/odlist.hpp>
#endif
#ifndef _COMMON_PUREBITMAP_HPP_
#include <common/purebmp.hpp>
#endif
class OwnerDrawListBinaryLed : public OwnerDrawList
{
public:
OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID);
OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style=LBS_NOTIFY|WS_BORDER|LBS_HASSTRINGS|WS_VSCROLL|LBS_OWNERDRAWFIXED|WS_CLIPCHILDREN|WS_CLIPSIBLINGS);
virtual ~OwnerDrawListBinaryLed();
OwnerDrawListBinaryLed &operator=(const OwnerDrawListBinaryLed &someOwnerDrawListBinaryLed);
protected:
virtual WORD handleDraw(const DrawItem &drawItem);
virtual WORD handleMeasureItem(MeasureItem &measureItem);
virtual LPARAM handleControlColor(PureDevice &pureDevice,Control &wndListBox);
virtual void drawEntire(const DrawItem &drawItem);
private:
enum {BmSel=0,BmUnSel=1};
enum {CellWidth=13,CellHeight=23};
Rect getPlacementRect(int position);
void setBitmap(BYTE value);
void setBitmap(void);
PureBitmap mBlankBitmap;
PureBitmap mOneBitmap;
PureBitmap mZeroBitmap;
PureBitmap mDashBitmap;
Font mFont;
RGBColor mRGBGray;
Brush mGrayBrush;
Brush mDisabledBrush;
};
#endif

BIN
m68hc11/ONE.BMP Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

184
m68hc11/OPENDIR.CPP Normal file
View File

@@ -0,0 +1,184 @@
#include <m68hc11/opendir.hpp>
#include <common/guiwnd.hpp>
#include <common/diskinfo.hpp>
OpenDirectory::OpenDirectory(void)
{
}
OpenDirectory::~OpenDirectory()
{
}
bool OpenDirectory::getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory)
{
DiskInfo diskInfo;
String strCurrentDirectory;
if(strInitialDirectory.isNull())diskInfo.getCurrentDirectory(strCurrentDirectory);
else strCurrentDirectory=strInitialDirectory;
owner(parentWindow);
instance(parentWindow.processInstance());
filter("..;.");
filterPattern("..;.");
fileName("");
fileTitle("");
initialDirectory(strCurrentDirectory);
title(titleString);
creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST|OpenDialog::ENABLEHOOK);
OpenDialog::hookProc((LPOFNHOOKPROC)getHookAddress());
mLastFolderChange=String("");
if(!getOpenFileName())return false;
strDirectory=mLastFolderChange;
return true;
}
OpenDirectory::OpenDirectory(const OpenDirectory &someOpenDirectory)
{ // private implementation
*this=someOpenDirectory;
}
OpenDirectory &OpenDirectory::operator=(const OpenDirectory &/*someOpenDirectory*/)
{ // private implementation
return *this;
}
UINT OpenDirectory::hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam)
{
UINT returnCode(false);
switch(uiMsg)
{
case WM_NOTIFY :
{
LPOFNOTIFY pNotify=(LPOFNOTIFY)lParam;
switch(pNotify->hdr.code)
{
case CDN_INITDONE :
::EnableWindow(::GetDlgItem(getParent(),FileNameEditControlID),false);
returnCode=handleInitDone();
break;
case CDN_SELCHANGE :
returnCode=handleSelChange();
break;
case CDN_FOLDERCHANGE :
returnCode=handleFolderChange();
break;
case CDN_SHAREVIOLATION :
returnCode=handleShareViolation();
break;
case CDN_HELP :
returnCode=handleHelp();
break;
case CDN_FILEOK :
returnCode=handleFileOk();
break;
case CDN_TYPECHANGE :
returnCode=handleTypeChange();
break;
}
}
}
return returnCode;
}
// helpers
bool OpenDirectory::getPathFileName(String &strPathFileName)
{
if(!getHandle())return false;
strPathFileName.reserve(MaxString);
return ::SendMessage(getParent(),CDM_GETFILEPATH,MaxString,(LPARAM)(LPSTR)strPathFileName);
}
bool OpenDirectory::getFileName(String &strFileName)
{
if(!getHandle())return false;
strFileName.reserve(MaxString);
return ::SendMessage(getParent(),CDM_GETSPEC,MaxString,(LPARAM)(LPSTR)strFileName);
}
bool OpenDirectory::getFolderPath(String &strFolderPath)
{
if(!getHandle())return false;
strFolderPath.reserve(MaxString);
return ::SendMessage(getParent(),CDM_GETFOLDERPATH,MaxString,(LPARAM)(LPSTR)strFolderPath);
}
bool OpenDirectory::hideControl(UINT controlID)
{
if(!getHandle())return false;
return ::SendMessage(getParent(),CDM_HIDECONTROL,controlID,0);
}
bool OpenDirectory::setControlText(UINT controlID,const String &strControlText)const
{
if(!getHandle())return false;
return ::SendMessage(getParent(),CDM_SETCONTROLTEXT,controlID,(LPARAM)(LPSTR)(String&)strControlText);
}
bool OpenDirectory::getControlText(UINT controlID,String &strControlText)const
{
if(!getHandle())return false;
strControlText.reserve(MaxString);
return ::SendMessage(getParent(),WM_GETTEXT,MaxString,(LPARAM)(char*)strControlText);
}
bool OpenDirectory::setDefaultExtension(const String &strDefaultExtension)
{
if(!getHandle()||strDefaultExtension.isNull())return false;
return ::SendMessage(getParent(),CDM_SETDEFEXT,0,(LPARAM)(LPSTR)(String&)strDefaultExtension);
}
// virtuals
UINT OpenDirectory::handleInitDone(void)
{
return false;
}
UINT OpenDirectory::handleSelChange(void)
{
String strFolderPath;
getFolderPath(strFolderPath);
setControlText(FileNameEditControlID,strFolderPath);
return false;
}
UINT OpenDirectory::handleFolderChange(void)
{
String strFolderPath;
getFolderPath(strFolderPath);
if(strFolderPath==mLastFolderChange)
{
setControlText(FileNameEditControlID,strFolderPath);
::EndDialog(getParent(),TRUE);
}
else
{
mLastFolderChange=strFolderPath;
setControlText(FileNameEditControlID,strFolderPath);
}
return false;
}
UINT OpenDirectory::handleShareViolation(void)
{
return false;
}
UINT OpenDirectory::handleFileOk(void)
{
return false;
}
UINT OpenDirectory::handleHelp(void)
{
return false;
}
UINT OpenDirectory::handleTypeChange(void)
{
return false;
}

42
m68hc11/OPENDIR.HPP Normal file
View File

@@ -0,0 +1,42 @@
#ifndef _M68HC11_OPENDIRECTORY_HPP_
#define _M68HC11_OPENDIRECTORY_HPP_
#ifndef _COMMON_OPENDIALOG_HPP_
#include <common/opendlg.hpp>
#endif
#ifndef _HOOKPROC_OFNHOOK_HPP_
#include <hookproc/ofnhook.hpp>
#endif
class OpenDirectory : private OpenDialog, private OFNHook
{
public:
OpenDirectory(void);
virtual ~OpenDirectory();
bool getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory);
protected:
virtual UINT hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam);
virtual UINT handleInitDone(void);
virtual UINT handleSelChange(void);
virtual UINT handleFolderChange(void);
virtual UINT handleShareViolation(void);
virtual UINT handleFileOk(void);
virtual UINT handleHelp(void);
virtual UINT handleTypeChange(void);
bool getPathFileName(String &strPathFileName);
bool getFileName(String &strFileName);
bool getFolderPath(String &strFolderPath);
bool hideControl(UINT controlID);
bool setDefaultExtension(const String &strDefaultExtension);
bool getControlText(UINT controlID,String &strControlText)const;
bool setControlText(UINT controlID,const String &strControlText)const;
private:
enum{FileNameEditControlID=0x480};
enum{MaxString=256};
OpenDirectory(const OpenDirectory &someOpenDirectory);
OpenDirectory &operator=(const OpenDirectory &someOpenDirectory);
String mLastFolderChange;
};
#endif

0
m68hc11/PARSE.LOG Normal file
View File

764
m68hc11/SCRAPS.TXT Normal file
View File

@@ -0,0 +1,764 @@
#if 0
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
{
CommControl commControl;
DeviceControlBlock deviceControlBlock;
CommStatus commStatus;
BYTE charByte;
String strString;
BYTE ioBuffer[256];
DWORD eventMask;
commControl.open(CommControl::PortCOM1);
if(!commControl.isOkay())return FALSE;
commControl.getDeviceControlBlock(deviceControlBlock);
deviceControlBlock.parity(DeviceControlBlock::ParityNone);
deviceControlBlock.baudRate(1200);
deviceControlBlock.dataBits(8);
deviceControlBlock.stopBits(0);
if(!commControl.setDeviceControlBlock(deviceControlBlock))::OutputDebugString("Set operation failed\n");
::OutputDebugString("waiting for break signal...\n");
commControl.setEventMask(CommControl::EventBreak);
commControl.waitEvent();
::OutputDebugString("break received, loading code...\n");
for(int index=0;index<256;index++)ioBuffer[index]=index;
charByte=0xFF;
commControl.write(&charByte,sizeof(charByte));
commControl.write(ioBuffer,sizeof(ioBuffer));
::memset(ioBuffer,0,sizeof(ioBuffer));
::OutputDebugString("receiving echo\n");
while(TRUE)
{
commControl.clearError(commStatus);
if(commStatus.bytesInReceiveQueue())
{
commControl.read(ioBuffer,sizeof(ioBuffer));
for(index=0;index+8<sizeof(ioBuffer);index+=8)
{
::sprintf(strString,"%02x %02x %02x %02x %02x %02x %02x %02x\n",
ioBuffer[index],ioBuffer[index+1],ioBuffer[index+2],ioBuffer[index+3],ioBuffer[index+4],
ioBuffer[index+5],ioBuffer[index+6],ioBuffer[index+7]);
::OutputDebugString(strString);
}
break;
}
::Sleep(1000);
}
#endif
#if 0
deviceControlBlock.binaryEnabled(TRUE);
deviceControlBlock.enableParity(TRUE);
deviceControlBlock.baudRate(1200);
deviceControlBlock.parity(DeviceControlBlock::ParityNone);
deviceControlBlock.dataBits(8);
deviceControlBlock.stopBits(1);
if(!commControl.setDeviceControlBlock(deviceControlBlock))
{
::GetLastError();
::OutputDebugString("Set operation failed\n");
}
commControl.setEventMask(CommControl::EventAll);
::OutputDebugString("waiting for event\n");
// commControl.setBreak();
commControl.waitEvent(eventMask);
if(eventMask&CommControl::EventBreak)::OutputDebugString("break occurred\n");
else ::OutputDebugString("some other event occurred\n");
#endif
#if 0
commControl.getDeviceControlBlock(deviceControlBlock);
deviceControlBlock.baudRate(1200);
deviceControlBlock.parity(DeviceControlBlock::ParityNone);
// deviceControlBlock.dataBits(8);
// deviceControlBlock.stopBits(1);
if(!commControl.setDeviceControlBlock(deviceControlBlock))::OutputDebugString("Set operation failed\n");
commControl.getDeviceControlBlock(deviceControlBlock);
for(int index=0;index<256;index++)ioBuffer[index]=index;
charByte=0xFF;
commControl.write(&charByte,sizeof(charByte));
commControl.write(ioBuffer,sizeof(ioBuffer));
::memset(ioBuffer,0,sizeof(ioBuffer));
commControl.read(ioBuffer,sizeof(ioBuffer));
for(index=0;index+8<sizeof(ioBuffer);index+=8)
{
::sprintf(strString,"%02x %02x %02x %02x %02x %02x %02x %02x\n",
ioBuffer[index],ioBuffer[index+1],ioBuffer[index+2],ioBuffer[index+3],ioBuffer[index+4],
ioBuffer[index+5],ioBuffer[index+6],ioBuffer[index+7]);
::OutputDebugString(strString);
}
// commControl.writeLine("ATE1");
// commControl.readLine(strString);
/// commControl.writeLine("ATDT 5551212;");
// commControl.readLine(strString);
// while(TRUE)
// {
// ::OutputDebugString("sending 0xFF");
// inByte=0xFF;
// commControl.write(&inByte,sizeof(inByte));
// ::OutputDebugString("attempting read...\n");
// commControl.clearError(commStatus);
// if(commStatus.bytesInReceiveQueue())
// {
// String strString;
// for(int index=0;index<commStatus.bytesInReceiveQueue();index++)
// {
// commControl.read(&inByte,sizeof(inByte));
// ::sprintf(strString,"%x %d\n",inByte);
// ::OutputDebugString(strString);
// ::MessageBeep(0);
// }
// }
// else ::OutputDebugString("No data in receive queue.\n");
// ::OutputDebugString("sleeping\n");
// ::Sleep(1500);
// }
commControl.close();
return FALSE;
// MainWindow mainWindow;
// return mainWindow.messageLoop();
}
#endif
#if 0
#include <common/windows.hpp>
#include <common/openfile.hpp>
#include <common/block.hpp>
#include <thread/mthread.hpp>
#include <sbb/dcb.hpp>
#include <sbb/commstat.hpp>
#include <sbb/commctrl.hpp>
#include <sbb/thmsgx.hpp>
void main(int argc,char **argv)
{
CommControl commControl;
CommStatus commStatus;
DeviceControlBlock deviceControlBlock;
DeviceControlBlock sanityBlock;
BYTE ioBuffer[256];
commControl.open(CommControl::PortCOM1);
if(!commControl.isOkay())return;
commControl.getDeviceControlBlock(deviceControlBlock);
deviceControlBlock.parity(DeviceControlBlock::ParityNone);
// deviceControlBlock.dataBits(8);
// deviceControlBlock.stopBits(1);
// deviceControlBlock.baudRate(1200);
if(!commControl.setDeviceControlBlock(deviceControlBlock))
{
String strCode;
DWORD errorCode(::GetLastError());
::sprintf(strCode,"0x%08lx %d\n",errorCode,errorCode);
::OutputDebugString(strCode);
}
String strRcv;
commControl.writeLine("ATE1");
commControl.readLine(strRcv);
::OutputDebugString(strRcv);
commControl.writeLine("ATDT 9,1,5162620924");
// commControl.readLine(strRcv);
::OutputDebugString(strRcv);
commControl.clearError(commStatus);
if(commStatus.bytesInReceiveQueue())
{
commControl.readLine(strRcv);
::OutputDebugString(strRcv);
}
commControl.close();
}
#endif
#include <fileio/fileio.hpp>
String strPathFileName("c:\\work\\as68hc11\\code2.asm");
String strLine;
FileIO outFile;
outFile.open(strPathFileName); //,FileIO::GenericRead,FileIO::FileShareRead);
if(!outFile.isOkay())return FALSE;
while(outFile.readLine(strLine));
outFile.close();
outFile.open(strPathFileName,FileIO::GenericRead,FileIO::FileShareRead);
if(!outFile.isOkay())return FALSE;
while(outFile.readLine(strLine));
return FALSE;
void MainFrame::createToolBar(void)
{
Block<AddBitmap> addBitmaps;
mToolBar.create(*this,ToolBarID);
addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL));
if(!mToolBar.addBitmaps(addBitmaps))return;
mToolBar.addButton(ToolBarButton(STD_FILENEW,MenuFileNew,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MenuFileOpen,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FILESAVE,MenuFileSave,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_CUT,112,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_COPY,110,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_PASTE,111,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_PRINT,RiskMenuPrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_PRINTPRE,RiskMenuPageSetup,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FIND,122,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.show(SW_SHOW);
// mToolBar.addButton(ToolBarButton(STD_HELP,RiskMenuHelpContents,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_DELETE,114,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_PROPERTIES,117,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_REDOW,119,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_REPLACE,121,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_UNDO,123,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
}
// mToolBar.show(SW_SHOW);
// mToolBar.addButton(ToolBarButton(STD_PRINT,RiskMenuPrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_PRINTPRE,RiskMenuPageSetup,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_HELP,RiskMenuHelpContents,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_DELETE,114,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_PROPERTIES,117,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_REDOW,119,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_REPLACE,121,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// mToolBar.addButton(ToolBarButton(STD_UNDO,123,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
// commControl.read(&address,sizeof(address));
// ::sprintf(strString,"%lx",int(address));
// ::sprintf(strString,"%d%d%d%d%d%d%d%d",
// int((address&128?1:0)),int((address&64?1:0)),int((address&32?1:0)),int((address&16?1:0)),
// int((address&8?1:0)),int((address&4?1:0)),int((address&2?1:0)),int((address&1?1:0)));
// ::MessageBox(::GetFocus(),(LPSTR)strString,"VALUE",MB_OK);
// commControl.write(&charByte,sizeof(charByte));
// WORD address;
// typedef void (PASCAL * DEBUGPROC)(CommControl &commControl);
// Library procLib("procLib.dll");
// if(!procLib.isOkay())return FALSE;
// if(!procLib.procIn("_procDebug@4"))return FALSE;
// ((DEBUGPROC)procLib.procAddress("_procDebug@4"))(commControl);
//c ((COMPROC)procLib.procAddress("_procDebug@4"))(commControl);
/// ::memset(rcvBuffer,0,sizeof(rcvBuffer));
// WORD address;
// String strString;
// WORD count(0);
// while(TRUE)
// {
// commControl.read(&address,sizeof(address));
// ::sprintf(strString,"%d) %08lx\n",++count,int(address));
// ::OutputDebugString(strString);
// commControl.write(&charByte,sizeof(charByte));
// }
// commControl.read(rcvBuffer,1);
// commControl.read(rcvBuffer+1,
// commControl.read(rcvBuffer+2,1);
// commControl.read(rcvBuffer+3,1);
// commControl.setEventMask(CommControl::EventBreak);
// if(!commControl.waitEvent()){mStatusBar->setText("timeout waiting for break.");return FALSE;}
// else mStatusBar->setText("received break");
// commControl.write(&charByte,sizeof(charByte));
// ::memset(rcvBuffer,0,sizeof(rcvBuffer));
// charByte=0;
// commControl.read(&charByte,1);
// commControl.read(&charByte,1);
// ldd SWIHANDLER ; get address of SWIHANDLER to register D
// bsr WRITEWORD ; send it out to SCI
// bsr WAITCHAR ; wait for a character
// ldd [SWI] ; load contents of SWI vector ?
// bsr WRITEWORD ; send it out to SCI
// bsr WAITCHAR ; wait for a character
// ldd SWIHANDLER ; load address of SWIHANDLER to register D
// std [SWI] ; store SWIHANDLER at swi vector ?
// ldd [SWI] ; load contents of SWIHANDLER
// bsr WRITEWORD ; send it out to SCI
// bsr WAITCHAR ; wait for a character
; *********************************************************************************
;
; ldd REGS ; load REGS into D
; std [MEMLOC] ; store D into MEMLOC
;CONTINUE equ * ; sync address
; ldd [MEMLOC] ; load D with value at MEMLOC
; xgdx ; exchange D with X
; ldab ix,00h ; load B with byte at address of X plus 00h
; bsr WRITECHAR ; write the contents of B to SCI
; ldd [MEMLOC] ; reload the value at MEMLOC
; addd 0001h ; increment value
; cpd CONFIG ; compare register D with CONFIG
; bgt END ; if D is greater than CONFIG we're all done
; std [MEMLOC] ; store value back into MEMLOC
; jmp CONTINUE ; keep going
;END equ *
; std [EEPROM]
; ldd [EEPROM]
; bsr WRITEWORD
; bsr WAITCHAR
; ldab EVENTCHAR
; bsr WRITECHAR
; ldab [PPROG]
; bsr WRITECHAR
; bsr WAITCHAR
; ldab EVENTCHAR
; bsr WRITECHAR
; ldab [BPROT]
; bsr WRITECHAR
; bsr WAITCHAR
; ldab 00h
; stab [BPROT]
; ldab EVENTCHAR
; bsr WRITECHAR
; ldab [BPROT]
; bsr WRITECHAR
; bsr WAITCHAR
; ldab 11h
; stab [EEPROM]
; ldab EVENTCHAR
; bsr WRITECHAR
; ldab [EEPROM]
; bsr WRITECHAR
; bsr WAITCHAR
; ldab EVENTEND
; bsr WRITECHAR
; ldab EVENTWORD
; bsr WRITECHAR
; ldd 5555h
; std [EEPROM]
; ldd [EEPROM]
; bsr WRITEWORD
; bsr READCHAR
; ldab EVENTEND
; bsr WRITECHAR
; ldd [msg] ; this seems to generate a compile error
; bsr WRITEENDEVENT ; write end event character to the SCI
#define STRING_REGISTERPORTA 700
#define STRING_REGISTERCONFIG 763
mOwnerDrawList->insertString("PORTA");
mOwnerDrawList->insertString("RESERVED");
mOwnerDrawList->insertString("PIOC");
mOwnerDrawList->insertString("PORTC");
mOwnerDrawList->insertString("PORTB");
mOwnerDrawList->insertString("PORTCL");
mOwnerDrawList->insertString("RESERVED");
mOwnerDrawList->insertString("DDRC");
mOwnerDrawList->insertString("PORTD");
mOwnerDrawList->insertString("DDRD");
mOwnerDrawList->insertString("PORTE");
mOwnerDrawList->insertString("CFORC");
mOwnerDrawList->insertString("OC1M");
mOwnerDrawList->insertString("OC1D");
mOwnerDrawList->insertString("TCNT(Hi)");
mOwnerDrawList->insertString("TCNT(Lo)");
mOwnerDrawList->insertString("TIC1(Hi)");
mOwnerDrawList->insertString("TIC1(Lo)");
mOwnerDrawList->insertString("TIC2(Hi)");
mOwnerDrawList->insertString("TIC2(Lo)");
mOwnerDrawList->insertString("TIC3(Hi)");
mOwnerDrawList->insertString("TIC3(Lo)");
mOwnerDrawList->insertString("TOC1(Hi)");
mOwnerDrawList->insertString("TOC1(Lo)");
mOwnerDrawList->insertString("TOC2(Hi)");
mOwnerDrawList->insertString("TOC2(Lo)");
mOwnerDrawList->insertString("TOC3(Hi)");
mOwnerDrawList->insertString("TOC3(Lo)");
mOwnerDrawList->insertString("TOC4(Hi)");
mOwnerDrawList->insertString("TOC4(Lo)");
mOwnerDrawList->insertString("TI405(Hi)");
mOwnerDrawList->insertString("TI405(Lo)");
mOwnerDrawList->insertString("TCTL1");
mOwnerDrawList->insertString("TCTL2");
mOwnerDrawList->insertString("TMSK1");
mOwnerDrawList->insertString("TFLG1");
mOwnerDrawList->insertString("TMSK2");
mOwnerDrawList->insertString("TFLG2");
mOwnerDrawList->insertString("PACTL");
mOwnerDrawList->insertString("PACNT");
mOwnerDrawList->insertString("SPCR");
mOwnerDrawList->insertString("SPSR");
mOwnerDrawList->insertString("SPDR");
mOwnerDrawList->insertString("BAUD");
mOwnerDrawList->insertString("SCCR1");
mOwnerDrawList->insertString("SCCR2");
mOwnerDrawList->insertString("SCSR");
mOwnerDrawList->insertString("SCDR");
mOwnerDrawList->insertString("ADCTL");
mOwnerDrawList->insertString("ADR1");
mOwnerDrawList->insertString("ADR2");
mOwnerDrawList->insertString("ADR3");
mOwnerDrawList->insertString("ADR4");
mOwnerDrawList->insertString("BPROT");
mOwnerDrawList->insertString("EPROG");
mOwnerDrawList->insertString("RESERVED");
mOwnerDrawList->insertString("RESERVED");
mOwnerDrawList->insertString("OPTION");
mOwnerDrawList->insertString("COPRST");
mOwnerDrawList->insertString("PPROG");
mOwnerDrawList->insertString("HPRIO");
mOwnerDrawList->insertString("INIT");
mOwnerDrawList->insertString("TEST1");
mOwnerDrawList->insertString("CONFIG");
#if 0
#include <common/library.hpp>
BOOL MainFrame::codeLoad(const String &strPathBinary)
{
FileHandle inFile;
BYTE sndBuffer[256];
BYTE rcvBuffer[256];
BYTE *ptrByte;
BYTE charByte(0xFF);
WORD codeLength(0);
DeviceControlBlock deviceControlBlock;
CommControl commControl;
CommStatus commStatus;
if(!inFile.open(strPathBinary)){mStatusBar->setText("Error opening file.");return FALSE;}
if(!commControl.open(CommControl::Port(0))){mStatusBar->setText("Error opening port.");return FALSE;}
commControl.getDeviceControlBlock(deviceControlBlock);
deviceControlBlock.baudRate(1200);
deviceControlBlock.parity(DeviceControlBlock::Parity(0));
deviceControlBlock.dataBits(8);
deviceControlBlock.stopBits(0);
if(!commControl.setDeviceControlBlock(deviceControlBlock))mStatusBar->setText("Failed to apply settings.");
mStatusBar->setText("waiting for break signal....");
commControl.setEventMask(CommControl::EventBreak);
if(!commControl.waitEvent()){mStatusBar->setText("timeout waiting for break.");return FALSE;}
mStatusBar->setText("break received, loading code...");
::memset(sndBuffer,1,sizeof(sndBuffer));
::memset(rcvBuffer,0,sizeof(rcvBuffer));
ptrByte=sndBuffer;
while(inFile.read(*ptrByte)){codeLength++;ptrByte++;}
commControl.write(&charByte,sizeof(charByte));
commControl.read(&charByte,sizeof(charByte));
commControl.write(sndBuffer,sizeof(sndBuffer));
if(!commControl.read(rcvBuffer,sizeof(sndBuffer))){mStatusBar->setText("Failed to verify write.");return FALSE;}
if(!::memcmp(rcvBuffer,sndBuffer,codeLength))mStatusBar->setText("Code has been loaded onto device.");
else {mStatusBar->setText("Failed to verify write.");return FALSE;}
// event types
// 0x00 - character
// 0x01 - WORD
// 0x02 - DWORD
// 0x03 - varchar : [WORD:count,countcharacters]
// 0xFF - end
BYTE event; // 0x00=char, 0x01=WORD, 0x02=varchar
BYTE ack(0x00);
char charData;
WORD wordData;
DWORD dwordData;
int index;
BOOL reading(TRUE);
String strString;
int map(0x1000);
enum Event{EventSingleByte=0x00,EventDoubleByte=0x01,EventQuadByte=0x02,EventVarByte=0x03,
EventRegs=0x04,EventEnd=0xFF};
while(reading)
{
commControl.read(&event,sizeof(event));
switch(Event(event))
{
case EventSingleByte :
commControl.read(&charData,sizeof(charData));
commControl.write(&ack,sizeof(ack));
::sprintf(strString,"(%d%d%d%d%d%d%d%d) %lx\n",
int((charData&128?1:0)),int((charData&64?1:0)),int((charData&32?1:0)),int((charData&16?1:0)),
int((charData&8?1:0)),int((charData&4?1:0)),int((charData&2?1:0)),int((charData&1?1:0)),
int(charData));
::OutputDebugString(strString);
::MessageBox(::GetFocus(),(LPSTR)strString,"M68HC11",MB_OK);
break;
case EventDoubleByte :
commControl.read(&wordData,sizeof(wordData));
commControl.write(&ack,sizeof(ack));
::sprintf(strString,"%lx\n",int(wordData));
::OutputDebugString(strString);
::MessageBox(::GetFocus(),(LPSTR)strString,"M68HC11",MB_OK);
break;
case EventQuadByte :
commControl.read(&dwordData,sizeof(dwordData));
commControl.write(&ack,sizeof(ack));
::sprintf(strString,"%lx\n",int(dwordData));
::OutputDebugString(strString);
::MessageBox(::GetFocus(),(LPSTR)strString,"M68HC11",MB_OK);
break;
case EventVarByte :
commControl.read(&wordData,sizeof(wordData));
for(index=0;index<wordData;index++)
{
commControl.read(&charData,sizeof(charData));
::sprintf(strString,"(%d%d%d%d%d%d%d%d) %lx\n",
int((charData&128?1:0)),int((charData&64?1:0)),int((charData&32?1:0)),int((charData&16?1:0)),
int((charData&8?1:0)),int((charData&4?1:0)),int((charData&2?1:0)),int((charData&1?1:0)),
int(charData));
::OutputDebugString(strString);
}
commControl.write(&ack,sizeof(ack));
break;
case EventRegs :
::OutputDebugString("EventRegs\n");
map=0x1000;
for(index=0;index<64;index++)
{
commControl.read(&charData,sizeof(charData));
::sprintf(strString,"[%08lx] (%d%d%d%d%d%d%d%d) %lx\n",map++,
int((charData&128?1:0)),int((charData&64?1:0)),int((charData&32?1:0)),int((charData&16?1:0)),
int((charData&8?1:0)),int((charData&4?1:0)),int((charData&2?1:0)),int((charData&1?1:0)),
int(charData));
::OutputDebugString(strString);
}
commControl.write(&ack,sizeof(ack));
break;
case EventEnd :
::OutputDebugString("Received end event\n");
::MessageBox(::GetFocus(),(LPSTR)"Received END event",(LPSTR)"M68HC11",MB_OK);
reading=FALSE;
break;
}
}
return TRUE;
}
#endif
// for(index=0;index<wordData;index++)
// {
// commControl.read(&charData,sizeof(charData));
// ::sprintf(strString,"(%d%d%d%d%d%d%d%d) %lx\n",
// int((charData&128?1:0)),int((charData&64?1:0)),int((charData&32?1:0)),int((charData&16?1:0)),
// int((charData&8?1:0)),int((charData&4?1:0)),int((charData&2?1:0)),int((charData&1?1:0)),
// int(charData));
// }
// if(commStatus.bytesInReceiveQueue())
// {
// commControl.read(ioBuffer,sizeof(ioBuffer));
// commControl.clearError();
// commControl.write(&charByte,sizeof(charByte));
charByte=0xFF;
BYTE rcvByte;
for(int index=0;index<256;index++)
{
rcvByte=0;
commControl.write(&charByte,sizeof(charByte));
if(commControl.read(&rcvByte,sizeof(charByte)))::OutputDebugString(String(getByteString(rcvByte)+String("\n")).str());
// charByte++;
}
// charByte='a';
// commControl.write(&charByte,sizeof(charByte));
return;
// commControl.write(&charByte,sizeof(charByte));
// if(!commControl.read(&charByte,sizeof(charByte))){mStatusBar->setText("No response to initial command.");return;}
commControl.write(sndBuffer,sizeof(sndBuffer));
// if(!commControl.read(rcvBuffer,sizeof(sndBuffer))){mStatusBar->setText("no data was received from device.");return;}
// if(!::memcmp(rcvBuffer,sndBuffer,sizeof(sndBuffer)))mStatusBar->setText("The device is present and working properly.");
// else mStatusBar->setText("Failed to verify write.");
#if 0
#include <m68hc11/commctrl.hpp>
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
{
CommControl commControl;
CommStatus commStatus;
DeviceControlBlock deviceControlBlock;
BYTE charByte(0xFF);
commControl.open(CommControl::PortCOM1);
if(!commControl.isOkay())return FALSE;
if(!commControl.setDeviceControlBlock("baud=1200 data=8 stop=1 parity=N"))::OutputDebugString("Set operation failed\n");
String strString;
charByte='a';
while(TRUE)
{
commControl.write(&charByte,sizeof(charByte));
// commControl.waitForData();
commControl.read(&charByte,sizeof(charByte));
::sprintf(strString,"%02x\n",(int)charByte);
::OutputDebugString(strString);
charByte++;
// commControl.clearError(commStatus);
// if(commStatus.bytesInReceiveQueue())
// {
// commControl.read(&charByte,sizeof(charByte));
// ::sprintf(strString,"%02x\n",(int)charByte);
// ::OutputDebugString(strString);
// break;
// }
::Sleep(250);
}
/*
::OutputDebugString("waiting for break signal...\n");
commControl.setEventMask(CommControl::EventBreak); // EventBreak
if(!commControl.waitEvent())::OutputDebugString("timeout waiting for break.\n");
else ::OutputDebugString("break received, loading code...\n");
BYTE ioBuffer[256];
for(int index=0;index<256;index++)ioBuffer[index]=index;
charByte=0xFF;
commControl.write(&charByte,sizeof(charByte));
// commControl.clearError(commStatus);
// if(commStatus.bytesInReceiveQueue())commControl.read(ioBuffer,commStatus.bytesInReceiveQueue());
commControl.write(ioBuffer,sizeof(ioBuffer));
::memset(ioBuffer,0,sizeof(ioBuffer));
String strString;
::OutputDebugString("receiving echo\n");
while(TRUE)
{
commControl.clearError(commStatus);
if(commStatus.bytesInReceiveQueue())
{
commControl.read(ioBuffer,sizeof(ioBuffer));
for(index=0;index+8<sizeof(ioBuffer);index+=8)
{
::sprintf(strString,"%02x %02x %02x %02x %02x %02x %02x %02x\n",
ioBuffer[index],ioBuffer[index+1],ioBuffer[index+2],ioBuffer[index+3],ioBuffer[index+4],
ioBuffer[index+5],ioBuffer[index+6],ioBuffer[index+7]);
::OutputDebugString(strString);
}
break;
}
::Sleep(1000);
}
*/
return FALSE;
}
#if 0
for(int index=0;index<256;index++)ioBuffer[index]=index;
charByte=0xFF;
commControl.write(&charByte,sizeof(charByte));
commControl.write(ioBuffer,sizeof(ioBuffer));
::memset(ioBuffer,0,sizeof(ioBuffer));
::OutputDebugString("receiving echo\n");
while(TRUE)
{
commControl.clearError(commStatus);
if(commStatus.bytesInReceiveQueue())
{
commControl.read(ioBuffer,sizeof(ioBuffer));
for(index=0;index+8<sizeof(ioBuffer);index+=8)
{
::sprintf(strString,"%02x %02x %02x %02x %02x %02x %02x %02x\n",
ioBuffer[index],ioBuffer[index+1],ioBuffer[index+2],ioBuffer[index+3],ioBuffer[index+4],
ioBuffer[index+5],ioBuffer[index+6],ioBuffer[index+7]);
::OutputDebugString(strString);
}
break;
}
::Sleep(1000);
}
#endif
#endif

313
m68hc11/SERDLG.CPP Normal file
View File

@@ -0,0 +1,313 @@
#include <m68hc11/serdlg.hpp>
#include <m68hc11/m68reg.hpp>
SerialDlg::SerialDlg(void)
{
mInitHandler.setCallback(this,&SerialDlg::initHandler);
mDestroyHandler.setCallback(this,&SerialDlg::destroyHandler);
mCommandHandler.setCallback(this,&SerialDlg::commandHandler);
mCloseHandler.setCallback(this,&SerialDlg::closeHandler);
DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
}
SerialDlg::~SerialDlg()
{
DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
}
SerialDlg &SerialDlg::operator=(const SerialDlg &/*someSerialDlg*/)
{ // private implementation
return *this;
}
BOOL SerialDlg::perform(GUIWindow &parentWindow) // ,SerialSettings &serialSettings)
{
return ::DialogBoxParam(processInstance(),(LPSTR)"SERIAL",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
}
CallbackData::ReturnType SerialDlg::initHandler(CallbackData &/*someCallbackData*/)
{
mStatusBar=::new StatusBarEx(*this,StatusBarID);
mStatusBar.disposition(PointerDisposition::Delete);
initSerialSettings();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SerialDlg::destroyHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SerialDlg::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case IDOK :
if(applySerialSettings())endDialog(TRUE);
break;
case IDCANCEL :
endDialog(FALSE);
break;
case SerialStopBits :
case SerialParity :
case SerialDataBits :
case SerialBaud :
case SerialPort :
mStatusBar->setText(" ");
break;
case SerialApply :
applySerialSettings();
break;
case SerialTest :
testDevice();
break;
}
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SerialDlg::closeHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
void SerialDlg::initSerialSettings(void)
{
M68Reg mcuReg;
initPorts();
initBaud();
initDataBits();
initStopBits();
initParity();
sendMessage(SerialPort,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getPort());
sendMessage(SerialBaud,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getBaud());
sendMessage(SerialDataBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getDataBits());
sendMessage(SerialParity,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getParity());
sendMessage(SerialStopBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getStopBits());
}
void SerialDlg::initPorts(void)
{
String strPort;
CommControl commControl;
Block<CommControl::Port> ports;
sendMessage(SerialPort,CB_RESETCONTENT,0,0L);
commControl.enumerateDevices(ports);
for(int index=0;index<ports.size();index++)
{
if(ports[index]==CommControl::PortCOM1)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM1));
else if(ports[index]==CommControl::PortCOM2)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM2));
else if(ports[index]==CommControl::PortCOM3)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM3));
else if(ports[index]==CommControl::PortCOM4)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM4));
}
}
void SerialDlg::initBaud(void)
{
String strBaudRate;
sendMessage(SerialBaud,CB_RESETCONTENT,0,0L);
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"1200");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"2400");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"4800");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"9600");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"14400");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"19200");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"38400");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"57600");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"115200");
}
void SerialDlg::initDataBits(void)
{
sendMessage(SerialDataBits,CB_RESETCONTENT,0,0L);
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"4");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"5");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"6");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"7");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"8");
}
void SerialDlg::initParity(void)
{
sendMessage(SerialParity,CB_RESETCONTENT,0,0L);
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"None");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Odd");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Even");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Mark");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Space");
}
void SerialDlg::initStopBits()
{
sendMessage(SerialStopBits,CB_RESETCONTENT,0,0L);
sendMessage(SerialStopBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"1");
sendMessage(SerialStopBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"1.5");
sendMessage(SerialStopBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"2");
}
CommControl::Port SerialDlg::getCommPort(void)const
{
String strPort;
sendMessage(SerialPort,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strPort);
return CommControl::stringToPort(strPort);
}
String SerialDlg::getCommSettings(void)const
{
String strBaud;
String strDataBits;
String strSettings;
String strParity;
String strStopBits;
LRESULT currSel;
sendMessage(SerialBaud,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strBaud);
strSettings+="baud=";
strSettings+=strBaud;
strSettings+=" ";
sendMessage(SerialDataBits,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strDataBits);
strSettings+="data=";
strSettings+=strDataBits;
strSettings+=" ";
currSel=sendMessage(SerialParity,CB_GETCURSEL,0,0L);
sendMessage(SerialParity,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strParity);
if(String("None")==strParity)strParity="N";
else if(String("Odd")==strParity)strParity="O";
else if(String("Even")==strParity)strParity="E";
else if(String("Space")==strParity)strParity="S";
strSettings+="parity=";
strSettings+=strParity;
strSettings+=" ";
currSel=sendMessage(SerialStopBits,CB_GETCURSEL,0,0L);
sendMessage(SerialStopBits,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strStopBits);
strSettings+="stop=";
strSettings+=strStopBits;
return strSettings;
}
bool SerialDlg::applySerialSettings(void)
{
CommControl commControl;
M68Reg mcuReg;
String strCommSettings;
String strBaud;
String strDataBits;
String strStopBits;
String strParity;
LRESULT currSel;
strCommSettings=getCommSettings();
if(!commControl.open(getCommPort()))
{
mStatusBar->setText("Error opening port.");
::MessageBeep(0);
return false;
}
if(!commControl.setDeviceControlBlock(strCommSettings)){mStatusBar->setText("Failed to apply settings.");return false;}
sendMessage(SerialBaud,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strBaud);
mcuReg.setBaud(strBaud);
sendMessage(SerialDataBits,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strDataBits);
mcuReg.setDataBits(strDataBits);
currSel=sendMessage(SerialParity,CB_GETCURSEL,0,0L);
sendMessage(SerialParity,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strParity);
if(String("None")==strParity)strParity="N";
else if(String("Odd")==strParity)strParity="O";
else if(String("Even")==strParity)strParity="E";
else if(String("Space")==strParity)strParity="S";
mcuReg.setParity(strParity);
currSel=sendMessage(SerialStopBits,CB_GETCURSEL,0,0L);
sendMessage(SerialStopBits,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strStopBits);
mcuReg.setStopBits(strStopBits);
mStatusBar->setText("Settings have been applied.");
return true;
}
void SerialDlg::testDevice(void)
{
CommControl commControl;
BYTE prefix(0xFF);
GlobalData<BYTE> rcvBuffer;
GlobalData<BYTE> sndBuffer;
BYTE codeBytes[]={0x8E,0x00,0xFF,0xCE,0x10,0x00,0x6F,0x2C,0xCC,0x33,0x0C,0xA7,0x2B,0xE7,0x2D,0x1F,0x2E,0x20,0xFC,0xA6,0x2F,0x4C,0x1F,0x2E,0x80,0xFC,0xA7,0x2F,0x7E,0x00,0x0F};
sndBuffer.size(256);
sndBuffer.setZero();
rcvBuffer.size(sndBuffer.size());
rcvBuffer.setZero();
::memcpy(&sndBuffer[0],codeBytes,sizeof(codeBytes));
if(IDCANCEL==::MessageBox(*this,"This operation will overwrite the contents of MCU RAM with the ECHO program.","WARNING",MB_OKCANCEL))return;
if(!commControl.open(getCommPort())){mStatusBar->setText("Error opening port.");return;}
if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return;}
mStatusBar->setText("waiting for break signal....please reset the device.");
if(!commControl.waitForBreak()){mStatusBar->setText("timeout waiting for break.");return;}
mStatusBar->setText("break received, loading code...");
commControl.write(&prefix,sizeof(prefix));
commControl.clearReceiveQueue();
commControl.write(sndBuffer);
mStatusBar->setText("Waiting for response.");
if(!commControl.waitForData()){mStatusBar->setText("Timeout reached for receive.");return;}
commControl.readFully(rcvBuffer);
if(::memcmp(&rcvBuffer[0],&sndBuffer[0],sndBuffer.size()))
{
mStatusBar->setText("Failed to verify program load.");
return;
}
::Sleep(250);
if(!echo(commControl))mStatusBar->setText("Received unexpected results from program.");
else mStatusBar->setText("The program has been verified, all tests successful.");
return;
}
bool SerialDlg::echo(CommControl &commControl)
{
BYTE sndByte('a');
BYTE rcvByte=0;
DWORD rcvCount(0);
String str;
if(!commControl.isOkay())
{
if(!commControl.open(getCommPort())){mStatusBar->setText("Unable to open comm port.");mStatusBar->setText("Error opening port.");return false;}
if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return false;}
}
commControl.clearError();
while('z'!=rcvByte)
{
CommStatus commStatus;
commControl.write(&sndByte,sizeof(sndByte));
if(commControl.waitForData())
{
rcvByte=0;
commControl.read(&rcvByte,sizeof(rcvByte));
str+=rcvByte;
mStatusBar->setText(str);
if(!rcvCount&&rcvByte!='b')
{
mStatusBar->setText("Unexpected character in input stream.");
return false;
}
sndByte++;
rcvCount++;
}
}
::Sleep(250);
return true;
}
String SerialDlg::getByteString(BYTE charByte)
{
String str;
::sprintf(str.str(),"char:%d(0x%08lx)",(int)charByte,(int)charByte);
return str;
}

61
m68hc11/SERDLG.HPP Normal file
View File

@@ -0,0 +1,61 @@
#ifndef _M68HC11_SERIALDLG_HPP_
#define _M68HC11_SERIAL_HPP_
#ifndef _COMMON_DWINDOW_HPP_
#include <common/dwindow.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _M68HC11_M68HC11_HPP_
#include <m68hc11/m68hc11.hpp>
#endif
#ifndef _STATBAR_STATUSBAREX_HPP_
#include <statbar/statbarx.hpp>
#endif
#ifndef _COMMON_COMMCONTROL_HPP_
#include <m68hc11/commctrl.hpp>
#endif
class CommControl;
class SerialDlg : public DWindow
{
public:
SerialDlg(void);
virtual ~SerialDlg();
BOOL perform(GUIWindow &parentWindow);
private:
enum{SerialStopBits=SERIAL_STOP,SerialParity=SERIAL_PARITY,SerialDataBits=SERIAL_DATA,
SerialBaud=SERIAL_BAUD,SerialPort=SERIAL_PORT,SerialApply=SERIAL_APPLY,SerialTest=SERIAL_TEST};
enum {StatusBarID=500};
SerialDlg &operator=(const SerialDlg &someSerialDlg);
CallbackData::ReturnType initHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType controlColorHandler(CallbackData &someCallbackData);
CallbackData::ReturnType measureItemHandler(CallbackData &someCallbackData);
String getByteString(BYTE charByte);
CommControl::Port getCommPort(void)const;
String getCommSettings(void)const;
bool applySerialSettings(void);
void initSerialSettings(void);
void testDevice(void);
void initDataBits(void);
void initParity(void);
void initStopBits(void);
void initPorts(void);
void initBaud(void);
bool echo(CommControl &commControl);
Callback<SerialDlg> mInitHandler;
Callback<SerialDlg> mDestroyHandler;
Callback<SerialDlg> mCommandHandler;
Callback<SerialDlg> mCloseHandler;
SmartPointer<StatusBarEx> mStatusBar;
};
#endif

130
m68hc11/SETTINGS.HPP Normal file
View File

@@ -0,0 +1,130 @@
#ifndef _M68HC11_SERIALSETUP_HPP_
#define _M68HC11_SERIALSETUP_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
class SerialSettings
{
public:
SerialSettings(void);
SerialSettings(const SerialSettings &someSerialSettings);
virtual ~SerialSettings();
SerialSettings &operator=(const SerialSettings &someSerialSettings);
BOOL operator==(const SerialSettings &someSerialSettings)const;
DWORD port(void)const;
void port(DWORD port);
DWORD baudRate(void)const;
void baudRate(DWORD baudRate);
DWORD parity(void)const;
void parity(DWORD parity);
DWORD stopBits(void)const;
void stopBits(DWORD stopBits);
DWORD dataBits(void)const;
void dataBits(DWORD dataBits);
private:
DWORD mSerialPort;
DWORD mBaudRate;
DWORD mParity;
DWORD mStopBits;
DWORD mDataBits;
};
inline
SerialSettings::SerialSettings(void)
: mSerialPort(0), mBaudRate(1200), mParity(0), mStopBits(0), mDataBits(8)
{
}
inline
SerialSettings::SerialSettings(const SerialSettings &someSerialSettings)
{
*this=someSerialSettings;
}
inline
SerialSettings::~SerialSettings()
{
}
inline
SerialSettings &SerialSettings::operator=(const SerialSettings &someSerialSettings)
{
port(someSerialSettings.port());
baudRate(someSerialSettings.baudRate());
parity(someSerialSettings.parity());
stopBits(someSerialSettings.stopBits());
dataBits(someSerialSettings.dataBits());
return *this;
}
inline
BOOL SerialSettings::operator==(const SerialSettings &someSerialSettings)const
{
return (port()==someSerialSettings.port()&&
baudRate()==someSerialSettings.baudRate()&&
parity()==someSerialSettings.parity()&&
stopBits()==someSerialSettings.stopBits()&&
dataBits()==someSerialSettings.dataBits());
}
inline
DWORD SerialSettings::port(void)const
{
return mSerialPort;
}
inline
void SerialSettings::port(DWORD port)
{
mSerialPort=port;
}
inline
DWORD SerialSettings::baudRate(void)const
{
return mBaudRate;
}
inline
void SerialSettings::baudRate(DWORD baudRate)
{
mBaudRate=baudRate;
}
inline
DWORD SerialSettings::parity(void)const
{
return mParity;
}
inline
void SerialSettings::parity(DWORD parity)
{
mParity=parity;
}
inline
DWORD SerialSettings::stopBits(void)const
{
return mStopBits;
}
inline
void SerialSettings::stopBits(DWORD stopBits)
{
mStopBits=stopBits;
}
inline
DWORD SerialSettings::dataBits(void)const
{
return mDataBits;
}
inline
void SerialSettings::dataBits(DWORD dataBits)
{
mDataBits=dataBits;
}
#endif

BIN
m68hc11/SPLASH.BMP Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

156
m68hc11/SPLASH.CPP Normal file
View File

@@ -0,0 +1,156 @@
#include <m68hc11/splash.hpp>
#include <common/resbmp.hpp>
#include <common/dib.hpp>
#include <common/bitmap.hpp>
char SplashScreen::szClassName[]="SplashScreen";
SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout)
: mBitmapName(strBitmap), mStrCaption(strCaption), mTimeout(timeout),
mTextFont("Times New Roman",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold)
{
mResBitmap=new ResBitmap(mBitmapName);
mResBitmap.disposition(PointerDisposition::Delete);
mCreateHandler.setCallback(this,&SplashScreen::createHandler);
mPaintHandler.setCallback(this,&SplashScreen::paintHandler);
mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler);
mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler);
mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler);
mTimerHandler.setCallback(this,&SplashScreen::timerHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler);
insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler);
insertHandler(VectorHandler::TimerHandler,&mTimerHandler);
registerClass();
}
SplashScreen::SplashScreen(const SplashScreen &someSplashScreen)
{ // private implementation
}
SplashScreen::~SplashScreen()
{
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler);
removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler);
removeHandler(VectorHandler::TimerHandler,&mTimerHandler);
}
void SplashScreen::registerClass(void)
{
HINSTANCE hInstance(processInstance());
WNDCLASS wndClass;
if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return;
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC;
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
wndClass.cbClsExtra =0;
wndClass.cbWndExtra =sizeof(SplashScreen*);
wndClass.hInstance =hInstance;
wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);
wndClass.lpszMenuName =0;
wndClass.lpszClassName =szClassName;
::RegisterClass(&wndClass);
assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass));
}
SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen)
{ // private implementation
return *this;
}
BOOL SplashScreen::perform(Rect initRect)
{
UINT style(0);
if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width());
if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height());
if(timeout())
// if(useTimer())
{
PureDevice pureDevice;
pureDevice.screenDevice();
initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2);
initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2);
style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME;
}
else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS;
createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)mStrCaption,style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS
show(SW_SHOW);
update();
return messageLoop();
}
CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData)
{
PureDevice pureDevice(*this);
((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE);
postQuitMessage(onDestroy());
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData)
{
mPureDevice=new PureDevice(*this);
mPureDevice.disposition(PointerDisposition::Delete);
mDIBitmap=new DIBitmap(*mPureDevice,mResBitmap->width(),mResBitmap->height(),*mResBitmap);
mDIBitmap.disposition(PointerDisposition::Delete);
if(timeout())setTimer(TimerID,timeout());
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData)
{
killTimer(TimerID);
postMessage(*this,WM_CLOSE,0,0L);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData)
{
if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE;
PureDevice pureDevice(*this);
((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE);
update();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/)
{
if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE;
PureDevice pureDevice(*this);
((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData)
{
if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE;
PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam();
PureDevice &pureDevice=(PureDevice&)*pPaintInfo;
mDIBitmap->copyBits(mResBitmap->ptrData(),mResBitmap->imageExtent());
mDIBitmap->stretchBlt(pureDevice,Rect(0,0,width(),height()));
pureDevice.select((GDIObj)mTextFont,TRUE);
pureDevice.setTextColor(RGBColor(247,231,33));
pureDevice.setBkMode(PureDevice::Transparent);
// pureDevice.textOut(60,180,"1998 Diversified Software Solutions");
if(!mInstallLine.isNull())
{
pureDevice.setTextColor(RGBColor(255,255,255));
pureDevice.textOut(50,196,mInstallLine);
}
return (CallbackData::ReturnType)FALSE;
}
// virtuals
int SplashScreen::onDestroy(void)
{
return 0;
}

68
m68hc11/SPLASH.HPP Normal file
View File

@@ -0,0 +1,68 @@
#ifndef _M68HC11_SPLASHSCREEN_HPP_
#define _M68HC11_SPLASHSCREEN_HPP_
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_WINDOW_HPP_
#include <common/window.hpp>
#endif
#ifndef _COMMON_RECTANGLE_HPP_
#include <common/rect.hpp>
#endif
#ifndef _COMMON_FONT_HPP_
#include <common/font.hpp>
#endif
class ResBitmap;
class DIBitmap;
class SplashScreen : public Window
{
public:
enum{TimeOut=2500};
SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout=TimeOut);
virtual ~SplashScreen();
BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT));
protected:
virtual int onDestroy(void);
private:
enum {TimerID=0};
SplashScreen(const SplashScreen &someSplashScreen);
SplashScreen &operator=(const SplashScreen &someSplashScreen);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType paintHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData);
CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData);
CallbackData::ReturnType timerHandler(CallbackData &someCallbackData);
void registerClass(void);
UINT timeout(void)const;
Callback<SplashScreen> mPaintHandler;
Callback<SplashScreen> mCreateHandler;
Callback<SplashScreen> mDestroyHandler;
Callback<SplashScreen> mPaletteChangedHandler;
Callback<SplashScreen> mSetFocusHandler;
Callback<SplashScreen> mTimerHandler;
SmartPointer<ResBitmap> mResBitmap;
SmartPointer<DIBitmap> mDIBitmap;
SmartPointer<PureDevice> mPureDevice;
String mBitmapName;
String mStrCaption;
String mInstallLine;
UINT mTimeout;
Font mTextFont;
static char szClassName[];
};
inline
UINT SplashScreen::timeout(void)const
{
return mTimeout;
}
#endif

86
m68hc11/XTRAINFO.HPP Normal file
View File

@@ -0,0 +1,86 @@
#ifndef _M68HC11_EXTRAINFO_HPP_
#define _M68HC11_EXTRAINFO_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
class ExtraInfo
{
public:
ExtraInfo(void);
ExtraInfo(const ExtraInfo &someExtraInfo);
ExtraInfo(DWORD userDataOne,DWORD userDataTwo);
virtual ~ExtraInfo();
ExtraInfo &operator=(const ExtraInfo &someExtraInfo);
BOOL operator==(const ExtraInfo &someExtraInfo)const;
DWORD userDataOne(void)const;
void userDataOne(DWORD userDataOne);
DWORD userDataTwo(void)const;
void userDataTwo(DWORD userDataTwo);
private:
DWORD mUserDataOne;
DWORD mUserDataTwo;
};
inline
ExtraInfo::ExtraInfo(void)
: mUserDataOne(0), mUserDataTwo(0)
{
}
inline
ExtraInfo::ExtraInfo(const ExtraInfo &someExtraInfo)
{
*this=someExtraInfo;
}
inline
ExtraInfo::ExtraInfo(DWORD userDataOne,DWORD userDataTwo)
: mUserDataOne(userDataOne), mUserDataTwo(userDataTwo)
{
}
inline
ExtraInfo::~ExtraInfo()
{
}
inline
ExtraInfo &ExtraInfo::operator=(const ExtraInfo &someExtraInfo)
{
userDataOne(someExtraInfo.userDataOne());
userDataTwo(someExtraInfo.userDataTwo());
return *this;
}
inline
BOOL ExtraInfo::operator==(const ExtraInfo &someExtraInfo)const
{
return (userDataOne()==someExtraInfo.userDataOne()&&
userDataTwo()==someExtraInfo.userDataTwo());
}
inline
DWORD ExtraInfo::userDataOne(void)const
{
return mUserDataOne;
}
inline
void ExtraInfo::userDataOne(DWORD userDataOne)
{
mUserDataOne=userDataOne;
}
inline
DWORD ExtraInfo::userDataTwo(void)const
{
return mUserDataTwo;
}
inline
void ExtraInfo::userDataTwo(DWORD userDataTwo)
{
mUserDataTwo=userDataTwo;
}
#endif

BIN
m68hc11/ZERO.BMP Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

228
m68hc11/backup/COMMCTRL.HPP Normal file
View File

@@ -0,0 +1,228 @@
#ifndef _COMMON_COMMCONTROL_HPP_
#define _COMMON_COMMCONTROL_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_OPENFILE_HPP_
#include <common/openfile.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_
#include <m68hc11/dcb.hpp>
#endif
#ifndef _M68HC11_COMMSTATUS_HPP_
#include <m68hc11/commstat.hpp>
#endif
#ifndef _THREAD_EVENT_HPP_
#include <thread/event.hpp>
#endif
class CommControl
{
public:
enum {TimeOut=5000};
enum Port{PortCOM1,PortCOM2,PortCOM3,PortCOM4};
enum EventMask{EventBreak=EV_BREAK,EventCts=EV_CTS,EventDsr=EV_DSR,EventErr=EV_ERR,EventRing=EV_RING,
EventRlsd=EV_RLSD,EventRxChar=EV_RXCHAR,EventRxFlag=EV_RXFLAG,EventTxEmpty=EV_TXEMPTY,
EventAll=EV_BREAK|EV_CTS|EV_DSR|EV_ERR|EV_RING|EV_RLSD|EV_RXCHAR|EV_RXFLAG|EV_TXEMPTY};
CommControl(void);
virtual ~CommControl();
bool open(Port commPort,BOOL overlappedIO=false);
void close();
bool getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const;
bool setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const;
bool setDeviceControlBlock(String strControlBlock)const; // (ie) "baud=1200 parity=N data=8 stop=1"
DWORD readLine(String &strLine);
DWORD writeLine(const String &strLine)const;
DWORD read(void *pBuffer,int length,DWORD timeout=0L);
DWORD write(BYTE *pBuffer,int length)const;
DWORD write(GlobalData<BYTE> &sndBuffer);
DWORD enumerateDevices(Block<Port> &deviceList);
DWORD enumerateDevices(Block<String> &deviceList);
bool clearError(void)const;
bool clearError(CommStatus &commStatus)const;
bool clearBreak(void)const;
bool clearReceiveQueue(void);
bool readFully(GlobalData<BYTE> &dataBytes);
bool readFully(BYTE *pBuffer,DWORD byteCount);
bool setBreak(void)const;
bool waitEvent(DWORD &eventMask,DWORD timeout);
bool waitEvent(DWORD timeout=TimeOut);
bool waitForBreak(DWORD timeout=TimeOut);
bool waitForData(DWORD timeout=TimeOut);
bool waitForTransmit(DWORD timeout=TimeOut);
bool setEventMask(DWORD eventMask)const;
bool hasData(void);
bool isOkay(void)const;
static void portToString(CommControl::Port port,String &strPort);
static CommControl::Port stringToPort(const String &strPort);
static void showBytes(GlobalData<BYTE> rcvBytes);
static void showBytes(BYTE *pBuffer,DWORD byteCount);
private:
CommControl(const CommControl &someCommControl);
CommControl &operator=(const CommControl &someCommControl);
void showError(DWORD errorMask)const;
FileHandle mCommDevice;
Block<String> mStrPorts;
CommStatus mCommStatus;
Event mIOEvent;
Overlapped mOverlapped;
};
inline
CommControl::CommControl(void)
{
mOverlapped.event((HANDLE)mIOEvent);
mStrPorts.insert(&String("\\.\\COM1"));
mStrPorts.insert(&String("\\.\\COM2"));
mStrPorts.insert(&String("\\.\\COM3"));
mStrPorts.insert(&String("\\.\\COM4"));
}
inline
CommControl::CommControl(const CommControl &someCommControl)
{ // private implementation
*this=someCommControl;
}
inline
CommControl::~CommControl()
{
close();
}
inline
CommControl &CommControl::operator=(const CommControl &/*someCommControl*/)
{ // private implementation
return *this;
}
inline
bool CommControl::open(Port commPort,BOOL overlappedIO)
{
close();
mCommDevice.open(mStrPorts[commPort],FileHandle::ReadWrite,FileHandle::ShareNone,FileHandle::Open,(overlappedIO?FileHandle::FlagOverlapped:FileHandle::Normal));
return isOkay();
}
inline
void CommControl::close(void)
{
if(!isOkay())return;
mCommDevice.close();
}
inline
DWORD CommControl::readLine(String &strLine)
{
strLine.reserve(1024);
if(!isOkay())return FALSE;
clearError(mCommStatus);
if(!mCommStatus.bytesInReceiveQueue())return FALSE;
return mCommDevice.getLine(strLine);
}
inline
DWORD CommControl::writeLine(const String &strLine)const
{
if(!isOkay()||strLine.isNull())return FALSE;
return mCommDevice.writeLine(strLine);
}
inline
DWORD CommControl::write(GlobalData<BYTE> &sndBuffer)
{
if(!isOkay()||!sndBuffer.size())return 0;
return write(&sndBuffer[0],sndBuffer.size());
}
inline
DWORD CommControl::write(BYTE *pBuffer,int length)const
{
if(!isOkay()||!pBuffer||!length)return 0;
return mCommDevice.write(pBuffer,length);
}
inline
bool CommControl::setBreak(void)const
{
if(!isOkay())return false;
return ::SetCommBreak((HANDLE)mCommDevice);
}
inline
bool CommControl::clearBreak(void)const
{
if(!isOkay())return false;
return ::ClearCommBreak((HANDLE)mCommDevice);
}
inline
bool CommControl::getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const
{
if(!isOkay())return false;
return ::GetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB());
}
inline
bool CommControl::setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const
{
if(!isOkay())return false;
return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB());
}
inline
bool CommControl::setDeviceControlBlock(String strControlBlock)const // (ie) "baud=1200 parity=N data=8 stop=1"
{
DeviceControlBlock deviceControlBlock;
if(!::BuildCommDCB(strControlBlock.str(),&((DeviceControlBlock&)deviceControlBlock).getDCB()))return false;
return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB());
}
inline
bool CommControl::setEventMask(DWORD eventMask)const
{
if(!isOkay())return false;
return ::SetCommMask((HANDLE)mCommDevice,eventMask);
}
inline
bool CommControl::waitEvent(DWORD timeout)
{
DWORD eventMask;
return waitEvent(eventMask,timeout);
}
inline
bool CommControl::waitForBreak(DWORD timeout)
{
if(!isOkay())return false;
setEventMask(EventBreak);
return waitEvent(timeout);
}
inline
bool CommControl::waitForData(DWORD timeout)
{
if(!isOkay())return false;
setEventMask(EventRxChar);
return waitEvent(timeout);
}
inline
bool CommControl::waitForTransmit(DWORD timeout)
{
if(!isOkay())return false;
setEventMask(EventTxEmpty);
return waitEvent(timeout);
}
#endif

213
m68hc11/backup/COMMSTAT.HPP Normal file
View File

@@ -0,0 +1,213 @@
#ifndef _M68HC11_COMMSTATUS_HPP_
#define _M68HC11_COMMSTATUS_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
class CommStatus : private _COMSTAT
{
public:
CommStatus(void);
CommStatus(const CommStatus &someCommStatus);
virtual ~CommStatus();
CommStatus &operator=(const CommStatus &someCommStatus);
BOOL operator==(const CommStatus &someCommStatus)const;
BOOL waitingForCts(void)const;
BOOL waitingForDsr(void)const;
BOOL waitingForRlsd(void)const;
BOOL waitingRcvdXOff(void)const;
BOOL waitingSentXOff(void)const;
BOOL waitingRcvdEof(void)const;
BOOL waitingForTx(void)const;
DWORD bytesInReceiveQueue(void)const;
DWORD bytesInSendQueue(void)const;
_COMSTAT &getCOMSTAT(void);
private:
void waitingForCts(BOOL waitingForCts);
void waitingForDsr(BOOL waitingForDsr);
void waitingForRlsd(BOOL waitingForRlsd);
void waitingRcvdXOff(BOOL waitingRcvdXOff);
void waitingSentXOff(BOOL waitingSentXOff);
void waitingRcvdEof(BOOL waitingRcvdEof);
void waitingForTx(BOOL waitingForTx);
void bytesInReceiveQueue(DWORD bytesInReceiveQueue);
void bytesInSendQueue(DWORD bytesInSendQueue);
void setZero(void);
};
inline
CommStatus::CommStatus(void)
{
setZero();
}
inline
CommStatus::CommStatus(const CommStatus &someCommStatus)
{
*this=someCommStatus;
}
inline
CommStatus::~CommStatus()
{
}
inline
CommStatus &CommStatus::operator=(const CommStatus &someCommStatus)
{
waitingForCts(someCommStatus.waitingForCts());
waitingForDsr(someCommStatus.waitingForDsr());
waitingForRlsd(someCommStatus.waitingForRlsd());
waitingRcvdXOff(someCommStatus.waitingRcvdXOff());
waitingSentXOff(someCommStatus.waitingSentXOff());
waitingRcvdEof(someCommStatus.waitingRcvdEof());
waitingForTx(someCommStatus.waitingForTx());
bytesInReceiveQueue(someCommStatus.bytesInReceiveQueue());
bytesInSendQueue(someCommStatus.bytesInSendQueue());
return *this;
}
inline
BOOL CommStatus::operator==(const CommStatus &someCommStatus)const
{
return (waitingForCts()==someCommStatus.waitingForCts()&&
waitingForDsr()==someCommStatus.waitingForDsr()&&
waitingForRlsd()==someCommStatus.waitingForRlsd()&&
waitingRcvdXOff()==someCommStatus.waitingRcvdXOff()&&
waitingSentXOff()==someCommStatus.waitingSentXOff()&&
waitingRcvdEof()==someCommStatus.waitingRcvdEof()&&
waitingForTx()==someCommStatus.waitingForTx()&&
bytesInReceiveQueue()==someCommStatus.bytesInReceiveQueue()&&
bytesInSendQueue()==someCommStatus.bytesInSendQueue());
}
inline
BOOL CommStatus::waitingForCts(void)const
{
return _COMSTAT::fCtsHold;
}
inline
void CommStatus::waitingForCts(BOOL waitingForCts)
{
_COMSTAT::fCtsHold=waitingForCts;
}
inline
BOOL CommStatus::waitingForDsr(void)const
{
return _COMSTAT::fDsrHold;
}
inline
void CommStatus::waitingForDsr(BOOL waitingForDsr)
{
_COMSTAT::fDsrHold=waitingForDsr;
}
inline
BOOL CommStatus::waitingForRlsd(void)const
{
return _COMSTAT::fRlsdHold;
}
inline
void CommStatus::waitingForRlsd(BOOL waitingForRlsd)
{
_COMSTAT::fRlsdHold=waitingForRlsd;
}
inline
BOOL CommStatus::waitingRcvdXOff(void)const
{
return _COMSTAT::fXoffHold;
}
inline
void CommStatus::waitingRcvdXOff(BOOL waitingRcvdXOff)
{
_COMSTAT::fXoffHold=waitingRcvdXOff;
}
inline
BOOL CommStatus::waitingSentXOff(void)const
{
return _COMSTAT::fXoffSent;
}
inline
void CommStatus::waitingSentXOff(BOOL waitingSentXOff)
{
_COMSTAT::fXoffSent=waitingSentXOff;
}
inline
BOOL CommStatus::waitingRcvdEof(void)const
{
return _COMSTAT::fEof;
}
inline
void CommStatus::waitingRcvdEof(BOOL waitingRcvdEof)
{
_COMSTAT::fEof=waitingRcvdEof;
}
inline
BOOL CommStatus::waitingForTx(void)const
{
return _COMSTAT::fTxim;
}
inline
void CommStatus::waitingForTx(BOOL waitingForTx)
{
_COMSTAT::fTxim=waitingForTx;
}
inline
DWORD CommStatus::bytesInReceiveQueue(void)const
{
return _COMSTAT::cbInQue;
}
inline
void CommStatus::bytesInReceiveQueue(DWORD bytesInReceiveQueue)
{
_COMSTAT::cbInQue=bytesInReceiveQueue;
}
inline
DWORD CommStatus::bytesInSendQueue(void)const
{
return _COMSTAT::cbOutQue;
}
inline
void CommStatus::bytesInSendQueue(DWORD bytesInSendQueue)
{
_COMSTAT::cbOutQue=bytesInSendQueue;
}
inline
_COMSTAT &CommStatus::getCOMSTAT(void)
{
return *this;
}
inline
void CommStatus::setZero(void)
{
_COMSTAT::fCtsHold=0;
_COMSTAT::fDsrHold=0;
_COMSTAT::fRlsdHold=0;
_COMSTAT::fXoffHold=0;
_COMSTAT::fXoffSent=0;
_COMSTAT::fEof=0;
_COMSTAT::fTxim=0;
_COMSTAT::fReserved=0;
_COMSTAT::cbInQue=0;
_COMSTAT::cbOutQue=0;
}
#endif

318
m68hc11/backup/DCB.CPP Normal file
View File

@@ -0,0 +1,318 @@
#include <m68hc11/dcb.hpp>
DeviceControlBlock::DeviceControlBlock(void)
{
setZero();
}
DeviceControlBlock::DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock)
{
*this=someDeviceControlBlock;
}
DeviceControlBlock::~DeviceControlBlock()
{
}
DeviceControlBlock &DeviceControlBlock::operator=(const DeviceControlBlock &someDeviceControlBlock)
{
baudRate(someDeviceControlBlock.baudRate());
binaryEnabled(someDeviceControlBlock.binaryEnabled());
enableParity(someDeviceControlBlock.enableParity());
ctsFlowControlOutMonitor(someDeviceControlBlock.ctsFlowControlOutMonitor());
dsrFlowControlOutMonitor(someDeviceControlBlock.dsrFlowControlOutMonitor());
dtrControl(someDeviceControlBlock.dtrControl());
dsrSensitivityEnable(someDeviceControlBlock.dsrSensitivityEnable());
continueOnXOff(someDeviceControlBlock.continueOnXOff());
xonXOffEnableTransmit(someDeviceControlBlock.xonXOffEnableTransmit());
xonXOffEnableReceive(someDeviceControlBlock.xonXOffEnableReceive());
errorCharEnable(someDeviceControlBlock.errorCharEnable());
discardNullEnable(someDeviceControlBlock.discardNullEnable());
rtsControl(someDeviceControlBlock.rtsControl());
abortOnErrorEnable(someDeviceControlBlock.abortOnErrorEnable());
xonLimit(someDeviceControlBlock.xonLimit());
xoffLimit(someDeviceControlBlock.xoffLimit());
dataBits(someDeviceControlBlock.dataBits());
parity(someDeviceControlBlock.parity());
stopBits(someDeviceControlBlock.stopBits());
xonChar(someDeviceControlBlock.xonChar());
xoffChar(someDeviceControlBlock.xoffChar());
errorChar(someDeviceControlBlock.errorChar());
eofChar(someDeviceControlBlock.eofChar());
evtChar(someDeviceControlBlock.evtChar());
return *this;
}
BOOL DeviceControlBlock::operator==(const DeviceControlBlock &someDeviceControlBlock)
{
return(baudRate()==someDeviceControlBlock.baudRate()&&
binaryEnabled()==someDeviceControlBlock.binaryEnabled()&&
enableParity()==someDeviceControlBlock.enableParity()&&
ctsFlowControlOutMonitor()==someDeviceControlBlock.ctsFlowControlOutMonitor()&&
dsrFlowControlOutMonitor()==someDeviceControlBlock.dsrFlowControlOutMonitor()&&
dtrControl()==someDeviceControlBlock.dtrControl()&&
dsrSensitivityEnable()==someDeviceControlBlock.dsrSensitivityEnable()&&
continueOnXOff()==someDeviceControlBlock.continueOnXOff()&&
xonXOffEnableTransmit()==someDeviceControlBlock.xonXOffEnableTransmit()&&
xonXOffEnableReceive()==someDeviceControlBlock.xonXOffEnableReceive()&&
errorCharEnable()==someDeviceControlBlock.errorCharEnable()&&
discardNullEnable()==someDeviceControlBlock.discardNullEnable()&&
rtsControl()==someDeviceControlBlock.rtsControl()&&
abortOnErrorEnable()==someDeviceControlBlock.abortOnErrorEnable()&&
xonLimit()==someDeviceControlBlock.xonLimit()&&
xoffLimit()==someDeviceControlBlock.xoffLimit()&&
dataBits()==someDeviceControlBlock.dataBits()&&
parity()==someDeviceControlBlock.parity()&&
stopBits()==someDeviceControlBlock.stopBits()&&
xonChar()==someDeviceControlBlock.xonChar()&&
xoffChar()==someDeviceControlBlock.xoffChar()&&
errorChar()==someDeviceControlBlock.errorChar()&&
eofChar()==someDeviceControlBlock.eofChar()&&
evtChar()==someDeviceControlBlock.evtChar());
}
DWORD DeviceControlBlock::baudRate(void)const
{
return _DCB::BaudRate;
}
void DeviceControlBlock::baudRate(DWORD baudRate)
{
_DCB::BaudRate=baudRate;
}
BOOL DeviceControlBlock::binaryEnabled(void)const
{
return _DCB::fBinary;
}
void DeviceControlBlock::binaryEnabled(BOOL binaryEnabled)
{
_DCB::fBinary=binaryEnabled;
}
BOOL DeviceControlBlock::enableParity(void)const
{
return _DCB::fParity;
}
void DeviceControlBlock::enableParity(BOOL parity)
{
_DCB::fParity=parity;
}
BOOL DeviceControlBlock::ctsFlowControlOutMonitor(void)const
{
return _DCB::fOutxCtsFlow;
}
void DeviceControlBlock::ctsFlowControlOutMonitor(BOOL ctsFlowControlOut)
{
_DCB::fOutxCtsFlow=ctsFlowControlOut;
}
BOOL DeviceControlBlock::dsrFlowControlOutMonitor(void)const
{
return _DCB::fOutxDsrFlow;
}
void DeviceControlBlock::dsrFlowControlOutMonitor(BOOL dsrFlowControlOut)
{
_DCB::fOutxDsrFlow=dsrFlowControlOut;
}
DeviceControlBlock::DtrControl DeviceControlBlock::dtrControl(void)const
{
return DtrControl(_DCB::fDtrControl);
}
void DeviceControlBlock::dtrControl(DtrControl dtrControl)
{
_DCB::fDtrControl=(DWORD)dtrControl;
}
BOOL DeviceControlBlock::dsrSensitivityEnable(void)const
{
return _DCB::fDsrSensitivity;
}
void DeviceControlBlock::dsrSensitivityEnable(BOOL dsrSensitivityEnable)
{
_DCB::fDsrSensitivity=dsrSensitivityEnable;
}
BOOL DeviceControlBlock::continueOnXOff(void)const
{
return _DCB::fTXContinueOnXoff;
}
void DeviceControlBlock::continueOnXOff(BOOL continueOnXOff)
{
_DCB::fTXContinueOnXoff=continueOnXOff;
}
BOOL DeviceControlBlock::xonXOffEnableTransmit(void)const
{
return _DCB::fOutX;
}
void DeviceControlBlock::xonXOffEnableTransmit(BOOL xonXOffEnable)
{
_DCB::fOutX=xonXOffEnable;
}
BOOL DeviceControlBlock::xonXOffEnableReceive(void)const
{
return _DCB::fInX;
}
void DeviceControlBlock::xonXOffEnableReceive(BOOL xonXOffEnable)
{
_DCB::fInX=xonXOffEnable;
}
BOOL DeviceControlBlock::errorCharEnable(void)const
{
return _DCB::fErrorChar;
}
void DeviceControlBlock::errorCharEnable(BOOL errorCharEnable)
{
_DCB::fErrorChar=errorCharEnable;
}
BOOL DeviceControlBlock::discardNullEnable(void)const
{
return _DCB::fNull;
}
void DeviceControlBlock::discardNullEnable(BOOL discardNullEnable)
{
_DCB::fNull=discardNullEnable;
}
DeviceControlBlock::RtsControl DeviceControlBlock::rtsControl(void)const
{
return RtsControl(_DCB::fRtsControl);
}
void DeviceControlBlock::rtsControl(RtsControl rtsControl)
{
_DCB::fRtsControl=(DWORD)rtsControl;
}
BOOL DeviceControlBlock::abortOnErrorEnable(void)const
{
return _DCB::fAbortOnError;
}
void DeviceControlBlock::abortOnErrorEnable(BOOL abortOnError)
{
_DCB::fAbortOnError=abortOnError;
}
WORD DeviceControlBlock::xonLimit(void)const
{
return _DCB::XonLim;
}
void DeviceControlBlock::xonLimit(WORD xonLimit)
{
_DCB::XonLim=xonLimit;
}
WORD DeviceControlBlock::xoffLimit(void)const
{
return _DCB::XoffLim;
}
void DeviceControlBlock::xoffLimit(WORD xoffLimit)
{
_DCB::XoffLim=xoffLimit;
}
BYTE DeviceControlBlock::dataBits(void)const
{
return _DCB::ByteSize;
}
void DeviceControlBlock::dataBits(BYTE dataBits)
{
_DCB::ByteSize=dataBits;
}
DeviceControlBlock::Parity DeviceControlBlock::parity(void)const
{
return Parity(_DCB::Parity);
}
void DeviceControlBlock::parity(Parity parity)
{
_DCB::Parity=BYTE(parity);
}
BYTE DeviceControlBlock::stopBits(void)const
{
return _DCB::StopBits;
}
void DeviceControlBlock::stopBits(BYTE stopBits)
{
_DCB::StopBits=stopBits;
}
char DeviceControlBlock::xonChar(void)const
{
return _DCB::XonChar;
}
void DeviceControlBlock::xonChar(char xonChar)
{
_DCB::XonChar=xonChar;
}
char DeviceControlBlock::xoffChar(void)const
{
return _DCB::XoffChar;
}
void DeviceControlBlock::xoffChar(char xoffChar)
{
_DCB::XoffChar=xoffChar;
}
char DeviceControlBlock::errorChar(void)const
{
return _DCB::ErrorChar;
}
void DeviceControlBlock::errorChar(char errorChar)
{
_DCB::ErrorChar=errorChar;
}
char DeviceControlBlock::eofChar(void)const
{
return _DCB::EofChar;
}
void DeviceControlBlock::eofChar(char eofChar)
{
_DCB::EofChar;
}
char DeviceControlBlock::evtChar(void)const
{
return _DCB::EvtChar;
}
void DeviceControlBlock::evtChar(char evtChar)
{
_DCB::EvtChar=evtChar;
}
void DeviceControlBlock::setZero(void)
{
::memset(&(_DCB&)*this,0,sizeof(_DCB));
_DCB::DCBlength=sizeof(_DCB);
}

79
m68hc11/backup/DCB.HPP Normal file
View File

@@ -0,0 +1,79 @@
#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_
#define _M68HC11_DEVICECONTROLBLOCK_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STDLIB_HPP_
#include <common/stdlib.hpp>
#endif
class DeviceControlBlock : private _DCB
{
public:
enum DtrControl{DtrControlDisable=DTR_CONTROL_DISABLE,DtrControlEnable=DTR_CONTROL_ENABLE,DtrControlHandshake=DTR_CONTROL_HANDSHAKE};
enum RtsControl{RtsControlDisable=RTS_CONTROL_DISABLE,RtsControlEnable=RTS_CONTROL_ENABLE,RtsControlHandshake=RTS_CONTROL_HANDSHAKE,RtsControlToggle=RTS_CONTROL_TOGGLE};
enum Parity{ParityNone,ParityOdd,ParityEven,ParityMark};
DeviceControlBlock(void);
DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock);
virtual ~DeviceControlBlock();
DeviceControlBlock &operator=(const DeviceControlBlock &someDeviceControlBlock);
BOOL operator==(const DeviceControlBlock &someDeviceControlBlock);
DWORD baudRate(void)const;
void baudRate(DWORD baudRate);
BOOL binaryEnabled(void)const;
void binaryEnabled(BOOL binaryEnabled);
BOOL enableParity(void)const;
void enableParity(BOOL parity);
BOOL ctsFlowControlOutMonitor(void)const;
void ctsFlowControlOutMonitor(BOOL ctsFlowControlOut);
BOOL dsrFlowControlOutMonitor(void)const;
void dsrFlowControlOutMonitor(BOOL dsrFlowControlOut);
DtrControl dtrControl(void)const;
void dtrControl(DtrControl dtrControl);
BOOL dsrSensitivityEnable(void)const;
void dsrSensitivityEnable(BOOL dsrSensitivityEnable);
BOOL continueOnXOff(void)const;
void continueOnXOff(BOOL continueOnXOff);
BOOL xonXOffEnableTransmit(void)const;
void xonXOffEnableTransmit(BOOL xonXOffEnable);
BOOL xonXOffEnableReceive(void)const;
void xonXOffEnableReceive(BOOL xonXOffEnable);
BOOL errorCharEnable(void)const;
void errorCharEnable(BOOL errorCharEnable);
BOOL discardNullEnable(void)const;
void discardNullEnable(BOOL discardNullEnable);
RtsControl rtsControl(void)const;
void rtsControl(RtsControl rtsControl);
BOOL abortOnErrorEnable(void)const;
void abortOnErrorEnable(BOOL abortOnError);
WORD xonLimit(void)const;
void xonLimit(WORD xonLimit);
WORD xoffLimit(void)const;
void xoffLimit(WORD xoffLimit);
BYTE dataBits(void)const;
void dataBits(BYTE dataBits);
Parity parity(void)const;
void parity(Parity parity);
BYTE stopBits(void)const;
void stopBits(BYTE stopBits);
char xonChar(void)const;
void xonChar(char xonChar);
char xoffChar(void)const;
void xoffChar(char xoffChar);
char errorChar(void)const;
void errorChar(char errorChar);
char eofChar(void)const;
void eofChar(char eofChar);
char evtChar(void)const;
void evtChar(char evtChar);
_DCB &getDCB(void);
private:
void setZero(void);
};
inline
_DCB &DeviceControlBlock::getDCB(void)
{
return *this;
}
#endif

View File

@@ -0,0 +1,51 @@
#include <m68hc11/editfnd.hpp>
EditFind::EditFind(void)
{
}
EditFind::~EditFind()
{
}
// virtuals
void EditFind::init(void)
{
CharRange searchRange;
searchRange.posMin(0);
searchRange.posMax(0);
mFindTextEx.searchRange(searchRange);
}
void EditFind::leaveEdit(const String &strText)
{
findNext();
}
void EditFind::find(void)
{
findNext();
}
void EditFind::findNext(void)
{
String currText;
getText(currText);
if(currText.isNull())return;
if(!(currText==lastSearchText()))lastFindIndex(-1);
mFindTextEx.strFind(currText);
if(!mFindTextEx.searchRange().posMin()&&!mFindTextEx.searchRange().posMax())mFindTextEx.searchRange(CharRange(0,-1));
else
{
CharRange searchRange(mFindTextEx.foundRange());
searchRange.posMin(searchRange.posMax());
searchRange.posMax(-1);
mFindTextEx.searchRange(searchRange);
}
// mRichEditControl->setFocus();
mRichEditControl->findText(mFindTextEx);
// setFocus();
}

View File

@@ -0,0 +1,35 @@
#ifndef _M68HC11_EDITFIND_HPP_
#define _M68HC11_EDITFIND_HPP_
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_RICHEDIT_HPP_
#include <common/richedit.hpp>
#endif
#ifndef _M68HC11_FIND_HPP_
#include <m68hc11/find.hpp>
#endif
class EditFind : private Find
{
public:
EditFind(void);
virtual ~EditFind();
void perform(GUIWindow &parentWindow,RichEditControl &richEditControl);
protected:
virtual void findNext(void);
virtual void init(void);
virtual void find(void);
virtual void leaveEdit(const String &strText);
private:
SmartPointer<RichEditControl> mRichEditControl;
FindTextEx mFindTextEx;
};
inline
void EditFind::perform(GUIWindow &parentWindow,RichEditControl &richEditControl)
{
mRichEditControl=&richEditControl;
Find::perform(parentWindow);
}
#endif

192
m68hc11/backup/Find.cpp Normal file
View File

@@ -0,0 +1,192 @@
#include <m68hc11/find.hpp>
#include <common/keydata.hpp>
Find::Find(void)
: mLastFindIndex(-1)
{
mKeyDownHandler.setCallback(this,&Find::keyDownHandler);
mDlgCodeHandler.setCallback(this,&Find::dlgCodeHandler);
mEditHook.insertHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler);
mEditHook.insertHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler);
}
Find::Find(const Find &find)
{ // private implementation
*this=find;
}
Find::~Find()
{
mEditHook.removeHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler);
mEditHook.removeHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler);
}
Find &Find::operator=(const Find &find)
{ // private implementation
return *this;
}
void Find::perform(GUIWindow &parentWindow)
{
create(parentWindow);
}
void Find::create(GUIWindow &parentWindow)
{
String staticName("STATIC");
String editName("EDIT");
String buttonName("BUTTON");
DialogTemplate dlgTemplate;
DialogItemTemplate staticFind;
DialogItemTemplate editFind;
DialogItemTemplate cancelButton;
DialogItemTemplate fnButton;
DialogItemTemplate wmButton;
dlgTemplate.titleText("Find");
dlgTemplate.posRect(Rect(10,73,236,62));
dlgTemplate.pointSize(8);
dlgTemplate.typeFace("Helv");
dlgTemplate.style(DS_MODALFRAME|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); // WS_POPUP
staticFind.className(staticName);
staticFind.titleText("Fi&nd what:");
staticFind.style(WS_CHILD|WS_VISIBLE);
staticFind.posRect(Rect(4,8,42,8));
staticFind.itemID(-1);
editFind.className(editName);
editFind.titleText("");
editFind.style(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP|WS_GROUP);
editFind.posRect(Rect(47,7,128,12));
editFind.itemID(FindText);
fnButton.className(buttonName);
fnButton.titleText("&Find Next");
fnButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|BS_DEFPUSHBUTTON);
fnButton.posRect(Rect(182,5,50,14));
fnButton.itemID(FindNext);
wmButton.className(buttonName);
wmButton.titleText("Match &whole word only");
wmButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX|WS_GROUP);
wmButton.posRect(Rect(4,26,100,12));
wmButton.itemID(FindWhole);
cancelButton.className(buttonName);
cancelButton.titleText("Cancel");
cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP);
cancelButton.posRect(Rect(182,23,50,14));
cancelButton.itemID(CancelFind);
dlgTemplate+=staticFind;
dlgTemplate+=editFind;
dlgTemplate+=cancelButton;
dlgTemplate+=fnButton;
dlgTemplate+=wmButton;
createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog);
}
CallbackData::ReturnType Find::keyDownHandler(CallbackData &someCallbackData)
{
KeyData keyData(someCallbackData);
String strEditText;
if(keyData.isEscapeKey())GUIWindow::postMessage(*this,WM_CLOSE,0,0L);
else if(keyData.isEnterKey())
{
getText(strEditText);
leaveEdit(strEditText);
}
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType Find::dlgCodeHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)DLGC_WANTALLKEYS;
}
WORD Find::dlgCommand(DWORD commandID,CallbackData &someCallbackData)
{
switch(commandID)
{
case FindText :
break;
case FindNext :
handleFindNext();
break;
case CancelFind :
destroy();
break;
}
return FALSE;
}
WORD Find::dlgCode(CallbackData &someCallbackData)
{
return DLGC_WANTALLKEYS;
}
BOOL Find::dlgInitDialog(CallbackData &/*someCallbackData*/)
{
mEditHook.hookWin(getItem(FindText));
init();
return TRUE;
}
void Find::dlgDestroyDialog(CallbackData &/*someCallbackData*/)
{
mEditHook.unhookWin();
return;
}
void Find::getText(String &strEditText)
{
String strText;
DynamicDialog::getText(FindText,strText);
strEditText=strText;
}
BOOL Find::matchWholeWordOnly(void)const
{
return ::SendMessage(getItem(FindWhole),BM_GETCHECK,0,0L);
}
void Find::handleFind(void)
{
find();
}
void Find::handleFindNext(void)
{
findNext();
}
// virtuals
void Find::init(void)
{
}
void Find::find(void)
{
String currText;
getText(currText);
lastSearchText(currText);
}
void Find::findNext(void)
{
String currText;
getText(currText);
lastSearchText(currText);
}
void Find::leaveEdit(const String &strEditText)
{
lastSearchText(strEditText);
}

81
m68hc11/backup/Find.hpp Normal file
View File

@@ -0,0 +1,81 @@
#ifndef _M68HC11_FIND_HPP_
#define _M68HC11_FIND_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _DIALOG_DYNAMICDIALOG_HPP_
#include <dialog/dyndlg.hpp>
#endif
#ifndef _COMMON_HOOKPROC_HPP_
#include <common/hookproc.hpp>
#endif
class Find : private DynamicDialog
{
public:
Find(void);
virtual ~Find();
void perform(GUIWindow &parentWindow);
int lastFindIndex(void)const;
const String &lastSearchText(void)const;
void setFocus(void)const;
protected:
virtual void init(void);
virtual void find(void);
virtual void findNext(void);
virtual void leaveEdit(const String &strText);
void getText(String &strEditText);
void lastFindIndex(int lastFindIndex);
void lastSearchText(const String &lastSearchText);
BOOL matchWholeWordOnly(void)const;
private:
enum{FindText=101,CancelFind=IDCANCEL,FindNext=103,FindWhole=104};
Find(const Find &find);
Find &operator=(const Find &find);
CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData);
void handleFind(void);
void handleFindNext(void);
void create(GUIWindow &parentWindow);
WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData);
WORD dlgCode(CallbackData &someCallbackData);
BOOL dlgInitDialog(CallbackData &someCallbackData);
void dlgDestroyDialog(CallbackData &someCallbackData);
Callback<Find> mKeyDownHandler;
Callback<Find> mDlgCodeHandler;
String mLastSearchText;
int mLastFindIndex;
WinHookProc mEditHook;
};
inline
const String &Find::lastSearchText(void)const
{
return mLastSearchText;
}
inline
void Find::lastSearchText(const String &lastSearchText)
{
mLastSearchText=lastSearchText;
}
inline
void Find::lastFindIndex(int lastFindIndex)
{
mLastFindIndex=lastFindIndex;
}
inline
int Find::lastFindIndex(void)const
{
return mLastFindIndex;
}
inline
void Find::setFocus(void)const
{
GUIWindow::setFocus();
}
#endif

View File

@@ -0,0 +1,6 @@
#ifndef _M68HC11_M68HC11_HPP_
#define _M68HC11_M68HC11_HPP_
#ifndef _M68HC11_M68HC11_H_
#include <m68hc11/m68hc11.h>
#endif
#endif

219
m68hc11/backup/M68REG.CPP Normal file
View File

@@ -0,0 +1,219 @@
#include <m68hc11/m68reg.hpp>
#include <m68hc11/commctrl.hpp>
M68Reg::M68Reg(void)
: mM68KeyName(STRING_M68KEYNAME),
mHistoryKeyName(STRING_HISTORYKEYNAME),
mSettingsKeyName(STRING_SETTINGSKEYNAME),
mSerialKeyName(STRING_SERIALKEYNAME),
mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME),
mSettingsEMAIL(STRING_SETTINGSEMAIL),
mSerialPort(STRING_SERIALPORT),
mSerialBaud(STRING_SERIALBAUD),
mSerialData(STRING_SERIALDATA),
mSerialParity(STRING_SERIALPARITY),
mSerialStop(STRING_SERIALSTOP),
mRegKeySettings(RegKey::CurrentUser),
mRegKeyHistory(RegKey::CurrentUser),
mRegKeySerial(RegKey::CurrentUser)
{
guarantee();
getCacheNames();
}
M68Reg::M68Reg(const M68Reg &someM68Reg)
: mM68KeyName(STRING_M68KEYNAME),
mHistoryKeyName(STRING_HISTORYKEYNAME),
mSettingsKeyName(STRING_SETTINGSKEYNAME),
mSerialKeyName(STRING_SERIALKEYNAME),
mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME),
mSettingsEMAIL(STRING_SETTINGSEMAIL),
mSerialPort(STRING_SERIALPORT),
mSerialBaud(STRING_SERIALBAUD),
mSerialData(STRING_SERIALDATA),
mSerialParity(STRING_SERIALPARITY),
mSerialStop(STRING_SERIALSTOP),
mRegKeySettings(RegKey::CurrentUser),
mRegKeyHistory(RegKey::CurrentUser),
mRegKeySerial(RegKey::CurrentUser)
{
*this=someM68Reg;
}
M68Reg::~M68Reg()
{
}
M68Reg &M68Reg::operator=(const M68Reg &/*someM68Reg*/)
{
return *this;
}
void M68Reg::getCacheNames(void)
{
int itemIndex(0);
String entryName;
DWORD status;
mCachedNames.remove();
while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName);
}
String M68Reg::email(void)
{
String strEMAIL;
mRegKeySettings.queryValue(mSettingsEMAIL,strEMAIL);
return strEMAIL;
}
void M68Reg::email(const String &email)
{
mRegKeySettings.setValue(mSettingsEMAIL,email);
}
bool M68Reg::setBaud(const String &strBaud)
{
return mRegKeySerial.setValue(mSerialBaud,strBaud);
}
String M68Reg::getBaud(void)
{
String strBaud;
mRegKeySerial.queryValue(mSerialBaud,strBaud);
return strBaud;
}
bool M68Reg::setParity(const String &strParity)
{
return mRegKeySerial.setValue(mSerialParity,strParity);
}
String M68Reg::getParity(void)
{
String strParity;
mRegKeySerial.queryValue(mSerialParity,strParity);
return strParity;
}
bool M68Reg::setDataBits(const String &strDataBits)
{
return mRegKeySerial.setValue(mSerialData,strDataBits);
}
String M68Reg::getDataBits(void)
{
String strData;
mRegKeySerial.queryValue(mSerialData,strData);
return strData;
}
bool M68Reg::setStopBits(const String &stopBits)
{
return mRegKeySerial.setValue(mSerialStop,stopBits);
}
String M68Reg::getStopBits(void)
{
String strStop;
mRegKeySerial.queryValue(mSerialStop,strStop);
return strStop;
}
bool M68Reg::setPort(const String &strPort)
{
return mRegKeySerial.setValue(mSerialPort,strPort);
}
String M68Reg::getPort(void)
{
String strPort;
mRegKeySerial.queryValue(mSerialPort,strPort);
return strPort;
}
String M68Reg::getSerialSettings(void)
{
String serialSettings;
serialSettings+="baud=";
serialSettings+=getBaud();
serialSettings+=" ";
serialSettings+="parity=";
serialSettings+=getParity();
serialSettings+=" ";
serialSettings+="data=";
serialSettings+=getDataBits();
serialSettings+=" ";
serialSettings+="stop=";
serialSettings+=getStopBits();
return serialSettings;
}
void M68Reg::guarantee(void)
{
if(!mRegKeySettings.openKey(mSettingsKeyName))
{
mRegKeySettings.createKey(mSettingsKeyName,"");
mRegKeySettings.openKey(mSettingsKeyName);
}
if(!mRegKeyHistory.openKey(mHistoryKeyName))
{
mRegKeyHistory.createKey(mHistoryKeyName,"");
mRegKeyHistory.openKey(mHistoryKeyName);
}
if(!mRegKeySerial.openKey(mSerialKeyName))
{
CommControl commControl;
Block<String> deviceList;
commControl.enumerateDevices(deviceList);
mRegKeySerial.createKey(mSerialKeyName,"");
mRegKeySerial.openKey(mSerialKeyName);
setBaud("1200");
setParity("N");
setDataBits("8");
setStopBits("1");
setPort(deviceList.size()?deviceList[0]:"COM1");
}
}
BOOL M68Reg::isOkay(void)const
{
return mRegKeySettings.isOkay()&&mRegKeyHistory.isOkay()&&mRegKeySerial.isOkay();
}
BOOL M68Reg::getHistory(Block<String> &nameList)
{
nameList=mCachedNames;
return nameList.size()?TRUE:FALSE;
}
BOOL M68Reg::setHistory(Block<String> &nameList)
{
RegKey regKey(RegKey::CurrentUser);
mRegKeyHistory.closeKey();
regKey.openKey(mM68KeyName);
regKey.deleteKey(mHistoryKeyShortName);
regKey.closeKey();
mRegKeyHistory.createKey(mHistoryKeyName,"");
mRegKeyHistory.openKey(mHistoryKeyName);
for(int itemIndex=0;itemIndex<nameList.size();itemIndex++)mRegKeyHistory.setValue(nameList[itemIndex],0);
return nameList.size()?TRUE:FALSE;
}
BOOL M68Reg::insertHistory(const String &strName)
{
for(int itemIndex=0;itemIndex<mCachedNames.size();itemIndex++)if(mCachedNames[itemIndex]==strName)return FALSE;
mCachedNames.insert(&strName);
if(mCachedNames.size()>MaxCachedNames)
{
Block<String> mruCachedNames;
for(int itemIndex=0;itemIndex<MaxCachedNames;itemIndex++)mruCachedNames.insert(&String());
for(itemIndex=0;itemIndex<MaxCachedNames;itemIndex++)mruCachedNames[mruCachedNames.size()-itemIndex-1]=mCachedNames[mCachedNames.size()-itemIndex-1];
mCachedNames=mruCachedNames;
setHistory(mCachedNames);
}
else mRegKeyHistory.setValue(strName,0);
return TRUE;
}

61
m68hc11/backup/M68REG.HPP Normal file
View File

@@ -0,0 +1,61 @@
#ifndef _M68HC11_M68REG_HPP_
#define _M68HC11_M68REG_HPP_
#ifndef _COMMON_REGKEY_HPP_
#include <common/regkey.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _M68HC11_M68HC11_HPP_
#include <m68hc11/m68hc11.hpp>
#endif
class M68Reg
{
public:
M68Reg(void);
M68Reg(const M68Reg &someM68Reg);
virtual ~M68Reg();
M68Reg &operator=(const M68Reg &someM68Reg);
BOOL getHistory(Block<String> &nameList);
BOOL setHistory(Block<String> &nameList);
BOOL insertHistory(const String &strName);
bool setBaud(const String &strBaud);
String getBaud(void);
bool setParity(const String &strParity);
String getParity(void);
bool setDataBits(const String &strDataBits);
String getDataBits(void);
bool setStopBits(const String &stopBits);
String getStopBits(void);
bool setPort(const String &strPort);
String getPort(void);
String getSerialSettings(void);
String email(void);
void email(const String &email);
BOOL isOkay(void)const;
private:
enum {MaxCachedNames=5};
void guarantee(void);
void getCacheNames(void);
Block<String> mCachedNames;
String mHistoryKeyName;
String mSettingsKeyName;
String mSerialKeyName;
String mHistoryKeyShortName;
String mSettingsEMAIL;
String mM68KeyName;
String mSerialPort;
String mSerialBaud;
String mSerialData;
String mSerialParity;
String mSerialStop;
RegKey mRegKeySettings;
RegKey mRegKeyHistory;
RegKey mRegKeySerial;
};
#endif

150
m68hc11/backup/M68hc11.h Normal file
View File

@@ -0,0 +1,150 @@
#ifndef _M68HC11_M68HC11_H_
#define _M68HC11_M68HC11_H_
#define MCUDLG_REGISTERS 101
#define MCUDLG_CCR 102
#define MCUDLG_MESSAGES 109
#define MCUDLG_PC 103
#define MCUDLG_SP 104
#define MCUDLG_Y 105
#define MCUDLG_X 106
#define MCUDLG_A 107
#define MCUDLG_B 108
#define SERIAL_STOP 104
#define SERIAL_PARITY 105
#define SERIAL_APPLY 106
#define SERIAL_TEST 107
#define SERIAL_DATA 103
#define SERIAL_BAUD 102
#define SERIAL_PORT 101
#define SBCMENU_FILENEW 500
#define SBCMENU_FILEOPEN 501
#define SBCMENU_FILESAVE 502
#define SBCMENU_FILESAVEAS 503
#define SBCMENU_FILEPRINT 504
#define SBCMENU_FILEQUIT 505
#define SBCMENU_FILECLOSE 506
#define SBCMENU_EDITCUT 507
#define SBCMENU_EDITCOPY 508
#define SBCMENU_EDITPASTE 509
#define SBCMENU_EDITFIND 510
#define SBCMENU_SETTINGSSERIAL 511
#define SBCMENU_CODECOMPILE 512
#define SBCMENU_CODECOMPILEANDLOAD 513
#define SBCMENU_HELPCONTENTS 514
#define SBCMENU_HELPSEARCH 515
#define SBCMENU_REGISTRATION 516
#define SBCMENU_HELPABOUT 517
#define IDM_CASCADE 10013
#define IDM_TILE 10014
#define IDM_ARRANGE 10015
#define IDM_CLOSEALL 10016
#define IDM_MINIMIZEALL 10017
#define IDM_RESTOREALL 10018
#define STRING_M68KEYNAME 600
#define STRING_HISTORYKEYNAME 601
#define STRING_SETTINGSKEYNAME 602
#define STRING_SERIALKEYNAME 603
#define STRING_HISTORYKEYSHORTNAME 604
#define STRING_SETTINGSEMAIL 605
#define STRING_SERIALPORT 606
#define STRING_SERIALBAUD 607
#define STRING_SERIALDATA 608
#define STRING_SERIALPARITY 609
#define STRING_SERIALSTOP 610
#define STRING_COM1 611
#define STRING_COM2 612
#define STRING_COM3 613
#define STRING_COM4 614
#define STRING_CODEVIEWCLASSNAME 500
#define STRING_MCUVIEWCLASSNAME 501
#define STRING_UNTITLED 502
#define STRING_HELPFILENAME 503
#define STRING_REGISTERPORTA 700
#define STRING_REGISTERRESERVED1 701
#define STRING_REGISTERPIOC 702
#define STRING_REGISTERPORTC 703
#define STRING_REGISTERPORTB 704
#define STRING_REGISTERPORTCL 705
#define STRING_REGISTERRESERVED2 706
#define STRING_REGISTERDDRC 707
#define STRING_REGISTERPORTD 708
#define STRING_REGISTERDDRD 709
#define STRING_REGISTERPORTE 710
#define STRING_REGISTERCFORC 711
#define STRING_REGISTEROC1M 712
#define STRING_REGISTEROC1D 713
#define STRING_REGISTERTCNTH1 714
#define STRING_REGISTERTCNTLO 715
#define STRING_REGISTERTIC1HI 716
#define STRING_REGISTERTIC1LO 717
#define STRING_REGISTERTIC2HI 718
#define STRING_REGISTERTIC2LO 719
#define STRING_REGISTERTIC3HI 720
#define STRING_REGISTERTIC3LO 721
#define STRING_REGISTERTOC1HI 722
#define STRING_REGISTERTOC1LO 723
#define STRING_REGISTERTOC2HI 724
#define STRING_REGISTERTOC2LO 725
#define STRING_REGISTERTOC3HI 726
#define STRING_REGISTERTOC3LO 727
#define STRING_REGISTERTOC4HI 728
#define STRING_REGISTERTOC4LO 729
#define STRING_REGISTERTI405HI 730
#define STRING_REGISTERTI405LO 731
#define STRING_REGISTERTCTL1 732
#define STRING_REGISTERTCTL2 733
#define STRING_REGISTERTMSK1 734
#define STRING_REGISTERTFLG1 735
#define STRING_REGISTERTMSK2 736
#define STRING_REGISTERTFLG2 737
#define STRING_REGISTERPACTL 738
#define STRING_REGISTERPACNT 739
#define STRING_REGISTERSPCR 740
#define STRING_REGISTERSPSR 741
#define STRING_REGISTERSPDR 742
#define STRING_REGISTERBAUD 743
#define STRING_REGISTERSCCR1 744
#define STRING_REGISTERSCCR2 745
#define STRING_REGISTERSCSR 746
#define STRING_REGISTERSCDR 747
#define STRING_REGISTERADCTL 748
#define STRING_REGISTERADR1 749
#define STRING_REGISTERADR2 750
#define STRING_REGISTERADR3 751
#define STRING_REGISTERADR4 752
#define STRING_REGISTERBPROT 753
#define STRING_REGISTEREPROG 754
#define STRING_REGISTERRESERVED3 755
#define STRING_REGISTERRESERVED4 756
#define STRING_REGISTEROPTION 757
#define STRING_REGISTERCOPRST 758
#define STRING_REGISTERPPROG 759
#define STRING_REGISTERHPRIO 760
#define STRING_REGISTERINIT 761
#define STRING_REGISTERTEST1 762
#define STRING_REGISTERCONFIG 763
#define STRING_ERRORFILEOPEN 764
#define STRING_ERRORPORTOPEN 765
#define STRING_ERRORPORTSETTINGS 766
#define STRING_ERRORTIMEOUT 767
#define STRING_ERRORREADERROR 768
#define STRING_ERRORTALKBACKFAILURE 769
#define STRING_ERRORTALKBACKDATA 770
#define STRING_EVENTSINGLEBYTE 771
#define STRING_EVENTQUADBYTE 772
#define STRING_EVENTVARBYTE 773
#define STRING_EVENTREGDATASTART 774
#define STRING_EVENTREGDATACOMPLETE 775
#define STRING_EVENTCODECOMPLETE 776
#define STRING_EVENTDOUBLEBYTE 777
#define STRING_EVENTSTRING 778
#endif

120
m68hc11/backup/MAIN.CPP Normal file
View File

@@ -0,0 +1,120 @@
#include <m68hc11/mainfrm.hpp>
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
{
MainFrame frameWindow;
// frameWindow.splash();
frameWindow.createWindow("M68HC11","M68HC11 v1.00","mainMenu","MOT");
return frameWindow.messageLoop();
}
#if 0
#include <m68hc11/commctrl.hpp>
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
{
CommControl commControl;
CommStatus commStatus;
DeviceControlBlock deviceControlBlock;
BYTE charByte(0xFF);
commControl.open(CommControl::PortCOM1);
if(!commControl.isOkay())return FALSE;
if(!commControl.setDeviceControlBlock("baud=1200 data=8 stop=1 parity=N"))::OutputDebugString("Set operation failed\n");
String strString;
charByte='a';
while(TRUE)
{
commControl.write(&charByte,sizeof(charByte));
// commControl.waitForData();
commControl.read(&charByte,sizeof(charByte));
::sprintf(strString,"%02x\n",(int)charByte);
::OutputDebugString(strString);
charByte++;
// commControl.clearError(commStatus);
// if(commStatus.bytesInReceiveQueue())
// {
// commControl.read(&charByte,sizeof(charByte));
// ::sprintf(strString,"%02x\n",(int)charByte);
// ::OutputDebugString(strString);
// break;
// }
::Sleep(250);
}
/*
::OutputDebugString("waiting for break signal...\n");
commControl.setEventMask(CommControl::EventBreak); // EventBreak
if(!commControl.waitEvent())::OutputDebugString("timeout waiting for break.\n");
else ::OutputDebugString("break received, loading code...\n");
BYTE ioBuffer[256];
for(int index=0;index<256;index++)ioBuffer[index]=index;
charByte=0xFF;
commControl.write(&charByte,sizeof(charByte));
// commControl.clearError(commStatus);
// if(commStatus.bytesInReceiveQueue())commControl.read(ioBuffer,commStatus.bytesInReceiveQueue());
commControl.write(ioBuffer,sizeof(ioBuffer));
::memset(ioBuffer,0,sizeof(ioBuffer));
String strString;
::OutputDebugString("receiving echo\n");
while(TRUE)
{
commControl.clearError(commStatus);
if(commStatus.bytesInReceiveQueue())
{
commControl.read(ioBuffer,sizeof(ioBuffer));
for(index=0;index+8<sizeof(ioBuffer);index+=8)
{
::sprintf(strString,"%02x %02x %02x %02x %02x %02x %02x %02x\n",
ioBuffer[index],ioBuffer[index+1],ioBuffer[index+2],ioBuffer[index+3],ioBuffer[index+4],
ioBuffer[index+5],ioBuffer[index+6],ioBuffer[index+7]);
::OutputDebugString(strString);
}
break;
}
::Sleep(1000);
}
*/
return FALSE;
}
#if 0
for(int index=0;index<256;index++)ioBuffer[index]=index;
charByte=0xFF;
commControl.write(&charByte,sizeof(charByte));
commControl.write(ioBuffer,sizeof(ioBuffer));
::memset(ioBuffer,0,sizeof(ioBuffer));
::OutputDebugString("receiving echo\n");
while(TRUE)
{
commControl.clearError(commStatus);
if(commStatus.bytesInReceiveQueue())
{
commControl.read(ioBuffer,sizeof(ioBuffer));
for(index=0;index+8<sizeof(ioBuffer);index+=8)
{
::sprintf(strString,"%02x %02x %02x %02x %02x %02x %02x %02x\n",
ioBuffer[index],ioBuffer[index+1],ioBuffer[index+2],ioBuffer[index+3],ioBuffer[index+4],
ioBuffer[index+5],ioBuffer[index+6],ioBuffer[index+7]);
::OutputDebugString(strString);
}
break;
}
::Sleep(1000);
}
#endif
#endif

147
m68hc11/backup/MCUDLG.CPP Normal file
View File

@@ -0,0 +1,147 @@
#include <m68hc11/mcudlg.hpp>
#include <m68hc11/odlstled.hpp>
#include <m68hc11/m68hc11.hpp>
#include <common/stdio.hpp>
MCUDlg::MCUDlg(void)
{
mInitHandler.setCallback(this,&MCUDlg::initHandler);
mCreateHandler.setCallback(this,&MCUDlg::createHandler);
mCloseHandler.setCallback(this,&MCUDlg::closeHandler);
mDestroyHandler.setCallback(this,&MCUDlg::destroyHandler);
mCommandHandler.setCallback(this,&MCUDlg::commandHandler);
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
}
MCUDlg::MCUDlg(const MCUDlg &someMCUDlg)
{ // private implementation
*this=someMCUDlg;
}
MCUDlg::~MCUDlg()
{
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
}
MCUDlg &MCUDlg::operator=(const MCUDlg &someMCUDlg)
{ // private implementation
return *this;
}
BOOL MCUDlg::perform(GUIWindow &parentWindow)
{
::CreateDialogParam(processInstance(),(LPSTR)"MCUDLG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
return isValid();
}
CallbackData::ReturnType MCUDlg::initHandler(CallbackData &someCallbackData)
{
mOwnerDrawList=::new OwnerDrawListBinaryLed(*this,getItem(MCUDLG_REGISTERS),MCUDLG_REGISTERS);
mOwnerDrawList.disposition(PointerDisposition::Delete);
for(int index=STRING_REGISTERPORTA;index<=STRING_REGISTERCONFIG;index++)mOwnerDrawList->insertString(String(index));
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::createHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::closeHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::destroyHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUDlg::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case IDCANCEL :
handleCancel();
break;
case IDOK :
handleOk();
break;
}
return (CallbackData::ReturnType)FALSE;
}
void MCUDlg::setRegister(int mcuRegister,BYTE value)
{
String stringData;
String strItem;
String strData;
if(LB_ERR==mOwnerDrawList->getText(stringData,mcuRegister))return;
strItem=stringData.betweenString(0,'\t');
if(strItem.isNull())::sprintf(strData,"%s\t%d",(LPSTR)stringData,value);
else ::sprintf(strData,"%s\t%d",(LPSTR)strItem,value);
mOwnerDrawList->deleteString(mcuRegister);
mOwnerDrawList->insertString(strData,mcuRegister);
}
void MCUDlg::setRegisters(GlobalData<BYTE> &regData)
{
mOwnerDrawList->setRedraw(FALSE);
for(int index=0;index<regData.size();index++)setRegister(index,regData[index]);
mOwnerDrawList->setRedraw(TRUE);
}
void MCUDlg::setVarByteData(GlobalData<BYTE> &byteData)
{
String strData;
String strLine;
String strHexLine;
for(int index=0;index<byteData.size();index++)
{
::sprintf(strData,"%c",byteData[index]);
strLine+=strData;
}
for(index=0;index<byteData.size();index++)
{
::sprintf(strData,"%02lx",int(byteData[index]));
strHexLine+=strData;
}
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strLine);
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strHexLine);
}
void MCUDlg::setSingleByteData(BYTE singleByteData)
{
String strLine;
if(isprint(singleByteData))::sprintf(strLine,"%c (%02lxh)",singleByteData,(int)singleByteData);
else ::sprintf(strLine,"'' (%02lxh)",(int)singleByteData);
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strLine);
// ::sprintf(strLine,"%02lx",int(singleByteData));
// sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)strLine);
}
void MCUDlg::setStringData(const String &string)
{
sendMessage(MCUDLG_MESSAGES,LB_INSERTSTRING,-1,(LPARAM)(LPSTR)string.str());
}
void MCUDlg::setQuadByteData(DWORD quadByteData)
{
}
void MCUDlg::setDoubleByteData(WORD doubleByteData)
{
}

81
m68hc11/backup/MCUDLG.HPP Normal file
View File

@@ -0,0 +1,81 @@
#ifndef _M68HC11_MCUDLG_HPP_
#define _M68HC11_MCUDLG_HPP_
#ifndef _COMMON_DWINDOW_HPP_
#include <common/dwindow.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
class OwnerDrawListBinaryLed;
class MCUDlg : public DWindow
{
public:
MCUDlg(void);
virtual ~MCUDlg();
BOOL perform(GUIWindow &parentWindow);
void setCancelHandler(PureCallback *pCallback);
void setStartHandler(PureCallback *pCallback);
void setRegister(int mcuRegister,BYTE value);
void setRegisters(GlobalData<BYTE> &regData);
void setVarByteData(GlobalData<BYTE> &byteData);
void setQuadByteData(DWORD quadByteData);
void setDoubleByteData(WORD doubleByteData);
void setSingleByteData(BYTE singleByteData);
void setStringData(const String &string);
void enableStart(BOOL enable);
private:
MCUDlg(const MCUDlg &someMCUDlg);
MCUDlg &operator=(const MCUDlg &someMCUDlg);
CallbackData::ReturnType initHandler(CallbackData &someCallbackData);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
void handleCancel(void);
void handleOk(void);
Callback<MCUDlg> mInitHandler;
Callback<MCUDlg> mCreateHandler;
Callback<MCUDlg> mCloseHandler;
Callback<MCUDlg> mDestroyHandler;
Callback<MCUDlg> mCommandHandler;
SmartPointer<OwnerDrawListBinaryLed> mOwnerDrawList;
CallbackPointer mCancelHandler;
CallbackPointer mStartHandler;
};
inline
void MCUDlg::setCancelHandler(PureCallback *pCallback)
{
mCancelHandler=CallbackPointer(pCallback);
}
inline
void MCUDlg::setStartHandler(PureCallback *pCallback)
{
mStartHandler=CallbackPointer(pCallback);
}
inline
void MCUDlg::handleCancel(void)
{
mCancelHandler.callback(CallbackData());
}
inline
void MCUDlg::handleOk(void)
{
mStartHandler.callback(CallbackData());
}
inline
void MCUDlg::enableStart(BOOL enable)
{
::EnableWindow(getItem(IDOK),enable);
}
#endif

238
m68hc11/backup/MCUTHRD.CPP Normal file
View File

@@ -0,0 +1,238 @@
#include <m68hc11/mcuthrd.hpp>
#include <m68hc11/commctrl.hpp>
#include <m68hc11/m68hc11.hpp>
#include <m68hc11/m68reg.hpp>
#include <common/openfile.hpp>
#include <common/gdata.hpp>
MCUThread::MCUThread(void)
: mIsInEvents(false)
{
mThreadHandler.setCallback(this,&MCUThread::threadHandler);
insertHandler(&mThreadHandler);
}
MCUThread::MCUThread(const MCUThread &someMCUThread)
: mIsInEvents(false)
{ // private implementation
*this=someMCUThread;
}
MCUThread::~MCUThread()
{
removeHandler(&mThreadHandler);
}
MCUThread &MCUThread::operator=(const MCUThread &someMCUThread)
{ // private implementation
return *this;
}
void MCUThread::listen(const String &strPathBinary)
{
String *pString=::new String(strPathBinary);
ThreadMessage threadMessage(ThreadMessage::TM_USER,ThMsgListen,int(pString));
postMessage(threadMessage);
return;
}
DWORD MCUThread::threadHandler(ThreadMessage &someThreadMessage)
{
switch(someThreadMessage.message())
{
case ThreadMessage::TM_CREATE :
break;
case ThreadMessage::TM_DESTROY :
break;
case ThreadMessage::TM_USER :
if(ThMsgListen==someThreadMessage.userDataOne())
{
String *pString=(String*)someThreadMessage.userDataTwo();
thListen(*pString);
::delete pString;
}
break;
}
return FALSE;
}
void MCUThread::thListen(const String &strPathBinary)
{
CommControl commControl;
sendMessage("Initializing device...");
if(!openDevice(commControl))return;
sendMessage("Loading code...");
if(!codeLoad(commControl,strPathBinary))return;
sendMessage("Processing events...");
processEvents(commControl);
return;
}
BOOL MCUThread::openDevice(CommControl &commControl,bool useOverlappedIO)
{
M68Reg mcuReg;
if(!commControl.open(CommControl::stringToPort(mcuReg.getPort()),useOverlappedIO))
{
mErrorEventHandler.callback(CallbackData(ErrorPortOpen,0L));
return FALSE;
}
if(!commControl.setDeviceControlBlock(mcuReg.getSerialSettings()))
{
mErrorEventHandler.callback(CallbackData(ErrorPortSettings,0L));
return FALSE;
}
commControl.setEventMask(CommControl::EventBreak);
if(!commControl.waitEvent())
{
mErrorEventHandler.callback(CallbackData(ErrorTimeout,0L));
return FALSE;
}
return TRUE;
}
BOOL MCUThread::codeLoad(CommControl &commControl,const String &strPathBinary)
{
FileHandle inFile;
BYTE sndBuffer[256];
// BYTE rcvBuffer[256];
GlobalData<BYTE> rcvBuffer;
WORD codeLength(0);
BYTE prefix(0xFF);
BYTE *ptrByte;
if(!inFile.open(strPathBinary))
{
mErrorEventHandler.callback(CallbackData(ErrorFileOpen,int(&(String&)strPathBinary)));
return FALSE;
}
::memset(sndBuffer,1,sizeof(sndBuffer));
// ::memset(&rcvBuffer,0,sizeof(rcvBuffer));
ptrByte=sndBuffer;
while(inFile.read(*ptrByte)&&codeLength<=256){codeLength++;ptrByte++;}
commControl.write(&prefix,sizeof(prefix));
commControl.clearReceiveQueue();
commControl.write(sndBuffer,sizeof(sndBuffer));
if(!commControl.waitForData())
{
mErrorEventHandler.callback(CallbackData(ErrorTalkBackFailure,0L));
return false;
}
rcvBuffer.size(sizeof(sndBuffer));
rcvBuffer.setZero();
commControl.readFully(rcvBuffer);
// commControl.readFully(rcvBuffer,sizeof(rcvBuffer));
if(::memcmp(&rcvBuffer[0],sndBuffer,sizeof(sndBuffer)))
{
mErrorEventHandler.callback(CallbackData(ErrorTalkBackData,0L));
return false;
}
return true;
}
// event types
// 0x00 - character
// 0x01 - WORD
// 0x02 - DWORD
// 0x03 - varchar : [WORD:count,countcharacters]
// 0xFF - end
BOOL MCUThread::processEvents(CommControl &commControl)
{
GlobalData<BYTE> byteData;
String strString;
BYTE event(0x00);
BYTE ack(0x00);
WORD wordData;
DWORD dwordData;
char charData;
int index;
int map(0x1000);
::OutputDebugString("MCUThread::processEvents[Thread is starting]");
isInEvents(true);
while(isInEvents())
{
if(!commControl.hasData())continue;
commControl.read(&event,sizeof(event));
switch(MCUEvent(event))
{
case EventString :
{
String str;
sendMessage(STRING_EVENTSTRING);
while(true)
{
commControl.read(&charData,sizeof(charData));
if(!charData)break;
str+=charData;
}
mMCUEventHandler.callback(CallbackData(EventString,int(&str)));
commControl.write(&ack,sizeof(ack));
}
break;
case EventSingleByte :
sendMessage(STRING_EVENTSINGLEBYTE);
commControl.read(&charData,sizeof(charData));
mMCUEventHandler.callback(CallbackData(EventSingleByte,int(&charData)));
commControl.write(&ack,sizeof(ack));
break;
case EventDoubleByte :
sendMessage(STRING_EVENTDOUBLEBYTE);
commControl.read(&wordData,sizeof(wordData));
mMCUEventHandler.callback(CallbackData(EventDoubleByte,int(&wordData)));
commControl.write(&ack,sizeof(ack));
break;
case EventQuadByte :
sendMessage(STRING_EVENTQUADBYTE);
commControl.read(&dwordData,sizeof(dwordData));
mMCUEventHandler.callback(CallbackData(EventQuadByte,(int)&dwordData));
commControl.write(&ack,sizeof(ack));
break;
case EventVarByte :
sendMessage(STRING_EVENTVARBYTE);
commControl.read(&wordData,sizeof(wordData));
byteData.size(wordData);
for(index=0;index<byteData.size();index++)
{
commControl.read(&charData,sizeof(charData));
byteData[index]=charData;
}
mMCUEventHandler.callback(CallbackData(EventVarByte,int(&byteData)));
commControl.write(&ack,sizeof(ack));
break;
case EventRegs :
map=0x1000;
byteData.size(64);
sendMessage(STRING_EVENTREGDATASTART);
for(index=0;index<byteData.size();index++)
{
commControl.read(&charData,sizeof(charData));
byteData[index]=charData;
}
sendMessage(STRING_EVENTREGDATACOMPLETE);
mMCUEventHandler.callback(CallbackData(EventRegs,int(&byteData)));
commControl.write(&ack,sizeof(ack));
break;
case EventEnd :
sendMessage(STRING_EVENTCODECOMPLETE);
mMCUEventHandler.callback(CallbackData(EventEnd,0L));
isInEvents(false);
break;
default :
{
String str;
::sprintf(str,"unexpected character : 0x%04lx\n",(int)event);
::OutputDebugString(str);
}
}
}
::OutputDebugString("MCUThread::processEvents[Thread is ending normally]");
return TRUE;
}
void MCUThread::sendMessage(const String &strMessage)
{
mMessageHandler.callback(CallbackData(0,int(&(String&)strMessage)));
}

View File

@@ -0,0 +1,72 @@
#ifndef _M68HC11_MCUTHREAD_HPP_
#define _M68HC11_MCUTHREAD_HPP_
#ifndef _THREAD_MESSAGETHREAD_HPP_
#include <thread/mthread.hpp>
#endif
#ifndef _COMMON_CALLBACK_HPP_
#include <common/callback.hpp>
#endif
class CommControl;
class MCUThread : protected MessageThread
{
public:
enum MCUEvent{EventSingleByte=0x00,EventDoubleByte=0x01,EventQuadByte=0x02,EventVarByte=0x03,EventRegs=0x04,EventString=0x05,EventEnd=0xFF};
enum ErrorEvent{ErrorFileOpen,ErrorPortOpen,ErrorPortSettings,ErrorTimeout,ErrorReadError,ErrorTalkBackFailure,ErrorTalkBackData};
MCUThread(void);
virtual ~MCUThread();
void listen(const String &strPathBinary);
void setErrorEventHandler(PureCallback *pCallback);
void setMCUEventHandler(PureCallback *pCallback);
void setMessageHandler(PureCallback *pCallback);
bool isInEvents(void)const;
void isInEvents(bool isInEvents);
private:
enum{ThMsgListen};
MCUThread(const MCUThread &someMCUThread);
MCUThread &operator=(const MCUThread &someMCUThread);
DWORD threadHandler(ThreadMessage &someThreadMessage);
void thListen(const String &strPathBinary);
BOOL openDevice(CommControl &commControl,bool userOverlappedIO=false);
BOOL codeLoad(CommControl &commControl,const String &strPathBinary);
BOOL processEvents(CommControl &commControl);
void sendMessage(const String &strMessage);
ThreadCallback<MCUThread> mThreadHandler;
CallbackPointer mErrorEventHandler;
CallbackPointer mMCUEventHandler;
CallbackPointer mMessageHandler;
bool mIsInEvents;
};
inline
void MCUThread::setErrorEventHandler(PureCallback *pCallback)
{
mErrorEventHandler=CallbackPointer(pCallback);
}
inline
void MCUThread::setMCUEventHandler(PureCallback *pCallback)
{
mMCUEventHandler=CallbackPointer(pCallback);
}
inline
void MCUThread::setMessageHandler(PureCallback *pCallback)
{
mMessageHandler=CallbackPointer(pCallback);
}
inline
bool MCUThread::isInEvents(void)const
{
return mIsInEvents;
}
inline
void MCUThread::isInEvents(bool isInEvents)
{
mIsInEvents=isInEvents;
}
#endif

193
m68hc11/backup/MCUVIEW.CPP Normal file
View File

@@ -0,0 +1,193 @@
#include <m68hc11/mcuview.hpp>
#include <m68hc11/m68hc11.hpp>
#include <statbar/statbarx.hpp>
MCUView::MCUView(void)
{
mCreateHandler.setCallback(this,&MCUView::createHandler);
mSizeHandler.setCallback(this,&MCUView::sizeHandler);
mCloseHandler.setCallback(this,&MCUView::closeHandler);
mDestroyHandler.setCallback(this,&MCUView::destroyHandler);
mCommandHandler.setCallback(this,&MCUView::commandHandler);
mCancelHandler.setCallback(this,&MCUView::cancelHandler);
mStartHandler.setCallback(this,&MCUView::startHandler);
mErrorEventHandler.setCallback(this,&MCUView::errorEventHandler);
mMCUEventHandler.setCallback(this,&MCUView::mcuEventHandler);
mMessageHandler.setCallback(this,&MCUView::messageHandler);
MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler);
MCUThread::setErrorEventHandler(&mErrorEventHandler);
MCUThread::setMCUEventHandler(&mMCUEventHandler);
MCUThread::setMessageHandler(&mMessageHandler);
}
MCUView::~MCUView()
{
MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler);
MCUThread::setErrorEventHandler(0);
MCUThread::setMCUEventHandler(0);
MCUThread::setMessageHandler(0);
}
CallbackData::ReturnType MCUView::createHandler(CallbackData &someCallbackData)
{
mMCUDialog.setCancelHandler(&mCancelHandler);
mMCUDialog.setStartHandler(&mStartHandler);
mMCUDialog.perform(*this);
mStatusBar=::new StatusBarEx(*this,StatusBarID);
mStatusBar.disposition(PointerDisposition::Delete);
mStatusBar->setText("Press start and then switch on the device.");
return FALSE;
}
CallbackData::ReturnType MCUView::sizeHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::closeHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::destroyHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::commandHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType MCUView::cancelHandler(CallbackData &/*someCallbackData*/)
{
isInEvents(false);
MDIWindow::postMessage(*this,WM_CLOSE,0,0L);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUView::startHandler(CallbackData &/*someCallbackData*/)
{
mMCUDialog.enableStart(FALSE);
listen(mStrPathBinary);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUView::messageHandler(CallbackData &someCallbackData)
{
mStatusBar->setText(*((String*)someCallbackData.lParam()));
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MCUView::errorEventHandler(CallbackData &someCallbackData)
{
switch(MCUThread::ErrorEvent(someCallbackData.wParam()))
{
case MCUThread::ErrorFileOpen :
mStatusBar->setText(String(STRING_ERRORFILEOPEN)+*((String*)someCallbackData.lParam())+String("'."));
break;
case MCUThread::ErrorPortOpen :
mStatusBar->setText(STRING_ERRORPORTOPEN);
break;
case MCUThread::ErrorPortSettings :
mStatusBar->setText(STRING_ERRORPORTSETTINGS);
break;
case MCUThread::ErrorTimeout :
mStatusBar->setText(STRING_ERRORTIMEOUT);
break;
case MCUThread::ErrorReadError :
mStatusBar->setText(STRING_ERRORREADERROR);
break;
case MCUThread::ErrorTalkBackFailure :
mStatusBar->setText(STRING_ERRORTALKBACKFAILURE);
break;
case MCUThread::ErrorTalkBackData :
mStatusBar->setText(STRING_ERRORTALKBACKDATA);
break;
}
mMCUDialog.enableStart(TRUE);
return FALSE;
}
CallbackData::ReturnType MCUView::mcuEventHandler(CallbackData &someCallbackData)
{
switch(MCUThread::MCUEvent(someCallbackData.wParam()))
{
case MCUThread::EventString :
handleStringData(someCallbackData);
break;
case MCUThread::EventSingleByte :
handleSingleByteData(someCallbackData);
break;
case MCUThread::EventDoubleByte :
handleEventDoubleByte(someCallbackData);
break;
case MCUThread::EventQuadByte :
handleEventQuadByte(someCallbackData);
break;
case MCUThread::EventVarByte :
handleEventVarByte(someCallbackData);
break;
case MCUThread::EventRegs :
handleEventRegs(someCallbackData);
break;
case MCUThread::EventEnd :
mMCUDialog.enableStart(TRUE);
break;
}
return FALSE;
}
void MCUView::handleEventRegs(CallbackData &someCallbackData)
{
GlobalData<BYTE> &regData=(GlobalData<BYTE> &)*((GlobalData<BYTE> *)someCallbackData.lParam());
mMCUDialog.setRegisters(regData);
}
void MCUView::handleEventVarByte(CallbackData &someCallbackData)
{
GlobalData<BYTE> &byteData=(GlobalData<BYTE> &)*((GlobalData<BYTE> *)someCallbackData.lParam());
mMCUDialog.setVarByteData(byteData);
}
void MCUView::handleEventQuadByte(CallbackData &someCallbackData)
{
mMCUDialog.setQuadByteData(*((DWORD*)someCallbackData.lParam()));
}
void MCUView::handleEventDoubleByte(CallbackData &someCallbackData)
{
mMCUDialog.setDoubleByteData(*((WORD*)someCallbackData.lParam()));
}
void MCUView::handleSingleByteData(CallbackData &someCallbackData)
{
mMCUDialog.setSingleByteData(*((BYTE*)someCallbackData.lParam()));
}
void MCUView::handleStringData(CallbackData &someCallbackData)
{
mMCUDialog.setStringData(*((String*)someCallbackData.lParam()));
}
// *** virtuals
void MCUView::preRegister(WNDCLASS &wndClass)
{
wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE;
}
void MCUView::preCreate(MDICREATESTRUCT &createStruct)
{
createStruct.cx=InitialWidth;
createStruct.cy=InitialHeight;
createStruct.style^=WS_THICKFRAME;
}

View File

@@ -0,0 +1,66 @@
#ifndef _M68HC11_MCUVIEW_HPP_
#define _M68HC11_MCUVIEW_HPP_
#ifndef _COMMON_MDIWIN_HPP_
#include <common/mdiwin.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
#ifndef _M68HC11_MCUDLG_HPP_
#include <m68hc11/mcudlg.hpp>
#endif
#ifndef _M68HC11_MCUTHREAD_HPP_
#include <m68hc11/mcuthrd.hpp>
#endif
class StatusBarEx;
class MCUView : public MDIWindow, public MCUThread
{
public:
MCUView(void);
virtual ~MCUView();
void setCode(const String &strPathBinary);
protected:
virtual void preRegister(WNDCLASS &wndClass);
virtual void preCreate(MDICREATESTRUCT &createStruct);
private:
enum {StatusBarID=101,InitialWidth=565,InitialHeight=360};
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType cancelHandler(CallbackData &someCallbackData);
CallbackData::ReturnType startHandler(CallbackData &someCallbackData);
CallbackData::ReturnType errorEventHandler(CallbackData &someCallbackData);
CallbackData::ReturnType mcuEventHandler(CallbackData &someCallbackData);
CallbackData::ReturnType messageHandler(CallbackData &someCallbackData);
void handleEventRegs(CallbackData &someCallbackData);
void handleEventVarByte(CallbackData &someCallbackData);
void handleEventQuadByte(CallbackData &someCallbackData);
void handleEventDoubleByte(CallbackData &someCallbackData);
void handleSingleByteData(CallbackData &someCallbackData);
void handleStringData(CallbackData &someCallbackData);
Callback<MCUView> mCreateHandler;
Callback<MCUView> mSizeHandler;
Callback<MCUView> mCloseHandler;
Callback<MCUView> mDestroyHandler;
Callback<MCUView> mCommandHandler;
Callback<MCUView> mCancelHandler;
Callback<MCUView> mStartHandler;
Callback<MCUView> mErrorEventHandler;
Callback<MCUView> mMCUEventHandler;
Callback<MCUView> mMessageHandler;
SmartPointer<StatusBarEx> mStatusBar;
MCUDlg mMCUDialog;
String mStrPathBinary;
};
inline
void MCUView::setCode(const String &strPathBinary)
{
mStrPathBinary=strPathBinary;
}
#endif

497
m68hc11/backup/Mainfrm.cpp Normal file
View File

@@ -0,0 +1,497 @@
#include <m68hc11/mainfrm.hpp>
#include <m68hc11/serdlg.hpp>
#include <m68hc11/codeview.hpp>
#include <m68hc11/mcuview.hpp>
#include <m68hc11/m68reg.hpp>
#include <m68hc11/splash.hpp>
#include <printman/printman.hpp>
#include <common/assert.hpp>
#include <common/opendlg.hpp>
#include <common/gdata.hpp>
#include <common/crsctrl.hpp>
#include <common/diskinfo.hpp>
char MainFrame::szClassName[]="M68HC11";
char MainFrame::szMenuName[]="mainMenu";
MainFrame::MainFrame(void)
{
mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler);
mPaintHandler.setCallback(this,&MainFrame::paintHandler);
mDestroyHandler.setCallback(this,&MainFrame::destroyHandler);
mCommandHandler.setCallback(this,&MainFrame::commandHandler);
mSizeHandler.setCallback(this,&MainFrame::sizeHandler);
mCreateHandler.setCallback(this,&MainFrame::createHandler);
mLineHandler.setCallback(this,&MainFrame::lineHandler);
insertHandlers();
}
MainFrame::~MainFrame()
{
destroy();
}
void MainFrame::insertHandlers(void)
{
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler);
}
void MainFrame::removeHandlers(void)
{
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler);
}
CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/)
{
GlobalData<int> statParts;
createToolBar();
mStatusBar=::new StatusBarEx(*this,StatusBarID);
mStatusBar.disposition(PointerDisposition::Delete);
statParts.size(2);
*((int*)&statParts[0])=300;
*((int*)&statParts[1])=400;
mStatusBar->setParts(statParts);
mStatusBar->setText("Ready");
applyHistory(getFrameMenu());
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/)
{
removeHandlers();
::PostQuitMessage(0);
::WinHelp(*this,0,HELP_QUIT,0);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData)
{
if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE;
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData)
{
Rect statusRect;
Rect toolRect;
Rect cRect;
mToolBar.windowRect(toolRect);
mStatusBar->windowRect(statusRect);
cRect.right(someCallbackData.loWord());
cRect.bottom(someCallbackData.hiWord());
getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top())));
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::lineHandler(CallbackData &someCallbackData)
{
String msg;
::sprintf(msg,"Ln %d, Col %d",someCallbackData.loWord(),someCallbackData.hiWord());
mStatusBar->setText(msg,1);
mStatusBar->update();
return FALSE;
}
CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case MenuCodeCompile :
handleCodeCompile();
break;
case MenuCodeCompileAndLoad :
handleCodeCompileAndLoad();
break;
case MenuEditCut :
handleEditCut();
break;
case MenuEditCopy :
handleEditCopy();
break;
case MenuEditPaste :
handleEditPaste();
break;
case MenuEditFind :
handleEditFind();
break;
case MenuCascade :
cascade();
break;
case MenuTile :
tile();
break;
case MenuArrange :
arrange();
break;
case MenuCloseAll :
closeAll();
break;
case MenuMinimizeAll :
minimizeAll();
break;
case MenuRestoreAll :
restoreAll();
break;
case MenuFileNew :
handleFileNew();
break;
case MenuFileOpen :
handleFileOpen();
break;
case MenuFileSave :
handleFileSave();
break;
case MenuFilePrint :
handleFilePrint();
break;
case MenuFileSaveAs :
handleFileSaveAs();
break;
case MenuFileClose :
handleFileClose();
break;
case MenuFileQuit :
break;
case MenuSettingsSerial :
handleCommunications();
break;
case MenuHelpContents :
handleHelp();
break;
case MenuHelpSearch :
handleHelp();
break;
case MenuRegistration :
break;
case MenuHelpAbout :
break;
}
if(someCallbackData.wParam()>=StartDynamicID)handleFileOpen(someCallbackData);
return (CallbackData::ReturnType)FALSE;
}
// handlers
void MainFrame::handleCodeCompile(void)
{
CursorControl cursorControl;
SmartPointer<MDIWindow> mdiWindow;
String strMessage;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
CodeView &codeView=(CodeView&)*mdiWindow;
if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return;
mStatusBar->setText("compiling...");
cursorControl.waitCursor(TRUE);
m68Assembler.assemble(codeView.getTitle());
cursorControl.waitCursor(FALSE);
strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s).");
mStatusBar->setText(strMessage);
}
void MainFrame::handleCodeCompileAndLoad(void)
{
CursorControl cursorControl;
BOOL assembleResult;
String strPathBinary;
String strMessage;
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
CodeView &codeView=(CodeView&)*mdiWindow;
if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return;
mStatusBar->setText("compiling...");
cursorControl.waitCursor(TRUE);
assembleResult=m68Assembler.assemble(codeView.getTitle());
cursorControl.waitCursor(FALSE);
strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s).");
mStatusBar->setText(strMessage);
if(!assembleResult)return;
strPathBinary=codeView.getTitle().betweenString(0,'.');
strPathBinary+=".bin";
codeLoad(strPathBinary);
}
void MainFrame::handleEditCut(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).cut();
}
void MainFrame::handleEditCopy(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).copy();
}
void MainFrame::handleEditPaste(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).paste();
}
void MainFrame::handleEditFind(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).find();
}
void MainFrame::handleFileNew(void)
{
CodeView *pCodeView;
pCodeView=::new CodeView;
pCodeView->setLineHandler(&mLineHandler);
pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc");
insert(*pCodeView);
}
void MainFrame::handleFileOpen(CallbackData &someCallbackData)
{
PureMenu fileMenu;
String menuItemString;
getFrameMenu().getSubMenu(0,fileMenu);
menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand);
if(menuItemString.isNull())return;
menuItemString=menuItemString.betweenString(')',0);
menuItemString.trimLeft();
handleFileOpen(menuItemString);
}
void MainFrame::handleFileOpen(void)
{
OpenDialog openDialog;
String strPathFileName;
if(!openDialog.getOpenFileName(*this,"*.asm","Open File","*.asm",strPathFileName))return;
handleFileOpen(strPathFileName);
}
void MainFrame::handleFileOpen(const String &strPathFileName)
{
CodeView *pCodeView;
CursorControl cursorControl;
if(bringDocumentToFront(strPathFileName))return;
mStatusBar->setText("Loading...");
cursorControl.waitCursor(TRUE);
pCodeView=::new CodeView;
insert(*pCodeView); // insert the pointer before creating/activating the window
pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc");
pCodeView->setLineHandler(&mLineHandler);
pCodeView->open(strPathFileName);
mStatusBar->setText("Ready");
cursorControl.waitCursor(FALSE);
updateHistory(strPathFileName);
}
void MainFrame::handleFileClose(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
mdiWindow->close();
}
void MainFrame::handleFilePrint(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return;
((CodeView&)*mdiWindow).print();
}
BOOL MainFrame::handleFileSave(void)
{
SmartPointer<MDIWindow> mdiWindow;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE;
CodeView &codeView=(CodeView&)*mdiWindow;
if(codeView.getTitle()==String(STRING_UNTITLED))return handleFileSaveAs();
if(!codeView.save())return mStatusBar->setText(codeView.getTitle()+String(" save failed.")),FALSE;
return mStatusBar->setText(codeView.getTitle()+String(" saved.")),TRUE;
return TRUE;
}
BOOL MainFrame::handleFileSaveAs(void)
{
SmartPointer<MDIWindow> mdiWindow;
OpenDialog openDialog;
String strPathFileName;
if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE;
if(!openDialog.getSaveFileName(*this,"Assembly Files","File Save","*.asm",strPathFileName))return FALSE;
if(!strPathFileName.strstr(".asm"))strPathFileName+=".asm";
if(!((CodeView&)*mdiWindow).save(strPathFileName))return mStatusBar->setText(strPathFileName+String(" save failed!.")),FALSE;
return mStatusBar->setText(strPathFileName+String(" saved.")),TRUE;
}
void MainFrame::handleCommunications(void)
{
SerialDlg serDlg;
serDlg.perform(*this);
}
void MainFrame::handleHelp(void)
{
String strPathHelpFileName;
DiskInfo diskInfo;
diskInfo.getCurrentDirectory(strPathHelpFileName);
strPathHelpFileName+=String(STRING_HELPFILENAME);
::WinHelp(*this,strPathHelpFileName,HELP_CONTENTS,0);
}
// support & testing
BOOL MainFrame::codeLoad(const String &strPathBinary)
{
MCUView *pMCUView;
pMCUView=::new MCUView;
pMCUView->createWindow(*this,STRING_MCUVIEWCLASSNAME,STRING_MCUVIEWCLASSNAME,"mcuMenu","Doc");
insert(*pMCUView);
pMCUView->setCode(strPathBinary);
return TRUE;
}
void MainFrame::setParts(int numParts)
{
GlobalData<int> statParts;
if(1==numParts){statParts.size(1);*((int*)&statParts[0])=FirstPartWidth;}
else {statParts.size(2);*((int*)&statParts[0])=FirstPartWidth;*((int*)&statParts[0]+1)=SecondPartWidth;}
mStatusBar->setParts(statParts);
}
void MainFrame::updateHistory(const String &pathFileName)
{
M68Reg m68Reg;
Array<SmartPointer<MDIWindow> >mdiWindows;
if(!m68Reg.insertHistory(pathFileName))return;
removeHistory(getFrameMenu());
applyHistory(getFrameMenu());
getDocuments(mdiWindows);
for(int index=0;index<mdiWindows.size();index++)
{
SmartPointer<MDIWindow> &mdiWindow=mdiWindows[index];
removeHistory(mdiWindow->getMenu());
applyHistory(mdiWindow->getMenu());
}
}
void MainFrame::removeHistory(PureMenu &pureMenu)
{
M68Reg m68Reg;
UINT startID(StartDynamicID);
Block<String> nameList;
PureMenu fileMenu;
m68Reg.getHistory(nameList);
if(!nameList.size())return;
pureMenu.getSubMenu(0,fileMenu);
for(int itemIndex=0;itemIndex<nameList.size();itemIndex++)fileMenu.removeMenu(startID++,PureMenu::ByCommand);
int entries(fileMenu.size());
if((int)PureMenu::TypeSeparator&(int)fileMenu.getMenuItemType(entries-1,PureMenu::ByPosition))fileMenu.removeMenu(entries-1,PureMenu::ByPosition);
}
void MainFrame::applyHistory(PureMenu &pureMenu)
{
M68Reg m68Reg;
Block<String> nameList;
PureMenu fileMenu;
String strItem;
m68Reg.getHistory(nameList);
if(!nameList.size())return;
pureMenu.getSubMenu(0,fileMenu);
fileMenu.appendSeparator();
for(int itemIndex=0;itemIndex<nameList.size();itemIndex++)
{
::sprintf(strItem,"%d) %s",itemIndex+1,(char*)nameList[itemIndex]);
fileMenu.appendMenu(StartDynamicID+itemIndex,strItem);
}
}
void MainFrame::createToolBar(void)
{
Block<AddBitmap> addBitmaps;
mToolBar.create(*this,ToolBarID);
addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL));
if(!mToolBar.addBitmaps(addBitmaps))return;
mToolBar.addButton(ToolBarButton(STD_FILENEW,MenuFileNew,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MenuFileOpen,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FILESAVE,MenuFileSave,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_CUT,MenuEditCut,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_COPY,MenuEditCopy,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_PASTE,MenuEditPaste,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_FIND,MenuEditFind,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
}
BOOL MainFrame::bringDocumentToFront(const String &strTitle)
{
Array<SmartPointer<MDIWindow> >mdiWindows;
getDocuments(mdiWindows);
for(int index=0;index<mdiWindows.size();index++)
{
SmartPointer<MDIWindow> &mdiWindow=mdiWindows[index];
if(((CodeView&)*mdiWindow).getTitle()==strTitle){mdiWindow->bringWindowToTop();return TRUE;}
}
return false;
}
void MainFrame::splash(void)
{
SplashScreen splashScreen("SPLASH","M68HC11");
splashScreen.perform();
}
// virtuals
void MainFrame::mdiDestroy(MDIWindow &mdiWindow)
{
Array<SmartPointer<MDIWindow> >mdiWindows;
WORD winCount(0);
getDocuments(mdiWindows);
for(int index=0;index<mdiWindows.size();index++)
{
SmartPointer<MDIWindow> &mdiWindowPtr=mdiWindows[index];
if(mdiWindowPtr->className()==String(STRING_CODEVIEWCLASSNAME)&&((MDIWindow*)mdiWindowPtr!=&mdiWindow))winCount++;
}
if(!winCount)setParts(SinglePart);
}
void MainFrame::mdiActivate(MDIWindow &mdiWindow)
{
if(mdiWindow.className()==String(STRING_CODEVIEWCLASSNAME))setParts(DoublePart);
removeHistory(mdiWindow.getMenu());
applyHistory(mdiWindow.getMenu());
}
void MainFrame::mdiDeactivate(MDIWindow &/*mdiWindow*/)
{
}

110
m68hc11/backup/Mainfrm.hpp Normal file
View File

@@ -0,0 +1,110 @@
#ifndef _M68HC11_MAINFRAME_HPP_
#define _M68HC11_MAINFRAME_HPP_
#ifndef _COMMON_MDIFRM_HPP_
#include <common/mdifrm.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _STATBAR_STATUSBAREX_HPP_
#include <statbar/statbarx.hpp>
#endif
#ifndef _TOOLBAR_TOOLBAR_HPP_
#include <toolbar/toolbar.hpp>
#endif
#ifndef _M68HC11_COMMCONTROL_HPP_
#include <m68hc11/commctrl.hpp>
#endif
#ifndef _M68HC11_M68HC11_HPP_
#include <m68hc11/m68hc11.hpp>
#endif
#ifndef _AS68HC11_M68ASSEMBLER_HPP_
#include <as68hc11/asm6811.hpp>
#endif
class MainFrame : public FrameWindow
{
public:
MainFrame(void);
virtual ~MainFrame();
static String className(void);
void splash(void);
protected:
virtual void mdiDestroy(MDIWindow &mdiWindow);
virtual void mdiActivate(MDIWindow &mdiWindow);
virtual void mdiDeactivate(MDIWindow &mdiWindow);
private:
enum {StatusBarID=500,ToolBarID=501,StartDynamicID=30000};
enum{SinglePart=1,DoublePart=2,FirstPartWidth=340,SecondPartWidth=420};
enum{MenuFileSave=SBCMENU_FILESAVE,MenuFileQuit=SBCMENU_FILEQUIT,MenuFilePrint=SBCMENU_FILEPRINT,
MenuSettingsSerial=SBCMENU_SETTINGSSERIAL,MenuHelpContents=SBCMENU_HELPCONTENTS,
MenuHelpSearch=SBCMENU_HELPSEARCH,MenuRegistration=SBCMENU_REGISTRATION,MenuFileNew=SBCMENU_FILENEW,
MenuFileOpen=SBCMENU_FILEOPEN,MenuHelpAbout=SBCMENU_HELPABOUT,MenuFileClose=SBCMENU_FILECLOSE,
MenuFileSaveAs=SBCMENU_FILESAVEAS,MenuCascade=IDM_CASCADE,MenuTile=IDM_TILE,MenuArrange=IDM_ARRANGE,
MenuCloseAll=IDM_CLOSEALL,MenuMinimizeAll=IDM_MINIMIZEALL,MenuRestoreAll=IDM_RESTOREALL,
MenuEditCut=SBCMENU_EDITCUT,MenuEditCopy=SBCMENU_EDITCOPY,MenuEditPaste=SBCMENU_EDITPASTE,
MenuEditFind=SBCMENU_EDITFIND,MenuCodeCompile=SBCMENU_CODECOMPILE,
MenuCodeCompileAndLoad=SBCMENU_CODECOMPILEANDLOAD};
CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData);
CallbackData::ReturnType paintHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType timerHandler(CallbackData &someCallbackData);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType activateAppHandler(CallbackData &someCallbackData);
CallbackData::ReturnType displayChangeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType lineHandler(CallbackData &someCallbackData);
void createToolBar(void);
void handleCodeCompile(void);
void handleCodeCompileAndLoad(void);
void handleCommunications(void);
void handleEditCut(void);
void handleEditCopy(void);
void handleEditPaste(void);
void handleEditFind(void);
void handleFileNew(void);
void handleFileOpen(void);
void handleFileOpen(CallbackData &someCallbackData);
void handleFileOpen(const String &strPathFileName);
void handleFileClose(void);
void handleFilePrint(void);
void handleHelp(void);
BOOL handleFileSave(void);
BOOL handleFileSaveAs(void);
BOOL codeLoad(const String &strPathBinary);
void registerClass(void)const;
void insertHandlers(void);
void removeHandlers(void);
void setParts(int numParts);
void applyHistory(PureMenu &pureMenu);
void updateHistory(const String &pathFileName);
void removeHistory(PureMenu &pureMenu);
BOOL bringDocumentToFront(const String &strTitle);
Callback<MainFrame> mQueryEndSessionHandler;
Callback<MainFrame> mPaintHandler;
Callback<MainFrame> mDestroyHandler;
Callback<MainFrame> mCommandHandler;
Callback<MainFrame> mSizeHandler;
Callback<MainFrame> mCreateHandler;
Callback<MainFrame> mLineHandler;
SmartPointer<StatusBarEx> mStatusBar;
CommControl mCommControl;
ToolBar mToolBar;
// SerialSettings mSerialSettings;
M68Assembler m68Assembler;
static char szClassName[];
static char szMenuName[];
};
inline
String MainFrame::className(void)
{
return String(szClassName);
}
#endif

129
m68hc11/backup/ODLSTLED.CPP Normal file
View File

@@ -0,0 +1,129 @@
#include <m68hc11/odlstled.hpp>
#include <common/drawitem.hpp>
#include <common/measure.hpp>
#include <common/purebmp.hpp>
OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID)
: OwnerDrawList(parentWnd,hControlWnd,controlID), mRGBGray(192,192,192), mGrayBrush(mRGBGray),
mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"),
mDashBitmap("DASH"), mFont("Courier",14)
{
}
OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style)
: OwnerDrawList(parentWnd,initRect,controlID,style), mRGBGray(192,192,192), mGrayBrush(mRGBGray),
mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"),
mDashBitmap("DASH"), mFont("Courier",14)
{
}
OwnerDrawListBinaryLed::~OwnerDrawListBinaryLed()
{
}
OwnerDrawListBinaryLed &OwnerDrawListBinaryLed::operator=(const OwnerDrawListBinaryLed &/*someOwnerDrawListBinaryLed*/)
{ // private implementation
return *this;
}
// **** virtuals
LPARAM OwnerDrawListBinaryLed::handleControlColor(PureDevice &/*pureDevice*/,Control &/*wndListBox*/)
{
return (LPARAM)(GDIObj)mGrayBrush;
}
WORD OwnerDrawListBinaryLed::handleDraw(const DrawItem &drawItem)
{
if(!isOkay()||-1==drawItem.itemID()||DrawItem::ListBox!=drawItem.controlType())return FALSE;
PureDevice pureDevice(drawItem.deviceContext());
pureDevice.setBkColor(mRGBGray);
switch(drawItem.itemAction())
{
case DrawItem::Select :
case DrawItem::DrawEntire :
case DrawItem::Focus :
drawEntire(drawItem);
break;
}
return TRUE;
}
WORD OwnerDrawListBinaryLed::handleMeasureItem(MeasureItem &measureItem)
{
measureItem.itemHeight(20);
return TRUE;
}
void OwnerDrawListBinaryLed::drawEntire(const DrawItem &drawItem)
{
PureDevice pureDevice(drawItem.deviceContext());
PureDevice memDevice;
String stringData;
String strNumber;
TEXTMETRIC textMetric;
Rect drawRect;
SIZE sizeExtent;
HFONT hPrevFont;
if(!isOkay())return;
stringData.reserve(256);
drawRect=drawItem.rectItem();
hPrevFont=(HFONT)::SelectObject(drawItem.deviceContext(),(GDIObj)mFont);
memDevice.compatibleDevice(pureDevice);
sendMessage(drawItem.hwndItem(),LB_GETTEXT,drawItem.itemID(),(LPARAM)(LPSTR)stringData);
strNumber=stringData.betweenString('\t',0);
if(strNumber.isNull())setBitmap();
else
{
setBitmap(::atoi(strNumber));
stringData=stringData.betweenString(0,'\t');
}
if(stringData.isNull())::MessageBeep(0);
::GetTextMetrics(drawItem.deviceContext(),&textMetric);
::GetTextExtentPoint32(drawItem.deviceContext(),(LPSTR)stringData,stringData.length(),&sizeExtent);
if(drawItem.itemState()&ODS_DISABLED)
{
::GrayString(drawItem.deviceContext(),(HBRUSH)(GDIObj)mDisabledBrush,(GRAYSTRINGPROC)0,(LPARAM)(LPSTR)stringData,stringData.length(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,0,0);
memDevice.select(mBlankBitmap,TRUE);
Rect stretchRect(drawRect);
stretchRect.right(mBlankBitmap.width());
stretchRect.bottom(sizeExtent.cy);
pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy);
memDevice.select(mBlankBitmap,FALSE);
}
else
{
::TextOut(drawItem.deviceContext(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,(LPSTR)stringData,stringData.length());
memDevice.select(mBlankBitmap,TRUE);
Rect stretchRect(drawRect);
stretchRect.right(mBlankBitmap.width());
stretchRect.bottom(sizeExtent.cy);
pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy);
memDevice.select(mBlankBitmap,FALSE);
}
if((((UINT)drawItem.itemState())&ODS_FOCUS))
{
Rect bmpRect(drawRect);
bmpRect.right(bmpRect.left()+mBlankBitmap.width());
bmpRect.bottom(bmpRect.top()+sizeExtent.cy);
::DrawFocusRect(drawItem.deviceContext(),(RECT*)&bmpRect);
}
::SelectObject(drawItem.deviceContext(),hPrevFont);
}
void OwnerDrawListBinaryLed::setBitmap(BYTE value)
{
for(int index=0,mask=0x80;index<8;index++,mask/=2)
mBlankBitmap.setFrom(value&mask?mOneBitmap:mZeroBitmap,getPlacementRect(index));
}
void OwnerDrawListBinaryLed::setBitmap(void)
{
for(int index=0,mask=0x80;index<8;index++,mask/=2)mBlankBitmap.setFrom(mDashBitmap,getPlacementRect(index));
}
Rect OwnerDrawListBinaryLed::getPlacementRect(int position)
{
return Rect(position*CellWidth,0,CellWidth,CellHeight);
}

View File

@@ -0,0 +1,44 @@
#ifndef _COMMON_OWNERDRAWLISTBINARYLED_HPP_
#define _COMMON_OWNERDRAWLISTBINARYLED_HPP_
#ifndef _COMMON_BRUSH_HPP_
#include <common/brush.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_OWNERDRAWLIST_HPP_
#include <common/odlist.hpp>
#endif
#ifndef _COMMON_PUREBITMAP_HPP_
#include <common/purebmp.hpp>
#endif
class OwnerDrawListBinaryLed : public OwnerDrawList
{
public:
OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID);
OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style=LBS_NOTIFY|WS_BORDER|LBS_HASSTRINGS|WS_VSCROLL|LBS_OWNERDRAWFIXED|WS_CLIPCHILDREN|WS_CLIPSIBLINGS);
virtual ~OwnerDrawListBinaryLed();
OwnerDrawListBinaryLed &operator=(const OwnerDrawListBinaryLed &someOwnerDrawListBinaryLed);
protected:
virtual WORD handleDraw(const DrawItem &drawItem);
virtual WORD handleMeasureItem(MeasureItem &measureItem);
virtual LPARAM handleControlColor(PureDevice &pureDevice,Control &wndListBox);
virtual void drawEntire(const DrawItem &drawItem);
private:
enum {BmSel=0,BmUnSel=1};
enum {CellWidth=13,CellHeight=23};
Rect getPlacementRect(int position);
void setBitmap(BYTE value);
void setBitmap(void);
PureBitmap mBlankBitmap;
PureBitmap mOneBitmap;
PureBitmap mZeroBitmap;
PureBitmap mDashBitmap;
Font mFont;
RGBColor mRGBGray;
Brush mGrayBrush;
Brush mDisabledBrush;
};
#endif

313
m68hc11/backup/SERDLG.CPP Normal file
View File

@@ -0,0 +1,313 @@
#include <m68hc11/serdlg.hpp>
#include <m68hc11/m68reg.hpp>
SerialDlg::SerialDlg(void)
{
mInitHandler.setCallback(this,&SerialDlg::initHandler);
mDestroyHandler.setCallback(this,&SerialDlg::destroyHandler);
mCommandHandler.setCallback(this,&SerialDlg::commandHandler);
mCloseHandler.setCallback(this,&SerialDlg::closeHandler);
DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
}
SerialDlg::~SerialDlg()
{
DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
}
SerialDlg &SerialDlg::operator=(const SerialDlg &/*someSerialDlg*/)
{ // private implementation
return *this;
}
BOOL SerialDlg::perform(GUIWindow &parentWindow) // ,SerialSettings &serialSettings)
{
return ::DialogBoxParam(processInstance(),(LPSTR)"SERIAL",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
}
CallbackData::ReturnType SerialDlg::initHandler(CallbackData &/*someCallbackData*/)
{
mStatusBar=::new StatusBarEx(*this,StatusBarID);
mStatusBar.disposition(PointerDisposition::Delete);
initSerialSettings();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SerialDlg::destroyHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SerialDlg::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case IDOK :
if(applySerialSettings())endDialog(TRUE);
break;
case IDCANCEL :
endDialog(FALSE);
break;
case SerialStopBits :
case SerialParity :
case SerialDataBits :
case SerialBaud :
case SerialPort :
mStatusBar->setText(" ");
break;
case SerialApply :
applySerialSettings();
break;
case SerialTest :
testDevice();
break;
}
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SerialDlg::closeHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
void SerialDlg::initSerialSettings(void)
{
M68Reg mcuReg;
initPorts();
initBaud();
initDataBits();
initStopBits();
initParity();
sendMessage(SerialPort,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getPort());
sendMessage(SerialBaud,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getBaud());
sendMessage(SerialDataBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getDataBits());
sendMessage(SerialParity,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getParity());
sendMessage(SerialStopBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getStopBits());
}
void SerialDlg::initPorts(void)
{
String strPort;
CommControl commControl;
Block<CommControl::Port> ports;
sendMessage(SerialPort,CB_RESETCONTENT,0,0L);
commControl.enumerateDevices(ports);
for(int index=0;index<ports.size();index++)
{
if(ports[index]==CommControl::PortCOM1)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM1));
else if(ports[index]==CommControl::PortCOM2)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM2));
else if(ports[index]==CommControl::PortCOM3)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM3));
else if(ports[index]==CommControl::PortCOM4)sendMessage(SerialPort,CB_ADDSTRING,0,(LPARAM)(LPSTR)String(STRING_COM4));
}
}
void SerialDlg::initBaud(void)
{
String strBaudRate;
sendMessage(SerialBaud,CB_RESETCONTENT,0,0L);
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"1200");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"2400");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"4800");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"9600");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"14400");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"19200");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"38400");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"57600");
sendMessage(SerialBaud,CB_ADDSTRING,0,(LPARAM)(LPSTR)"115200");
}
void SerialDlg::initDataBits(void)
{
sendMessage(SerialDataBits,CB_RESETCONTENT,0,0L);
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"4");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"5");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"6");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"7");
sendMessage(SerialDataBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"8");
}
void SerialDlg::initParity(void)
{
sendMessage(SerialParity,CB_RESETCONTENT,0,0L);
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"None");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Odd");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Even");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Mark");
sendMessage(SerialParity,CB_ADDSTRING,0,(LPARAM)(LPSTR)"Space");
}
void SerialDlg::initStopBits()
{
sendMessage(SerialStopBits,CB_RESETCONTENT,0,0L);
sendMessage(SerialStopBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"1");
sendMessage(SerialStopBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"1.5");
sendMessage(SerialStopBits,CB_ADDSTRING,0,(LPARAM)(LPSTR)"2");
}
CommControl::Port SerialDlg::getCommPort(void)const
{
String strPort;
sendMessage(SerialPort,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strPort);
return CommControl::stringToPort(strPort);
}
String SerialDlg::getCommSettings(void)const
{
String strBaud;
String strDataBits;
String strSettings;
String strParity;
String strStopBits;
LRESULT currSel;
sendMessage(SerialBaud,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strBaud);
strSettings+="baud=";
strSettings+=strBaud;
strSettings+=" ";
sendMessage(SerialDataBits,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strDataBits);
strSettings+="data=";
strSettings+=strDataBits;
strSettings+=" ";
currSel=sendMessage(SerialParity,CB_GETCURSEL,0,0L);
sendMessage(SerialParity,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strParity);
if(String("None")==strParity)strParity="N";
else if(String("Odd")==strParity)strParity="O";
else if(String("Even")==strParity)strParity="E";
else if(String("Space")==strParity)strParity="S";
strSettings+="parity=";
strSettings+=strParity;
strSettings+=" ";
currSel=sendMessage(SerialStopBits,CB_GETCURSEL,0,0L);
sendMessage(SerialStopBits,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strStopBits);
strSettings+="stop=";
strSettings+=strStopBits;
return strSettings;
}
bool SerialDlg::applySerialSettings(void)
{
CommControl commControl;
M68Reg mcuReg;
String strCommSettings;
String strBaud;
String strDataBits;
String strStopBits;
String strParity;
LRESULT currSel;
strCommSettings=getCommSettings();
if(!commControl.open(getCommPort()))
{
mStatusBar->setText("Error opening port.");
::MessageBeep(0);
return false;
}
if(!commControl.setDeviceControlBlock(strCommSettings)){mStatusBar->setText("Failed to apply settings.");return false;}
sendMessage(SerialBaud,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strBaud);
mcuReg.setBaud(strBaud);
sendMessage(SerialDataBits,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strDataBits);
mcuReg.setDataBits(strDataBits);
currSel=sendMessage(SerialParity,CB_GETCURSEL,0,0L);
sendMessage(SerialParity,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strParity);
if(String("None")==strParity)strParity="N";
else if(String("Odd")==strParity)strParity="O";
else if(String("Even")==strParity)strParity="E";
else if(String("Space")==strParity)strParity="S";
mcuReg.setParity(strParity);
currSel=sendMessage(SerialStopBits,CB_GETCURSEL,0,0L);
sendMessage(SerialStopBits,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strStopBits);
mcuReg.setStopBits(strStopBits);
mStatusBar->setText("Settings have been applied.");
return true;
}
void SerialDlg::testDevice(void)
{
CommControl commControl;
BYTE prefix(0xFF);
GlobalData<BYTE> rcvBuffer;
GlobalData<BYTE> sndBuffer;
BYTE codeBytes[]={0x8E,0x00,0xFF,0xCE,0x10,0x00,0x6F,0x2C,0xCC,0x33,0x0C,0xA7,0x2B,0xE7,0x2D,0x1F,0x2E,0x20,0xFC,0xA6,0x2F,0x4C,0x1F,0x2E,0x80,0xFC,0xA7,0x2F,0x7E,0x00,0x0F};
sndBuffer.size(256);
sndBuffer.setZero();
rcvBuffer.size(sndBuffer.size());
rcvBuffer.setZero();
::memcpy(&sndBuffer[0],codeBytes,sizeof(codeBytes));
if(IDCANCEL==::MessageBox(*this,"This operation will overwrite the contents of MCU RAM with the ECHO program.","WARNING",MB_OKCANCEL))return;
if(!commControl.open(getCommPort())){mStatusBar->setText("Error opening port.");return;}
if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return;}
mStatusBar->setText("waiting for break signal....please reset the device.");
if(!commControl.waitForBreak()){mStatusBar->setText("timeout waiting for break.");return;}
mStatusBar->setText("break received, loading code...");
commControl.write(&prefix,sizeof(prefix));
commControl.clearReceiveQueue();
commControl.write(sndBuffer);
mStatusBar->setText("Waiting for response.");
if(!commControl.waitForData()){mStatusBar->setText("Timeout reached for receive.");return;}
commControl.readFully(rcvBuffer);
if(::memcmp(&rcvBuffer[0],&sndBuffer[0],sndBuffer.size()))
{
mStatusBar->setText("Failed to verify program load.");
return;
}
::Sleep(250);
if(!echo(commControl))mStatusBar->setText("Received unexpected results from program.");
else mStatusBar->setText("The program has been verified, all tests successful.");
return;
}
bool SerialDlg::echo(CommControl &commControl)
{
BYTE sndByte('a');
BYTE rcvByte=0;
DWORD rcvCount(0);
String str;
if(!commControl.isOkay())
{
if(!commControl.open(getCommPort())){mStatusBar->setText("Unable to open comm port.");mStatusBar->setText("Error opening port.");return false;}
if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return false;}
}
commControl.clearError();
while('z'!=rcvByte)
{
CommStatus commStatus;
commControl.write(&sndByte,sizeof(sndByte));
if(commControl.waitForData())
{
rcvByte=0;
commControl.read(&rcvByte,sizeof(rcvByte));
str+=rcvByte;
mStatusBar->setText(str);
if(!rcvCount&&rcvByte!='b')
{
mStatusBar->setText("Unexpected character in input stream.");
return false;
}
sndByte++;
rcvCount++;
}
}
::Sleep(250);
return true;
}
String SerialDlg::getByteString(BYTE charByte)
{
String str;
::sprintf(str.str(),"char:%d(0x%08lx)",(int)charByte,(int)charByte);
return str;
}

61
m68hc11/backup/SERDLG.HPP Normal file
View File

@@ -0,0 +1,61 @@
#ifndef _M68HC11_SERIALDLG_HPP_
#define _M68HC11_SERIAL_HPP_
#ifndef _COMMON_DWINDOW_HPP_
#include <common/dwindow.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _M68HC11_M68HC11_HPP_
#include <m68hc11/m68hc11.hpp>
#endif
#ifndef _STATBAR_STATUSBAREX_HPP_
#include <statbar/statbarx.hpp>
#endif
#ifndef _COMMON_COMMCONTROL_HPP_
#include <m68hc11/commctrl.hpp>
#endif
class CommControl;
class SerialDlg : public DWindow
{
public:
SerialDlg(void);
virtual ~SerialDlg();
BOOL perform(GUIWindow &parentWindow);
private:
enum{SerialStopBits=SERIAL_STOP,SerialParity=SERIAL_PARITY,SerialDataBits=SERIAL_DATA,
SerialBaud=SERIAL_BAUD,SerialPort=SERIAL_PORT,SerialApply=SERIAL_APPLY,SerialTest=SERIAL_TEST};
enum {StatusBarID=500};
SerialDlg &operator=(const SerialDlg &someSerialDlg);
CallbackData::ReturnType initHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType controlColorHandler(CallbackData &someCallbackData);
CallbackData::ReturnType measureItemHandler(CallbackData &someCallbackData);
String getByteString(BYTE charByte);
CommControl::Port getCommPort(void)const;
String getCommSettings(void)const;
bool applySerialSettings(void);
void initSerialSettings(void);
void testDevice(void);
void initDataBits(void);
void initParity(void);
void initStopBits(void);
void initPorts(void);
void initBaud(void);
bool echo(CommControl &commControl);
Callback<SerialDlg> mInitHandler;
Callback<SerialDlg> mDestroyHandler;
Callback<SerialDlg> mCommandHandler;
Callback<SerialDlg> mCloseHandler;
SmartPointer<StatusBarEx> mStatusBar;
};
#endif

130
m68hc11/backup/SETTINGS.HPP Normal file
View File

@@ -0,0 +1,130 @@
#ifndef _M68HC11_SERIALSETUP_HPP_
#define _M68HC11_SERIALSETUP_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
class SerialSettings
{
public:
SerialSettings(void);
SerialSettings(const SerialSettings &someSerialSettings);
virtual ~SerialSettings();
SerialSettings &operator=(const SerialSettings &someSerialSettings);
BOOL operator==(const SerialSettings &someSerialSettings)const;
DWORD port(void)const;
void port(DWORD port);
DWORD baudRate(void)const;
void baudRate(DWORD baudRate);
DWORD parity(void)const;
void parity(DWORD parity);
DWORD stopBits(void)const;
void stopBits(DWORD stopBits);
DWORD dataBits(void)const;
void dataBits(DWORD dataBits);
private:
DWORD mSerialPort;
DWORD mBaudRate;
DWORD mParity;
DWORD mStopBits;
DWORD mDataBits;
};
inline
SerialSettings::SerialSettings(void)
: mSerialPort(0), mBaudRate(1200), mParity(0), mStopBits(0), mDataBits(8)
{
}
inline
SerialSettings::SerialSettings(const SerialSettings &someSerialSettings)
{
*this=someSerialSettings;
}
inline
SerialSettings::~SerialSettings()
{
}
inline
SerialSettings &SerialSettings::operator=(const SerialSettings &someSerialSettings)
{
port(someSerialSettings.port());
baudRate(someSerialSettings.baudRate());
parity(someSerialSettings.parity());
stopBits(someSerialSettings.stopBits());
dataBits(someSerialSettings.dataBits());
return *this;
}
inline
BOOL SerialSettings::operator==(const SerialSettings &someSerialSettings)const
{
return (port()==someSerialSettings.port()&&
baudRate()==someSerialSettings.baudRate()&&
parity()==someSerialSettings.parity()&&
stopBits()==someSerialSettings.stopBits()&&
dataBits()==someSerialSettings.dataBits());
}
inline
DWORD SerialSettings::port(void)const
{
return mSerialPort;
}
inline
void SerialSettings::port(DWORD port)
{
mSerialPort=port;
}
inline
DWORD SerialSettings::baudRate(void)const
{
return mBaudRate;
}
inline
void SerialSettings::baudRate(DWORD baudRate)
{
mBaudRate=baudRate;
}
inline
DWORD SerialSettings::parity(void)const
{
return mParity;
}
inline
void SerialSettings::parity(DWORD parity)
{
mParity=parity;
}
inline
DWORD SerialSettings::stopBits(void)const
{
return mStopBits;
}
inline
void SerialSettings::stopBits(DWORD stopBits)
{
mStopBits=stopBits;
}
inline
DWORD SerialSettings::dataBits(void)const
{
return mDataBits;
}
inline
void SerialSettings::dataBits(DWORD dataBits)
{
mDataBits=dataBits;
}
#endif

156
m68hc11/backup/SPLASH.CPP Normal file
View File

@@ -0,0 +1,156 @@
#include <m68hc11/splash.hpp>
#include <common/resbmp.hpp>
#include <common/dib.hpp>
#include <common/bitmap.hpp>
char SplashScreen::szClassName[]="SplashScreen";
SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout)
: mBitmapName(strBitmap), mStrCaption(strCaption), mTimeout(timeout),
mTextFont("Times New Roman",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold)
{
mResBitmap=new ResBitmap(mBitmapName);
mResBitmap.disposition(PointerDisposition::Delete);
mCreateHandler.setCallback(this,&SplashScreen::createHandler);
mPaintHandler.setCallback(this,&SplashScreen::paintHandler);
mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler);
mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler);
mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler);
mTimerHandler.setCallback(this,&SplashScreen::timerHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler);
insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler);
insertHandler(VectorHandler::TimerHandler,&mTimerHandler);
registerClass();
}
SplashScreen::SplashScreen(const SplashScreen &someSplashScreen)
{ // private implementation
}
SplashScreen::~SplashScreen()
{
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler);
removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler);
removeHandler(VectorHandler::TimerHandler,&mTimerHandler);
}
void SplashScreen::registerClass(void)
{
HINSTANCE hInstance(processInstance());
WNDCLASS wndClass;
if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return;
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC;
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
wndClass.cbClsExtra =0;
wndClass.cbWndExtra =sizeof(SplashScreen*);
wndClass.hInstance =hInstance;
wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);
wndClass.lpszMenuName =0;
wndClass.lpszClassName =szClassName;
::RegisterClass(&wndClass);
assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass));
}
SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen)
{ // private implementation
return *this;
}
BOOL SplashScreen::perform(Rect initRect)
{
UINT style(0);
if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width());
if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height());
if(timeout())
// if(useTimer())
{
PureDevice pureDevice;
pureDevice.screenDevice();
initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2);
initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2);
style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME;
}
else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS;
createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)mStrCaption,style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS
show(SW_SHOW);
update();
return messageLoop();
}
CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData)
{
PureDevice pureDevice(*this);
((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE);
postQuitMessage(onDestroy());
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData)
{
mPureDevice=new PureDevice(*this);
mPureDevice.disposition(PointerDisposition::Delete);
mDIBitmap=new DIBitmap(*mPureDevice,mResBitmap->width(),mResBitmap->height(),*mResBitmap);
mDIBitmap.disposition(PointerDisposition::Delete);
if(timeout())setTimer(TimerID,timeout());
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData)
{
killTimer(TimerID);
postMessage(*this,WM_CLOSE,0,0L);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData)
{
if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE;
PureDevice pureDevice(*this);
((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE);
update();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/)
{
if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE;
PureDevice pureDevice(*this);
((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData)
{
if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE;
PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam();
PureDevice &pureDevice=(PureDevice&)*pPaintInfo;
mDIBitmap->copyBits(mResBitmap->ptrData(),mResBitmap->imageExtent());
mDIBitmap->stretchBlt(pureDevice,Rect(0,0,width(),height()));
pureDevice.select((GDIObj)mTextFont,TRUE);
pureDevice.setTextColor(RGBColor(247,231,33));
pureDevice.setBkMode(PureDevice::Transparent);
// pureDevice.textOut(60,180,"1998 Diversified Software Solutions");
if(!mInstallLine.isNull())
{
pureDevice.setTextColor(RGBColor(255,255,255));
pureDevice.textOut(50,196,mInstallLine);
}
return (CallbackData::ReturnType)FALSE;
}
// virtuals
int SplashScreen::onDestroy(void)
{
return 0;
}

68
m68hc11/backup/SPLASH.HPP Normal file
View File

@@ -0,0 +1,68 @@
#ifndef _M68HC11_SPLASHSCREEN_HPP_
#define _M68HC11_SPLASHSCREEN_HPP_
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_WINDOW_HPP_
#include <common/window.hpp>
#endif
#ifndef _COMMON_RECTANGLE_HPP_
#include <common/rect.hpp>
#endif
#ifndef _COMMON_FONT_HPP_
#include <common/font.hpp>
#endif
class ResBitmap;
class DIBitmap;
class SplashScreen : public Window
{
public:
enum{TimeOut=2500};
SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout=TimeOut);
virtual ~SplashScreen();
BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT));
protected:
virtual int onDestroy(void);
private:
enum {TimerID=0};
SplashScreen(const SplashScreen &someSplashScreen);
SplashScreen &operator=(const SplashScreen &someSplashScreen);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType paintHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData);
CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData);
CallbackData::ReturnType timerHandler(CallbackData &someCallbackData);
void registerClass(void);
UINT timeout(void)const;
Callback<SplashScreen> mPaintHandler;
Callback<SplashScreen> mCreateHandler;
Callback<SplashScreen> mDestroyHandler;
Callback<SplashScreen> mPaletteChangedHandler;
Callback<SplashScreen> mSetFocusHandler;
Callback<SplashScreen> mTimerHandler;
SmartPointer<ResBitmap> mResBitmap;
SmartPointer<DIBitmap> mDIBitmap;
SmartPointer<PureDevice> mPureDevice;
String mBitmapName;
String mStrCaption;
String mInstallLine;
UINT mTimeout;
Font mTextFont;
static char szClassName[];
};
inline
UINT SplashScreen::timeout(void)const
{
return mTimeout;
}
#endif

View File

@@ -0,0 +1,86 @@
#ifndef _M68HC11_EXTRAINFO_HPP_
#define _M68HC11_EXTRAINFO_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
class ExtraInfo
{
public:
ExtraInfo(void);
ExtraInfo(const ExtraInfo &someExtraInfo);
ExtraInfo(DWORD userDataOne,DWORD userDataTwo);
virtual ~ExtraInfo();
ExtraInfo &operator=(const ExtraInfo &someExtraInfo);
BOOL operator==(const ExtraInfo &someExtraInfo)const;
DWORD userDataOne(void)const;
void userDataOne(DWORD userDataOne);
DWORD userDataTwo(void)const;
void userDataTwo(DWORD userDataTwo);
private:
DWORD mUserDataOne;
DWORD mUserDataTwo;
};
inline
ExtraInfo::ExtraInfo(void)
: mUserDataOne(0), mUserDataTwo(0)
{
}
inline
ExtraInfo::ExtraInfo(const ExtraInfo &someExtraInfo)
{
*this=someExtraInfo;
}
inline
ExtraInfo::ExtraInfo(DWORD userDataOne,DWORD userDataTwo)
: mUserDataOne(userDataOne), mUserDataTwo(userDataTwo)
{
}
inline
ExtraInfo::~ExtraInfo()
{
}
inline
ExtraInfo &ExtraInfo::operator=(const ExtraInfo &someExtraInfo)
{
userDataOne(someExtraInfo.userDataOne());
userDataTwo(someExtraInfo.userDataTwo());
return *this;
}
inline
BOOL ExtraInfo::operator==(const ExtraInfo &someExtraInfo)const
{
return (userDataOne()==someExtraInfo.userDataOne()&&
userDataTwo()==someExtraInfo.userDataTwo());
}
inline
DWORD ExtraInfo::userDataOne(void)const
{
return mUserDataOne;
}
inline
void ExtraInfo::userDataOne(DWORD userDataOne)
{
mUserDataOne=userDataOne;
}
inline
DWORD ExtraInfo::userDataTwo(void)const
{
return mUserDataTwo;
}
inline
void ExtraInfo::userDataTwo(DWORD userDataTwo)
{
mUserDataTwo=userDataTwo;
}
#endif

270
m68hc11/backup/codeview.cpp Normal file
View File

@@ -0,0 +1,270 @@
#include <m68hc11/codeview.hpp>
#include <m68hc11/m68hc11.hpp>
#include <printman/printman.hpp>
#include <fileio/fileio.hpp>
#include <common/profile.hpp>
#include <common/rgbcolor.hpp>
#include <common/crsctrl.hpp>
#include <common/keydata.hpp>
CodeView::CodeView(void)
: WinHookProc(WinHookProc::HookBefore)
{
mCreateHandler.setCallback(this,&CodeView::createHandler);
mSizeHandler.setCallback(this,&CodeView::sizeHandler);
mCloseHandler.setCallback(this,&CodeView::closeHandler);
mDestroyHandler.setCallback(this,&CodeView::destroyHandler);
mCommandHandler.setCallback(this,&CodeView::commandHandler);
mKeyUpHandler.setCallback(this,&CodeView::keyUpHandler);
mKeyDownHandler.setCallback(this,&CodeView::keyDownHandler);
mLeftButtonDownHandler.setCallback(this,&CodeView::leftButtonDownHandler);
mSetFocusHandler.setCallback(this,&CodeView::setFocusHandler);
MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler);
MDIWindow::insertHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler);
WinHookProc::insertHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler);
WinHookProc::insertHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler);
WinHookProc::insertHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler);
}
CodeView::~CodeView()
{
MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler);
MDIWindow::removeHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler);
WinHookProc::removeHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler);
WinHookProc::removeHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler);
WinHookProc::removeHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler);
}
CallbackData::ReturnType CodeView::keyDownHandler(CallbackData &someCallbackData)
{
KeyData keyData(someCallbackData);
if(keyData.isEscapeKey())return (CallbackData::ReturnType)TRUE;
notifyCurrentLine();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType CodeView::keyUpHandler(CallbackData &someCallbackData)
{
notifyCurrentLine();
return FALSE;
}
CallbackData::ReturnType CodeView::leftButtonDownHandler(CallbackData &someCallbackData)
{
notifyCurrentLine();
return FALSE;
}
CallbackData::ReturnType CodeView::createHandler(CallbackData &someCallbackData)
{
Rect controlRect;
getControlRect(controlRect);
mRichEditControl.createControl(*this,controlRect,EditControlID,WS_VSCROLL|WS_HSCROLL);
hookWin(mRichEditControl);
mRichEditControl.wantReturn(TRUE);
// mRichEditControl.setCharFormat("MS Sans Serif",FontMagic); // "Courier New"
// mRichEditControl.setCharFormat("Courier",FontMagic); // "Courier New"
// mRichEditControl.setCharFormat("Courier New",FontMagic); // "Courier New"
// mRichEditControl.setCharFormat("Courier New",8); // "Courier New"
Font font("Courier New",12);
mRichEditControl.setFont(font);
mRichEditControl.setTextColor(RGBColor(0,0,0));
mRichEditControl.setBkGndColor(RGBColor(255,255,255));
mRichEditControl.setReadOnly(FALSE);
mRichEditControl.limitText(0);
mRichEditControl.setFocus();
mClipboard=::new Clipboard(*this);
mClipboard.disposition(PointerDisposition::Delete);
setTitle(String());
return FALSE;
}
CallbackData::ReturnType CodeView::sizeHandler(CallbackData &someCallbackData)
{
Rect controlRect;
if(SIZE_RESTORED==someCallbackData.wParam())mRichEditControl.show(SW_SHOWNORMAL);
getControlRect(controlRect);
mRichEditControl.moveWindow(controlRect,TRUE);
return FALSE;
}
CallbackData::ReturnType CodeView::closeHandler(CallbackData &someCallbackData)
{
return FALSE;
}
CallbackData::ReturnType CodeView::destroyHandler(CallbackData &someCallbackData)
{
if(!mRichEditControl.isDirty())return FALSE;
if(IDOK!=::MessageBox(*this,(LPSTR)"Do you want to save the changes?",(LPSTR)"The file has been changed",MB_YESNO))return FALSE;
save();
unhookWin();
return FALSE;
}
CallbackData::ReturnType CodeView::commandHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType CodeView::setFocusHandler(CallbackData &someCallbackData)
{
mRichEditControl.setFocus();
notifyCurrentLine();
return (CallbackData::ReturnType)FALSE;
}
void CodeView::setTitle(const String &strTitle)
{
String strCaption;
String strBase;
if(strTitle.isNull())mTitle=String(STRING_UNTITLED);
else mTitle=strTitle;
windowText(strCaption);
strBase=strCaption.betweenString(0,'-');
strBase.trimRight();
strBase+=String(" - [")+mTitle+String("]");
setCaption(strBase);
}
BOOL CodeView::save(void)
{
Block<String> lineStrings;
mRichEditControl.getLines(lineStrings);
mRichEditControl.isDirty(FALSE);
return saveCode(lineStrings,getTitle());
}
BOOL CodeView::save(const String &strPathFileName)
{
Block<String> lineStrings;
setTitle(strPathFileName);
mRichEditControl.getLines(lineStrings);
mRichEditControl.isDirty(FALSE);
return saveCode(lineStrings,strPathFileName);
}
void CodeView::find(void)
{
mEditFind.perform(*this,mRichEditControl);
}
void CodeView::cut(void)
{
if(!mClipboard.isOkay()||!mRichEditControl.isValid())return;
String strText;
if(mRichEditControl.getSelectedText(strText))mClipboard->setClipboard(strText);
mRichEditControl.cutSelection();
}
void CodeView::copy(void)
{
if(!mClipboard.isOkay()||!mRichEditControl.isValid())return;
String strText;
if(!mRichEditControl.getSelectedText(strText))return;
mClipboard->setClipboard(strText);
}
void CodeView::paste(void)
{
if(!mClipboard.isOkay())return;
mRichEditControl.pasteSpecial(CF_TEXT);
}
BOOL CodeView::saveCode(Block<String> &codeLines,const String &strPathFileName)
{
FileIO outFile;
CursorControl cursorControl;
if(!codeLines.size())return FALSE;
outFile.open(strPathFileName,FileIO::GenericWrite,FileIO::FileShareRead,FileIO::Open(FileIO::CreateAlways));
if(!outFile.isOkay())return FALSE;
for(int lineIndex=0;lineIndex<codeLines.size();lineIndex++)
{
String &strLine=codeLines[lineIndex];
if(!strLine.isNull()&&(*((char*)strLine)==0x0A||*((char*)strLine)==0x0D))
{
if(strLine.length()<=2)strLine="\n";
else *((char*)strLine)=' ';
}
if(-1==strLine.strchr('\r'))strLine.insert("\r",strLine.length()-1);
outFile.write((char*)strLine,strLine.length());
}
outFile.close();
return TRUE;
}
void CodeView::open(const String &pathFileName)
{
FileIO inFile;
String strLine;
String strLines;
String crlf("\n");
strLine.reserve(1024);
strLines.reserve(250000);
inFile.open(pathFileName);
if(!inFile.isOkay())return;
while(inFile.readLine(strLine))
{
strLines+=strLine;
strLines+=crlf;
}
mRichEditControl.setCaption(strLines);
mRichEditControl.isDirty(FALSE);
setTitle(pathFileName);
inFile.close();
}
void CodeView::print(void)
{
String strPrinter;
PrintManager printManager;
Block<String> codeLines;
Font textFont("Helv",36);
if(!printManager.choosePrinter((GUIWindow&)*(getFrame()),strPrinter))return;
printManager.openPrinter(strPrinter,(GUIWindow&)*(getFrame()),getTitle());
printManager.printLines(codeLines,textFont,Point(10,10));
printManager.endDoc();
}
void CodeView::notifyCurrentLine(void)
{
CallbackData lineData(0,mRichEditControl.getCaretPosition());
mLineHandler.callback(lineData);
}
void CodeView::getControlRect(Rect &controlRect)
{
clientRect(controlRect);
controlRect.left(BorderWidth);
controlRect.top(BorderWidth);
controlRect.right((controlRect.right()-BorderWidth)+1);
controlRect.bottom((controlRect.bottom()-BorderWidth)+1);
}
// *** virtuals
void CodeView::preRegister(WNDCLASS &wndClass)
{
wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE;
}
void CodeView::preCreate(MDICREATESTRUCT &createStruct)
{
}

View File

@@ -0,0 +1,87 @@
#ifndef _M68HC11_CODEVIEW_HPP_
#define _M68HC11_CODEVIEW_HPP_
#ifndef _COMMON_MDIWIN_HPP_
#include <common/mdiwin.hpp>
#endif
#ifndef _COMMON_RICHEDIT_HPP_
#include <common/richedit.hpp>
#endif
#ifndef _COMMON_HOOKPROC_HPP_
#include <common/hookproc.hpp>
#endif
#ifndef _COMMON_CLIPBOARD_HPP_
#include <common/clipbrd.hpp>
#endif
#ifndef _M68HC11_EDITFIND_HPP_
#include <m68hc11/editfnd.hpp>
#endif
class CodeView : public MDIWindow, private WinHookProc
{
public:
CodeView(void);
virtual ~CodeView();
BOOL save(void);
BOOL save(const String &strPathFileName);
void open(const String &pathFileName);
void find(void);
void cut(void);
void copy(void);
void paste(void);
void print(void);
BOOL isDirty(void)const;
void setLineHandler(PureCallback *pPureCallback);
const String &getTitle(void)const;
void setTitle(const String &strTitle);
protected:
virtual void preRegister(WNDCLASS &wndClass);
virtual void preCreate(MDICREATESTRUCT &createStruct);
private:
enum {FontMagic=175,EditControlID=100,StatusBarID=101,BorderWidth=1}; // 165
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData);
CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData);
BOOL saveCode(Block<String> &headerLines,const String &strPathFileName);
void getControlRect(Rect &controlRect);
void notifyCurrentLine(void);
Callback<CodeView> mCreateHandler;
Callback<CodeView> mSizeHandler;
Callback<CodeView> mCloseHandler;
Callback<CodeView> mDestroyHandler;
Callback<CodeView> mCommandHandler;
Callback<CodeView> mKeyUpHandler;
Callback<CodeView> mLeftButtonDownHandler;
Callback<CodeView> mKeyDownHandler;
Callback<CodeView> mSetFocusHandler;
CallbackPointer mLineHandler;
RichEditControl mRichEditControl;
SmartPointer<Clipboard> mClipboard;
EditFind mEditFind;
String mTitle;
};
inline
BOOL CodeView::isDirty(void)const
{
return mRichEditControl.isDirty();
}
inline
void CodeView::setLineHandler(PureCallback *pPureCallback)
{
mLineHandler=CallbackPointer(pPureCallback);
}
inline
const String &CodeView::getTitle(void)const
{
return mTitle;
}
#endif

209
m68hc11/backup/commctrl.cpp Normal file
View File

@@ -0,0 +1,209 @@
#include <m68hc11/commctrl.hpp>
#include <m68hc11/m68hc11.hpp>
#include <m68hc11/fmtlines.hpp>
void CommControl::portToString(CommControl::Port port,String &strPort)
{
if(port==CommControl::PortCOM1)strPort=String(STRING_COM1);
else if(port==CommControl::PortCOM2)strPort=String(STRING_COM2);
else if(port==CommControl::PortCOM3)strPort=String(STRING_COM3);
else strPort=String(STRING_COM4);
}
CommControl::Port CommControl::stringToPort(const String &strPort)
{
if(strPort==String(STRING_COM1))return CommControl::PortCOM1;
else if(strPort==String(STRING_COM2))return CommControl::PortCOM2;
else if(strPort==String(STRING_COM3))return CommControl::PortCOM3;
else return CommControl::PortCOM4;
}
bool CommControl::readFully(GlobalData<BYTE> &dataBytes)
{
CommStatus commStatus;
DWORD bytesRead=0;
DWORD byteCount;
DWORD bytesToRead;
if(!isOkay())return false;
clearError(commStatus);
byteCount=dataBytes.size();
if(!byteCount&&!commStatus.bytesInReceiveQueue())return false;
if(!byteCount){byteCount=commStatus.bytesInReceiveQueue();dataBytes.size(byteCount);}
return readFully(&dataBytes[0],dataBytes.size());
}
bool CommControl::readFully(BYTE *pBuffer,DWORD byteCount)
{
CommStatus commStatus;
DWORD bytesRead=0;
DWORD bytesToRead;
if(!isOkay())return false;
clearError(commStatus);
if(!byteCount||!pBuffer)return false;
while(bytesRead<byteCount)
{
if(commStatus.bytesInReceiveQueue())
{
bytesToRead=bytesRead+commStatus.bytesInReceiveQueue()>byteCount?byteCount-bytesRead:commStatus.bytesInReceiveQueue();
read(&pBuffer[bytesRead],bytesToRead);
bytesRead+=bytesToRead;
}
if(bytesRead==byteCount)break;
::Sleep(25);
clearError(commStatus);
}
showBytes(pBuffer,byteCount);
return true;
}
bool CommControl::hasData(void)
{
CommStatus commStatus;
clearError(commStatus);
return commStatus.bytesInReceiveQueue()?true:false;
}
bool CommControl::clearReceiveQueue(void)
{
GlobalData<BYTE> rcvBytes;
CommStatus commStatus;
if(!isOkay())return false;
::Sleep(1000);
clearError(commStatus);
if(!commStatus.bytesInReceiveQueue())return true;
::OutputDebugString(String(String("Clearing ")+String().fromInt(commStatus.bytesInReceiveQueue())+String(" bytes from receive queue.\n")).str());
rcvBytes.size(commStatus.bytesInReceiveQueue());
read(&rcvBytes[0],rcvBytes.size());
showBytes(rcvBytes);
return true;
}
bool CommControl::waitEvent(DWORD &eventMask,DWORD timeout)
{
BOOL result;
DWORD lastError;
eventMask=0;
if(!isOkay())return false;
mIOEvent.resetEvent();
result=::WaitCommEvent((HANDLE)mCommDevice,&eventMask,&mOverlapped.getOverlapped());
if(result)return true;
lastError=::GetLastError();
if(lastError!=ERROR_IO_PENDING)return false;
mIOEvent.waitEvent(timeout);
if(!mCommDevice.getOverlappedResult(mOverlapped,false))return false;
return true;
}
DWORD CommControl::enumerateDevices(Block<Port> &deviceList)
{
deviceList.remove();
if(isOkay())return 0;
for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++)
{
if(mCommDevice.open(mStrPorts[port]))
{
mCommDevice.close();
deviceList.insert(&port);
}
}
return deviceList.size();
}
DWORD CommControl::enumerateDevices(Block<String> &deviceList)
{
deviceList.remove();
if(isOkay())return 0;
for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++)
{
if(mCommDevice.open(mStrPorts[port]))
{
mCommDevice.close();
if(PortCOM1==port)deviceList.insert(&String("COM1"));
else if(PortCOM2==port)deviceList.insert(&String("COM2"));
else if(PortCOM3==port)deviceList.insert(&String("COM3"));
else if(PortCOM4==port)deviceList.insert(&String("COM4"));
}
}
return deviceList.size();
}
DWORD CommControl::read(void *pBuffer,int length,DWORD timeout)
{
BOOL result;
DWORD lastError;
if(!isOkay())return FALSE;
mIOEvent.resetEvent();
result=mCommDevice.read((BYTE*)pBuffer,length,mOverlapped);
if(result)return TRUE;
lastError=::GetLastError();
if(lastError!=ERROR_IO_PENDING)return FALSE;
mIOEvent.waitEvent(TimeOut);
if(!mCommDevice.getOverlappedResult(mOverlapped,FALSE))return FALSE;
return TRUE;
}
bool CommControl::isOkay(void)const
{
return mCommDevice.isOkay();
}
bool CommControl::clearError(CommStatus &commStatus)const
{
DWORD errorMask(0);
bool returnCode(false);
if(!isOkay())return returnCode;
returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,&commStatus.getCOMSTAT());
showError(errorMask);
return returnCode;
}
bool CommControl::clearError(void)const
{
DWORD errorMask(0);
bool returnCode(false);
if(!isOkay())return false;
returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,0);
showError(errorMask);
return returnCode;
}
void CommControl::showError(DWORD errorMask)const
{
if(errorMask&CE_BREAK)::OutputDebugString("The hardware detected a break condition.\n");
if(errorMask&CE_DNS)::OutputDebugString("Windows 95 and Windows 98: A parallel device is not selected.\n");
if(errorMask&CE_FRAME)::OutputDebugString("The hardware detected a framing error.\n");
if(errorMask&CE_IOE)::OutputDebugString("An I/O error occurred during communications with the device.\n");
if(errorMask&CE_MODE)::OutputDebugString("The requested mode is not supported, or the hFile parameter is invalid. If this value is specified, it is the only valid error.\n");
if(errorMask&CE_OOP)::OutputDebugString("Windows 95 and Windows 98: A parallel device signaled that it is out of paper.\n");
if(errorMask&CE_OVERRUN)::OutputDebugString("A character-buffer overrun has occurred. The next character is lost.\n");
if(errorMask&CE_PTO)::OutputDebugString("Windows 95 and Windows 98: A time-out occurred on a parallel device.\n");
if(errorMask&CE_RXOVER)::OutputDebugString("An input buffer overflow has occurred. There is either no room in the input buffer, or a character was received after the end-of-file (EOF) character.\n");
if(errorMask&CE_RXPARITY)::OutputDebugString("The hardware detected a parity error.\n");
if(errorMask&CE_TXFULL)::OutputDebugString("The application tried to transmit a character, but the output buffer was full.\n");
}
void CommControl::showBytes(BYTE *pBuffer,DWORD byteCount)
{
Block<String> strLines;
::OutputDebugString("\n");
FormatLines::hexasciiLines(strLines,pBuffer,byteCount);
for(int index=0;index<strLines.size();index++)
{
::OutputDebugString(strLines[index].str());
::OutputDebugString("\n");
}
}
void CommControl::showBytes(GlobalData<BYTE> rcvBytes)
{
showBytes(&rcvBytes[0],rcvBytes.size());
}

120
m68hc11/backup/fmtlines.cpp Normal file
View File

@@ -0,0 +1,120 @@
#include <stdio.h>
#include <m68hc11/fmtlines.hpp>
DWORD FormatLines::hexasciiLines(Block<String> &lineStrings,GlobalData<BYTE> &globalData)
{
return hexasciiLines(lineStrings,&globalData[0],globalData.size());
}
DWORD FormatLines::hexasciiLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount)
{
Block<String> asciiLines;
Block<String> hexLines;
String tmpString;
DWORD lineCount;
formatLines(asciiLines,pBuffer,byteCount,HexCharsPerLine,ASCIILine);
formatLines(hexLines,pBuffer,byteCount,HexCharsPerLine,HexLine);
lineCount=asciiLines.size();
for(DWORD itemIndex=0;itemIndex<lineCount;itemIndex++)
{
tmpString=hexLines[itemIndex]+asciiLines[itemIndex];
lineStrings.insert(&tmpString);
}
return lineCount;
}
DWORD FormatLines::formatLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD charsPerLine,LineType lineType)
{
WORD charCount;
String charString;
String charLine;
BYTE charByte;
BYTE prevByte;
if(!byteCount||!pBuffer)return byteCount;
charCount=0;
for(DWORD itemIndex=0;itemIndex<byteCount;itemIndex++)
{
charByte=pBuffer[itemIndex];
if(itemIndex&&(!(itemIndex%charsPerLine)))
{
if(HexLine==lineType)charLine.upper();
lineStrings.insert(&charLine);
*((char*)charLine)=0;
charCount=0;
}
if(HexLine==lineType)::sprintf(charString,"%02x",charByte);
else
{
if(isprint(charByte))::sprintf(charString,"%c",charByte);
else charString=".";
}
charCount++;
charLine+=charString;
if(HexLine==lineType)charLine+=" ";
}
while(charCount<charsPerLine)
{
if(HexLine==lineType)charLine+="?? ";
else charLine+="?";
charCount++;
}
if(charLine.length())
{
if(HexLine==lineType)charLine.upper();
lineStrings.insert(&charLine);
}
return lineStrings.size();
}
/*DWORD FormatLines::formatLines(Block<String> &lineStrings,GlobalData<BYTE> &globalData,WORD charsPerLine,LineType lineType)
{
DWORD byteCount(globalData.size());
WORD charCount;
String charString;
String charLine;
BYTE charByte;
BYTE prevByte;
if(!byteCount)return byteCount;
charCount=0;
for(DWORD itemIndex=0;itemIndex<byteCount;itemIndex++)
{
charByte=globalData[itemIndex];
if(itemIndex&&(!(itemIndex%charsPerLine)))
{
if(HexLine==lineType)charLine.upper();
lineStrings.insert(&charLine);
*((char*)charLine)=0;
charCount=0;
}
if(HexLine==lineType)::sprintf(charString,"%02x",charByte);
else
{
if(isprint(charByte))::sprintf(charString,"%c",charByte);
else charString=".";
}
charCount++;
charLine+=charString;
if(HexLine==lineType)charLine+=" ";
}
while(charCount<charsPerLine)
{
if(HexLine==lineType)charLine+="?? ";
else charLine+="?";
charCount++;
}
if(charLine.length())
{
if(HexLine==lineType)charLine.upper();
lineStrings.insert(&charLine);
}
return lineStrings.size();
}*/

View File

@@ -0,0 +1,60 @@
#ifndef _M68HC11_FORMATLINES_HPP_
#define _M68HC11_FORMATLINES_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
class FormatLines
{
public:
enum{HexCharsPerLine=0x10,ASCIICharsPerLine=0x20};
FormatLines(void);
~FormatLines();
static DWORD hexLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD hexCharsPerLine=HexCharsPerLine);
static DWORD hexLines(Block<String> &lineStrings,GlobalData<BYTE> &globalData,WORD hexCharsPerLine=HexCharsPerLine);
static DWORD asciiLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD asciiCharsPerLine=ASCIICharsPerLine);
static DWORD asciiLines(Block<String> &lineStrings,GlobalData<BYTE> &globalData,WORD asciiCharsPerLine=ASCIICharsPerLine);
static DWORD hexasciiLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount);
static DWORD hexasciiLines(Block<String> &lineStrings,GlobalData<BYTE> &globalData);
private:
enum LineType{HexLine,ASCIILine};
static DWORD formatLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD charsPerLine,LineType lineType);
};
inline
FormatLines::FormatLines(void)
{
}
inline
FormatLines::~FormatLines()
{
}
inline
DWORD FormatLines::hexLines(Block<String> &lineStrings,GlobalData<BYTE> &globalData,WORD hexCharsPerLine)
{
return formatLines(lineStrings,&globalData[0],globalData.size(),hexCharsPerLine,HexLine);
}
inline
DWORD FormatLines::hexLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD hexCharsPerLine)
{
return formatLines(lineStrings,pBuffer,byteCount,hexCharsPerLine,HexLine);
}
inline
DWORD FormatLines::asciiLines(Block<String> &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD asciiCharsPerLine)
{
return formatLines(lineStrings,pBuffer,byteCount,asciiCharsPerLine,ASCIILine);
}
#endif

422
m68hc11/backup/m68hc11.rc Normal file
View File

@@ -0,0 +1,422 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
#include "m68hc11\m68hc11.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.
APP ICON DISCARDABLE "MOT.ICO"
MOT ICON DISCARDABLE "MOT.ICO"
DOC ICON DISCARDABLE "DOC.ICO"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
BLANK BITMAP MOVEABLE PURE "BLANK.BMP"
ONE BITMAP MOVEABLE PURE "ONE.BMP"
ZERO BITMAP MOVEABLE PURE "ZERO.BMP"
DASH BITMAP MOVEABLE PURE "DASH.BMP"
SPLASH BITMAP MOVEABLE PURE "SPLASH.BMP"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
MAINMENU MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW
MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN
MENUITEM SEPARATOR
MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT
MENUITEM SEPARATOR
MENUITEM "E&xit", SBCMENU_FILEQUIT
END
POPUP "&Settings"
BEGIN
MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL
END
POPUP "&Help"
BEGIN
MENUITEM "&Contents", SBCMENU_HELPCONTENTS
MENUITEM "&Search", SBCMENU_HELPSEARCH
MENUITEM SEPARATOR
MENUITEM "&Registration...", SBCMENU_REGISTRATION
MENUITEM SEPARATOR
MENUITEM "&About ...", SBCMENU_HELPABOUT
END
END
CODEMENU MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW
MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN
MENUITEM "&Close", SBCMENU_FILECLOSE
MENUITEM SEPARATOR
MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE
MENUITEM "Save &As...", SBCMENU_FILESAVEAS
MENUITEM SEPARATOR
MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT
MENUITEM SEPARATOR
MENUITEM "E&xit", SBCMENU_FILEQUIT
END
POPUP "&Edit"
BEGIN
MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT
MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY
MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE
MENUITEM SEPARATOR
MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND
END
POPUP "&Settings"
BEGIN
MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL
END
POPUP "&Code"
BEGIN
MENUITEM "&Compile\tCtrl+C", SBCMENU_CODECOMPILE
MENUITEM "Compile and Load\tCtrl+P", SBCMENU_CODECOMPILEANDLOAD
END
POPUP "&Window"
BEGIN
MENUITEM "&Cascade\tShift+F5", IDM_CASCADE
MENUITEM "&Tile\tShift+F4", IDM_TILE
MENUITEM "&Arrange &icons", IDM_ARRANGE
MENUITEM SEPARATOR
MENUITEM "Close &all", IDM_CLOSEALL
MENUITEM "Mi&nimize all", IDM_MINIMIZEALL
MENUITEM "&Restore all", IDM_RESTOREALL
END
POPUP "&Help"
BEGIN
MENUITEM "&Contents", SBCMENU_HELPCONTENTS
MENUITEM "&Search", SBCMENU_HELPSEARCH
MENUITEM SEPARATOR
MENUITEM "&Registration...", SBCMENU_REGISTRATION
MENUITEM SEPARATOR
MENUITEM "&About ...", SBCMENU_HELPABOUT
END
END
MCUMENU MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW, GRAYED
MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN, GRAYED
MENUITEM "&Close", SBCMENU_FILECLOSE
MENUITEM SEPARATOR
MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE, GRAYED
MENUITEM "Save &As...", SBCMENU_FILESAVEAS, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT
MENUITEM SEPARATOR
MENUITEM "E&xit", SBCMENU_FILEQUIT
END
POPUP "&Edit"
BEGIN
MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT
MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY
MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE
MENUITEM SEPARATOR
MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND
END
POPUP "&Window"
BEGIN
MENUITEM "&Cascade\tShift+F5", IDM_CASCADE
MENUITEM "&Tile\tShift+F4", IDM_TILE
MENUITEM "&Arrange &icons", IDM_ARRANGE
MENUITEM SEPARATOR
MENUITEM "Close &all", IDM_CLOSEALL
MENUITEM "Mi&nimize all", IDM_MINIMIZEALL
MENUITEM "&Restore all", IDM_RESTOREALL
END
POPUP "&Help"
BEGIN
MENUITEM "&Contents", SBCMENU_HELPCONTENTS
MENUITEM "&Search", SBCMENU_HELPSEARCH
MENUITEM SEPARATOR
MENUITEM "&Registration...", SBCMENU_REGISTRATION
MENUITEM SEPARATOR
MENUITEM "&About ...", SBCMENU_HELPABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
SERIAL DIALOG DISCARDABLE 6, 15, 207, 111
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Serial Setup"
FONT 6, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,153,3,50,14
PUSHBUTTON "Cancel",IDCANCEL,153,18,50,14
PUSHBUTTON "Test",SERIAL_TEST,153,32,50,14
COMBOBOX SERIAL_BAUD,30,24,49,50,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
COMBOBOX SERIAL_DATA,30,37,49,50,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
COMBOBOX SERIAL_PARITY,30,63,49,50,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
COMBOBOX SERIAL_PORT,30,11,49,50,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Port:",-1,3,14,18,8
LTEXT "Baud:",-1,3,27,21,8
LTEXT "Data:",-1,3,40,20,8
LTEXT "Stop:",-1,4,53,19,8
LTEXT "Parity:",-1,3,65,19,8
COMBOBOX SERIAL_STOP,30,50,49,50,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
PUSHBUTTON "Apply",SERIAL_APPLY,153,46,50,14
END
MCUDLG DIALOG DISCARDABLE 6, 5, 358, 174
STYLE DS_MODALFRAME | DS_3DLOOK | WS_CHILD | WS_VISIBLE
FONT 6, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "Start",IDOK,254,5,50,14
PUSHBUTTON "Quit",IDCANCEL,304,5,50,14
LISTBOX MCUDLG_REGISTERS,15,38,144,129,LBS_SORT |
LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL
EDITTEXT MCUDLG_A,217,37,38,12
EDITTEXT MCUDLG_B,256,37,38,12
EDITTEXT MCUDLG_X,217,50,38,12
EDITTEXT MCUDLG_Y,256,50,38,12
EDITTEXT MCUDLG_SP,217,63,38,12
EDITTEXT MCUDLG_PC,256,63,38,12
EDITTEXT MCUDLG_CCR,217,76,38,12
LISTBOX MCUDLG_MESSAGES,168,107,177,60,LBS_SORT | WS_VSCROLL
CTEXT "MCU Registers",-1,44,26,60,8
CTEXT "Processor",-1,203,26,49,8
LTEXT "Accumulator A",-1,165,40,51,8
LTEXT "Accumulator B",-1,297,39,49,8
LTEXT "Index Register X",-1,163,52,52,8
LTEXT "Index Register Y",-1,296,51,55,8
LTEXT "SP",-1,201,65,13,8
LTEXT "PC",-1,297,64,10,8
LTEXT "CCR",-1,198,78,16,8
GROUPBOX "",-1,2,19,349,154
LTEXT "Debug Messages",-1,225,95,60,8
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""m68hc11\\m68hc11.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
STRING_M68KEYNAME "Software\\Diversified\\M68HC11"
STRING_HISTORYKEYNAME "Software\\Diversified\\M68HC11\\History"
STRING_SETTINGSKEYNAME "Software\\Diversified\\M68HC11\\Settings"
STRING_SERIALKEYNAME "Software\\Diversified\\M68HC11\\Serial"
STRING_HISTORYKEYSHORTNAME "History"
STRING_SETTINGSEMAIL "EMAIL"
STRING_SERIALPORT "Port"
STRING_SERIALBAUD "Baud"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_SERIALDATA "Data"
STRING_SERIALPARITY "Parity"
STRING_SERIALSTOP "Stop"
STRING_COM1 "COM1"
STRING_COM2 "COM2"
STRING_COM3 "COM3"
STRING_COM4 "COM4"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_CODEVIEWCLASSNAME "CodeView"
STRING_MCUVIEWCLASSNAME "MCUView"
STRING_UNTITLED "Untitled"
STRING_HELPFILENAME "m68hc11.hlp"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_REGISTERADR4 "ADR4"
STRING_REGISTERBPROT "BPROT"
STRING_REGISTEREPROG "EPROG"
STRING_REGISTERRESERVED3 "RESERVED"
STRING_REGISTERRESERVED4 "RESERVED"
STRING_REGISTEROPTION "OPTION"
STRING_REGISTERCOPRST "COPRST"
STRING_REGISTERPPROG "PPROG"
STRING_REGISTERHPRIO "HPRIO"
STRING_REGISTERINIT "INIT"
STRING_REGISTERTEST1 "TEST1"
STRING_REGISTERCONFIG "CONFIG"
STRING_ERRORFILEOPEN "Error opening '"
STRING_ERRORPORTOPEN "Error opening communications port."
STRING_ERRORPORTSETTINGS "Error initializing port settings."
STRING_ERRORTIMEOUT "Timeout waiting for device."
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_ERRORREADERROR "Error reading from device."
STRING_ERRORTALKBACKFAILURE "Error receiving response from device"
STRING_ERRORTALKBACKDATA "Error validating code load"
STRING_EVENTSINGLEBYTE "Received single-byte event."
STRING_EVENTQUADBYTE "Received quad-byte event."
STRING_EVENTVARBYTE "Received variable-byte event."
STRING_EVENTREGDATASTART "Receiving register data..."
STRING_EVENTREGDATACOMPLETE "Register receive complete."
STRING_EVENTCODECOMPLETE "Received code completion event."
STRING_EVENTDOUBLEBYTE "Received double-byte event."
STRING_EVENTSTRING "Received string event."
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_REGISTERPORTA "PORTA"
STRING_REGISTERRESERVED1 "RESERVED"
STRING_REGISTERPIOC "PIOC"
STRING_REGISTERPORTC "PORTC"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_REGISTERPORTB "PORTB"
STRING_REGISTERPORTCL "PORTCL"
STRING_REGISTERRESERVED2 "RESERVED"
STRING_REGISTERDDRC "DDRC"
STRING_REGISTERPORTD "PORTD"
STRING_REGISTERDDRD "DDRD"
STRING_REGISTERPORTE "PORTE"
STRING_REGISTERCFORC "CFORC"
STRING_REGISTEROC1M "OC1M"
STRING_REGISTEROC1D "OC1D"
STRING_REGISTERTCNTH1 "TCNT(Hi)"
STRING_REGISTERTCNTLO "TCNT(Lo)"
STRING_REGISTERTIC1HI "TIC1(Hi)"
STRING_REGISTERTIC1LO "TIC1(Lo)"
STRING_REGISTERTIC2HI "TIC2(Hi)"
STRING_REGISTERTIC2LO "TIC2(Lo)"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_REGISTERTIC3HI "TIC3(Hi)"
STRING_REGISTERTIC3LO "TIC3(Lo)"
STRING_REGISTERTOC1HI "TOC1(Hi)"
STRING_REGISTERTOC1LO "TOC1(Lo)"
STRING_REGISTERTOC2HI "TOC2(Hi)"
STRING_REGISTERTOC2LO "TOC2(Lo)"
STRING_REGISTERTOC3HI "TOC3(Hi)"
STRING_REGISTERTOC3LO "TOC3(Lo)"
STRING_REGISTERTOC4HI "TOC4(Hi)"
STRING_REGISTERTOC4LO "TOC4(Lo)"
STRING_REGISTERTI405HI "TI405(Hi)"
STRING_REGISTERTI405LO "TI4O5(Lo)"
STRING_REGISTERTCTL1 "TCTL1"
STRING_REGISTERTCTL2 "TCTL2"
STRING_REGISTERTMSK1 "TMSK1"
STRING_REGISTERTFLG1 "TFLG1"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_REGISTERTMSK2 "TMSK2"
STRING_REGISTERTFLG2 "TFLG2"
STRING_REGISTERPACTL "PACTL"
STRING_REGISTERPACNT "PACNT"
STRING_REGISTERSPCR "SPCR"
STRING_REGISTERSPSR "SPSR"
STRING_REGISTERSPDR "SPDR"
STRING_REGISTERBAUD "BAUD"
STRING_REGISTERSCCR1 "SCCR1"
STRING_REGISTERSCCR2 "SCCR2"
STRING_REGISTERSCSR "SCSR"
STRING_REGISTERSCDR "SCDR"
STRING_REGISTERADCTL "ADCTL"
STRING_REGISTERADR1 "ADR1"
STRING_REGISTERADR2 "ADR2"
STRING_REGISTERADR3 "ADR3"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

16
m68hc11/backup/resource.h Normal file
View File

@@ -0,0 +1,16 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by m68hc11.rc
//
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

270
m68hc11/codeview.cpp Normal file
View File

@@ -0,0 +1,270 @@
#include <m68hc11/codeview.hpp>
#include <m68hc11/m68hc11.hpp>
#include <printman/printman.hpp>
#include <fileio/fileio.hpp>
#include <common/profile.hpp>
#include <common/rgbcolor.hpp>
#include <common/crsctrl.hpp>
#include <common/keydata.hpp>
CodeView::CodeView(void)
: WinHookProc(WinHookProc::HookBefore)
{
mCreateHandler.setCallback(this,&CodeView::createHandler);
mSizeHandler.setCallback(this,&CodeView::sizeHandler);
mCloseHandler.setCallback(this,&CodeView::closeHandler);
mDestroyHandler.setCallback(this,&CodeView::destroyHandler);
mCommandHandler.setCallback(this,&CodeView::commandHandler);
mKeyUpHandler.setCallback(this,&CodeView::keyUpHandler);
mKeyDownHandler.setCallback(this,&CodeView::keyDownHandler);
mLeftButtonDownHandler.setCallback(this,&CodeView::leftButtonDownHandler);
mSetFocusHandler.setCallback(this,&CodeView::setFocusHandler);
MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler);
MDIWindow::insertHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler);
WinHookProc::insertHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler);
WinHookProc::insertHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler);
WinHookProc::insertHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler);
}
CodeView::~CodeView()
{
MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler);
MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler);
MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler);
MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler);
MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler);
MDIWindow::removeHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler);
WinHookProc::removeHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler);
WinHookProc::removeHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler);
WinHookProc::removeHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler);
}
CallbackData::ReturnType CodeView::keyDownHandler(CallbackData &someCallbackData)
{
KeyData keyData(someCallbackData);
if(keyData.isEscapeKey())return (CallbackData::ReturnType)TRUE;
notifyCurrentLine();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType CodeView::keyUpHandler(CallbackData &someCallbackData)
{
notifyCurrentLine();
return FALSE;
}
CallbackData::ReturnType CodeView::leftButtonDownHandler(CallbackData &someCallbackData)
{
notifyCurrentLine();
return FALSE;
}
CallbackData::ReturnType CodeView::createHandler(CallbackData &someCallbackData)
{
Rect controlRect;
getControlRect(controlRect);
mRichEditControl.createControl(*this,controlRect,EditControlID,WS_VSCROLL|WS_HSCROLL);
hookWin(mRichEditControl);
mRichEditControl.wantReturn(TRUE);
// mRichEditControl.setCharFormat("MS Sans Serif",FontMagic); // "Courier New"
// mRichEditControl.setCharFormat("Courier",FontMagic); // "Courier New"
// mRichEditControl.setCharFormat("Courier New",FontMagic); // "Courier New"
// mRichEditControl.setCharFormat("Courier New",8); // "Courier New"
Font font("Courier New",12);
mRichEditControl.setFont(font);
mRichEditControl.setTextColor(RGBColor(0,0,0));
mRichEditControl.setBkGndColor(RGBColor(255,255,255));
mRichEditControl.setReadOnly(FALSE);
mRichEditControl.limitText(0);
mRichEditControl.setFocus();
mClipboard=::new Clipboard(*this);
mClipboard.disposition(PointerDisposition::Delete);
setTitle(String());
return FALSE;
}
CallbackData::ReturnType CodeView::sizeHandler(CallbackData &someCallbackData)
{
Rect controlRect;
if(SIZE_RESTORED==someCallbackData.wParam())mRichEditControl.show(SW_SHOWNORMAL);
getControlRect(controlRect);
mRichEditControl.moveWindow(controlRect,TRUE);
return FALSE;
}
CallbackData::ReturnType CodeView::closeHandler(CallbackData &someCallbackData)
{
return FALSE;
}
CallbackData::ReturnType CodeView::destroyHandler(CallbackData &someCallbackData)
{
if(!mRichEditControl.isDirty())return FALSE;
if(IDOK!=::MessageBox(*this,(LPSTR)"Do you want to save the changes?",(LPSTR)"The file has been changed",MB_YESNO))return FALSE;
save();
unhookWin();
return FALSE;
}
CallbackData::ReturnType CodeView::commandHandler(CallbackData &/*someCallbackData*/)
{
return FALSE;
}
CallbackData::ReturnType CodeView::setFocusHandler(CallbackData &someCallbackData)
{
mRichEditControl.setFocus();
notifyCurrentLine();
return (CallbackData::ReturnType)FALSE;
}
void CodeView::setTitle(const String &strTitle)
{
String strCaption;
String strBase;
if(strTitle.isNull())mTitle=String(STRING_UNTITLED);
else mTitle=strTitle;
windowText(strCaption);
strBase=strCaption.betweenString(0,'-');
strBase.trimRight();
strBase+=String(" - [")+mTitle+String("]");
setCaption(strBase);
}
BOOL CodeView::save(void)
{
Block<String> lineStrings;
mRichEditControl.getLines(lineStrings);
mRichEditControl.isDirty(FALSE);
return saveCode(lineStrings,getTitle());
}
BOOL CodeView::save(const String &strPathFileName)
{
Block<String> lineStrings;
setTitle(strPathFileName);
mRichEditControl.getLines(lineStrings);
mRichEditControl.isDirty(FALSE);
return saveCode(lineStrings,strPathFileName);
}
void CodeView::find(void)
{
mEditFind.perform(*this,mRichEditControl);
}
void CodeView::cut(void)
{
if(!mClipboard.isOkay()||!mRichEditControl.isValid())return;
String strText;
if(mRichEditControl.getSelectedText(strText))mClipboard->setClipboard(strText);
mRichEditControl.cutSelection();
}
void CodeView::copy(void)
{
if(!mClipboard.isOkay()||!mRichEditControl.isValid())return;
String strText;
if(!mRichEditControl.getSelectedText(strText))return;
mClipboard->setClipboard(strText);
}
void CodeView::paste(void)
{
if(!mClipboard.isOkay())return;
mRichEditControl.pasteSpecial(CF_TEXT);
}
BOOL CodeView::saveCode(Block<String> &codeLines,const String &strPathFileName)
{
FileIO outFile;
CursorControl cursorControl;
if(!codeLines.size())return FALSE;
outFile.open(strPathFileName,FileIO::GenericWrite,FileIO::FileShareRead,FileIO::Open(FileIO::CreateAlways));
if(!outFile.isOkay())return FALSE;
for(int lineIndex=0;lineIndex<codeLines.size();lineIndex++)
{
String &strLine=codeLines[lineIndex];
if(!strLine.isNull()&&(*((char*)strLine)==0x0A||*((char*)strLine)==0x0D))
{
if(strLine.length()<=2)strLine="\n";
else *((char*)strLine)=' ';
}
if(-1==strLine.strchr('\r'))strLine.insert("\r",strLine.length()-1);
outFile.write((char*)strLine,strLine.length());
}
outFile.close();
return TRUE;
}
void CodeView::open(const String &pathFileName)
{
FileIO inFile;
String strLine;
String strLines;
String crlf("\n");
strLine.reserve(1024);
strLines.reserve(250000);
inFile.open(pathFileName);
if(!inFile.isOkay())return;
while(inFile.readLine(strLine))
{
strLines+=strLine;
strLines+=crlf;
}
mRichEditControl.setCaption(strLines);
mRichEditControl.isDirty(FALSE);
setTitle(pathFileName);
inFile.close();
}
void CodeView::print(void)
{
String strPrinter;
PrintManager printManager;
Block<String> codeLines;
Font textFont("Helv",36);
if(!printManager.choosePrinter((GUIWindow&)*(getFrame()),strPrinter))return;
printManager.openPrinter(strPrinter,(GUIWindow&)*(getFrame()),getTitle());
printManager.printLines(codeLines,textFont,Point(10,10));
printManager.endDoc();
}
void CodeView::notifyCurrentLine(void)
{
CallbackData lineData(0,mRichEditControl.getCaretPosition());
mLineHandler.callback(lineData);
}
void CodeView::getControlRect(Rect &controlRect)
{
clientRect(controlRect);
controlRect.left(BorderWidth);
controlRect.top(BorderWidth);
controlRect.right((controlRect.right()-BorderWidth)+1);
controlRect.bottom((controlRect.bottom()-BorderWidth)+1);
}
// *** virtuals
void CodeView::preRegister(WNDCLASS &wndClass)
{
wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE;
}
void CodeView::preCreate(MDICREATESTRUCT &createStruct)
{
}

87
m68hc11/codeview.hpp Normal file
View File

@@ -0,0 +1,87 @@
#ifndef _M68HC11_CODEVIEW_HPP_
#define _M68HC11_CODEVIEW_HPP_
#ifndef _COMMON_MDIWIN_HPP_
#include <common/mdiwin.hpp>
#endif
#ifndef _COMMON_RICHEDIT_HPP_
#include <common/richedit.hpp>
#endif
#ifndef _COMMON_HOOKPROC_HPP_
#include <common/hookproc.hpp>
#endif
#ifndef _COMMON_CLIPBOARD_HPP_
#include <common/clipbrd.hpp>
#endif
#ifndef _M68HC11_EDITFIND_HPP_
#include <m68hc11/editfnd.hpp>
#endif
class CodeView : public MDIWindow, private WinHookProc
{
public:
CodeView(void);
virtual ~CodeView();
BOOL save(void);
BOOL save(const String &strPathFileName);
void open(const String &pathFileName);
void find(void);
void cut(void);
void copy(void);
void paste(void);
void print(void);
BOOL isDirty(void)const;
void setLineHandler(PureCallback *pPureCallback);
const String &getTitle(void)const;
void setTitle(const String &strTitle);
protected:
virtual void preRegister(WNDCLASS &wndClass);
virtual void preCreate(MDICREATESTRUCT &createStruct);
private:
enum {FontMagic=175,EditControlID=100,StatusBarID=101,BorderWidth=1}; // 165
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType closeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData);
CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData);
BOOL saveCode(Block<String> &headerLines,const String &strPathFileName);
void getControlRect(Rect &controlRect);
void notifyCurrentLine(void);
Callback<CodeView> mCreateHandler;
Callback<CodeView> mSizeHandler;
Callback<CodeView> mCloseHandler;
Callback<CodeView> mDestroyHandler;
Callback<CodeView> mCommandHandler;
Callback<CodeView> mKeyUpHandler;
Callback<CodeView> mLeftButtonDownHandler;
Callback<CodeView> mKeyDownHandler;
Callback<CodeView> mSetFocusHandler;
CallbackPointer mLineHandler;
RichEditControl mRichEditControl;
SmartPointer<Clipboard> mClipboard;
EditFind mEditFind;
String mTitle;
};
inline
BOOL CodeView::isDirty(void)const
{
return mRichEditControl.isDirty();
}
inline
void CodeView::setLineHandler(PureCallback *pPureCallback)
{
mLineHandler=CallbackPointer(pPureCallback);
}
inline
const String &CodeView::getTitle(void)const
{
return mTitle;
}
#endif

209
m68hc11/commctrl.cpp Normal file
View File

@@ -0,0 +1,209 @@
#include <m68hc11/commctrl.hpp>
#include <m68hc11/m68hc11.hpp>
#include <m68hc11/fmtlines.hpp>
void CommControl::portToString(CommControl::Port port,String &strPort)
{
if(port==CommControl::PortCOM1)strPort=String(STRING_COM1);
else if(port==CommControl::PortCOM2)strPort=String(STRING_COM2);
else if(port==CommControl::PortCOM3)strPort=String(STRING_COM3);
else strPort=String(STRING_COM4);
}
CommControl::Port CommControl::stringToPort(const String &strPort)
{
if(strPort==String(STRING_COM1))return CommControl::PortCOM1;
else if(strPort==String(STRING_COM2))return CommControl::PortCOM2;
else if(strPort==String(STRING_COM3))return CommControl::PortCOM3;
else return CommControl::PortCOM4;
}
bool CommControl::readFully(GlobalData<BYTE> &dataBytes)
{
CommStatus commStatus;
DWORD bytesRead=0;
DWORD byteCount;
DWORD bytesToRead;
if(!isOkay())return false;
clearError(commStatus);
byteCount=dataBytes.size();
if(!byteCount&&!commStatus.bytesInReceiveQueue())return false;
if(!byteCount){byteCount=commStatus.bytesInReceiveQueue();dataBytes.size(byteCount);}
return readFully(&dataBytes[0],dataBytes.size());
}
bool CommControl::readFully(BYTE *pBuffer,DWORD byteCount)
{
CommStatus commStatus;
DWORD bytesRead=0;
DWORD bytesToRead;
if(!isOkay())return false;
clearError(commStatus);
if(!byteCount||!pBuffer)return false;
while(bytesRead<byteCount)
{
if(commStatus.bytesInReceiveQueue())
{
bytesToRead=bytesRead+commStatus.bytesInReceiveQueue()>byteCount?byteCount-bytesRead:commStatus.bytesInReceiveQueue();
read(&pBuffer[bytesRead],bytesToRead);
bytesRead+=bytesToRead;
}
if(bytesRead==byteCount)break;
::Sleep(25);
clearError(commStatus);
}
showBytes(pBuffer,byteCount);
return true;
}
bool CommControl::hasData(void)
{
CommStatus commStatus;
clearError(commStatus);
return commStatus.bytesInReceiveQueue()?true:false;
}
bool CommControl::clearReceiveQueue(void)
{
GlobalData<BYTE> rcvBytes;
CommStatus commStatus;
if(!isOkay())return false;
::Sleep(1000);
clearError(commStatus);
if(!commStatus.bytesInReceiveQueue())return true;
::OutputDebugString(String(String("Clearing ")+String().fromInt(commStatus.bytesInReceiveQueue())+String(" bytes from receive queue.\n")).str());
rcvBytes.size(commStatus.bytesInReceiveQueue());
read(&rcvBytes[0],rcvBytes.size());
showBytes(rcvBytes);
return true;
}
bool CommControl::waitEvent(DWORD &eventMask,DWORD timeout)
{
BOOL result;
DWORD lastError;
eventMask=0;
if(!isOkay())return false;
mIOEvent.resetEvent();
result=::WaitCommEvent((HANDLE)mCommDevice,&eventMask,&mOverlapped.getOverlapped());
if(result)return true;
lastError=::GetLastError();
if(lastError!=ERROR_IO_PENDING)return false;
mIOEvent.waitEvent(timeout);
if(!mCommDevice.getOverlappedResult(mOverlapped,false))return false;
return true;
}
DWORD CommControl::enumerateDevices(Block<Port> &deviceList)
{
deviceList.remove();
if(isOkay())return 0;
for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++)
{
if(mCommDevice.open(mStrPorts[port]))
{
mCommDevice.close();
deviceList.insert(&port);
}
}
return deviceList.size();
}
DWORD CommControl::enumerateDevices(Block<String> &deviceList)
{
deviceList.remove();
if(isOkay())return 0;
for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++)
{
if(mCommDevice.open(mStrPorts[port]))
{
mCommDevice.close();
if(PortCOM1==port)deviceList.insert(&String("COM1"));
else if(PortCOM2==port)deviceList.insert(&String("COM2"));
else if(PortCOM3==port)deviceList.insert(&String("COM3"));
else if(PortCOM4==port)deviceList.insert(&String("COM4"));
}
}
return deviceList.size();
}
DWORD CommControl::read(void *pBuffer,int length,DWORD timeout)
{
BOOL result;
DWORD lastError;
if(!isOkay())return FALSE;
mIOEvent.resetEvent();
result=mCommDevice.read((BYTE*)pBuffer,length,mOverlapped);
if(result)return TRUE;
lastError=::GetLastError();
if(lastError!=ERROR_IO_PENDING)return FALSE;
mIOEvent.waitEvent(TimeOut);
if(!mCommDevice.getOverlappedResult(mOverlapped,FALSE))return FALSE;
return TRUE;
}
bool CommControl::isOkay(void)const
{
return mCommDevice.isOkay();
}
bool CommControl::clearError(CommStatus &commStatus)const
{
DWORD errorMask(0);
bool returnCode(false);
if(!isOkay())return returnCode;
returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,&commStatus.getCOMSTAT());
showError(errorMask);
return returnCode;
}
bool CommControl::clearError(void)const
{
DWORD errorMask(0);
bool returnCode(false);
if(!isOkay())return false;
returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,0);
showError(errorMask);
return returnCode;
}
void CommControl::showError(DWORD errorMask)const
{
if(errorMask&CE_BREAK)::OutputDebugString("The hardware detected a break condition.\n");
if(errorMask&CE_DNS)::OutputDebugString("Windows 95 and Windows 98: A parallel device is not selected.\n");
if(errorMask&CE_FRAME)::OutputDebugString("The hardware detected a framing error.\n");
if(errorMask&CE_IOE)::OutputDebugString("An I/O error occurred during communications with the device.\n");
if(errorMask&CE_MODE)::OutputDebugString("The requested mode is not supported, or the hFile parameter is invalid. If this value is specified, it is the only valid error.\n");
if(errorMask&CE_OOP)::OutputDebugString("Windows 95 and Windows 98: A parallel device signaled that it is out of paper.\n");
if(errorMask&CE_OVERRUN)::OutputDebugString("A character-buffer overrun has occurred. The next character is lost.\n");
if(errorMask&CE_PTO)::OutputDebugString("Windows 95 and Windows 98: A time-out occurred on a parallel device.\n");
if(errorMask&CE_RXOVER)::OutputDebugString("An input buffer overflow has occurred. There is either no room in the input buffer, or a character was received after the end-of-file (EOF) character.\n");
if(errorMask&CE_RXPARITY)::OutputDebugString("The hardware detected a parity error.\n");
if(errorMask&CE_TXFULL)::OutputDebugString("The application tried to transmit a character, but the output buffer was full.\n");
}
void CommControl::showBytes(BYTE *pBuffer,DWORD byteCount)
{
Block<String> strLines;
::OutputDebugString("\n");
FormatLines::hexasciiLines(strLines,pBuffer,byteCount);
for(int index=0;index<strLines.size();index++)
{
::OutputDebugString(strLines[index].str());
::OutputDebugString("\n");
}
}
void CommControl::showBytes(GlobalData<BYTE> rcvBytes)
{
showBytes(&rcvBytes[0],rcvBytes.size());
}

33
m68hc11/echo.asm Normal file
View File

@@ -0,0 +1,33 @@
; File - Echo.asm - echo the character received back to the host. Increment
; it by one to prove it is not a local terminal echo.
;$$$$$$$$$$$$$ - file set up for e2 series 68hc11 with eeprom at $f800
;
; Constants
TDRE equ 0080h
RDRF equ 0020h
BAUD equ 002bh
SCCR1 equ 002ch
SCCR2 equ 002dh
SCSR equ 002eh
SCDR equ 002fh
lds 00FFh ; 8E,00,0F
ldx 1000h ; CE,10,00
clr ix,SCCR1 ; 6F,2C
ldd 330Ch ; CC,33,0C
staa ix,BAUD ; A7,2B
stab ix,SCCR2 ; E7,2D
dssdfsd
loop:
brclr ix,SCSR,20h,loop ; 1F,2E,20,FC wait for RDRF
ldaa ix,SCDR ; A6,2F read next character
inca ; 4C increment the character
loop2:
brclr ix,SCSR,80h,loop2 ; 1F,2E,80,FC
staa ix,SCDR ; A7,2F echo back to host
jmp loop ; 7E,00,0F continue

BIN
m68hc11/echo.bin Normal file

Binary file not shown.

17
m68hc11/echo.s19 Normal file
View File

@@ -0,0 +1,17 @@
S12300008E00FFCE10006F2CCC330CA72BE72D1F2E20FCA62F4C1F2E80FCA72F7E000F012E
S123002001010101010101010101010101010101010101010101010101010101010101019C
S123004001010101010101010101010101010101010101010101010101010101010101017C
S123006001010101010101010101010101010101010101010101010101010101010101015C
S123008001010101010101010101010101010101010101010101010101010101010101013C
S12300A001010101010101010101010101010101010101010101010101010101010101011C
S12300C00101010101010101010101010101010101010101010101010101010101010101FC
S12300E00101010101010101010101010101010101010101010101010101010101010101DC
S12301000101010101010101010101010101010101010101010101010101010101010101BC
S123012001010101010101010101010101010101010101010101010101010101010101019C
S123014001010101010101010101010101010101010101010101010101010101010101017C
S123016001010101010101010101010101010101010101010101010101010101010101015C
S123018001010101010101010101010101010101010101010101010101010101010101013C
S12301A001010101010101010101010101010101010101010101010101010101010101011C
S12301C00101010101010101010101010101010101010101010101010101010101010101FC
S12301E00101010101010101010101010101010101010101010101010101010101010101DC
S9030000FC

Some files were not shown because too many files have changed in this diff Show More