summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2004-11-03 21:50:28 (UTC)
committer Michael Krelin <hacker@klever.net>2004-11-03 21:50:28 (UTC)
commit5f552506513653f08acc6921b8c158489a7ebbbb (patch) (side-by-side diff)
tree74ab06cf90c488915b87f48e74359554521cbec9
parent4435ed85c3acb4df42135e009b133fb8e9d2f09c (diff)
downloadpumpkin-5f552506513653f08acc6921b8c158489a7ebbbb.zip
pumpkin-5f552506513653f08acc6921b8c158489a7ebbbb.tar.gz
pumpkin-5f552506513653f08acc6921b8c158489a7ebbbb.tar.bz2
Added dialog box in case we can't bind listening socket.
git-svn-id: http://svn.klever.net/kin/pumpkin/trunk@47 fe716a7a-6dde-0310-88d9-d003556173a8
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--PumpKINDlg.cpp1
-rw-r--r--pumpkin.rc10
-rw-r--r--resource.h1
3 files changed, 8 insertions, 4 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index 0b3bf41..fc24596 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -234,192 +234,193 @@ CRect rc, drc;
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CPumpKINDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CPumpKINDlg::OnDestroy()
{
SaveSettings();
NOTIFYICONDATA nid;
memset(&nid,0,sizeof(nid));
nid.cbSize=sizeof(nid);
nid.hWnd=m_Trayer->m_hWnd;
nid.uID=IDC_TRAYICON;
nid.uFlags=0;
VERIFY(Shell_NotifyIcon(NIM_DELETE,&nid));
WinHelp(0L, HELP_QUIT);
CDialog::OnDestroy();
POSITION p = m_LogTimes.GetStartPosition();
while(p){
CTime *t,*tt;
m_LogTimes.GetNextAssoc(p,t,tt);
ASSERT(t && tt && t==tt);
delete t;
}
// *** Abort and cleanup transfers
m_LogTimes.RemoveAll();
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CPumpKINDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC pDC(this);
CDC bmpDC;
bmpDC.CreateCompatibleDC(&pDC);
bmpDC.SelectObject(&m_bmpBack);
CRect rc;
GetClientRect(&rc);
for(int x=-m_bitmapBack.bmWidth*2/4;x<rc.Width();x+=m_bitmapBack.bmWidth)
for(int y=-m_bitmapBack.bmHeight*2/4;y<rc.Height();y+=m_bitmapBack.bmHeight)
pDC.BitBlt(x,y,m_bitmapBack.bmWidth,m_bitmapBack.bmHeight,&bmpDC,0,0,SRCCOPY);
bmpDC.DeleteDC();
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CPumpKINDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
m_Listener.m_Daddy=this;
if(!m_Listener.Create(m_ListenPort,SOCK_DGRAM)){
TRACE0("Failed to create socket\n");
+ AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
return -1;
}
if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){
TRACE0("Failed to create trayer\n");
return -1;
}
NOTIFYICONDATA nid;
memset(&nid,0,sizeof(nid));
nid.cbSize=sizeof(nid);
nid.hWnd=m_Trayer->m_hWnd;
nid.uID=IDC_TRAYICON;
nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
nid.uCallbackMessage=WM_TRAYICON;
nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// *** Load from resource
strcpy(nid.szTip,"PumpKIN");
VERIFY(Shell_NotifyIcon(NIM_ADD,&nid));
return 0;
}
void CListenSocket::OnReceive(int nErrorCode)
{
ASSERT(m_Daddy);
if(nErrorCode){
m_Daddy->LogLine(IDS_LOG_LISTENRECEIVEERROR);
return;
}
DWORD fionread = 0;
VERIFY(IOCtl(FIONREAD,&fionread)); // *** Do some checking on the value acquired
tftp *tftpRQ = tftp::Allocate(fionread);
ASSERT(tftpRQ);
SOCKADDR_IN sin;
if(!tftpRQ->Receive(this,fionread,&sin)){
m_Daddy->LogLine(IDS_LOG_LISTENACCEPTERROR);
delete tftpRQ;
return;
}
#ifndef NDEBUG
CString tmp;
tmp.Format("%u - %s - %u\n",tftpRQ->Opcode(),inet_ntoa(sin.sin_addr),sin.sin_port);
TRACE0(tmp);
#endif
POSITION p = m_Daddy->m_Xfers.GetStartPosition();
while(p){
SOCKET key;
CXferSocket *sock;
m_Daddy->m_Xfers.GetNextAssoc(p,key,sock);
ASSERT(sock);
if(sock->m_Peer.sin_addr.s_addr==sin.sin_addr.s_addr && sock->m_Peer.sin_port==sin.sin_port){
TRACE0("Ignoring request which we are already processing\n");
delete tftpRQ;
return;
}
}
switch(tftpRQ->Opcode()){
case tftp::opRRQ:
// Read Request
{
CString tmp;
tmp.Format(IDS_LOG_RRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
m_Daddy->LogLine(tmp);
CRRQSocket *s = new CRRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
ASSERT(s);
tftpRQ->GetOptions(&s->m_Options);
if(!s->Create())
s->Destroy(FALSE);
}
break;
case tftp::opWRQ:
// Write Request
{
CString tmp;
tmp.Format(IDS_LOG_WRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
m_Daddy->LogLine(tmp);
CWRQSocket *s = new CWRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
ASSERT(s);
tftpRQ->GetOptions(&s->m_Options);
if(!s->Create(NULL,NULL))
s->Destroy(FALSE);
}
break;
default:
m_Daddy->LogLine(IDS_LOG_LISTENOPCODE);
delete tftpRQ;
return;
}
delete tftpRQ;
}
BOOL tftp::Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin)
{
ASSERT(socket);
int saddrLen = sizeof(SOCKADDR_IN);
diff --git a/pumpkin.rc b/pumpkin.rc
index 7380e12..7f3bbde 100644
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -1,183 +1,184 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.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
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif\r\n"
"#include ""res\\PumpKIN.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""afxres.rc"" // Standard components\r\n"
"#endif\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_RRQ ICON DISCARDABLE "res\\wrq.ico"
IDI_WRQ ICON DISCARDABLE "res\\rrq.ico"
IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico"
IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico"
IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 74
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About PumpKIN"
FONT 8, "MS Sans Serif"
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20
- LTEXT "PumpKIN, Version 2.5.1-trunk",IDC_STATIC,40,15,119,8,SS_NOPREFIX
- LTEXT "Copyright © 1997-2004 Klever Group",IDC_STATIC,40,30,170,
- 8
+ LTEXT "PumpKIN, Version 2.5.1-trunk",IDC_STATIC,40,15,119,8,
+ SS_NOPREFIX
+ LTEXT "Copyright © 1997-2004 Klever Group",IDC_STATIC,40,30,
+ 170,8
DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14
END
IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 191
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW
CAPTION " PumpKIN"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT |
LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108,
WS_EX_DLGMODALFRAME
PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY,
WS_EX_CLIENTEDGE
PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY,
WS_EX_CLIENTEDGE
PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY,
WS_EX_CLIENTEDGE
PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY,
WS_EX_CLIENTEDGE
PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
LISTBOX IDC_LOG,7,115,348,69,LBS_USETABSTOPS | LBS_NOSEL |
WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME
PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP
END
IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 210, 154
STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Server"
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7,
196,38
EDITTEXT IDC_TFTPROOT,13,16,170,13,ES_AUTOHSCROLL
PUSHBUTTON "&B",IDC_BROWSE,186,16,13,13,BS_ICON
CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10
GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,153,42
CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button",
BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,57,53,10
CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM,
"Button",BS_AUTORADIOBUTTON | BS_NOTIFY,23,67,91,10
CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button",
BS_AUTORADIOBUTTON | BS_NOTIFY,33,77,70,10
GROUPBOX "Write Request Behavior",IDC_STATIC,7,93,172,54,WS_GROUP
CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button",
BS_AUTORADIOBUTTON | WS_GROUP,13,103,55,10
CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button",
BS_AUTORADIOBUTTON,23,113,73,10
CONTROL "Always pro&mpt before accepting file",
IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,33,123,
139,10
CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button",
BS_AUTORADIOBUTTON,43,133,70,10
CTEXT "Confirmation &timeout",IDC_STATIC,163,52,40,19,
SS_NOTIFY
CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32",
TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,182,73,
21,74
END
IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 210, 154
STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Network"
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "UDP Ports",IDC_STATIC,7,7,196,40
RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13,
18,135,8
EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL
CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13
RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8
EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL
CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13
LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8
EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13
LTEXT "Default block size:",IDC_STATIC,7,66,59,8
LTEXT "seconds",IDC_STATIC,154,52,28,8
LTEXT "bytes",IDC_STATIC,154,66,18,8
EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13
END
IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79
@@ -477,129 +478,130 @@ BEGIN
IDS_TFTP_ERROR_DIRFULL "Directory is full"
IDS_TFTP_ERROR_SHARING "Sharing violation"
IDS_TFTP_ERROR_DISKFULL "Disk full"
IDS_TFTP_ERROR_UNDEFINED "Undefined error"
IDS_LOG_START "PumpKIN started"
IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection"
IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s"
IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request"
IDS_LOG_XFERUDPSEND "UDP packet send failed"
IDS_LOG_XFERRECEIVE "Error on xfer socket"
IDS_LOG_XFERSEND "Error on xfer socket"
IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed"
IDS_LOG_XFERSOURCETID "Packet from unexpected source"
IDS_LOG_SENTTFTPERROR ":%u: %s"
IDS_LOG_GOTTFTPERROR "TFTP:%u: %s"
IDS_LOG_XFEROPCODE "Invalid opcode during transfer received"
IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed"
IDS_TITLE_OPTIONS "Options"
IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s"
IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file"
IDS_RENAME_TITLE "Save As"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out"
IDS_CONFIRMEXIT_TITLE "Exit"
IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?"
IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed"
IDS_LOG_XFERABORTED "Transfer of '%s' was aborted"
IDS_TITLE_PUTREQUEST "Send file"
IDS_TITLE_GETREQUEST "Fetch file"
IDS_WTALKHEADING "Talk with "
IDS_TITLE_BROWSEFILE "Browse"
IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'"
IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'"
IDS_LOG_FAILEDTOOPEN "Failed to open '%s'"
IDS_OTALXHEADING "Open Talks: talking to "
IDS_REGISTRYKEY "Klever Group"
IDS_KLEVERNET_URL "http://www.klever.net/"
IDS_LOGTIMEFORMAT "%H:%M:%S %B %d"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_TRAY_HELP "Read the help on PumpKIN"
ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator"
ID_TRAY_EXIT "Close PumpKIN"
ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete"
ID_TRAY_FETCHFILE "Fetch file from remote computer"
ID_TRAY_OPTIONS "Set PumpKIN options"
ID_TRAY_SHOWPUMPKINWINDOW "Show main window"
ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder"
END
STRINGTABLE DISCARDABLE
BEGIN
IDC_CONNECTIONS "Active transfers"
IDC_LOG "PumpKIN Activity Log"
IDC_GET "Fetch file from remote server"
IDC_PUT "Send file over the net"
IDC_ABORT "Abort transfer currently in progress"
IDC_EXIT "Close PumpKIN"
END
STRINGTABLE DISCARDABLE
BEGIN
IDC_OPTIONS "Set PumpKIN options"
IDC_REFRESH "Refresh talks list"
IDC_BROWSE "Browse"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_HELP "Read help on PumpKIN"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_DROPFILES_TITLE "Drop Files"
IDS_NOMULTIPLEDROP_TEXT "You can't drop more than one file here. Only the first one will be accepted"
IDS_LOG_REQUESTING "Requesting '%s' from '%s'"
IDS_LOG_SENDING "Sending '%s' to '%s'"
IDS_WTALKAT "@"
IDS_OTALXAT " at "
IDS_TFTP_ERROR_TSIZE "Invalid transfer size"
IDS_TFTP_ERROR_BSIZE "Invalid block size"
IDS_TFTP_ERROR_TOUT "Invalid timeout"
IDS_SELECT_TFTPROOT "Select TFTP filesystem root.."
IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||"
IDS_TITLE_WAV "Select sound.."
+ IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application."
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_APP_TITLE "PUMPKIN"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif
-#include "res\pumpkin.rc2" // non-Microsoft Visual C++ edited resources
+#include "res\PumpKIN.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
diff --git a/resource.h b/resource.h
index fcdda9c..8755a55 100644
--- a/resource.h
+++ b/resource.h
@@ -1,147 +1,148 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by PumpKIN.rc
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDC_TRAYICON 101
#define IDD_PUMPKIN_DIALOG 102
#define IDS_FMT_BYTES 102
#define IDP_SOCKETS_INIT_FAILED 103
#define IDS_TFTP_ERROR_ACCESS 104
#define IDS_TFTP_ERROR_NOTFOUND 105
#define IDS_TFTP_ERROR_DIRFULL 106
#define IDD_PROPS_SERVER 106
#define IDS_TFTP_ERROR_SHARING 107
#define IDD_PROPS_NETWORK 107
#define IDS_TFTP_ERROR_DISKFULL 108
#define IDS_TFTP_ERROR_UNDEFINED 109
#define IDS_LOG_START 110
#define IDS_LOG_LISTENRECEIVEERROR 111
#define IDS_LOG_LISTENACCEPTERROR 112
#define IDS_LOG_RRQSERVE 113
#define IDS_LOG_LISTENOPCODE 114
#define IDS_LOG_XFERUDPSEND 115
#define IDS_LOG_XFERRECEIVE 116
#define IDS_LOG_XFERSEND 117
#define IDS_LOG_XFERUDPRECEIVE 118
#define IDS_LOG_XFERSOURCETID 119
#define IDS_LOG_SENTTFTPERROR 120
#define IDS_LOG_GOTTFTPERROR 121
#define IDS_LOG_XFEROPCODE 122
#define IDS_LOG_XFERRRQFINISHED 123
#define IDS_TITLE_OPTIONS 124
#define IDS_LOG_WRQSERVE 125
#define IDS_TFTP_ERROR_FAILEDTORENAME 126
#define IDS_RENAME_TITLE 127
#define IDR_MAINFRAME 128
#define IDS_LOG_TIMEDOUT 128
#define IDS_CONFIRMEXIT_TITLE 129
#define IDI_RRQ 129
#define IDS_CONFIRMEXIT_TEXT 130
#define IDI_WRQ 130
#define IDD_CONFIRM_RRQ 131
#define IDS_LOG_XFERWRQFINISHED 131
#define IDD_CONFIRM_WRQ 132
#define IDB_BACKGROUND 132
#define IDS_LOG_XFERABORTED 132
#define IDS_TITLE_PUTREQUEST 133
#define IDS_TITLE_GETREQUEST 134
#define IDR_WAVE_RING 135
#define IDS_TALKHEADING 135
#define IDS_WTALKHEADING 135
#define IDR_WAVE_FINISHED 136
#define IDS_TITLE_BROWSEFILE 136
#define IDD_REQUEST 137
#define IDS_LOG_RESOLVEFAILED 137
#define IDS_LOG_FAILEDLOCALFILE 138
#define IDD_PROPS_SOUNDS 138
#define IDS_LOG_FAILEDTOOPEN 139
#define IDM_POPUPS 140
#define IDS_OTALXHEADING 140
#define IDS_REGISTRYKEY 141
#define IDS_KLEVERNET_URL 142
#define IDR_WAVE_ABORTED 142
#define IDS_LOGTIMEFORMAT 143
#define IDS_DROPFILES_TITLE 144
#define IDS_NOMULTIPLEDROP_TEXT 145
#define IDI_BROWSE 145
#define IDS_LOG_REQUESTING 146
#define IDS_LOG_SENDING 147
#define IDS_WTALKAT 148
#define IDS_OTALXAT 149
#define IDI_PLAY 149
#define IDS_TFTP_ERROR_TSIZE 150
#define IDS_TFTP_ERROR_BSIZE 151
#define IDS_TFTP_ERROR_TOUT 152
#define IDS_SELECT_TFTPROOT 153
#define IDS_FILTER_WAV 154
#define IDS_TITLE_WAV 155
+#define IDS_BOX_CANTBIND 156
#define IDC_KLEVERNET 1000
#define IDC_CONNECTIONS 1001
#define IDC_LOG 1003
#define IDC_GET 1004
#define IDC_PUT 1005
#define IDC_ABORT 1006
#define IDC_EXIT 1007
#define IDC_TFTPROOT 1008
#define IDC_TFTPSUBDIRS 1009
#define IDC_RRQ_GIVEALL 1010
#define IDC_RRQ_ALWAYSCONFIRM 1011
#define IDC_RRQ_DENYALL 1012
#define IDC_WRQ_TAKEALL 1013
#define IDC_WRQ_PROMPTEXISTING 1014
#define IDC_WRQ_ALWAYSCONFIRM 1015
#define IDC_WRQ_DENYALL 1016
#define IDC_PROMPTTIMEOUT 1017
#define IDC_LISTENPORT 1018
#define IDC_LISTENSPIN 1019
#define IDC_SPEAKPORT 1020
#define IDC_SPEAKSPIN 1021
#define IDC_MAXUDPSIZE 1022
#define IDC_MAXUDPSPIN 1023
#define IDC_TIMEOUT 1024
#define IDC_TIMESPIN 1025
#define IDC_OPTIONS 1026
#define IDC_BLOCKSIZE 1026
#define IDC_BSIZESPIN 1027
#define IDC_HOST 1028
#define IDC_FILE 1029
#define IDC_RENAME 1030
#define IDC_REMOTEFILE 1030
#define IDC_RESUME 1031
#define IDC_REFRESH 1032
#define IDC_BROWSE 1034
#define IDC_TALKS 1035
#define IDC_LOCALFILE 1036
#define IDC_TYPE 1037
#define IDC_BSIZE 1039
#define IDC_RING 1041
#define IDC_RING_BROWSE 1042
#define IDC_RING_PLAY 1043
#define IDC_FINISHED 1044
#define IDC_FINISHED_BROWSE 1045
#define IDC_FINISHED_PLAY 1046
#define IDC_ABORTED 1047
#define IDC_ABORTED_BROWSE 1048
#define IDC_ABORTED_PLAY 1049
#define ID_TRAY_HELP 32771
#define ID_TRAY_ABOUTPUMPKIN 32772
#define ID_TRAY_EXIT 32773
#define ID_TRAY_SENDFILE 32774
#define ID_TRAY_FETCHFILE 32775
#define ID_TRAY_OPTIONS 32776
#define ID_TRAY_SHOWPUMPKINWINDOW 32777
#define ID_TRAY_OPENFILESFOLDER 32778
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 150
#define _APS_NEXT_COMMAND_VALUE 32780
#define _APS_NEXT_CONTROL_VALUE 1043
#define _APS_NEXT_SYMED_VALUE 102
#endif
#endif