summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2006-02-03 01:05:14 (UTC)
committer Michael Krelin <hacker@klever.net>2006-02-03 01:05:14 (UTC)
commit51d59e6f7f45b8f4a60d2933e50bb8ee0c2ea20d (patch) (unidiff)
treea6693752131aaa39e56ebbca841179a8df4230ef
parenta772d9f284b4c2a909c30ea33a132a487d932600 (diff)
downloadpumpkin-51d59e6f7f45b8f4a60d2933e50bb8ee0c2ea20d.zip
pumpkin-51d59e6f7f45b8f4a60d2933e50bb8ee0c2ea20d.tar.gz
pumpkin-51d59e6f7f45b8f4a60d2933e50bb8ee0c2ea20d.tar.bz2
made main window resizable
git-svn-id: http://svn.klever.net/kin/pumpkin/trunk@146 fe716a7a-6dde-0310-88d9-d003556173a8
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--PumpKINDlg.cpp84
-rw-r--r--PumpKINDlg.h13
-rw-r--r--help/pumpkin.rtf1
-rw-r--r--help/pumpkin.xml1
-rw-r--r--pumpkin.clw12
-rw-r--r--pumpkin.mak76
-rw-r--r--pumpkin.rc10
7 files changed, 124 insertions, 73 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index 4cb1633..9786ef0 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -1,2079 +1,2159 @@
1// PumpKINDlg.cpp : implementation file 1// PumpKINDlg.cpp : implementation file
2// 2//
3 3
4#include "stdafx.h" 4#include "stdafx.h"
5#include "PumpKIN.h" 5#include "PumpKIN.h"
6#include "PumpKINDlg.h" 6#include "PumpKINDlg.h"
7 7
8#include "ACLTargetCombo.h" 8#include "ACLTargetCombo.h"
9#include "PropsServer.h" 9#include "PropsServer.h"
10#include "PropsNetwork.h" 10#include "PropsNetwork.h"
11#include "PropsSounds.h" 11#include "PropsSounds.h"
12#include "PropsACL.h" 12#include "PropsACL.h"
13#include "ConfirmRRQDlg.h" 13#include "ConfirmRRQDlg.h"
14#include "ConfirmWRQDlg.h" 14#include "ConfirmWRQDlg.h"
15#include "RequestDlg.h" 15#include "RequestDlg.h"
16#include "Resolver.h" 16#include "Resolver.h"
17#include "Retrier.h" 17#include "Retrier.h"
18#include "Trayer.h" 18#include "Trayer.h"
19 19
20#include <io.h> 20#include <io.h>
21 21
22#ifdef _DEBUG 22#ifdef _DEBUG
23#define new DEBUG_NEW 23#define new DEBUG_NEW
24#undef THIS_FILE 24#undef THIS_FILE
25static char THIS_FILE[] = __FILE__; 25static char THIS_FILE[] = __FILE__;
26#endif 26#endif
27 27
28IMPLEMENT_DYNAMIC(CXferSocket, CAsyncSocket) 28IMPLEMENT_DYNAMIC(CXferSocket, CAsyncSocket)
29IMPLEMENT_DYNAMIC(CWRQSocket, CXferSocket) 29IMPLEMENT_DYNAMIC(CWRQSocket, CXferSocket)
30IMPLEMENT_DYNAMIC(CRRQSocket, CXferSocket) 30IMPLEMENT_DYNAMIC(CRRQSocket, CXferSocket)
31 31
32///////////////////////////////////////////////////////////////////////////// 32/////////////////////////////////////////////////////////////////////////////
33// CAboutDlg dialog used for App About 33// CAboutDlg dialog used for App About
34 34
35class CAboutDlg : public CDialog 35class CAboutDlg : public CDialog
36{ 36{
37public: 37public:
38 CAboutDlg(); 38 CAboutDlg();
39 39
40// Dialog Data 40// Dialog Data
41 //{{AFX_DATA(CAboutDlg) 41 //{{AFX_DATA(CAboutDlg)
42 enum { IDD = IDD_ABOUTBOX }; 42 enum { IDD = IDD_ABOUTBOX };
43 //}}AFX_DATA 43 //}}AFX_DATA
44 44
45 // ClassWizard generated virtual function overrides 45 // ClassWizard generated virtual function overrides
46 //{{AFX_VIRTUAL(CAboutDlg) 46 //{{AFX_VIRTUAL(CAboutDlg)
47 protected: 47 protected:
48 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 48 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
49 //}}AFX_VIRTUAL 49 //}}AFX_VIRTUAL
50 50
51// Implementation 51// Implementation
52protected: 52protected:
53 //{{AFX_MSG(CAboutDlg) 53 //{{AFX_MSG(CAboutDlg)
54 afx_msg void OnKlevernet(); 54 afx_msg void OnKlevernet();
55 //}}AFX_MSG 55 //}}AFX_MSG
56 DECLARE_MESSAGE_MAP() 56 DECLARE_MESSAGE_MAP()
57}; 57};
58 58
59CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 59CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
60{ 60{
61 //{{AFX_DATA_INIT(CAboutDlg) 61 //{{AFX_DATA_INIT(CAboutDlg)
62 //}}AFX_DATA_INIT 62 //}}AFX_DATA_INIT
63} 63}
64 64
65void CAboutDlg::DoDataExchange(CDataExchange* pDX) 65void CAboutDlg::DoDataExchange(CDataExchange* pDX)
66{ 66{
67 CDialog::DoDataExchange(pDX); 67 CDialog::DoDataExchange(pDX);
68 //{{AFX_DATA_MAP(CAboutDlg) 68 //{{AFX_DATA_MAP(CAboutDlg)
69 //}}AFX_DATA_MAP 69 //}}AFX_DATA_MAP
70} 70}
71 71
72BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 72BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
73 //{{AFX_MSG_MAP(CAboutDlg) 73 //{{AFX_MSG_MAP(CAboutDlg)
74 ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet) 74 ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet)
75 //}}AFX_MSG_MAP 75 //}}AFX_MSG_MAP
76END_MESSAGE_MAP() 76END_MESSAGE_MAP()
77 77
78///////////////////////////////////////////////////////////////////////////// 78/////////////////////////////////////////////////////////////////////////////
79// CPumpKINDlg dialog 79// CPumpKINDlg dialog
80 80
81CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/) 81CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
82 : CDialog(CPumpKINDlg::IDD, pParent) 82 : CDialog(CPumpKINDlg::IDD, pParent)
83{ 83{
84 m_Listener.m_Daddy = this; 84 m_Listener.m_Daddy = this;
85 85
86 m_bListen = TRUE; 86 m_bListen = TRUE;
87 87
88 m_ListenPort = 69; 88 m_ListenPort = 69;
89 m_bTFTPSubdirs = TRUE; 89 m_bTFTPSubdirs = TRUE;
90 m_RRQMode = rrqAlwaysConfirm; 90 m_RRQMode = rrqAlwaysConfirm;
91 m_WRQMode = wrqAlwaysConfirm; 91 m_WRQMode = wrqAlwaysConfirm;
92 m_TFTPTimeOut = CTimeSpan(0,0,0,30); 92 m_TFTPTimeOut = CTimeSpan(0,0,0,30);
93 m_RetryTimeOut = CTimeSpan(0,0,0,10); 93 m_RetryTimeOut = CTimeSpan(0,0,0,10);
94 m_LogLength = 100; 94 m_LogLength = 100;
95 m_SpeakPort = 69; 95 m_SpeakPort = 69;
96 m_PromptTimeOut=30; 96 m_PromptTimeOut=30;
97 m_bShown=TRUE; 97 m_bShown=TRUE;
98 m_bExiting=FALSE; 98 m_bExiting=FALSE;
99 m_BlockSize=1024; 99 m_BlockSize=1024;
100 m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource); 100 m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource);
101 m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource); 101 m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource);
102 m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource); 102 m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource);
103 m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone); 103 m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone);
104 m_bnwRequest="(bang)"; m_bnwSuccess="(done)"; 104 m_bnwRequest="(bang)"; m_bnwSuccess="(done)";
105 m_bnwAbort="(oops)"; 105 m_bnwAbort="(oops)";
106 //{{AFX_DATA_INIT(CPumpKINDlg) 106 //{{AFX_DATA_INIT(CPumpKINDlg)
107 //}}AFX_DATA_INIT 107 //}}AFX_DATA_INIT
108 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 108 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
109 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 109 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
110 m_bmpBack.LoadBitmap(IDB_BACKGROUND); 110 m_bmpBack.LoadBitmap(IDB_BACKGROUND);
111 m_bmpBack.GetBitmap(&m_bitmapBack); 111 m_bmpBack.GetBitmap(&m_bitmapBack);
112 m_Retrier = new CRetrier(this); 112 m_Retrier = new CRetrier(this);
113 ASSERT(m_Retrier); 113 ASSERT(m_Retrier);
114 m_Trayer = new CTrayer(this); 114 m_Trayer = new CTrayer(this);
115 ASSERT(m_Trayer); 115 ASSERT(m_Trayer);
116 /* Ensure we're backwards compatible */ 116 /* Ensure we're backwards compatible */
117 ASSERT(CPumpKINDlg::rrqGiveAll==0); 117 ASSERT(CPumpKINDlg::rrqGiveAll==0);
118 ASSERT(CPumpKINDlg::rrqAlwaysConfirm==1); 118 ASSERT(CPumpKINDlg::rrqAlwaysConfirm==1);
119 ASSERT(CPumpKINDlg::rrqDenyAll==2); 119 ASSERT(CPumpKINDlg::rrqDenyAll==2);
120 ASSERT(CPumpKINDlg::wrqTakeAll==0); 120 ASSERT(CPumpKINDlg::wrqTakeAll==0);
121 ASSERT(CPumpKINDlg::wrqConfirmIfExists==1); 121 ASSERT(CPumpKINDlg::wrqConfirmIfExists==1);
122 ASSERT(CPumpKINDlg::wrqAlwaysConfirm==2); 122 ASSERT(CPumpKINDlg::wrqAlwaysConfirm==2);
123 ASSERT(CPumpKINDlg::wrqDenyAll==3); 123 ASSERT(CPumpKINDlg::wrqDenyAll==3);
124 /* -- */ 124 /* -- */
125 LoadSettings(); 125 LoadSettings();
126} 126}
127 127
128void CPumpKINDlg::DoDataExchange(CDataExchange* pDX) 128void CPumpKINDlg::DoDataExchange(CDataExchange* pDX)
129{ 129{
130 CDialog::DoDataExchange(pDX); 130 CDialog::DoDataExchange(pDX);
131 //{{AFX_DATA_MAP(CPumpKINDlg) 131 //{{AFX_DATA_MAP(CPumpKINDlg)
132 DDX_Control(pDX, ID_HELP, m_HelpCtl);
133 DDX_Control(pDX, IDC_PUT, m_PutCtl);
134 DDX_Control(pDX, IDC_GET, m_GetCtl);
135 DDX_Control(pDX, IDC_EXIT, m_ExitCtl);
132 DDX_Control(pDX, IDC_LISTENING, m_ListenCtl); 136 DDX_Control(pDX, IDC_LISTENING, m_ListenCtl);
133 DDX_Control(pDX, IDC_ABORT, m_AbortCtl); 137 DDX_Control(pDX, IDC_ABORT, m_AbortCtl);
134 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); 138 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl);
135 DDX_Control(pDX, IDC_LOG, m_Log); 139 DDX_Control(pDX, IDC_LOG, m_Log);
136 DDX_Control(pDX, IDC_CONNECTIONS, m_List); 140 DDX_Control(pDX, IDC_CONNECTIONS, m_List);
137 //}}AFX_DATA_MAP 141 //}}AFX_DATA_MAP
138} 142}
139 143
140BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog) 144BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog)
141 //{{AFX_MSG_MAP(CPumpKINDlg) 145 //{{AFX_MSG_MAP(CPumpKINDlg)
142 ON_WM_SYSCOMMAND() 146 ON_WM_SYSCOMMAND()
143 ON_WM_DESTROY() 147 ON_WM_DESTROY()
144 ON_WM_PAINT() 148 ON_WM_PAINT()
145 ON_WM_QUERYDRAGICON() 149 ON_WM_QUERYDRAGICON()
146 ON_WM_CREATE() 150 ON_WM_CREATE()
147 ON_BN_CLICKED(IDC_OPTIONS, OnOptions) 151 ON_BN_CLICKED(IDC_OPTIONS, OnOptions)
148 ON_WM_TIMER() 152 ON_WM_TIMER()
149 ON_BN_CLICKED(IDC_EXIT, OnExit) 153 ON_BN_CLICKED(IDC_EXIT, OnExit)
150 ON_BN_CLICKED(IDC_PUT, OnPut) 154 ON_BN_CLICKED(IDC_PUT, OnPut)
151 ON_BN_CLICKED(IDC_GET, OnGet) 155 ON_BN_CLICKED(IDC_GET, OnGet)
152 ON_NOTIFY(LVN_DELETEALLITEMS, IDC_CONNECTIONS, OnDeleteallitemsConnections) 156 ON_NOTIFY(LVN_DELETEALLITEMS, IDC_CONNECTIONS, OnDeleteallitemsConnections)
153 ON_NOTIFY(LVN_DELETEITEM, IDC_CONNECTIONS, OnDeleteitemConnections) 157 ON_NOTIFY(LVN_DELETEITEM, IDC_CONNECTIONS, OnDeleteitemConnections)
154 ON_NOTIFY(LVN_INSERTITEM, IDC_CONNECTIONS, OnInsertitemConnections) 158 ON_NOTIFY(LVN_INSERTITEM, IDC_CONNECTIONS, OnInsertitemConnections)
155 ON_NOTIFY(LVN_ITEMCHANGED, IDC_CONNECTIONS, OnItemchangedConnections) 159 ON_NOTIFY(LVN_ITEMCHANGED, IDC_CONNECTIONS, OnItemchangedConnections)
156 ON_BN_CLICKED(IDC_ABORT, OnAbort) 160 ON_BN_CLICKED(IDC_ABORT, OnAbort)
157 ON_WM_CLOSE() 161 ON_WM_CLOSE()
158 ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow) 162 ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow)
163 ON_COMMAND(ID_TRAY_LISTEN, OnTrayListen)
159 ON_COMMAND(ID_TRAY_EXIT, OnTrayExit) 164 ON_COMMAND(ID_TRAY_EXIT, OnTrayExit)
160 ON_COMMAND(ID_TRAY_ABOUTPUMPKIN, OnTrayAboutpumpkin) 165 ON_COMMAND(ID_TRAY_ABOUTPUMPKIN, OnTrayAboutpumpkin)
161 ON_COMMAND(ID_TRAY_FETCHFILE, OnTrayFetchfile) 166 ON_COMMAND(ID_TRAY_FETCHFILE, OnTrayFetchfile)
162 ON_COMMAND(ID_TRAY_HELP, OnTrayHelp) 167 ON_COMMAND(ID_TRAY_HELP, OnTrayHelp)
163 ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions) 168 ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions)
164 ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile) 169 ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile)
165 ON_WM_WINDOWPOSCHANGING() 170 ON_WM_WINDOWPOSCHANGING()
166 ON_LBN_SELCHANGE(IDC_LOG, OnSelchangeLog) 171 ON_LBN_SELCHANGE(IDC_LOG, OnSelchangeLog)
167 ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder) 172 ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder)
168 ON_WM_DROPFILES() 173 ON_WM_DROPFILES()
169 ON_BN_CLICKED(ID_HELP, OnHelp) 174 ON_BN_CLICKED(ID_HELP, OnHelp)
170 ON_BN_CLICKED(IDC_LISTENING, OnListening) 175 ON_BN_CLICKED(IDC_LISTENING, OnListening)
171 ON_COMMAND(ID_TRAY_LISTEN, OnTrayListen) 176 ON_WM_GETMINMAXINFO()
177 ON_WM_SIZE()
172 //}}AFX_MSG_MAP 178 //}}AFX_MSG_MAP
173END_MESSAGE_MAP() 179END_MESSAGE_MAP()
174 180
175///////////////////////////////////////////////////////////////////////////// 181/////////////////////////////////////////////////////////////////////////////
176// CPumpKINDlg message handlers 182// CPumpKINDlg message handlers
177 183
178BOOL CPumpKINDlg::OnInitDialog() 184BOOL CPumpKINDlg::OnInitDialog()
179{ 185{
180 CDialog::OnInitDialog(); 186 CDialog::OnInitDialog();
181 187
182 // Add "About..." menu item to system menu. 188 // Add "About..." menu item to system menu.
183 189
184 // IDM_ABOUTBOX must be in the system command range. 190 // IDM_ABOUTBOX must be in the system command range.
185 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 191 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
186 ASSERT(IDM_ABOUTBOX < 0xF000); 192 ASSERT(IDM_ABOUTBOX < 0xF000);
187 193
188 CMenu* pSysMenu = GetSystemMenu(FALSE); 194 CMenu* pSysMenu = GetSystemMenu(FALSE);
189 CString strAboutMenu; 195 CString strAboutMenu;
190 strAboutMenu.LoadString(IDS_ABOUTBOX); 196 strAboutMenu.LoadString(IDS_ABOUTBOX);
191 if (!strAboutMenu.IsEmpty()) 197 if (!strAboutMenu.IsEmpty())
192 { 198 {
193 pSysMenu->AppendMenu(MF_SEPARATOR); 199 pSysMenu->AppendMenu(MF_SEPARATOR);
194 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 200 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
195 } 201 }
196 202
197 // Set the icon for this dialog. The framework does this automatically 203 // Set the icon for this dialog. The framework does this automatically
198 // when the application's main window is not a dialog 204 // when the application's main window is not a dialog
199 SetIcon(m_hIcon, TRUE); // Set big icon 205 SetIcon(m_hIcon, TRUE); // Set big icon
200 SetIcon(m_hIcon, FALSE); // Set small icon 206 SetIcon(m_hIcon, FALSE); // Set small icon
201 207
202 VERIFY(m_Retrier->Create(NULL,"PumpKIN-Retrier",WS_CHILD,CRect(0,0,0,0),this,0)); 208 VERIFY(m_Retrier->Create(NULL,"PumpKIN-Retrier",WS_CHILD,CRect(0,0,0,0),this,0));
203 209
204
205 m_Images.Create(16,16,TRUE,2,1); 210 m_Images.Create(16,16,TRUE,2,1);
206 m_iRRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_RRQ)); 211 m_iRRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_RRQ));
207 m_iWRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_WRQ)); 212 m_iWRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_WRQ));
208 ASSERT(m_iRRQ>=0); 213 ASSERT(m_iRRQ>=0);
209 ASSERT(m_iWRQ>=0); 214 ASSERT(m_iWRQ>=0);
210 m_List.SetImageList(&m_Images,LVSIL_NORMAL); 215 m_List.SetImageList(&m_Images,LVSIL_NORMAL);
211 m_List.SetImageList(&m_Images,LVSIL_SMALL); 216 m_List.SetImageList(&m_Images,LVSIL_SMALL);
212 m_List.SetImageList(&m_Images,LVSIL_STATE); 217 m_List.SetImageList(&m_Images,LVSIL_STATE);
213 m_List.SetTextColor(RGB(255,255,0));// Yellow 218 m_List.SetTextColor(RGB(255,255,0));// Yellow
214 m_List.SetTextBkColor(RGB(12,167,0));// Green 219 m_List.SetTextBkColor(RGB(12,167,0));// Green
215 m_List.SetBkColor(RGB(12,167,0));// Green 220 m_List.SetBkColor(RGB(12,167,0));// Green
216CRect listrc; 221CRect listrc;
217 m_List.GetClientRect(&listrc); 222 m_List.GetClientRect(&listrc);
218 m_List.InsertColumn(0,"File",LVCFMT_LEFT,listrc.Width()-((listrc.Width()/7)*3+listrc.Width()*2/7),subitemFile); 223 m_List.InsertColumn(0,"File",LVCFMT_LEFT,listrc.Width()-((listrc.Width()/7)*3+listrc.Width()*2/7),subitemFile);
219 m_List.InsertColumn(1,"type",LVCFMT_CENTER,listrc.Width()/7,subitemType); 224 m_List.InsertColumn(1,"type",LVCFMT_CENTER,listrc.Width()/7,subitemType);
220 m_List.InsertColumn(2,"peer",LVCFMT_LEFT,listrc.Width()*2/7,subitemPeer); 225 m_List.InsertColumn(2,"peer",LVCFMT_LEFT,listrc.Width()*2/7,subitemPeer);
221 m_List.InsertColumn(3,"ACK",LVCFMT_RIGHT,listrc.Width()/7,subitemBytes); 226 m_List.InsertColumn(3,"ACK",LVCFMT_RIGHT,listrc.Width()/7,subitemBytes);
222 m_List.InsertColumn(4,"tsize",LVCFMT_RIGHT,listrc.Width()/7,subitemTSize); 227 m_List.InsertColumn(4,"tsize",LVCFMT_RIGHT,listrc.Width()/7,subitemTSize);
223 228
224 LogLine(IDS_LOG_START); 229 LogLine(IDS_LOG_START);
225 230
226 SetupButtons(); 231 SetupButtons();
227 232
233CRect wrci, wrco;
234 GetWindowRect(&wrco);
235 GetClientRect(&wrci);
236CRect brc;
237 m_GetCtl.GetWindowRect(&brc); ScreenToClient(&brc);
238 m_rightGapButtons = wrci.right-brc.right;
239 m_List.GetWindowRect(&brc); ScreenToClient(&brc);
240 m_rightGapList = wrci.right-brc.right;
241 m_ListenCtl.GetWindowRect(&brc); ScreenToClient(&brc);
242 m_bottomGapListen = wrci.bottom-brc.bottom;
243 m_Log.GetWindowRect(&brc);ScreenToClient(&brc);
244 m_bottomGapLog = wrci.bottom-brc.bottom;
245 m_MinSize.cx = wrco.Width(); m_MinSize.cy=wrco.Height();
246
228CRect rc, drc; 247CRect rc, drc;
229 GetWindowRect(rc); 248 GetWindowRect(rc);
230 GetDesktopWindow()->GetWindowRect(drc); 249 GetDesktopWindow()->GetWindowRect(drc);
231 SetWindowPos(NULL,drc.right-6-rc.Width(),6,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER); 250 SetWindowPos(NULL,drc.right-6-rc.Width(),6,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER);
232 251
233 if(m_bShown) 252 if(m_bShown)
234 ShowWindow(SW_SHOW); 253 ShowWindow(SW_SHOW);
235 else 254 else
236 ShowWindow(SW_HIDE); 255 ShowWindow(SW_HIDE);
237 256
238 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); 257 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
239 258
240 // CG: The following block was added by the ToolTips component. 259 // CG: The following block was added by the ToolTips component.
241 { 260 {
242 // Create the ToolTip control. 261 // Create the ToolTip control.
243 m_tooltip.Create(this); 262 m_tooltip.Create(this);
244 m_tooltip.Activate(TRUE); 263 m_tooltip.Activate(TRUE);
245 264
246 m_tooltip.AddTool(&m_List,IDC_CONNECTIONS); 265 m_tooltip.AddTool(&m_List,IDC_CONNECTIONS);
247 m_tooltip.AddTool(GetDlgItem(IDC_PUT),IDC_PUT); 266 m_tooltip.AddTool(GetDlgItem(IDC_PUT),IDC_PUT);
248 m_tooltip.AddTool(GetDlgItem(IDC_GET),IDC_GET); 267 m_tooltip.AddTool(GetDlgItem(IDC_GET),IDC_GET);
249 m_tooltip.AddTool(&m_AbortCtl,IDC_ABORT); 268 m_tooltip.AddTool(&m_AbortCtl,IDC_ABORT);
250 m_tooltip.AddTool(GetDlgItem(IDC_OPTIONS),IDC_OPTIONS); 269 m_tooltip.AddTool(GetDlgItem(IDC_OPTIONS),IDC_OPTIONS);
251 m_tooltip.AddTool(GetDlgItem(IDC_EXIT),IDC_EXIT); 270 m_tooltip.AddTool(GetDlgItem(IDC_EXIT),IDC_EXIT);
252 m_tooltip.AddTool(GetDlgItem(ID_HELP),ID_HELP); 271 m_tooltip.AddTool(GetDlgItem(ID_HELP),ID_HELP);
253 m_tooltip.AddTool(GetDlgItem(IDC_LOG),IDC_LOG); 272 m_tooltip.AddTool(GetDlgItem(IDC_LOG),IDC_LOG);
254 } 273 }
255 return TRUE; // return TRUE unless you set the focus to a control 274 return TRUE; // return TRUE unless you set the focus to a control
256} 275}
257 276
258void CPumpKINDlg::OnSysCommand(UINT nID, LPARAM lParam) 277void CPumpKINDlg::OnSysCommand(UINT nID, LPARAM lParam)
259{ 278{
260 if ((nID & 0xFFF0) == IDM_ABOUTBOX) 279 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
261 { 280 {
262 CAboutDlg dlgAbout; 281 CAboutDlg dlgAbout;
263 dlgAbout.DoModal(); 282 dlgAbout.DoModal();
264 } 283 }
265 else 284 else
266 { 285 {
267 CDialog::OnSysCommand(nID, lParam); 286 CDialog::OnSysCommand(nID, lParam);
268 } 287 }
269} 288}
270 289
271void CPumpKINDlg::OnDestroy() 290void CPumpKINDlg::OnDestroy()
272{ 291{
273 SaveSettings(); 292 SaveSettings();
274 293
275NOTIFYICONDATA nid; 294NOTIFYICONDATA nid;
276 memset(&nid,0,sizeof(nid)); 295 memset(&nid,0,sizeof(nid));
277 nid.cbSize=sizeof(nid); 296 nid.cbSize=sizeof(nid);
278 nid.hWnd=m_Trayer->m_hWnd; 297 nid.hWnd=m_Trayer->m_hWnd;
279 nid.uID=IDC_TRAYICON; 298 nid.uID=IDC_TRAYICON;
280 nid.uFlags=0; 299 nid.uFlags=0;
281 VERIFY(Shell_NotifyIcon(NIM_DELETE,&nid)); 300 VERIFY(Shell_NotifyIcon(NIM_DELETE,&nid));
282 301
283 WinHelp(0L, HELP_QUIT); 302 WinHelp(0L, HELP_QUIT);
284 CDialog::OnDestroy(); 303 CDialog::OnDestroy();
285POSITION p = m_LogTimes.GetStartPosition(); 304POSITION p = m_LogTimes.GetStartPosition();
286 while(p){ 305 while(p){
287 CTime *t,*tt; 306 CTime *t,*tt;
288 m_LogTimes.GetNextAssoc(p,t,tt); 307 m_LogTimes.GetNextAssoc(p,t,tt);
289 ASSERT(t && tt && t==tt); 308 ASSERT(t && tt && t==tt);
290 delete t; 309 delete t;
291 } 310 }
292 // *** Abort and cleanup transfers 311 // *** Abort and cleanup transfers
293 m_LogTimes.RemoveAll(); 312 m_LogTimes.RemoveAll();
294} 313}
295 314
296// If you add a minimize button to your dialog, you will need the code below 315// If you add a minimize button to your dialog, you will need the code below
297// to draw the icon. For MFC applications using the document/view model, 316// to draw the icon. For MFC applications using the document/view model,
298// this is automatically done for you by the framework. 317// this is automatically done for you by the framework.
299 318
300void CPumpKINDlg::OnPaint() 319void CPumpKINDlg::OnPaint()
301{ 320{
302 if (IsIconic()) 321 if (IsIconic())
303 { 322 {
304 CPaintDC dc(this); // device context for painting 323 CPaintDC dc(this); // device context for painting
305 324
306 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 325 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
307 326
308 // Center icon in client rectangle 327 // Center icon in client rectangle
309 int cxIcon = GetSystemMetrics(SM_CXICON); 328 int cxIcon = GetSystemMetrics(SM_CXICON);
310 int cyIcon = GetSystemMetrics(SM_CYICON); 329 int cyIcon = GetSystemMetrics(SM_CYICON);
311 CRect rect; 330 CRect rect;
312 GetClientRect(&rect); 331 GetClientRect(&rect);
313 int x = (rect.Width() - cxIcon + 1) / 2; 332 int x = (rect.Width() - cxIcon + 1) / 2;
314 int y = (rect.Height() - cyIcon + 1) / 2; 333 int y = (rect.Height() - cyIcon + 1) / 2;
315 334
316 // Draw the icon 335 // Draw the icon
317 dc.DrawIcon(x, y, m_hIcon); 336 dc.DrawIcon(x, y, m_hIcon);
318 } 337 }
319 else 338 else
320 { 339 {
321 CPaintDC pDC(this); 340 CPaintDC pDC(this);
322 CDC bmpDC; 341 CDC bmpDC;
323 bmpDC.CreateCompatibleDC(&pDC); 342 bmpDC.CreateCompatibleDC(&pDC);
324 bmpDC.SelectObject(&m_bmpBack); 343 bmpDC.SelectObject(&m_bmpBack);
325 CRect rc; 344 CRect rc;
326 GetClientRect(&rc); 345 GetClientRect(&rc);
327 for(int x=-m_bitmapBack.bmWidth*2/4;x<rc.Width();x+=m_bitmapBack.bmWidth) 346 for(int x=-m_bitmapBack.bmWidth*2/4;x<rc.Width();x+=m_bitmapBack.bmWidth)
328 for(int y=-m_bitmapBack.bmHeight*2/4;y<rc.Height();y+=m_bitmapBack.bmHeight) 347 for(int y=-m_bitmapBack.bmHeight*2/4;y<rc.Height();y+=m_bitmapBack.bmHeight)
329 pDC.BitBlt(x,y,m_bitmapBack.bmWidth,m_bitmapBack.bmHeight,&bmpDC,0,0,SRCCOPY); 348 pDC.BitBlt(x,y,m_bitmapBack.bmWidth,m_bitmapBack.bmHeight,&bmpDC,0,0,SRCCOPY);
330 bmpDC.DeleteDC(); 349 bmpDC.DeleteDC();
331 CDialog::OnPaint(); 350 CDialog::OnPaint();
332 } 351 }
333} 352}
334 353
335// The system calls this to obtain the cursor to display while the user drags 354// The system calls this to obtain the cursor to display while the user drags
336// the minimized window. 355// the minimized window.
337HCURSOR CPumpKINDlg::OnQueryDragIcon() 356HCURSOR CPumpKINDlg::OnQueryDragIcon()
338{ 357{
339 return (HCURSOR) m_hIcon; 358 return (HCURSOR) m_hIcon;
340} 359}
341 360
342int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 361int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
343{ 362{
344 if (CDialog::OnCreate(lpCreateStruct) == -1) 363 if (CDialog::OnCreate(lpCreateStruct) == -1)
345 return -1; 364 return -1;
346 365
347 if(!m_Listener.SetListen(m_bListen)) { 366 if(!m_Listener.SetListen(m_bListen)) {
348 m_bListen=FALSE; 367 m_bListen=FALSE;
349 TRACE0("Failed to create socket\n"); 368 TRACE0("Failed to create socket\n");
350 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); 369 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
351 } 370 }
352 371
353 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){ 372 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){
354 TRACE0("Failed to create trayer\n"); 373 TRACE0("Failed to create trayer\n");
355 return -1; 374 return -1;
356 } 375 }
357 376
358NOTIFYICONDATA nid; 377NOTIFYICONDATA nid;
359 memset(&nid,0,sizeof(nid)); 378 memset(&nid,0,sizeof(nid));
360 nid.cbSize=sizeof(nid); 379 nid.cbSize=sizeof(nid);
361 nid.hWnd=m_Trayer->m_hWnd; 380 nid.hWnd=m_Trayer->m_hWnd;
362 nid.uID=IDC_TRAYICON; 381 nid.uID=IDC_TRAYICON;
363 nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; 382 nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
364 nid.uCallbackMessage=WM_TRAYICON; 383 nid.uCallbackMessage=WM_TRAYICON;
365 nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); 384 nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
366 // *** Load from resource 385 // *** Load from resource
367 strcpy(nid.szTip,"PumpKIN"); 386 strcpy(nid.szTip,"PumpKIN");
368 VERIFY(Shell_NotifyIcon(NIM_ADD,&nid)); 387 VERIFY(Shell_NotifyIcon(NIM_ADD,&nid));
369 388
370 return 0; 389 return 0;
371} 390}
372 391
373void CListenSocket::OnReceive(int nErrorCode) 392void CListenSocket::OnReceive(int nErrorCode)
374{ 393{
375 ASSERT(m_Daddy); 394 ASSERT(m_Daddy);
376 if(nErrorCode){ 395 if(nErrorCode){
377 m_Daddy->LogLine(IDS_LOG_LISTENRECEIVEERROR); 396 m_Daddy->LogLine(IDS_LOG_LISTENRECEIVEERROR);
378 return; 397 return;
379 } 398 }
380DWORD fionread = 0; 399DWORD fionread = 0;
381 VERIFY(IOCtl(FIONREAD,&fionread));// *** Do some checking on the value acquired 400 VERIFY(IOCtl(FIONREAD,&fionread));// *** Do some checking on the value acquired
382tftp *tftpRQ = tftp::Allocate(fionread); 401tftp *tftpRQ = tftp::Allocate(fionread);
383 ASSERT(tftpRQ); 402 ASSERT(tftpRQ);
384SOCKADDR_IN sin; 403SOCKADDR_IN sin;
385 if(!tftpRQ->Receive(this,fionread,&sin)){ 404 if(!tftpRQ->Receive(this,fionread,&sin)){
386 m_Daddy->LogLine(IDS_LOG_LISTENACCEPTERROR); 405 m_Daddy->LogLine(IDS_LOG_LISTENACCEPTERROR);
387 delete tftpRQ; 406 delete tftpRQ;
388 return; 407 return;
389 } 408 }
390 #ifndefNDEBUG 409 #ifndefNDEBUG
391CString tmp; 410CString tmp;
392 tmp.Format("%u - %s - %u\n",tftpRQ->Opcode(),inet_ntoa(sin.sin_addr),sin.sin_port); 411 tmp.Format("%u - %s - %u\n",tftpRQ->Opcode(),inet_ntoa(sin.sin_addr),sin.sin_port);
393 TRACE0(tmp); 412 TRACE0(tmp);
394#endif 413#endif
395POSITION p = m_Daddy->m_Xfers.GetStartPosition(); 414POSITION p = m_Daddy->m_Xfers.GetStartPosition();
396 while(p){ 415 while(p){
397 SOCKET key; 416 SOCKET key;
398 CXferSocket *sock; 417 CXferSocket *sock;
399 m_Daddy->m_Xfers.GetNextAssoc(p,key,sock); 418 m_Daddy->m_Xfers.GetNextAssoc(p,key,sock);
400 ASSERT(sock); 419 ASSERT(sock);
401 if(sock->m_Peer.sin_addr.s_addr==sin.sin_addr.s_addr && sock->m_Peer.sin_port==sin.sin_port){ 420 if(sock->m_Peer.sin_addr.s_addr==sin.sin_addr.s_addr && sock->m_Peer.sin_port==sin.sin_port){
402 TRACE0("Ignoring request which we are already processing\n"); 421 TRACE0("Ignoring request which we are already processing\n");
403 delete tftpRQ; 422 delete tftpRQ;
404 return; 423 return;
405 } 424 }
406 } 425 }
407 switch(tftpRQ->Opcode()){ 426 switch(tftpRQ->Opcode()){
408 case tftp::opRRQ: 427 case tftp::opRRQ:
409 // Read Request 428 // Read Request
410 { 429 {
411 CString tmp; 430 CString tmp;
412 tmp.Format(IDS_LOG_RRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr)); 431 tmp.Format(IDS_LOG_RRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
413 m_Daddy->LogLine(tmp); 432 m_Daddy->LogLine(tmp);
414 CRRQSocket *s = new CRRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin); 433 CRRQSocket *s = new CRRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
415 ASSERT(s); 434 ASSERT(s);
416 tftpRQ->GetOptions(&s->m_Options); 435 tftpRQ->GetOptions(&s->m_Options);
417 if(!s->Create()) 436 if(!s->Create())
418 s->Destroy(FALSE); 437 s->Destroy(FALSE);
419 } 438 }
420 break; 439 break;
421 case tftp::opWRQ: 440 case tftp::opWRQ:
422 // Write Request 441 // Write Request
423 { 442 {
424 CString tmp; 443 CString tmp;
425 tmp.Format(IDS_LOG_WRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr)); 444 tmp.Format(IDS_LOG_WRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
426 m_Daddy->LogLine(tmp); 445 m_Daddy->LogLine(tmp);
427 CWRQSocket *s = new CWRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin); 446 CWRQSocket *s = new CWRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
428 ASSERT(s); 447 ASSERT(s);
429 tftpRQ->GetOptions(&s->m_Options); 448 tftpRQ->GetOptions(&s->m_Options);
430 if(!s->Create(NULL,NULL)) 449 if(!s->Create(NULL,NULL))
431 s->Destroy(FALSE); 450 s->Destroy(FALSE);
432 } 451 }
433 break; 452 break;
434 default: 453 default:
435 m_Daddy->LogLine(IDS_LOG_LISTENOPCODE); 454 m_Daddy->LogLine(IDS_LOG_LISTENOPCODE);
436 delete tftpRQ; 455 delete tftpRQ;
437 return; 456 return;
438 } 457 }
439 delete tftpRQ; 458 delete tftpRQ;
440} 459}
441 460
442BOOL tftp::Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin) 461BOOL tftp::Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin)
443{ 462{
444 ASSERT(socket); 463 ASSERT(socket);
445int saddrLen = sizeof(SOCKADDR_IN); 464int saddrLen = sizeof(SOCKADDR_IN);
446 length = sin ? 465 length = sin ?
447 socket->ReceiveFrom(udpBase(),maxLength,(SOCKADDR*)sin,&saddrLen) 466 socket->ReceiveFrom(udpBase(),maxLength,(SOCKADDR*)sin,&saddrLen)
448 : 467 :
449 socket->Receive(udpBase(),maxLength) 468 socket->Receive(udpBase(),maxLength)
450 ; 469 ;
451 if(!length) 470 if(!length)
452 return FALSE; 471 return FALSE;
453 if(length==(tftpLength)SOCKET_ERROR) 472 if(length==(tftpLength)SOCKET_ERROR)
454 return FALSE; 473 return FALSE;
455 return TRUE; 474 return TRUE;
456} 475}
457 476
458UINT tftp::Opcode() 477UINT tftp::Opcode()
459{ 478{
460 return REVERSEBYTES(opcode); 479 return REVERSEBYTES(opcode);
461} 480}
462 481
463CString tftp::rqFileName() 482CString tftp::rqFileName()
464{ 483{
465 ASSERT(length); 484 ASSERT(length);
466 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ); 485 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ);
467CString rv; 486CString rv;
468 if(memchr(&data.m_RQ.data,0,length-sizeof(opcode))) 487 if(memchr(&data.m_RQ.data,0,length-sizeof(opcode)))
469 rv = (LPCTSTR)data.m_RQ.data; 488 rv = (LPCTSTR)data.m_RQ.data;
470 return rv; 489 return rv;
471} 490}
472 491
473CString tftp::rqType() 492CString tftp::rqType()
474{ 493{
475 ASSERT(length); 494 ASSERT(length);
476 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ); 495 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ);
477CString rv; 496CString rv;
478char *tmp = (char*)memchr(&data.m_RQ.data,0,length-sizeof(opcode)); 497char *tmp = (char*)memchr(&data.m_RQ.data,0,length-sizeof(opcode));
479 if(tmp++) 498 if(tmp++)
480 rv = (LPCTSTR)tmp; 499 rv = (LPCTSTR)tmp;
481 return rv; 500 return rv;
482} 501}
483 502
484UINT tftp::GetOptions(tftp::tftpOptions* ops) 503UINT tftp::GetOptions(tftp::tftpOptions* ops)
485{ 504{
486 ASSERT(length); 505 ASSERT(length);
487 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ || Opcode()==opOACK); 506 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ || Opcode()==opOACK);
488 ASSERT(ops); 507 ASSERT(ops);
489tftpOptions& o = *ops; 508tftpOptions& o = *ops;
490LPSTR base = (LPSTR)&data.m_RQ.data; 509LPSTR base = (LPSTR)&data.m_RQ.data;
491UINT basePtr = 0; 510UINT basePtr = 0;
492 if(Opcode()==opRRQ || Opcode()==opWRQ){ 511 if(Opcode()==opRRQ || Opcode()==opWRQ){
493 base = (LPSTR)memchr(&data.m_RQ.data,0,length-sizeof(opcode)); 512 base = (LPSTR)memchr(&data.m_RQ.data,0,length-sizeof(opcode));
494 if(!base) 513 if(!base)
495 return 0; 514 return 0;
496 base++; 515 base++;
497 basePtr = (base-(LPSTR)&data.m_RQ.data); 516 basePtr = (base-(LPSTR)&data.m_RQ.data);
498 base = (LPSTR)memchr(base,0,length-basePtr); 517 base = (LPSTR)memchr(base,0,length-basePtr);
499 if(!base) 518 if(!base)
500 return 0; 519 return 0;
501 base++; 520 base++;
502 basePtr = (base-(LPSTR)&data.m_RQ.data); 521 basePtr = (base-(LPSTR)&data.m_RQ.data);
503 } 522 }
504 ops->RemoveAll(); 523 ops->RemoveAll();
505UINT rv = 0; 524UINT rv = 0;
506 while(basePtr<(length-sizeof(opcode))){ 525 while(basePtr<(length-sizeof(opcode))){
507 CString onam = (LPSTR)&data.m_RQ.data[basePtr]; 526 CString onam = (LPSTR)&data.m_RQ.data[basePtr];
508 basePtr+=onam.GetLength()+1; 527 basePtr+=onam.GetLength()+1;
509 CString oval = (LPSTR)&data.m_RQ.data[basePtr]; 528 CString oval = (LPSTR)&data.m_RQ.data[basePtr];
510 basePtr+=oval.GetLength()+1; 529 basePtr+=oval.GetLength()+1;
511 onam.MakeLower(); 530 onam.MakeLower();
512 o[onam]=oval; 531 o[onam]=oval;
513 rv++; 532 rv++;
514 } 533 }
515 return rv; 534 return rv;
516} 535}
517 536
518tftp::tftp() 537tftp::tftp()
519{ 538{
520 length=0; 539 length=0;
521} 540}
522 541
523 542
524void CXferSocket::OnSend(int nErrorCode) 543void CXferSocket::OnSend(int nErrorCode)
525{ 544{
526 if(nErrorCode){ 545 if(nErrorCode){
527 ASSERT(m_Daddy); 546 ASSERT(m_Daddy);
528 m_Daddy->LogLine(IDS_LOG_XFERSEND); 547 m_Daddy->LogLine(IDS_LOG_XFERSEND);
529 return; 548 return;
530 } 549 }
531 if(!m_Queue.IsEmpty()){ 550 if(!m_Queue.IsEmpty()){
532 tftp *p = m_Queue.GetHead(); 551 tftp *p = m_Queue.GetHead();
533 ASSERT(p); 552 ASSERT(p);
534 m_Queue.RemoveHead(); 553 m_Queue.RemoveHead();
535 if(!p->Send(this,&m_Peer)){ 554 if(!p->Send(this,&m_Peer)){
536 ASSERT(m_Daddy); 555 ASSERT(m_Daddy);
537 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND); 556 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND);
538 } 557 }
539 delete p; 558 delete p;
540 } 559 }
541 DoSelect(); 560 DoSelect();
542 if(m_Queue.IsEmpty()){ 561 if(m_Queue.IsEmpty()){
543 switch(state){ 562 switch(state){
544 case stateDeny: 563 case stateDeny:
545 Destroy(FALSE); 564 Destroy(FALSE);
546 break; 565 break;
547 case stateFinish: 566 case stateFinish:
548 Destroy(TRUE); 567 Destroy(TRUE);
549 break; 568 break;
550 } 569 }
551 } 570 }
552} 571}
553 572
554BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr) 573BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr)
555{ 574{
556 ASSERT(socket); 575 ASSERT(socket);
557int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN)); 576int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN));
558 if(rv!=length) 577 if(rv!=length)
559 return FALSE; 578 return FALSE;
560 return TRUE; 579 return TRUE;
561} 580}
562 581
563void CXferSocket::DoSelect() 582void CXferSocket::DoSelect()
564{ 583{
565 if(m_Peer.sin_addr.s_addr!=INADDR_NONE) 584 if(m_Peer.sin_addr.s_addr!=INADDR_NONE)
566 AsyncSelect(FD_CLOSE|FD_READ|(m_Queue.IsEmpty()?0:FD_WRITE)); 585 AsyncSelect(FD_CLOSE|FD_READ|(m_Queue.IsEmpty()?0:FD_WRITE));
567} 586}
568 587
569void CXferSocket::OnReceive(int nErrorCode) 588void CXferSocket::OnReceive(int nErrorCode)
570{ 589{
571 if(nErrorCode){ 590 if(nErrorCode){
572 ASSERT(m_Daddy); 591 ASSERT(m_Daddy);
573 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE); 592 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE);
574 return; 593 return;
575 } 594 }
576 ASSERT(m_Daddy); 595 ASSERT(m_Daddy);
577DWORD fionread = 0; 596DWORD fionread = 0;
578 VERIFY(IOCtl(FIONREAD,&fionread)); 597 VERIFY(IOCtl(FIONREAD,&fionread));
579tftp *p = tftp::Allocate(fionread); 598tftp *p = tftp::Allocate(fionread);
580 ASSERT(p); 599 ASSERT(p);
581SOCKADDR_IN sin; 600SOCKADDR_IN sin;
582 if(!p->Receive(this,fionread,&sin)){ 601 if(!p->Receive(this,fionread,&sin)){
583 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE); 602 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE);
584 delete p; 603 delete p;
585 }else 604 }else
586 if(m_Peer.sin_addr.s_addr==INADDR_NONE){ 605 if(m_Peer.sin_addr.s_addr==INADDR_NONE){
587 m_Peer.sin_addr=sin.sin_addr; 606 m_Peer.sin_addr=sin.sin_addr;
588 m_Peer.sin_port=sin.sin_port; 607 m_Peer.sin_port=sin.sin_port;
589 } 608 }
590BOOL alive = TRUE; 609BOOL alive = TRUE;
591 if(state==stateInit){ 610 if(state==stateInit){
592 state=stateXfer; 611 state=stateXfer;
593 m_Peer.sin_port=sin.sin_port; 612 m_Peer.sin_port=sin.sin_port;
594 UpdateList(); 613 UpdateList();
595 } 614 }
596 if(sin.sin_addr.s_addr!=m_Peer.sin_addr.s_addr || sin.sin_port!=m_Peer.sin_port){ 615 if(sin.sin_addr.s_addr!=m_Peer.sin_addr.s_addr || sin.sin_port!=m_Peer.sin_port){
597 m_Daddy->LogLine(IDS_LOG_XFERSOURCETID); 616 m_Daddy->LogLine(IDS_LOG_XFERSOURCETID);
598 // *** Bounce it! 617 // *** Bounce it!
599 }else{ 618 }else{
600 alive = OnTFTP(p); 619 alive = OnTFTP(p);
601 } 620 }
602 delete p; 621 delete p;
603 if(alive){ 622 if(alive){
604 DoSelect(); 623 DoSelect();
605 ResetTimeout(); 624 ResetTimeout();
606 } 625 }
607} 626}
608 627
609void CXferSocket::SetPeer(SOCKADDR_IN *sin) 628void CXferSocket::SetPeer(SOCKADDR_IN *sin)
610{ 629{
611 ASSERT(sin); 630 ASSERT(sin);
612 memmove(&m_Peer,sin,sizeof(m_Peer)); 631 memmove(&m_Peer,sin,sizeof(m_Peer));
613} 632}
614 633
615void CXferSocket::UpdateList() 634void CXferSocket::UpdateList()
616{ 635{
617 ASSERT(m_Daddy); 636 ASSERT(m_Daddy);
618LV_FINDINFO lvf; 637LV_FINDINFO lvf;
619 memset(&lvf,0,sizeof(lvf)); 638 memset(&lvf,0,sizeof(lvf));
620 lvf.flags=LVFI_PARAM; 639 lvf.flags=LVFI_PARAM;
621 lvf.lParam=(LPARAM)this; 640 lvf.lParam=(LPARAM)this;
622int i = m_Daddy->m_List.FindItem(&lvf); 641int i = m_Daddy->m_List.FindItem(&lvf);
623 if(i<0){ 642 if(i<0){
624 ASSERT(IsKindOf(RUNTIME_CLASS(CRRQSocket)) || IsKindOf(RUNTIME_CLASS(CWRQSocket))); 643 ASSERT(IsKindOf(RUNTIME_CLASS(CRRQSocket)) || IsKindOf(RUNTIME_CLASS(CWRQSocket)));
625 i=m_Daddy->m_List.InsertItem(0,m_FileName,IsKindOf(RUNTIME_CLASS(CRRQSocket))?m_Daddy->m_iRRQ:m_Daddy->m_iWRQ); 644 i=m_Daddy->m_List.InsertItem(0,m_FileName,IsKindOf(RUNTIME_CLASS(CRRQSocket))?m_Daddy->m_iRRQ:m_Daddy->m_iWRQ);
626 ASSERT(!(i<0)); 645 ASSERT(!(i<0));
627 m_Daddy->m_List.SetItemData(i,(DWORD)this); 646 m_Daddy->m_List.SetItemData(i,(DWORD)this);
628 } 647 }
629 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName); 648 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName);
630 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemType,m_Type); 649 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemType,m_Type);
631 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemPeer,inet_ntoa(m_Peer.sin_addr)); 650 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemPeer,inet_ntoa(m_Peer.sin_addr));
632CString tmp; 651CString tmp;
633 tmp.Format(IDS_FMT_BYTES,GetACK()); 652 tmp.Format(IDS_FMT_BYTES,GetACK());
634 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemBytes,tmp); 653 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemBytes,tmp);
635 if(m_xferSize>=0){ 654 if(m_xferSize>=0){
636 tmp.Format(IDS_FMT_BYTES,m_xferSize); 655 tmp.Format(IDS_FMT_BYTES,m_xferSize);
637 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemTSize,tmp); 656 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemTSize,tmp);
638 } 657 }
639} 658}
640 659
641CXferSocket::CXferSocket() 660CXferSocket::CXferSocket()
642 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE), 661 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE),
643 m_blkSize(512), m_timeOut(30), m_xferSize(-1), 662 m_blkSize(512), m_timeOut(30), m_xferSize(-1),
644 m__blkSize(512), m__timeOut(30) 663 m__blkSize(512), m__timeOut(30)
645{ 664{
646 m_Daddy=NULL; 665 m_Daddy=NULL;
647 m_Peer.sin_addr.s_addr=INADDR_NONE; 666 m_Peer.sin_addr.s_addr=INADDR_NONE;
648 m_Peer.sin_family=AF_INET; 667 m_Peer.sin_family=AF_INET;
649 state=stateNone; 668 state=stateNone;
650} 669}
651 670
652ULONG CXferSocket::GetACK() 671ULONG CXferSocket::GetACK()
653{ 672{
654 return 0; 673 return 0;
655} 674}
656 675
657CXferSocket::CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin) 676CXferSocket::CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin)
658 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE), 677 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE),
659 m_blkSize(512), m_timeOut(30), m_xferSize(-1), 678 m_blkSize(512), m_timeOut(30), m_xferSize(-1),
660 m__blkSize(512), m__timeOut(30) 679 m__blkSize(512), m__timeOut(30)
661{ 680{
662 m_Peer.sin_family=AF_INET; 681 m_Peer.sin_family=AF_INET;
663 state=stateNone; 682 state=stateNone;
664 ASSERT(daddy); 683 ASSERT(daddy);
665 m_Daddy=daddy; 684 m_Daddy=daddy;
666 m_timeOut=m__timeOut=m_Daddy->m_TFTPTimeOut.GetTotalSeconds(); 685 m_timeOut=m__timeOut=m_Daddy->m_TFTPTimeOut.GetTotalSeconds();
667 if(sin){ 686 if(sin){
668 m_Peer.sin_addr.s_addr=sin->sin_addr.s_addr; 687 m_Peer.sin_addr.s_addr=sin->sin_addr.s_addr;
669 m_Peer.sin_port=sin->sin_port; 688 m_Peer.sin_port=sin->sin_port;
670 }else 689 }else
671 m_Peer.sin_addr.s_addr=INADDR_NONE; 690 m_Peer.sin_addr.s_addr=INADDR_NONE;
672 m_FileName=fileName; 691 m_FileName=fileName;
673 m_Type=type; 692 m_Type=type;
674} 693}
675 694
676BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) 695BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
677{ 696{
678 if(!CAsyncSocket::Create(0,SOCK_DGRAM)) 697 if(!CAsyncSocket::Create(0,SOCK_DGRAM))
679 return FALSE; 698 return FALSE;
680 ASSERT(m_Daddy); 699 ASSERT(m_Daddy);
681 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); 700 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName);
682 m_Daddy->m_Xfers[m_hSocket]=this; 701 m_Daddy->m_Xfers[m_hSocket]=this;
683CString lFile = localFile?localFile:m_FileName; 702CString lFile = localFile?localFile:m_FileName;
684 TurnSlashes(lFile,TRUE); 703 TurnSlashes(lFile,TRUE);
685 UpdateList(); 704 UpdateList();
686 if(!localFile){// Check only for incoming requests 705 if(!localFile){// Check only for incoming requests
687 if(CheckBadRelativeness(m_FileName)){ 706 if(CheckBadRelativeness(m_FileName)){
688 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 707 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
689 return TRUE; 708 return TRUE;
690 } 709 }
691 int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opRRQ,m_Peer.sin_addr.s_addr); 710 int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opRRQ,m_Peer.sin_addr.s_addr);
692 if(atar<0) 711 if(atar<0)
693 atar = m_Daddy->m_RRQMode; 712 atar = m_Daddy->m_RRQMode;
694 switch(atar){ 713 switch(atar){
695 case CPumpKINDlg::rrqGiveAll: 714 case CPumpKINDlg::rrqGiveAll:
696 break; 715 break;
697 case CPumpKINDlg::rrqAlwaysConfirm: 716 case CPumpKINDlg::rrqAlwaysConfirm:
698 if(ConfirmRequest()) 717 if(ConfirmRequest())
699 break; 718 break;
700 default: 719 default:
701 TRACE1("Unexpected access target: %d\n",atar); 720 TRACE1("Unexpected access target: %d\n",atar);
702 case CPumpKINDlg::rrqDenyAll: 721 case CPumpKINDlg::rrqDenyAll:
703 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 722 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
704 return TRUE; 723 return TRUE;
705 } 724 }
706 } 725 }
707CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile); 726CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile);
708CFileException e; 727CFileException e;
709 if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){ 728 if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){
710 if(localFile){ 729 if(localFile){
711 CString tmp; 730 CString tmp;
712 tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn); 731 tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn);
713 m_Daddy->LogLine(tmp); 732 m_Daddy->LogLine(tmp);
714 return FALSE; 733 return FALSE;
715 } 734 }
716 Deny(&e); 735 Deny(&e);
717 return TRUE; 736 return TRUE;
718 } 737 }
719 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION 738 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION
720 if(hostName){ 739 if(hostName){
721 m_HostName=hostName; 740 m_HostName=hostName;
722 741
723 CString tmp; 742 CString tmp;
724 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName); 743 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName);
725 m_Daddy->LogLine(tmp); 744 m_Daddy->LogLine(tmp);
726 745
727 CString inAddr = hostName; 746 CString inAddr = hostName;
728 int at = inAddr.Find('@'); 747 int at = inAddr.Find('@');
729 if(at>=0) 748 if(at>=0)
730 inAddr=inAddr.Mid(at+1); 749 inAddr=inAddr.Mid(at+1);
731 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){ 750 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){
732 ASSERT(!m_wndResolver); 751 ASSERT(!m_wndResolver);
733 m_wndResolver = new CResolver(this); 752 m_wndResolver = new CResolver(this);
734 ASSERT(m_wndResolver); 753 ASSERT(m_wndResolver);
735 return m_wndResolver->Resolve(); 754 return m_wndResolver->Resolve();
736 } 755 }
737 else 756 else
738 OnHostKnown(); 757 OnHostKnown();
739 }else{ 758 }else{
740 tftp::tftpOptions o; 759 tftp::tftpOptions o;
741 CString v; 760 CString v;
742 if(m_Options.Lookup(tftpoBSize,v)){ 761 if(m_Options.Lookup(tftpoBSize,v)){
743 m__blkSize=atoi(v); 762 m__blkSize=atoi(v);
744 if(m__blkSize){ 763 if(m__blkSize){
745 m_blkSize=m__blkSize; 764 m_blkSize=m__blkSize;
746 v.Format("%u",m_blkSize); 765 v.Format("%u",m_blkSize);
747 o[tftpoBSize]=v; 766 o[tftpoBSize]=v;
748 } 767 }
749 } 768 }
750 if(m_Options.Lookup(tftpoTSize,v)){ 769 if(m_Options.Lookup(tftpoTSize,v)){
751 v.Format("%lu",m_xferSize); 770 v.Format("%lu",m_xferSize);
752 o[tftpoTSize]=v; 771 o[tftpoTSize]=v;
753 } 772 }
754 if(m_Options.Lookup(tftpoTOut,v)){ 773 if(m_Options.Lookup(tftpoTOut,v)){
755 m__timeOut=atoi(v); 774 m__timeOut=atoi(v);
756 if(m__timeOut){ 775 if(m__timeOut){
757 m_timeOut=m__timeOut; 776 m_timeOut=m__timeOut;
758 v.Format("%u",m_timeOut); 777 v.Format("%u",m_timeOut);
759 o[tftpoTOut]=v; 778 o[tftpoTOut]=v;
760 } 779 }
761 } 780 }
762 state = stateXfer; 781 state = stateXfer;
763 m_ACK=0; 782 m_ACK=0;
764 if(o.GetCount()){ 783 if(o.GetCount()){
765 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o)); 784 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o));
766 ASSERT(p); 785 ASSERT(p);
767 p->SetOpcode(tftp::opOACK); 786 p->SetOpcode(tftp::opOACK);
768 p->data.m_OACK.Set(&o); 787 p->data.m_OACK.Set(&o);
769 PostTFTP(p,TRUE); 788 PostTFTP(p,TRUE);
770 }else 789 }else
771 DoXfer(); 790 DoXfer();
772 } 791 }
773 return TRUE; 792 return TRUE;
774} 793}
775 794
776CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 795CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
777 : CXferSocket(daddy,fileName,type,sin) 796 : CXferSocket(daddy,fileName,type,sin)
778{ 797{
779 m_ACK=0; 798 m_ACK=0;
780 m_LastSlack=0; 799 m_LastSlack=0;
781} 800}
782 801
783UINT tftp::tftpERROR::tftpSize(LPCTSTR msg) 802UINT tftp::tftpERROR::tftpSize(LPCTSTR msg)
784{ 803{
785 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1; 804 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1;
786} 805}
787 806
788tftp* tftp::Allocate(UINT tftpSize) 807tftp* tftp::Allocate(UINT tftpSize)
789{ 808{
790 ASSERT(tftpSize); 809 ASSERT(tftpSize);
791tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize]; 810tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize];
792 ASSERT(rv); 811 ASSERT(rv);
793 rv->length=tftpSize; 812 rv->length=tftpSize;
794 return rv; 813 return rv;
795} 814}
796 815
797void tftp::errSet(UINT code,LPCTSTR msg) 816void tftp::errSet(UINT code,LPCTSTR msg)
798{ 817{
799 ASSERT(this); 818 ASSERT(this);
800 ASSERT(length>=data.m_ERROR.tftpSize(msg)); 819 ASSERT(length>=data.m_ERROR.tftpSize(msg));
801 strcpy((char*)data.m_ERROR.data,msg); 820 strcpy((char*)data.m_ERROR.data,msg);
802 data.m_ERROR.SetCode(code); 821 data.m_ERROR.SetCode(code);
803} 822}
804 823
805void CXferSocket::PostTFTP(tftp* p,BOOL retryable) 824void CXferSocket::PostTFTP(tftp* p,BOOL retryable)
806{ 825{
807 ASSERT(p); 826 ASSERT(p);
808 m_Queue.AddTail(p); 827 m_Queue.AddTail(p);
809 DoSelect(); 828 DoSelect();
810 if(!m_bRetry){ 829 if(!m_bRetry){
811 if(retryable) 830 if(retryable)
812 SetTry(p); 831 SetTry(p);
813 else 832 else
814 SetTry(); 833 SetTry();
815 } 834 }
816 ResetTimeout(); 835 ResetTimeout();
817} 836}
818 837
819void CXferSocket::Deny(UINT errCode,UINT errID) 838void CXferSocket::Deny(UINT errCode,UINT errID)
820{ 839{
821 PostError(errCode,errID); 840 PostError(errCode,errID);
822 state=stateDeny; 841 state=stateDeny;
823} 842}
824 843
825void CRRQSocket::DoXfer() 844void CRRQSocket::DoXfer()
826{ 845{
827tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize)); 846tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize));
828 ASSERT(p); 847 ASSERT(p);
829 p->SetOpcode(tftp::opDATA); 848 p->SetOpcode(tftp::opDATA);
830 TRY{ 849 TRY{
831 m_File.Seek(m_ACK*m_blkSize,CFile::begin); 850 m_File.Seek(m_ACK*m_blkSize,CFile::begin);
832 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize); 851 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize);
833 p->data.m_DATA.SetBlock(m_ACK+1); 852 p->data.m_DATA.SetBlock(m_ACK+1);
834 p->length=p->length-m_blkSize+bytes; 853 p->length=p->length-m_blkSize+bytes;
835 m_LastSlack = m_blkSize-bytes; 854 m_LastSlack = m_blkSize-bytes;
836 PostTFTP(p); 855 PostTFTP(p);
837 if(bytes<m_blkSize){ 856 if(bytes<m_blkSize){
838 state=stateFinish; 857 state=stateFinish;
839 ASSERT(m_Daddy); 858 ASSERT(m_Daddy);
840 CString tmp; 859 CString tmp;
841 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName); 860 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName);
842 m_Daddy->LogLine(tmp); 861 m_Daddy->LogLine(tmp);
843 } 862 }
844 }CATCH(CFileException,e){ 863 }CATCH(CFileException,e){
845 Deny(e); 864 Deny(e);
846 }END_CATCH 865 }END_CATCH
847} 866}
848 867
849UINT tftp::tftpDATA::tftpSize(UINT blkSize) 868UINT tftp::tftpDATA::tftpSize(UINT blkSize)
850{ 869{
851 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA) 870 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA)
852 -sizeof(BYTE)+blkSize; 871 -sizeof(BYTE)+blkSize;
853} 872}
854 873
855void CXferSocket::Deny(CFileException* e) 874void CXferSocket::Deny(CFileException* e)
856{ 875{
857 PostError(e); 876 PostError(e);
858 state=stateDeny; 877 state=stateDeny;
859} 878}
860 879
861void CXferSocket::PostError(UINT errCode,UINT errID) 880void CXferSocket::PostError(UINT errCode,UINT errID)
862{ 881{
863CString msg; 882CString msg;
864 msg.LoadString(errID); 883 msg.LoadString(errID);
865 ASSERT(m_Daddy); 884 ASSERT(m_Daddy);
866 /*// *** 885 /*// ***
867CString tmp; 886CString tmp;
868 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg); 887 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg);
869 m_Daddy->LogLine(tmp); 888 m_Daddy->LogLine(tmp);
870 */ 889 */
871tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg)); 890tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg));
872err->SetOpcode(tftp::opERROR); 891err->SetOpcode(tftp::opERROR);
873 err->errSet(errCode,msg); 892 err->errSet(errCode,msg);
874 PostTFTP(err); 893 PostTFTP(err);
875} 894}
876 895
877void CXferSocket::PostError(CFileException* e) 896void CXferSocket::PostError(CFileException* e)
878{ 897{
879UINT eCode; 898UINT eCode;
880UINT eMsgID; 899UINT eMsgID;
881 switch(e->m_cause){ 900 switch(e->m_cause){
882 case CFileException::fileNotFound: 901 case CFileException::fileNotFound:
883 eCode=tftp::errNotFound; 902 eCode=tftp::errNotFound;
884 eMsgID=IDS_TFTP_ERROR_NOTFOUND; 903 eMsgID=IDS_TFTP_ERROR_NOTFOUND;
885 break; 904 break;
886 case CFileException::accessDenied: 905 case CFileException::accessDenied:
887 eCode=tftp::errAccessViolation; 906 eCode=tftp::errAccessViolation;
888 eMsgID=IDS_TFTP_ERROR_ACCESS; 907 eMsgID=IDS_TFTP_ERROR_ACCESS;
889 break; 908 break;
890 case CFileException::directoryFull: 909 case CFileException::directoryFull:
891 eCode=tftp::errDiskFull; 910 eCode=tftp::errDiskFull;
892 eMsgID=IDS_TFTP_ERROR_DIRFULL; 911 eMsgID=IDS_TFTP_ERROR_DIRFULL;
893 break; 912 break;
894 case CFileException::sharingViolation: 913 case CFileException::sharingViolation:
895 eCode=tftp::errAccessViolation; 914 eCode=tftp::errAccessViolation;
896 eMsgID=IDS_TFTP_ERROR_SHARING; 915 eMsgID=IDS_TFTP_ERROR_SHARING;
897 break; 916 break;
898 case CFileException::diskFull: 917 case CFileException::diskFull:
899 eCode=tftp::errDiskFull; 918 eCode=tftp::errDiskFull;
900 eMsgID=IDS_TFTP_ERROR_DISKFULL; 919 eMsgID=IDS_TFTP_ERROR_DISKFULL;
901 break; 920 break;
902 default: 921 default:
903 eCode=tftp::errUndefined; 922 eCode=tftp::errUndefined;
904 eMsgID=IDS_TFTP_ERROR_UNDEFINED; 923 eMsgID=IDS_TFTP_ERROR_UNDEFINED;
905 break; 924 break;
906 } 925 }
907 PostError(eCode,eMsgID); 926 PostError(eCode,eMsgID);
908} 927}
909 928
910ULONG CRRQSocket::GetACK(void) 929ULONG CRRQSocket::GetACK(void)
911{ 930{
912 return (m_ACK*m_blkSize)-m_LastSlack; 931 return (m_ACK*m_blkSize)-m_LastSlack;
913} 932}
914 933
915BOOL CRRQSocket::OnTFTP(tftp* p) 934BOOL CRRQSocket::OnTFTP(tftp* p)
916{ 935{
917BOOL rv = TRUE; 936BOOL rv = TRUE;
918 switch(p->Opcode()){ 937 switch(p->Opcode()){
919 case tftp::opOACK: 938 case tftp::opOACK:
920 m_ACK=0; 939 m_ACK=0;
921 ASSERT(state!=stateFinish); 940 ASSERT(state!=stateFinish);
922 { 941 {
923 tftp::tftpOptions o; 942 tftp::tftpOptions o;
924 if(p->GetOptions(&o)){ 943 if(p->GetOptions(&o)){
925 CString v; 944 CString v;
926 if(o.Lookup(tftpoBSize,v)){ 945 if(o.Lookup(tftpoBSize,v)){
927 m_blkSize=atoi(v); 946 m_blkSize=atoi(v);
928 if(!m_blkSize){// *** More sanity checks 947 if(!m_blkSize){// *** More sanity checks
929 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 948 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
930 rv = TRUE; 949 rv = TRUE;
931 break; 950 break;
932 } 951 }
933 } 952 }
934 if(o.Lookup(tftpoTOut,v)){ 953 if(o.Lookup(tftpoTOut,v)){
935 m_timeOut=atoi(v); 954 m_timeOut=atoi(v);
936 if(!m_timeOut){// *** More sanity checks 955 if(!m_timeOut){// *** More sanity checks
937 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 956 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
938 rv = TRUE; 957 rv = TRUE;
939 break; 958 break;
940 } 959 }
941 } 960 }
942 if(o.Lookup(tftpoXResume,v)){ 961 if(o.Lookup(tftpoXResume,v)){
943 m_ACK=atoi(v); 962 m_ACK=atoi(v);
944 } 963 }
945 } 964 }
946 UpdateList(); 965 UpdateList();
947 DoXfer(); 966 DoXfer();
948 } 967 }
949 break; 968 break;
950 case tftp::opACK: 969 case tftp::opACK:
951 m_ACK=p->data.m_ACK.Block(); 970 m_ACK=p->data.m_ACK.Block();
952 if(state!=stateFinish){ 971 if(state!=stateFinish){
953 UpdateList(); 972 UpdateList();
954 DoXfer(); 973 DoXfer();
955 } 974 }
956 break; 975 break;
957 case tftp::opERROR: 976 case tftp::opERROR:
958 { 977 {
959 ASSERT(m_Daddy); 978 ASSERT(m_Daddy);
960 CString tmp; 979 CString tmp;
961 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage()); 980 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage());
962 m_Daddy->LogLine(tmp); 981 m_Daddy->LogLine(tmp);
963 } 982 }
964 Destroy(FALSE); 983 Destroy(FALSE);
965 rv = FALSE; 984 rv = FALSE;
966 break; 985 break;
967 default: 986 default:
968 { 987 {
969 ASSERT(m_Daddy); 988 ASSERT(m_Daddy);
970 CString tmp; 989 CString tmp;
971 tmp.Format(IDS_LOG_XFEROPCODE,p->Opcode()); 990 tmp.Format(IDS_LOG_XFEROPCODE,p->Opcode());
972 m_Daddy->LogLine(tmp); 991 m_Daddy->LogLine(tmp);
973 // *** Self destruct maybe?? 992 // *** Self destruct maybe??
974 } 993 }
975 break; 994 break;
976 } 995 }
977 return rv; 996 return rv;
978} 997}
979 998
980BOOL CWRQSocket::OnTFTP(tftp* p) 999BOOL CWRQSocket::OnTFTP(tftp* p)
981{ 1000{
982 switch(p->Opcode()){ 1001 switch(p->Opcode()){
983 case tftp::opOACK: 1002 case tftp::opOACK:
984 ASSERT(state!=stateFinish); 1003 ASSERT(state!=stateFinish);
985 { 1004 {
986 if(m_bResume) 1005 if(m_bResume)
987 m_ACK=m_File.GetLength()/m_blkSize; 1006 m_ACK=m_File.GetLength()/m_blkSize;
988 else 1007 else
989 m_ACK=0; 1008 m_ACK=0;
990 tftp::tftpOptions o; 1009 tftp::tftpOptions o;
991 if(p->GetOptions(&o)){ 1010 if(p->GetOptions(&o)){
992 CString v; 1011 CString v;
993 if(o.Lookup(tftpoBSize,v)){ 1012 if(o.Lookup(tftpoBSize,v)){
994 m_blkSize=atoi(v); 1013 m_blkSize=atoi(v);
995 if(!m_blkSize){// *** More sanity checks 1014 if(!m_blkSize){// *** More sanity checks
996 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 1015 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
997 return TRUE; 1016 return TRUE;
998 } 1017 }
999 } 1018 }
1000 if(o.Lookup(tftpoTOut,v)){ 1019 if(o.Lookup(tftpoTOut,v)){
1001 m_timeOut=atoi(v); 1020 m_timeOut=atoi(v);
1002 if(!m_timeOut){// *** More sanity checks 1021 if(!m_timeOut){// *** More sanity checks
1003 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 1022 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
1004 return TRUE; 1023 return TRUE;
1005 } 1024 }
1006 } 1025 }
1007 if(o.Lookup(tftpoTSize,v)){ 1026 if(o.Lookup(tftpoTSize,v)){
1008 m_xferSize=atoi(v); 1027 m_xferSize=atoi(v);
1009 } 1028 }
1010 } 1029 }
1011 UpdateList(); 1030 UpdateList();
1012 DoXfer(); 1031 DoXfer();
1013 } 1032 }
1014 break; 1033 break;
1015 case tftp::opDATA: 1034 case tftp::opDATA:
1016 { 1035 {
1017 UINTblock = p->data.m_DATA.Block(); 1036 UINTblock = p->data.m_DATA.Block();
1018 TRY{ 1037 TRY{
1019 m_File.Seek((block-1)*m_blkSize,CFile::begin); 1038 m_File.Seek((block-1)*m_blkSize,CFile::begin);
1020 int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize); 1039 int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize);
1021 if(bytes){ 1040 if(bytes){
1022 m_File.Write(p->data.m_DATA.data,bytes); 1041 m_File.Write(p->data.m_DATA.data,bytes);
1023 // *** Move to the other place where we can do it not that often 1042 // *** Move to the other place where we can do it not that often
1024 m_File.SetLength(m_File.GetPosition()); 1043 m_File.SetLength(m_File.GetPosition());
1025 } 1044 }
1026 if(bytes<m_blkSize){ 1045 if(bytes<m_blkSize){
1027 state=stateFinish; 1046 state=stateFinish;
1028 ASSERT(m_Daddy); 1047 ASSERT(m_Daddy);
1029 CString tmp; 1048 CString tmp;
1030 tmp.Format(IDS_LOG_XFERWRQFINISHED,(LPCTSTR)m_FileName); 1049 tmp.Format(IDS_LOG_XFERWRQFINISHED,(LPCTSTR)m_FileName);
1031 m_Daddy->LogLine(tmp); 1050 m_Daddy->LogLine(tmp);
1032 } 1051 }
1033 m_ACK=block; 1052 m_ACK=block;
1034 m_LastSlack=m_blkSize-bytes; 1053 m_LastSlack=m_blkSize-bytes;
1035 UpdateList(); 1054 UpdateList();
1036 DoXfer(); 1055 DoXfer();
1037 }CATCH(CFileException,e){ 1056 }CATCH(CFileException,e){
1038 Deny(e); 1057 Deny(e);
1039 }END_CATCH 1058 }END_CATCH
1040 } 1059 }
1041 break; 1060 break;
1042 case tftp::opERROR: 1061 case tftp::opERROR:
1043 { 1062 {
1044 ASSERT(m_Daddy); 1063 ASSERT(m_Daddy);
1045 CString tmp; 1064 CString tmp;
1046 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage()); 1065 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage());
1047 m_Daddy->LogLine(tmp); 1066 m_Daddy->LogLine(tmp);
1048 } 1067 }
1049 Destroy(FALSE); 1068 Destroy(FALSE);
1050 return FALSE; 1069 return FALSE;
1051 default: 1070 default:
1052 { 1071 {
1053 ASSERT(m_Daddy); 1072 ASSERT(m_Daddy);
1054 CString tmp; 1073 CString tmp;
1055 tmp.Format(IDS_LOG_XFEROPCODE,p->Opcode()); 1074 tmp.Format(IDS_LOG_XFEROPCODE,p->Opcode());
1056 m_Daddy->LogLine(tmp); 1075 m_Daddy->LogLine(tmp);
1057 // *** Self destruct maybe?? 1076 // *** Self destruct maybe??
1058 } 1077 }
1059 break; 1078 break;
1060 } 1079 }
1061 return TRUE; 1080 return TRUE;
1062} 1081}
1063 1082
1064void tftp::SetOpcode(WORD op) 1083void tftp::SetOpcode(WORD op)
1065{ 1084{
1066 opcode = REVERSEBYTES(op); 1085 opcode = REVERSEBYTES(op);
1067} 1086}
1068void tftp::tftpDATA::SetBlock(WORD b) 1087void tftp::tftpDATA::SetBlock(WORD b)
1069{ 1088{
1070 block=REVERSEBYTES(b); 1089 block=REVERSEBYTES(b);
1071} 1090}
1072WORD tftp::tftpDATA::Block() 1091WORD tftp::tftpDATA::Block()
1073{ 1092{
1074 return REVERSEBYTES(block); 1093 return REVERSEBYTES(block);
1075} 1094}
1076WORD tftp::tftpACK::Block() 1095WORD tftp::tftpACK::Block()
1077{ 1096{
1078 return REVERSEBYTES(block); 1097 return REVERSEBYTES(block);
1079} 1098}
1080void tftp::tftpACK::SetBlock(WORD b) 1099void tftp::tftpACK::SetBlock(WORD b)
1081{ 1100{
1082 block = REVERSEBYTES(b); 1101 block = REVERSEBYTES(b);
1083} 1102}
1084WORD tftp::tftpERROR::Code() 1103WORD tftp::tftpERROR::Code()
1085{ 1104{
1086 return REVERSEBYTES(code); 1105 return REVERSEBYTES(code);
1087} 1106}
1088void tftp::tftpERROR::SetCode(WORD c) 1107void tftp::tftpERROR::SetCode(WORD c)
1089{ 1108{
1090 code = REVERSEBYTES(c); 1109 code = REVERSEBYTES(c);
1091} 1110}
1092 1111
1093 1112
1094CString tftp::errMessage() 1113CString tftp::errMessage()
1095{ 1114{
1096CString rv; 1115CString rv;
1097 if(memchr(data.m_ERROR.data,0,length-(tftpHdrSize-tftpSlackSize)-sizeof(data.m_ERROR.code))) 1116 if(memchr(data.m_ERROR.data,0,length-(tftpHdrSize-tftpSlackSize)-sizeof(data.m_ERROR.code)))
1098 rv = (LPCTSTR)data.m_ERROR.data; 1117 rv = (LPCTSTR)data.m_ERROR.data;
1099 return rv; 1118 return rv;
1100} 1119}
1101 1120
1102void CXferSocket::Destroy(BOOL success) 1121void CXferSocket::Destroy(BOOL success)
1103{ 1122{
1104 if(m_wndResolver){ 1123 if(m_wndResolver){
1105 delete m_wndResolver; 1124 delete m_wndResolver;
1106 m_wndResolver=NULL; 1125 m_wndResolver=NULL;
1107 } 1126 }
1108 SetTry(); 1127 SetTry();
1109 m_Daddy->m_bnw.StartSound( 1128 m_Daddy->m_bnw.StartSound(
1110 success 1129 success
1111 ? m_Daddy->m_bnwSuccess 1130 ? m_Daddy->m_bnwSuccess
1112 : m_Daddy->m_bnwAbort 1131 : m_Daddy->m_bnwAbort
1113 ); 1132 );
1114 if(m_File.m_hFile!=CFile::hFileNull){ 1133 if(m_File.m_hFile!=CFile::hFileNull){
1115 TRY{ 1134 TRY{
1116 m_File.Close(); 1135 m_File.Close();
1117 }CATCH(CFileException,e){ 1136 }CATCH(CFileException,e){
1118 TRACE0("Error closing file\n"); 1137 TRACE0("Error closing file\n");
1119 }END_CATCH 1138 }END_CATCH
1120 } 1139 }
1121 ASSERT(m_Daddy); 1140 ASSERT(m_Daddy);
1122 m_Daddy->KillTimer(m_hSocket); 1141 m_Daddy->KillTimer(m_hSocket);
1123 m_Daddy->m_Xfers.RemoveKey(m_hSocket); 1142 m_Daddy->m_Xfers.RemoveKey(m_hSocket);
1124LV_FINDINFO lvf; 1143LV_FINDINFO lvf;
1125 memset(&lvf,0,sizeof(lvf)); 1144 memset(&lvf,0,sizeof(lvf));
1126 lvf.flags=LVFI_PARAM; 1145 lvf.flags=LVFI_PARAM;
1127 lvf.lParam=(LPARAM)this; 1146 lvf.lParam=(LPARAM)this;
1128int i = m_Daddy->m_List.FindItem(&lvf); 1147int i = m_Daddy->m_List.FindItem(&lvf);
1129 if(i>=0) 1148 if(i>=0)
1130 m_Daddy->m_List.DeleteItem(i); 1149 m_Daddy->m_List.DeleteItem(i);
1131 delete this; 1150 delete this;
1132} 1151}
1133 1152
1134void CPumpKINDlg::LogLineToScreen(LPCTSTR str) 1153void CPumpKINDlg::LogLineToScreen(LPCTSTR str)
1135{ 1154{
1136 ASSERT(m_LogLength); 1155 ASSERT(m_LogLength);
1137 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){ 1156 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){
1138 CTime *t = (CTime*)m_Log.GetItemData(0); 1157 CTime *t = (CTime*)m_Log.GetItemData(0);
1139 if(((DWORD)t)!=LB_ERR){ 1158 if(((DWORD)t)!=LB_ERR){
1140 ASSERT(t); 1159 ASSERT(t);
1141 m_LogTimes.RemoveKey(t); 1160 m_LogTimes.RemoveKey(t);
1142 delete t; 1161 delete t;
1143 } 1162 }
1144 m_Log.DeleteString(0); 1163 m_Log.DeleteString(0);
1145 } 1164 }
1146int i = m_Log.AddString(str); 1165int i = m_Log.AddString(str);
1147 ASSERT(i!=LB_ERR); 1166 ASSERT(i!=LB_ERR);
1148CTime *t = new CTime(CTime::GetCurrentTime()); 1167CTime *t = new CTime(CTime::GetCurrentTime());
1149 m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t)); 1168 m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t));
1150 m_Log.SetCurSel(i); 1169 m_Log.SetCurSel(i);
1151} 1170}
1152 1171
1153void CPumpKINDlg::LogLine(UINT msgID) 1172void CPumpKINDlg::LogLine(UINT msgID)
1154{ 1173{
1155CString tmp; 1174CString tmp;
1156 tmp.Format(msgID); 1175 tmp.Format(msgID);
1157 LogLine(tmp); 1176 LogLine(tmp);
1158} 1177}
1159 1178
1160void CXferSocket::TurnSlashes(CString& fn,BOOL bBack) 1179void CXferSocket::TurnSlashes(CString& fn,BOOL bBack)
1161{ 1180{
1162 ints = fn.Find(bBack?'/':'\\'); 1181 ints = fn.Find(bBack?'/':'\\');
1163 while(s>=0){ 1182 while(s>=0){
1164 fn.SetAt(s,bBack?'\\':'/'); 1183 fn.SetAt(s,bBack?'\\':'/');
1165 s = fn.Find(bBack?'/':'\\'); 1184 s = fn.Find(bBack?'/':'\\');
1166 } 1185 }
1167} 1186}
1168 1187
1169CString CXferSocket::ApplyRoot(LPCTSTR fileName) 1188CString CXferSocket::ApplyRoot(LPCTSTR fileName)
1170{ 1189{
1171 ASSERT(m_Daddy); 1190 ASSERT(m_Daddy);
1172CString fn = fileName; 1191CString fn = fileName;
1173CString rv = m_Daddy->m_TFTPRoot; 1192CString rv = m_Daddy->m_TFTPRoot;
1174 if(rv.IsEmpty()) 1193 if(rv.IsEmpty())
1175 rv = "."; 1194 rv = ".";
1176 if(rv[rv.GetLength()-1]!='\\') 1195 if(rv[rv.GetLength()-1]!='\\')
1177 rv+="\\"; 1196 rv+="\\";
1178 while((!fn.IsEmpty()) && fn[0]=='\\') 1197 while((!fn.IsEmpty()) && fn[0]=='\\')
1179 fn=fn.Mid(1); 1198 fn=fn.Mid(1);
1180 rv+=fn; 1199 rv+=fn;
1181 return rv; 1200 return rv;
1182} 1201}
1183 1202
1184void CPumpKINDlg::OnOptions() 1203void CPumpKINDlg::OnOptions()
1185{ 1204{
1186CPropertySheet cps(IDS_TITLE_OPTIONS,this); 1205CPropertySheet cps(IDS_TITLE_OPTIONS,this);
1187CPropsServer server; 1206CPropsServer server;
1188CPropsNetwork network; 1207CPropsNetwork network;
1189CPropsSounds sounds; 1208CPropsSounds sounds;
1190CPropsACL acl; 1209CPropsACL acl;
1191 1210
1192 server.m_RRQMode=m_RRQMode; 1211 server.m_RRQMode=m_RRQMode;
1193 server.m_TFTPRoot=m_TFTPRoot; 1212 server.m_TFTPRoot=m_TFTPRoot;
1194 server.m_TFTPSubdirs=m_bTFTPSubdirs; 1213 server.m_TFTPSubdirs=m_bTFTPSubdirs;
1195 server.m_WRQMode=m_WRQMode; 1214 server.m_WRQMode=m_WRQMode;
1196 server.m_PromptTimeOut=m_PromptTimeOut; 1215 server.m_PromptTimeOut=m_PromptTimeOut;
1197 server.m_LogFile=m_LogFile; 1216 server.m_LogFile=m_LogFile;
1198 1217
1199 network.m_ListenPort=m_ListenPort; 1218 network.m_ListenPort=m_ListenPort;
1200 network.m_SpeakPort=m_SpeakPort; 1219 network.m_SpeakPort=m_SpeakPort;
1201 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds(); 1220 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds();
1202 network.m_BlockSize=m_BlockSize; 1221 network.m_BlockSize=m_BlockSize;
1203 1222
1204 sounds.m_Request = m_bnwRequest; 1223 sounds.m_Request = m_bnwRequest;
1205 sounds.m_Success = m_bnwSuccess; 1224 sounds.m_Success = m_bnwSuccess;
1206 sounds.m_Abort = m_bnwAbort; 1225 sounds.m_Abort = m_bnwAbort;
1207 1226
1208 acl.m_rulist = m_aclRules; 1227 acl.m_rulist = m_aclRules;
1209 1228
1210 cps.AddPage(&server); 1229 cps.AddPage(&server);
1211 cps.AddPage(&network); 1230 cps.AddPage(&network);
1212 cps.AddPage(&sounds); 1231 cps.AddPage(&sounds);
1213 cps.AddPage(&acl); 1232 cps.AddPage(&acl);
1214 if(cps.DoModal()==IDOK){ 1233 if(cps.DoModal()==IDOK){
1215 m_RRQMode=server.m_RRQMode; 1234 m_RRQMode=server.m_RRQMode;
1216 m_TFTPRoot=server.m_TFTPRoot; 1235 m_TFTPRoot=server.m_TFTPRoot;
1217 m_bTFTPSubdirs=server.m_TFTPSubdirs; 1236 m_bTFTPSubdirs=server.m_TFTPSubdirs;
1218 m_WRQMode=server.m_WRQMode; 1237 m_WRQMode=server.m_WRQMode;
1219 m_PromptTimeOut=server.m_PromptTimeOut; 1238 m_PromptTimeOut=server.m_PromptTimeOut;
1220 m_LogFile=server.m_LogFile; 1239 m_LogFile=server.m_LogFile;
1221 1240
1222 m_ListenPort=network.m_ListenPort; 1241 m_ListenPort=network.m_ListenPort;
1223 m_SpeakPort=network.m_SpeakPort; 1242 m_SpeakPort=network.m_SpeakPort;
1224 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut); 1243 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut);
1225 m_BlockSize=network.m_BlockSize; 1244 m_BlockSize=network.m_BlockSize;
1226 1245
1227 m_bnwRequest = sounds.m_Request; 1246 m_bnwRequest = sounds.m_Request;
1228 m_bnwSuccess = sounds.m_Success; 1247 m_bnwSuccess = sounds.m_Success;
1229 m_bnwAbort = sounds.m_Abort; 1248 m_bnwAbort = sounds.m_Abort;
1230 1249
1231 m_aclRules = acl.m_rulist; 1250 m_aclRules = acl.m_rulist;
1232 1251
1233 m_lastlogerr.Empty(); 1252 m_lastlogerr.Empty();
1234 } 1253 }
1235} 1254}
1236 1255
1237BOOL CRRQSocket::ConfirmRequest() 1256BOOL CRRQSocket::ConfirmRequest()
1238{ 1257{
1239CConfirmRRQDlg cd(NULL); 1258CConfirmRRQDlg cd(NULL);
1240 cd.m_Daddy=this; 1259 cd.m_Daddy=this;
1241 cd.m_File=m_FileName; 1260 cd.m_File=m_FileName;
1242 cd.m_Host=inet_ntoa(m_Peer.sin_addr); 1261 cd.m_Host=inet_ntoa(m_Peer.sin_addr);
1243 if(cd.DoModal()==IDOK) 1262 if(cd.DoModal()==IDOK)
1244 return TRUE; 1263 return TRUE;
1245 return FALSE; 1264 return FALSE;
1246} 1265}
1247 1266
1248CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 1267CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
1249 : CXferSocket(daddy,fileName,type,sin) 1268 : CXferSocket(daddy,fileName,type,sin)
1250{ 1269{
1251 state=stateNone; 1270 state=stateNone;
1252 m_ACK=0; 1271 m_ACK=0;
1253 m_LastSlack=0; 1272 m_LastSlack=0;
1254 m_bResume=FALSE; 1273 m_bResume=FALSE;
1255} 1274}
1256 1275
1257BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) 1276BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
1258{ 1277{
1259 if(!CAsyncSocket::Create(0,SOCK_DGRAM)) 1278 if(!CAsyncSocket::Create(0,SOCK_DGRAM))
1260 return FALSE; 1279 return FALSE;
1261 ASSERT(m_Daddy); 1280 ASSERT(m_Daddy);
1262 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); 1281 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName);
1263 m_Daddy->m_Xfers[m_hSocket]=this; 1282 m_Daddy->m_Xfers[m_hSocket]=this;
1264 UpdateList(); 1283 UpdateList();
1265CString lf; 1284CString lf;
1266 if(!localFile) { 1285 if(!localFile) {
1267 lf = m_FileName; 1286 lf = m_FileName;
1268 TurnSlashes(lf,TRUE); 1287 TurnSlashes(lf,TRUE);
1269 } 1288 }
1270CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf); 1289CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
1271 if(!localFile){// This is an incoming request.. 1290 if(!localFile){// This is an incoming request..
1272 if(CheckBadRelativeness(m_FileName)){ 1291 if(CheckBadRelativeness(m_FileName)){
1273 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 1292 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
1274 return TRUE; 1293 return TRUE;
1275 } 1294 }
1276 BOOL exists; 1295 BOOL exists;
1277 if(!_access((LPCTSTR)fn,0)) 1296 if(!_access((LPCTSTR)fn,0))
1278 m_Rename=exists=TRUE; 1297 m_Rename=exists=TRUE;
1279 else 1298 else
1280 m_Rename=exists=FALSE; 1299 m_Rename=exists=FALSE;
1281 int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opWRQ,m_Peer.sin_addr.s_addr); 1300 int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opWRQ,m_Peer.sin_addr.s_addr);
1282 if(atar<0) 1301 if(atar<0)
1283 atar=m_Daddy->m_WRQMode; 1302 atar=m_Daddy->m_WRQMode;
1284 switch(atar){ 1303 switch(atar){
1285 case CPumpKINDlg::wrqTakeAll: 1304 case CPumpKINDlg::wrqTakeAll:
1286 if(exists){ 1305 if(exists){
1287 if(!RenameFile(fn)){ 1306 if(!RenameFile(fn)){
1288 Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME); 1307 Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME);
1289 return TRUE; 1308 return TRUE;
1290 } 1309 }
1291 } 1310 }
1292 break; 1311 break;
1293 case CPumpKINDlg::wrqConfirmIfExists: 1312 case CPumpKINDlg::wrqConfirmIfExists:
1294 if(!exists) 1313 if(!exists)
1295 break; 1314 break;
1296 case CPumpKINDlg::wrqAlwaysConfirm: 1315 case CPumpKINDlg::wrqAlwaysConfirm:
1297 if(exists) 1316 if(exists)
1298 m_bResume=TRUE; 1317 m_bResume=TRUE;
1299 if(ConfirmRequest()){ 1318 if(ConfirmRequest()){
1300 if(m_Rename){ 1319 if(m_Rename){
1301 RenameFile(fn); 1320 RenameFile(fn);
1302 if(SaveAs(fn)) 1321 if(SaveAs(fn))
1303 break; 1322 break;
1304 }else 1323 }else
1305 break; 1324 break;
1306 } 1325 }
1307 default: 1326 default:
1308 TRACE1("Unexpected access target: %d\n",atar); 1327 TRACE1("Unexpected access target: %d\n",atar);
1309 case CPumpKINDlg::wrqDenyAll: 1328 case CPumpKINDlg::wrqDenyAll:
1310 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 1329 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
1311 return TRUE; 1330 return TRUE;
1312 } 1331 }
1313 } 1332 }
1314CFileException e; 1333CFileException e;
1315 if(!m_File.Open( 1334 if(!m_File.Open(
1316 fn, 1335 fn,
1317 m_bResume 1336 m_bResume
1318 ?(CFile::modeWrite|CFile::shareDenyWrite) 1337 ?(CFile::modeWrite|CFile::shareDenyWrite)
1319 :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite), 1338 :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite),
1320 &e 1339 &e
1321 )){ 1340 )){
1322 if(localFile){// Outgoing request 1341 if(localFile){// Outgoing request
1323 CString tmp; 1342 CString tmp;
1324 tmp.Format(IDS_LOG_FAILEDTOOPEN,fn); 1343 tmp.Format(IDS_LOG_FAILEDTOOPEN,fn);
1325 m_Daddy->LogLine(tmp); 1344 m_Daddy->LogLine(tmp);
1326 return FALSE; 1345 return FALSE;
1327 }else{ 1346 }else{
1328 Deny(&e); 1347 Deny(&e);
1329 return TRUE; 1348 return TRUE;
1330 } 1349 }
1331 } 1350 }
1332 if(hostName){ 1351 if(hostName){
1333 m_HostName=hostName; 1352 m_HostName=hostName;
1334 1353
1335 CString tmp; 1354 CString tmp;
1336 tmp.Format(IDS_LOG_REQUESTING,m_FileName,m_HostName); 1355 tmp.Format(IDS_LOG_REQUESTING,m_FileName,m_HostName);
1337 m_Daddy->LogLine(tmp); 1356 m_Daddy->LogLine(tmp);
1338 1357
1339 CString inAddr = hostName; 1358 CString inAddr = hostName;
1340 int at = inAddr.Find('@'); 1359 int at = inAddr.Find('@');
1341 if(at>=0) 1360 if(at>=0)
1342 inAddr=inAddr.Mid(at+1); 1361 inAddr=inAddr.Mid(at+1);
1343 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){ 1362 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){
1344 ASSERT(!m_wndResolver); 1363 ASSERT(!m_wndResolver);
1345 m_wndResolver = new CResolver(this); 1364 m_wndResolver = new CResolver(this);
1346 ASSERT(m_wndResolver); 1365 ASSERT(m_wndResolver);
1347 return m_wndResolver->Resolve(); 1366 return m_wndResolver->Resolve();
1348 }else{ 1367 }else{
1349 OnHostKnown(); 1368 OnHostKnown();
1350 return TRUE; 1369 return TRUE;
1351 } 1370 }
1352 } 1371 }
1353CString v; 1372CString v;
1354tftp::tftpOptions oack; 1373tftp::tftpOptions oack;
1355 if(m_Options.Lookup(tftpoTSize,v)){ 1374 if(m_Options.Lookup(tftpoTSize,v)){
1356 m_xferSize=atol(v); 1375 m_xferSize=atol(v);
1357 if(!m_xferSize){ 1376 if(!m_xferSize){
1358 Deny(tftp::errOption,IDS_TFTP_ERROR_TSIZE); 1377 Deny(tftp::errOption,IDS_TFTP_ERROR_TSIZE);
1359 return TRUE; 1378 return TRUE;
1360 } 1379 }
1361 } 1380 }
1362 if(m_Options.Lookup(tftpoBSize,v)){ 1381 if(m_Options.Lookup(tftpoBSize,v)){
1363 m_blkSize=atoi(v); 1382 m_blkSize=atoi(v);
1364 if(!m_blkSize){// *** Do more about sanity check 1383 if(!m_blkSize){// *** Do more about sanity check
1365 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 1384 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
1366 return TRUE; 1385 return TRUE;
1367 } 1386 }
1368 v.Format("%u",m_blkSize); 1387 v.Format("%u",m_blkSize);
1369 oack[tftpoBSize]=v; 1388 oack[tftpoBSize]=v;
1370 } 1389 }
1371 if(m_Options.Lookup(tftpoTOut,v)){ 1390 if(m_Options.Lookup(tftpoTOut,v)){
1372 m_timeOut=atoi(v); 1391 m_timeOut=atoi(v);
1373 if(!m_timeOut){// *** Do more about sanity check 1392 if(!m_timeOut){// *** Do more about sanity check
1374 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 1393 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
1375 return TRUE; 1394 return TRUE;
1376 } 1395 }
1377 v.Format("%u",m_timeOut); 1396 v.Format("%u",m_timeOut);
1378 oack[tftpoTOut]=v; 1397 oack[tftpoTOut]=v;
1379 } 1398 }
1380 if(m_Options.Lookup(tftpoXResume,v) && m_bResume){ 1399 if(m_Options.Lookup(tftpoXResume,v) && m_bResume){
1381 m_ACK=m_File.GetLength()/m_blkSize; 1400 m_ACK=m_File.GetLength()/m_blkSize;
1382 v.Format("%u",m_ACK); 1401 v.Format("%u",m_ACK);
1383 oack[tftpoXResume]=v; 1402 oack[tftpoXResume]=v;
1384 }else 1403 }else
1385 m_ACK=0; 1404 m_ACK=0;
1386 state=stateXfer; 1405 state=stateXfer;
1387 if(oack.GetCount()){ 1406 if(oack.GetCount()){
1388 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&oack)); 1407 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&oack));
1389 ASSERT(p); 1408 ASSERT(p);
1390 p->SetOpcode(tftp::opOACK); 1409 p->SetOpcode(tftp::opOACK);
1391 p->data.m_OACK.Set(&oack); 1410 p->data.m_OACK.Set(&oack);
1392 PostTFTP(p,TRUE); 1411 PostTFTP(p,TRUE);
1393 }else 1412 }else
1394 DoXfer(); 1413 DoXfer();
1395 return TRUE; 1414 return TRUE;
1396} 1415}
1397 1416
1398BOOL CWRQSocket::ConfirmRequest() 1417BOOL CWRQSocket::ConfirmRequest()
1399{ 1418{
1400CConfirmWRQDlg cd(NULL); 1419CConfirmWRQDlg cd(NULL);
1401 cd.m_Daddy=this; 1420 cd.m_Daddy=this;
1402 cd.m_File=m_FileName; 1421 cd.m_File=m_FileName;
1403 cd.m_Host=inet_ntoa(m_Peer.sin_addr); 1422 cd.m_Host=inet_ntoa(m_Peer.sin_addr);
1404 switch(cd.DoModal()){ 1423 switch(cd.DoModal()){
1405 case IDOK: 1424 case IDOK:
1406 m_Rename=FALSE; 1425 m_Rename=FALSE;
1407 m_bResume=FALSE; 1426 m_bResume=FALSE;
1408 return TRUE; 1427 return TRUE;
1409 case IDC_RENAME: 1428 case IDC_RENAME:
1410 m_bResume=FALSE; 1429 m_bResume=FALSE;
1411 m_Rename=TRUE; 1430 m_Rename=TRUE;
1412 return TRUE; 1431 return TRUE;
1413 case IDC_RESUME: 1432 case IDC_RESUME:
1414 m_Rename=FALSE; 1433 m_Rename=FALSE;
1415 m_bResume=TRUE; 1434 m_bResume=TRUE;
1416 return TRUE; 1435 return TRUE;
1417 case IDCANCEL: 1436 case IDCANCEL:
1418 return FALSE; 1437 return FALSE;
1419 } 1438 }
1420 return FALSE; 1439 return FALSE;
1421} 1440}
1422 1441
1423BOOL CWRQSocket::RenameFile(CString& fn) 1442BOOL CWRQSocket::RenameFile(CString& fn)
1424{ 1443{
1425CString renamed = fn; 1444CString renamed = fn;
1426 if(fn.IsEmpty()) 1445 if(fn.IsEmpty())
1427 return FALSE; 1446 return FALSE;
1428 if(fn[fn.GetLength()-1]==')'){ 1447 if(fn[fn.GetLength()-1]==')'){
1429 int op = fn.ReverseFind('('); 1448 int op = fn.ReverseFind('(');
1430 if(op>0 && fn[op-1]==' '){ 1449 if(op>0 && fn[op-1]==' '){
1431 if(fn.Mid(op+1,fn.GetLength()-op-2).SpanExcluding("0123456789").IsEmpty()) 1450 if(fn.Mid(op+1,fn.GetLength()-op-2).SpanExcluding("0123456789").IsEmpty())
1432 renamed = renamed.Left(op-1); 1451 renamed = renamed.Left(op-1);
1433 } 1452 }
1434 } 1453 }
1435CString testFN; 1454CString testFN;
1436 for(UINT tmp=0;tmp<32768;tmp++){ 1455 for(UINT tmp=0;tmp<32768;tmp++){
1437 testFN.Format("%s (%u)",(LPCTSTR)renamed,tmp); 1456 testFN.Format("%s (%u)",(LPCTSTR)renamed,tmp);
1438 if(!_access((LPCTSTR)testFN,0)) 1457 if(!_access((LPCTSTR)testFN,0))
1439 continue; 1458 continue;
1440 fn=testFN; 1459 fn=testFN;
1441 return TRUE; 1460 return TRUE;
1442 } 1461 }
1443 return FALSE; 1462 return FALSE;
1444} 1463}
1445 1464
1446BOOL CWRQSocket::SaveAs(CString& fn) 1465BOOL CWRQSocket::SaveAs(CString& fn)
1447{ 1466{
1448CFileDialog cfd(FALSE,NULL,fn,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST,NULL,m_Daddy); 1467CFileDialog cfd(FALSE,NULL,fn,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST,NULL,m_Daddy);
1449CString title; 1468CString title;
1450 title.LoadString(IDS_RENAME_TITLE); 1469 title.LoadString(IDS_RENAME_TITLE);
1451 cfd.m_ofn.lpstrTitle=(LPCTSTR)title; 1470 cfd.m_ofn.lpstrTitle=(LPCTSTR)title;
1452 if(cfd.DoModal()!=IDOK) 1471 if(cfd.DoModal()!=IDOK)
1453 return FALSE; 1472 return FALSE;
1454 fn = cfd.GetPathName(); 1473 fn = cfd.GetPathName();
1455 return TRUE; 1474 return TRUE;
1456} 1475}
1457 1476
1458void CWRQSocket::DoXfer() 1477void CWRQSocket::DoXfer()
1459{ 1478{
1460tftp *p = tftp::Allocate(tftp::tftpACK::tftpSize()); 1479tftp *p = tftp::Allocate(tftp::tftpACK::tftpSize());
1461 ASSERT(p); 1480 ASSERT(p);
1462 p->SetOpcode(tftp::opACK); 1481 p->SetOpcode(tftp::opACK);
1463 p->data.m_ACK.SetBlock(m_ACK); 1482 p->data.m_ACK.SetBlock(m_ACK);
1464 TRACE1("WRQ-ACK-%u\n",m_ACK); 1483 TRACE1("WRQ-ACK-%u\n",m_ACK);
1465 PostTFTP(p,TRUE);// *** ??? Hope this is right 1484 PostTFTP(p,TRUE);// *** ??? Hope this is right
1466} 1485}
1467 1486
1468UINT tftp::tftpACK::tftpSize() 1487UINT tftp::tftpACK::tftpSize()
1469{ 1488{
1470 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpACK); 1489 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpACK);
1471} 1490}
1472 1491
1473ULONG CWRQSocket::GetACK() 1492ULONG CWRQSocket::GetACK()
1474{ 1493{
1475 return (m_ACK*m_blkSize)-m_LastSlack; 1494 return (m_ACK*m_blkSize)-m_LastSlack;
1476} 1495}
1477 1496
1478void CXferSocket::ResetTimeout() 1497void CXferSocket::ResetTimeout()
1479{ 1498{
1480 ASSERT(m_Daddy); 1499 ASSERT(m_Daddy);
1481 m_Daddy->m_Retrier->KillTimer(m_hSocket); 1500 m_Daddy->m_Retrier->KillTimer(m_hSocket);
1482 if(m_Retry) 1501 if(m_Retry)
1483 m_Daddy->m_Retrier->SetTimer(m_hSocket,min(60,m_Daddy->m_RetryTimeOut.GetTotalSeconds())*1000,NULL); 1502 m_Daddy->m_Retrier->SetTimer(m_hSocket,min(60,m_Daddy->m_RetryTimeOut.GetTotalSeconds())*1000,NULL);
1484 if(!m_bRetry){ 1503 if(!m_bRetry){
1485 m_Daddy->KillTimer(m_hSocket); 1504 m_Daddy->KillTimer(m_hSocket);
1486 m_Daddy->SetTimer(m_hSocket,min(60,m_timeOut)*1000,NULL); 1505 m_Daddy->SetTimer(m_hSocket,min(60,m_timeOut)*1000,NULL);
1487 } 1506 }
1488} 1507}
1489 1508
1490void CXferSocket::Abort() 1509void CXferSocket::Abort()
1491{ 1510{
1492 ASSERT(m_Daddy); 1511 ASSERT(m_Daddy);
1493CString tmp; 1512CString tmp;
1494 tmp.Format(IDS_LOG_XFERABORTED,(LPCTSTR)m_FileName); 1513 tmp.Format(IDS_LOG_XFERABORTED,(LPCTSTR)m_FileName);
1495 m_Daddy->LogLine(tmp); 1514 m_Daddy->LogLine(tmp);
1496 Destroy(FALSE); 1515 Destroy(FALSE);
1497} 1516}
1498 1517
1499void CPumpKINDlg::OnTimer(UINT nIDEvent) 1518void CPumpKINDlg::OnTimer(UINT nIDEvent)
1500{ 1519{
1501CXferSocket *socket; 1520CXferSocket *socket;
1502 if(m_Xfers.Lookup(nIDEvent,socket)){ 1521 if(m_Xfers.Lookup(nIDEvent,socket)){
1503 CString tmp; 1522 CString tmp;
1504 tmp.Format(IDS_LOG_TIMEDOUT,socket->m_FileName); 1523 tmp.Format(IDS_LOG_TIMEDOUT,socket->m_FileName);
1505 LogLine(tmp); 1524 LogLine(tmp);
1506 socket->Abort(); 1525 socket->Abort();
1507 }else{ 1526 }else{
1508 TRACE0("Failed to find timed out socket!\n"); 1527 TRACE0("Failed to find timed out socket!\n");
1509 } 1528 }
1510 CDialog::OnTimer(nIDEvent); 1529 CDialog::OnTimer(nIDEvent);
1511} 1530}
1512 1531
1513void CPumpKINDlg::OnExit() 1532void CPumpKINDlg::OnExit()
1514{ 1533{
1515 if(!m_Xfers.IsEmpty()){ 1534 if(!m_Xfers.IsEmpty()){
1516 CString title,text; 1535 CString title,text;
1517 title.LoadString(IDS_CONFIRMEXIT_TITLE); 1536 title.LoadString(IDS_CONFIRMEXIT_TITLE);
1518 text.LoadString(IDS_CONFIRMEXIT_TEXT); 1537 text.LoadString(IDS_CONFIRMEXIT_TEXT);
1519 if(MessageBox(text,title,MB_ICONQUESTION|MB_YESNO)!=IDYES) 1538 if(MessageBox(text,title,MB_ICONQUESTION|MB_YESNO)!=IDYES)
1520 return; 1539 return;
1521 } 1540 }
1522 m_bExiting=TRUE; 1541 m_bExiting=TRUE;
1523 EndDialog(IDOK); 1542 EndDialog(IDOK);
1524} 1543}
1525 1544
1526void CPumpKINDlg::OnPut() 1545void CPumpKINDlg::OnPut()
1527{ 1546{
1528CRequestDlg crd(NULL); 1547CRequestDlg crd(NULL);
1529 crd.m_Put=TRUE; 1548 crd.m_Put=TRUE;
1530 crd.m_BSize=m_BlockSize; 1549 crd.m_BSize=m_BlockSize;
1531 if(crd.DoModal()==IDOK){ 1550 if(crd.DoModal()==IDOK){
1532 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL); 1551 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL);
1533 if(crd.m_BSize) 1552 if(crd.m_BSize)
1534 socket->m__blkSize=crd.m_BSize; 1553 socket->m__blkSize=crd.m_BSize;
1535 if(!socket->Create(crd.m_LocalFile,crd.m_Host)) 1554 if(!socket->Create(crd.m_LocalFile,crd.m_Host))
1536 socket->Destroy(); 1555 socket->Destroy();
1537 } 1556 }
1538} 1557}
1539 1558
1540void CPumpKINDlg::OnGet() 1559void CPumpKINDlg::OnGet()
1541{ 1560{
1542CRequestDlg crd(NULL); 1561CRequestDlg crd(NULL);
1543 crd.m_Put=FALSE; 1562 crd.m_Put=FALSE;
1544 crd.m_BSize=m_BlockSize; 1563 crd.m_BSize=m_BlockSize;
1545 if(crd.DoModal()==IDOK){ 1564 if(crd.DoModal()==IDOK){
1546 CWRQSocket *socket = new CWRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL); 1565 CWRQSocket *socket = new CWRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL);
1547 if(crd.m_BSize) 1566 if(crd.m_BSize)
1548 socket->m__blkSize=crd.m_BSize; 1567 socket->m__blkSize=crd.m_BSize;
1549 if(!socket->Create(crd.m_LocalFile,crd.m_Host)) 1568 if(!socket->Create(crd.m_LocalFile,crd.m_Host))
1550 socket->Destroy(); 1569 socket->Destroy();
1551 } 1570 }
1552} 1571}
1553 1572
1554void CPumpKINDlg::SetupButtons() 1573void CPumpKINDlg::SetupButtons()
1555{ 1574{
1556 m_AbortCtl.EnableWindow(m_List.GetSelectedCount()>0); 1575 m_AbortCtl.EnableWindow(m_List.GetSelectedCount()>0);
1557} 1576}
1558 1577
1559void CPumpKINDlg::OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult) 1578void CPumpKINDlg::OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult)
1560{ 1579{
1561 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1580 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1562 SetupButtons(); 1581 SetupButtons();
1563 *pResult = 0; 1582 *pResult = 0;
1564} 1583}
1565 1584
1566void CPumpKINDlg::OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult) 1585void CPumpKINDlg::OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult)
1567{ 1586{
1568 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1587 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1569 SetupButtons(); 1588 SetupButtons();
1570 *pResult = 0; 1589 *pResult = 0;
1571} 1590}
1572 1591
1573void CPumpKINDlg::OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult) 1592void CPumpKINDlg::OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult)
1574{ 1593{
1575 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1594 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1576 SetupButtons(); 1595 SetupButtons();
1577 *pResult = 0; 1596 *pResult = 0;
1578} 1597}
1579 1598
1580void CPumpKINDlg::OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult) 1599void CPumpKINDlg::OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult)
1581{ 1600{
1582 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1601 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1583 SetupButtons(); 1602 SetupButtons();
1584 *pResult = 0; 1603 *pResult = 0;
1585} 1604}
1586 1605
1587void CPumpKINDlg::OnAbort() 1606void CPumpKINDlg::OnAbort()
1588{ 1607{
1589 if(!m_List.GetSelectedCount()) 1608 if(!m_List.GetSelectedCount())
1590 return; 1609 return;
1591 intitems = m_List.GetItemCount(); 1610 intitems = m_List.GetItemCount();
1592 for(int tmp=0;tmp<items;tmp++){ 1611 for(int tmp=0;tmp<items;tmp++){
1593 if(!(m_List.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED)) 1612 if(!(m_List.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED))
1594 continue; 1613 continue;
1595 CXferSocket *xfer = (CXferSocket*) m_List.GetItemData(tmp); 1614 CXferSocket *xfer = (CXferSocket*) m_List.GetItemData(tmp);
1596 ASSERT(xfer); 1615 ASSERT(xfer);
1597 xfer->Abort(); 1616 xfer->Abort();
1598 } 1617 }
1599} 1618}
1600 1619
1601void CXferSocket::OnFailedToResolve() 1620void CXferSocket::OnFailedToResolve()
1602{ 1621{
1603 TRACE0("Resolve failed\n"); 1622 TRACE0("Resolve failed\n");
1604 delete m_wndResolver; 1623 delete m_wndResolver;
1605 m_wndResolver=NULL; 1624 m_wndResolver=NULL;
1606 ASSERT(m_Daddy); 1625 ASSERT(m_Daddy);
1607CString tmp; 1626CString tmp;
1608 tmp.Format(IDS_LOG_RESOLVEFAILED,m_HostName); 1627 tmp.Format(IDS_LOG_RESOLVEFAILED,m_HostName);
1609 m_Daddy->LogLine(tmp); 1628 m_Daddy->LogLine(tmp);
1610 Abort(); 1629 Abort();
1611} 1630}
1612 1631
1613void CXferSocket::OnResolved() 1632void CXferSocket::OnResolved()
1614{ 1633{
1615 delete m_wndResolver; 1634 delete m_wndResolver;
1616 m_wndResolver=NULL; 1635 m_wndResolver=NULL;
1617 TRACE0("Resolved\n"); 1636 TRACE0("Resolved\n");
1618 m_Peer.sin_addr.s_addr = *(DWORD*)(((hostent*)m_ResolveBuff)->h_addr); 1637 m_Peer.sin_addr.s_addr = *(DWORD*)(((hostent*)m_ResolveBuff)->h_addr);
1619} 1638}
1620 1639
1621void CRRQSocket::OnResolved() 1640void CRRQSocket::OnResolved()
1622{ 1641{
1623 CXferSocket::OnResolved(); 1642 CXferSocket::OnResolved();
1624 OnHostKnown(); 1643 OnHostKnown();
1625} 1644}
1626 1645
1627void CRRQSocket::OnHostKnown() 1646void CRRQSocket::OnHostKnown()
1628{ 1647{
1629 ASSERT(m_Daddy); 1648 ASSERT(m_Daddy);
1630 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort); 1649 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort);
1631tftp::tftpOptions o; 1650tftp::tftpOptions o;
1632CString v; 1651CString v;
1633 ASSERT(m_xferSize>=0); 1652 ASSERT(m_xferSize>=0);
1634 v.Format("%lu",m_xferSize); 1653 v.Format("%lu",m_xferSize);
1635 o[tftpoTSize] = v; 1654 o[tftpoTSize] = v;
1636 ASSERT(m__blkSize); 1655 ASSERT(m__blkSize);
1637 v.Format("%u",m__blkSize); 1656 v.Format("%u",m__blkSize);
1638 o[tftpoBSize] = v; 1657 o[tftpoBSize] = v;
1639 ASSERT(m__timeOut); 1658 ASSERT(m__timeOut);
1640 v.Format("%u",m__timeOut); 1659 v.Format("%u",m__timeOut);
1641 o[tftpoTOut] = v; 1660 o[tftpoTOut] = v;
1642 o[tftpoXResume] = "0"; 1661 o[tftpoXResume] = "0";
1643 tftp*p = tftp::Allocate(tftp::tftpWRQ::tftpSize(m_FileName,m_Type,&o)); 1662 tftp*p = tftp::Allocate(tftp::tftpWRQ::tftpSize(m_FileName,m_Type,&o));
1644 ASSERT(p); 1663 ASSERT(p);
1645 p->SetOpcode(tftp::opWRQ); 1664 p->SetOpcode(tftp::opWRQ);
1646 p->data.m_WRQ.Set(m_FileName,m_Type,&o); 1665 p->data.m_WRQ.Set(m_FileName,m_Type,&o);
1647 PostTFTP(p,TRUE); 1666 PostTFTP(p,TRUE);
1648 state=stateInit; 1667 state=stateInit;
1649 UpdateList(); 1668 UpdateList();
1650} 1669}
1651 1670
1652UINT tftp::tftpRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1671UINT tftp::tftpRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1653{ 1672{
1654UINT rv = tftpHdrSize-tftpSlackSize+strlen(file)+1+strlen(type)+1; 1673UINT rv = tftpHdrSize-tftpSlackSize+strlen(file)+1+strlen(type)+1;
1655 if(ops){ 1674 if(ops){
1656 tftpOptions& o = *ops; 1675 tftpOptions& o = *ops;
1657 POSITION p = o.GetStartPosition(); 1676 POSITION p = o.GetStartPosition();
1658 while(p){ 1677 while(p){
1659 CString n,v; 1678 CString n,v;
1660 o.GetNextAssoc(p,n,v); 1679 o.GetNextAssoc(p,n,v);
1661 rv+=n.GetLength()+1+v.GetLength()+1; 1680 rv+=n.GetLength()+1+v.GetLength()+1;
1662 } 1681 }
1663 } 1682 }
1664 return rv; 1683 return rv;
1665} 1684}
1666UINT tftp::tftpRRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1685UINT tftp::tftpRRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1667{ 1686{
1668 return tftp::tftpRQ::tftpSize(file,type,ops); 1687 return tftp::tftpRQ::tftpSize(file,type,ops);
1669} 1688}
1670UINT tftp::tftpWRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1689UINT tftp::tftpWRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1671{ 1690{
1672 return tftp::tftpRQ::tftpSize(file,type,ops); 1691 return tftp::tftpRQ::tftpSize(file,type,ops);
1673} 1692}
1674UINT tftp::tftpOACK::tftpSize(tftp::tftpOptions* ops) 1693UINT tftp::tftpOACK::tftpSize(tftp::tftpOptions* ops)
1675{ 1694{
1676UINT rv = tftpHdrSize-tftpSlackSize; 1695UINT rv = tftpHdrSize-tftpSlackSize;
1677 if(ops){ 1696 if(ops){
1678 tftpOptions& o = *ops; 1697 tftpOptions& o = *ops;
1679 POSITION p = o.GetStartPosition(); 1698 POSITION p = o.GetStartPosition();
1680 while(p){ 1699 while(p){
1681 CString n,v; 1700 CString n,v;
1682 o.GetNextAssoc(p,n,v); 1701 o.GetNextAssoc(p,n,v);
1683 rv+=n.GetLength()+1+v.GetLength()+1; 1702 rv+=n.GetLength()+1+v.GetLength()+1;
1684 } 1703 }
1685 } 1704 }
1686 return rv; 1705 return rv;
1687} 1706}
1688void tftp::tftpRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1707void tftp::tftpRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1689{ 1708{
1690 // MAY BE DANGEROUS! 1709 // MAY BE DANGEROUS!
1691UINT ptr = 0; 1710UINT ptr = 0;
1692 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1; 1711 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1;
1693 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1; 1712 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1;
1694 if(ops){ 1713 if(ops){
1695 tftpOptions& o = *ops; 1714 tftpOptions& o = *ops;
1696 POSITION p = o.GetStartPosition(); 1715 POSITION p = o.GetStartPosition();
1697 while(p){ 1716 while(p){
1698 CString n,v; 1717 CString n,v;
1699 o.GetNextAssoc(p,n,v); 1718 o.GetNextAssoc(p,n,v);
1700 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1719 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1701 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1720 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1702 } 1721 }
1703 } 1722 }
1704} 1723}
1705void tftp::tftpRRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1724void tftp::tftpRRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1706{ 1725{
1707 // MAY BE DANGEROUS! 1726 // MAY BE DANGEROUS!
1708UINT ptr = 0; 1727UINT ptr = 0;
1709 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1; 1728 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1;
1710 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1; 1729 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1;
1711 if(ops){ 1730 if(ops){
1712 tftpOptions& o = *ops; 1731 tftpOptions& o = *ops;
1713 POSITION p = o.GetStartPosition(); 1732 POSITION p = o.GetStartPosition();
1714 while(p){ 1733 while(p){
1715 CString n,v; 1734 CString n,v;
1716 o.GetNextAssoc(p,n,v); 1735 o.GetNextAssoc(p,n,v);
1717 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1736 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1718 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1737 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1719 } 1738 }
1720 } 1739 }
1721} 1740}
1722void tftp::tftpWRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1741void tftp::tftpWRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1723{ 1742{
1724 // MAY BE DANGEROUS! 1743 // MAY BE DANGEROUS!
1725UINT ptr = 0; 1744UINT ptr = 0;
1726 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1; 1745 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1;
1727 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1; 1746 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1;
1728 if(ops){ 1747 if(ops){
1729 tftpOptions& o = *ops; 1748 tftpOptions& o = *ops;
1730 POSITION p = o.GetStartPosition(); 1749 POSITION p = o.GetStartPosition();
1731 while(p){ 1750 while(p){
1732 CString n,v; 1751 CString n,v;
1733 o.GetNextAssoc(p,n,v); 1752 o.GetNextAssoc(p,n,v);
1734 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1753 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1735 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1754 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1736 } 1755 }
1737 } 1756 }
1738} 1757}
1739void tftp::tftpOACK::Set(tftpOptions* ops) 1758void tftp::tftpOACK::Set(tftpOptions* ops)
1740{ 1759{
1741 ASSERT(ops); 1760 ASSERT(ops);
1742UINT ptr = 0; 1761UINT ptr = 0;
1743tftpOptions& o = *ops; 1762tftpOptions& o = *ops;
1744POSITION p = o.GetStartPosition(); 1763POSITION p = o.GetStartPosition();
1745 while(p){ 1764 while(p){
1746 CString n,v; 1765 CString n,v;
1747 o.GetNextAssoc(p,n,v); 1766 o.GetNextAssoc(p,n,v);
1748 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1767 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1749 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1768 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1750 } 1769 }
1751} 1770}
1752 1771
1753void CWRQSocket::OnResolved() 1772void CWRQSocket::OnResolved()
1754{ 1773{
1755 CXferSocket::OnResolved(); 1774 CXferSocket::OnResolved();
1756 OnHostKnown(); 1775 OnHostKnown();
1757} 1776}
1758 1777
1759void CWRQSocket::OnHostKnown() 1778void CWRQSocket::OnHostKnown()
1760{ 1779{
1761 ASSERT(m_Daddy); 1780 ASSERT(m_Daddy);
1762 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort); 1781 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort);
1763tftp::tftpOptions o; 1782tftp::tftpOptions o;
1764CString v; 1783CString v;
1765 o[tftpoTSize]="0"; 1784 o[tftpoTSize]="0";
1766 if(m__blkSize){ 1785 if(m__blkSize){
1767 v.Format("%u",m__blkSize); 1786 v.Format("%u",m__blkSize);
1768 o[tftpoBSize]=v; 1787 o[tftpoBSize]=v;
1769 } 1788 }
1770 if(m__timeOut){ 1789 if(m__timeOut){
1771 v.Format("%u",m__timeOut); 1790 v.Format("%u",m__timeOut);
1772 o[tftpoTOut]=v; 1791 o[tftpoTOut]=v;
1773 } 1792 }
1774 tftp*p = tftp::Allocate(tftp::tftpRRQ::tftpSize(m_FileName,m_Type,&o)); 1793 tftp*p = tftp::Allocate(tftp::tftpRRQ::tftpSize(m_FileName,m_Type,&o));
1775 ASSERT(p); 1794 ASSERT(p);
1776 p->SetOpcode(tftp::opRRQ); 1795 p->SetOpcode(tftp::opRRQ);
1777 p->data.m_RRQ.Set(m_FileName,m_Type,&o); 1796 p->data.m_RRQ.Set(m_FileName,m_Type,&o);
1778 PostTFTP(p,TRUE); 1797 PostTFTP(p,TRUE);
1779 state=stateInit; 1798 state=stateInit;
1780 UpdateList(); 1799 UpdateList();
1781} 1800}
1782 1801
1783void CPumpKINDlg::OnClose() 1802void CPumpKINDlg::OnClose()
1784{ 1803{
1785 OnTrayShowpumpkinwindow(); 1804 OnTrayShowpumpkinwindow();
1786} 1805}
1787 1806
1788void CPumpKINDlg::OnTrayShowpumpkinwindow() 1807void CPumpKINDlg::OnTrayShowpumpkinwindow()
1789{ 1808{
1790 if(IsWindowVisible()){ 1809 if(IsWindowVisible()){
1791 m_bShown=FALSE; 1810 m_bShown=FALSE;
1792 ShowWindow(SW_HIDE); 1811 ShowWindow(SW_HIDE);
1793 }else{ 1812 }else{
1794 m_bShown=TRUE; 1813 m_bShown=TRUE;
1795 ShowWindow(SW_SHOW); 1814 ShowWindow(SW_SHOW);
1796 SetForegroundWindow(); 1815 SetForegroundWindow();
1797 SetFocus(); 1816 SetFocus();
1798 } 1817 }
1799} 1818}
1800 1819
1801void CPumpKINDlg::OnTrayExit() 1820void CPumpKINDlg::OnTrayExit()
1802{ 1821{
1803 OnExit(); 1822 OnExit();
1804} 1823}
1805 1824
1806void CPumpKINDlg::OnTrayAboutpumpkin() 1825void CPumpKINDlg::OnTrayAboutpumpkin()
1807{ 1826{
1808CAboutDlg dlgAbout; 1827CAboutDlg dlgAbout;
1809 dlgAbout.DoModal(); 1828 dlgAbout.DoModal();
1810} 1829}
1811 1830
1812void CPumpKINDlg::OnTrayFetchfile() 1831void CPumpKINDlg::OnTrayFetchfile()
1813{ 1832{
1814 OnGet(); 1833 OnGet();
1815} 1834}
1816 1835
1817void CPumpKINDlg::OnTrayHelp() 1836void CPumpKINDlg::OnTrayHelp()
1818{ 1837{
1819 OnHelp(); 1838 OnHelp();
1820} 1839}
1821 1840
1822void CPumpKINDlg::OnTrayOptions() 1841void CPumpKINDlg::OnTrayOptions()
1823{ 1842{
1824 OnOptions(); 1843 OnOptions();
1825} 1844}
1826 1845
1827void CPumpKINDlg::OnTraySendfile() 1846void CPumpKINDlg::OnTraySendfile()
1828{ 1847{
1829 OnPut(); 1848 OnPut();
1830} 1849}
1831 1850
1832void CPumpKINDlg::LoadSettings() 1851void CPumpKINDlg::LoadSettings()
1833{ 1852{
1834CWinApp *app = AfxGetApp(); 1853CWinApp *app = AfxGetApp();
1835 ASSERT(app); 1854 ASSERT(app);
1836 m_bListen=app->GetProfileInt("TFTPSettings","Listen",m_bListen); 1855 m_bListen=app->GetProfileInt("TFTPSettings","Listen",m_bListen);
1837 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest); 1856 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest);
1838 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess); 1857 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess);
1839 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort); 1858 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort);
1840 m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); 1859 m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs);
1841 m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort); 1860 m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort);
1842 m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength); 1861 m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength);
1843 m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); 1862 m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut);
1844 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1863 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1845 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1864 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
1846 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1865 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1847 m_LogFile=app->GetProfileString("General","LogFile",m_LogFile); 1866 m_LogFile=app->GetProfileString("General","LogFile",m_LogFile);
1848 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds())); 1867 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()));
1849 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1868 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1850 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds())); 1869 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()));
1851 m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode); 1870 m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode);
1852 m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown); 1871 m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown);
1853 if(m_TFTPRoot.IsEmpty()){ 1872 if(m_TFTPRoot.IsEmpty()){
1854 DWORD dL = ::GetCurrentDirectory(0,NULL); 1873 DWORD dL = ::GetCurrentDirectory(0,NULL);
1855 VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL))); 1874 VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL)));
1856 m_TFTPRoot.ReleaseBuffer(); 1875 m_TFTPRoot.ReleaseBuffer();
1857 } 1876 }
1858 ::SetCurrentDirectory(m_TFTPRoot); 1877 ::SetCurrentDirectory(m_TFTPRoot);
1859 m_aclRules.LoadProfile(app); 1878 m_aclRules.LoadProfile(app);
1860} 1879}
1861 1880
1862void CPumpKINDlg::SaveSettings() 1881void CPumpKINDlg::SaveSettings()
1863{ 1882{
1864CWinApp *app = AfxGetApp(); 1883CWinApp *app = AfxGetApp();
1865 ASSERT(app); 1884 ASSERT(app);
1866 app->WriteProfileInt("TFTPSettings","Listen",m_bListen); 1885 app->WriteProfileInt("TFTPSettings","Listen",m_bListen);
1867 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest); 1886 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest);
1868 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess); 1887 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess);
1869 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort); 1888 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort);
1870 app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); 1889 app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs);
1871 app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort); 1890 app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort);
1872 app->WriteProfileInt("UISettings","LogLength",m_LogLength); 1891 app->WriteProfileInt("UISettings","LogLength",m_LogLength);
1873 app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); 1892 app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut);
1874 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1893 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1875 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1894 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
1876 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1895 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1877 app->WriteProfileString("General","LogFile",m_LogFile); 1896 app->WriteProfileString("General","LogFile",m_LogFile);
1878 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()); 1897 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds());
1879 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1898 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1880 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()); 1899 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds());
1881 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode); 1900 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode);
1882 app->WriteProfileInt("UISettings","Visble",m_bShown); 1901 app->WriteProfileInt("UISettings","Visble",m_bShown);
1883 m_aclRules.SaveProfile(app); 1902 m_aclRules.SaveProfile(app);
1884} 1903}
1885 1904
1886void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 1905void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
1887{ 1906{
1888 CDialog::OnWindowPosChanging(lpwndpos); 1907 CDialog::OnWindowPosChanging(lpwndpos);
1889 if(!m_bExiting){ 1908 if(!m_bExiting){
1890 if(m_bShown){ 1909 if(m_bShown){
1891 lpwndpos->flags&=~SWP_HIDEWINDOW; 1910 lpwndpos->flags&=~SWP_HIDEWINDOW;
1892 lpwndpos->flags|=SWP_SHOWWINDOW; 1911 lpwndpos->flags|=SWP_SHOWWINDOW;
1893 }else{ 1912 }else{
1894 lpwndpos->flags&=~SWP_SHOWWINDOW; 1913 lpwndpos->flags&=~SWP_SHOWWINDOW;
1895 lpwndpos->flags|=SWP_HIDEWINDOW; 1914 lpwndpos->flags|=SWP_HIDEWINDOW;
1896 if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu)) 1915 if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu))
1897 GetDesktopWindow()->SetForegroundWindow(); 1916 GetDesktopWindow()->SetForegroundWindow();
1898 } 1917 }
1899 } 1918 }
1900} 1919}
1901 1920
1902CString CXferSocket::ApplyRootGently(LPCTSTR fn) 1921CString CXferSocket::ApplyRootGently(LPCTSTR fn)
1903{ 1922{
1904CString f = fn; 1923CString f = fn;
1905CString rv = f; 1924CString rv = f;
1906 if((!f.IsEmpty()) && f[0]!='\\' && f.Find(":")<0 && f.Find("\\")<0) 1925 if((!f.IsEmpty()) && f[0]!='\\' && f.Find(":")<0 && f.Find("\\")<0)
1907 rv = ApplyRoot(f); 1926 rv = ApplyRoot(f);
1908 return rv; 1927 return rv;
1909} 1928}
1910 1929
1911BOOL CXferSocket::CheckBadRelativeness(LPCTSTR file) 1930BOOL CXferSocket::CheckBadRelativeness(LPCTSTR file)
1912{ 1931{
1913CString tmp = file; 1932CString tmp = file;
1914 if(tmp.IsEmpty()) 1933 if(tmp.IsEmpty())
1915 return FALSE; 1934 return FALSE;
1916 if(tmp.Find("..")>=0) 1935 if(tmp.Find("..")>=0)
1917 return TRUE; 1936 return TRUE;
1918 if(tmp.Find(":")>=0) 1937 if(tmp.Find(":")>=0)
1919 return TRUE; 1938 return TRUE;
1920 if((!m_Daddy->m_bTFTPSubdirs) && m_FileName.Find('\\')>=0) 1939 if((!m_Daddy->m_bTFTPSubdirs) && m_FileName.Find('\\')>=0)
1921 return TRUE; 1940 return TRUE;
1922 return FALSE; 1941 return FALSE;
1923} 1942}
1924 1943
1925void CAboutDlg::OnKlevernet() 1944void CAboutDlg::OnKlevernet()
1926{ 1945{
1927CString url; 1946CString url;
1928 url.LoadString(IDS_KLEVERNET_URL); 1947 url.LoadString(IDS_KLEVERNET_URL);
1929 ShellExecute(::GetDesktopWindow(),"open",url,NULL,NULL,SW_SHOWMAXIMIZED); 1948 ShellExecute(::GetDesktopWindow(),"open",url,NULL,NULL,SW_SHOWMAXIMIZED);
1930} 1949}
1931 1950
1932BOOL CPumpKINDlg::PreTranslateMessage(MSG* pMsg) 1951BOOL CPumpKINDlg::PreTranslateMessage(MSG* pMsg)
1933{ 1952{
1934 // CG: The following block was added by the ToolTips component. 1953 // CG: The following block was added by the ToolTips component.
1935 { 1954 {
1936 // Let the ToolTip process this message. 1955 // Let the ToolTip process this message.
1937 m_tooltip.RelayEvent(pMsg); 1956 m_tooltip.RelayEvent(pMsg);
1938 1957
1939 return CDialog::PreTranslateMessage(pMsg); 1958 return CDialog::PreTranslateMessage(pMsg);
1940 } 1959 }
1941} 1960}
1942 1961
1943void CPumpKINDlg::OnSelchangeLog() 1962void CPumpKINDlg::OnSelchangeLog()
1944{ 1963{
1945int sel = m_Log.GetCurSel(); 1964int sel = m_Log.GetCurSel();
1946 if(sel==LB_ERR){ 1965 if(sel==LB_ERR){
1947 TRACE0("Error retrieving selection\n"); 1966 TRACE0("Error retrieving selection\n");
1948 }else{ 1967 }else{
1949 CTime *t = (CTime*)m_Log.GetItemData(sel); 1968 CTime *t = (CTime*)m_Log.GetItemData(sel);
1950 ASSERT(t); 1969 ASSERT(t);
1951 m_tooltip.UpdateTipText(t->Format(IDS_LOGTIMEFORMAT),&m_Log); 1970 m_tooltip.UpdateTipText(t->Format(IDS_LOGTIMEFORMAT),&m_Log);
1952 } 1971 }
1953} 1972}
1954 1973
1955void CPumpKINDlg::OnTrayOpenfilesfolder() 1974void CPumpKINDlg::OnTrayOpenfilesfolder()
1956{ 1975{
1957 ShellExecute(::GetDesktopWindow(),NULL,m_TFTPRoot,NULL,NULL,SW_SHOWDEFAULT); 1976 ShellExecute(::GetDesktopWindow(),NULL,m_TFTPRoot,NULL,NULL,SW_SHOWDEFAULT);
1958} 1977}
1959 1978
1960void CPumpKINDlg::OnDropFiles(HDROP hDropInfo) 1979void CPumpKINDlg::OnDropFiles(HDROP hDropInfo)
1961{ 1980{
1962UINT files = ::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0); 1981UINT files = ::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);
1963 ASSERT(files); 1982 ASSERT(files);
1964 for(UINT file=0;file<files;file++){ 1983 for(UINT file=0;file<files;file++){
1965 CString theFile; 1984 CString theFile;
1966 UINT fileNameLength = ::DragQueryFile(hDropInfo,file,NULL,0); 1985 UINT fileNameLength = ::DragQueryFile(hDropInfo,file,NULL,0);
1967 ASSERT(fileNameLength); 1986 ASSERT(fileNameLength);
1968 VERIFY(::DragQueryFile(hDropInfo,file,theFile.GetBuffer(fileNameLength+5),fileNameLength+4)<=fileNameLength); 1987 VERIFY(::DragQueryFile(hDropInfo,file,theFile.GetBuffer(fileNameLength+5),fileNameLength+4)<=fileNameLength);
1969 theFile.ReleaseBuffer(); 1988 theFile.ReleaseBuffer();
1970 // Send it over! 1989 // Send it over!
1971 CRequestDlg crd(NULL); 1990 CRequestDlg crd(NULL);
1972 crd.m_Drop=TRUE; 1991 crd.m_Drop=TRUE;
1973 crd.m_Put=TRUE; 1992 crd.m_Put=TRUE;
1974 crd.m_BSize=m_BlockSize; 1993 crd.m_BSize=m_BlockSize;
1975 crd.m_LocalFile=theFile; 1994 crd.m_LocalFile=theFile;
1976 if(crd.DoModal()==IDOK){ 1995 if(crd.DoModal()==IDOK){
1977 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL); 1996 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL);
1978 if(crd.m_BSize) 1997 if(crd.m_BSize)
1979 socket->m__blkSize=crd.m_BSize; 1998 socket->m__blkSize=crd.m_BSize;
1980 if(!socket->Create(crd.m_LocalFile,crd.m_Host)) 1999 if(!socket->Create(crd.m_LocalFile,crd.m_Host))
1981 socket->Destroy(); 2000 socket->Destroy();
1982 } 2001 }
1983 } 2002 }
1984 ::DragFinish(hDropInfo); 2003 ::DragFinish(hDropInfo);
1985} 2004}
1986 2005
1987void CPumpKINDlg::OnCancel() 2006void CPumpKINDlg::OnCancel()
1988{ 2007{
1989 OnClose(); 2008 OnClose();
1990} 2009}
1991 2010
1992CPumpKINDlg::~CPumpKINDlg() 2011CPumpKINDlg::~CPumpKINDlg()
1993{ 2012{
1994 delete m_Trayer; 2013 delete m_Trayer;
1995 delete m_Retrier; 2014 delete m_Retrier;
1996} 2015}
1997 2016
1998void CXferSocket::OnRetry() 2017void CXferSocket::OnRetry()
1999{ 2018{
2000 if(!m_Retry){ 2019 if(!m_Retry){
2001 TRACE("Retrying unretriable..\n"); 2020 TRACE("Retrying unretriable..\n");
2002 return; 2021 return;
2003 } 2022 }
2004 TRACE0("Retrying..\n"); 2023 TRACE0("Retrying..\n");
2005 m_bRetry=TRUE; 2024 m_bRetry=TRUE;
2006 PostTFTP(tftp::Copy(m_Retry)); 2025 PostTFTP(tftp::Copy(m_Retry));
2007 m_bRetry=FALSE; 2026 m_bRetry=FALSE;
2008} 2027}
2009 2028
2010tftp* tftp::Copy(tftp *src) 2029tftp* tftp::Copy(tftp *src)
2011{ 2030{
2012 ASSERT(src); 2031 ASSERT(src);
2013 ASSERT(src->length); 2032 ASSERT(src->length);
2014tftp* rv = Allocate(src->length); 2033tftp* rv = Allocate(src->length);
2015 ASSERT(rv); 2034 ASSERT(rv);
2016 memmove(rv,src,tftpSlackSize+src->length); 2035 memmove(rv,src,tftpSlackSize+src->length);
2017 return rv; 2036 return rv;
2018} 2037}
2019 2038
2020void CXferSocket::SetTry(tftp *p) 2039void CXferSocket::SetTry(tftp *p)
2021{ 2040{
2022 if(m_Retry) 2041 if(m_Retry)
2023 delete m_Retry; 2042 delete m_Retry;
2024 m_Retry=p?tftp::Copy(p):NULL; 2043 m_Retry=p?tftp::Copy(p):NULL;
2025} 2044}
2026 2045
2027void CPumpKINDlg::OnHelp() 2046void CPumpKINDlg::OnHelp()
2028{ 2047{
2029 AfxGetApp()->WinHelp(0,HELP_FINDER); 2048 AfxGetApp()->WinHelp(0,HELP_FINDER);
2030} 2049}
2031 2050
2032BOOL CListenSocket::SetListen(BOOL b) { 2051BOOL CListenSocket::SetListen(BOOL b) {
2033 ASSERT(m_Daddy); 2052 ASSERT(m_Daddy);
2034 if(b==m_bListen) 2053 if(b==m_bListen)
2035 return TRUE; 2054 return TRUE;
2036 if(b) { 2055 if(b) {
2037 if(!Create(m_Daddy->m_ListenPort,SOCK_DGRAM)) 2056 if(!Create(m_Daddy->m_ListenPort,SOCK_DGRAM))
2038 return FALSE; 2057 return FALSE;
2039 return m_bListen=TRUE; 2058 return m_bListen=TRUE;
2040 }else{ 2059 }else{
2041 Close(); m_bListen=FALSE; 2060 Close(); m_bListen=FALSE;
2042 return TRUE; 2061 return TRUE;
2043 } 2062 }
2044} 2063}
2045 2064
2046void CPumpKINDlg::OnListening() 2065void CPumpKINDlg::OnListening()
2047{ 2066{
2048 if(!m_Listener.SetListen(m_ListenCtl.GetCheck()==1)) { 2067 if(!m_Listener.SetListen(m_ListenCtl.GetCheck()==1)) {
2049 TRACE0("Failed to create socket\n"); 2068 TRACE0("Failed to create socket\n");
2050 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); 2069 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
2051 } 2070 }
2052 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); 2071 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
2053 m_bListen=m_Listener.m_bListen; 2072 m_bListen=m_Listener.m_bListen;
2054} 2073}
2055 2074
2056void CPumpKINDlg::OnTrayListen() 2075void CPumpKINDlg::OnTrayListen()
2057{ 2076{
2058 if(!m_Listener.SetListen(!m_Listener.m_bListen)) { 2077 if(!m_Listener.SetListen(!m_Listener.m_bListen)) {
2059 TRACE0("Failed to create socket\n"); 2078 TRACE0("Failed to create socket\n");
2060 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); 2079 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
2061 } 2080 }
2062 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); 2081 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
2063 m_bListen=m_Listener.m_bListen; 2082 m_bListen=m_Listener.m_bListen;
2064} 2083}
2065 2084
2066void CPumpKINDlg::LogLine(LPCTSTR str) 2085void CPumpKINDlg::LogLine(LPCTSTR str)
2067{ 2086{
2068 LogLineToScreen(str); 2087 LogLineToScreen(str);
2069 if(!m_LogFile.IsEmpty()) { 2088 if(!m_LogFile.IsEmpty()) {
2070 if(!Klever::LogRecord((LPCTSTR)m_LogFile,str)) { 2089 if(!Klever::LogRecord((LPCTSTR)m_LogFile,str)) {
2071 if(m_lastlogerr!=m_LogFile) { 2090 if(m_lastlogerr!=m_LogFile) {
2072 CString tmp; 2091 CString tmp;
2073 tmp.Format(IDS_LOG_LOGERROR,m_LogFile); 2092 tmp.Format(IDS_LOG_LOGERROR,m_LogFile);
2074 LogLineToScreen(tmp); 2093 LogLineToScreen(tmp);
2075 m_lastlogerr=m_LogFile; 2094 m_lastlogerr=m_LogFile;
2076 } 2095 }
2077 } 2096 }
2078 } 2097 }
2079} 2098}
2099
2100void CPumpKINDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
2101{
2102 CDialog::OnGetMinMaxInfo(lpMMI);
2103 if(m_MinSize.cx>0 && m_MinSize.cy>0){
2104 lpMMI->ptMinTrackSize.x = m_MinSize.cx;
2105 lpMMI->ptMinTrackSize.y = m_MinSize.cy;
2106 }
2107}
2108
2109void CPumpKINDlg::OnSize(UINT nType, int cx, int cy)
2110{
2111 CDialog::OnSize(nType, cx, cy);
2112 if(nType==SIZE_RESTORED)
2113 RecalcLayout(cx,cy);
2114}
2115
2116void CPumpKINDlg::RecalcLayout(int,int)
2117{
2118 CRect wrc;
2119 GetClientRect(&wrc);
2120 AdjustButton(m_GetCtl,wrc);
2121 AdjustButton(m_PutCtl,wrc);
2122 AdjustButton(m_AbortCtl,wrc);
2123 AdjustButton(m_HelpCtl,wrc);
2124 AdjustButton(m_ExitCtl,wrc);
2125 AdjustButton(m_OptionsCtl,wrc);
2126 CRect brc;
2127 m_List.GetWindowRect(&brc); ScreenToClient(&brc);
2128 m_List.SetWindowPos(
2129 0,
2130 brc.left, brc.top,
2131 wrc.right-m_rightGapList-brc.left, brc.bottom-brc.top,
2132 SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOZORDER|SWP_NOCOPYBITS );
2133 m_Log.GetWindowRect(&brc); ScreenToClient(&brc);
2134 m_Log.SetWindowPos(
2135 0,
2136 brc.left, brc.top,
2137 wrc.right-m_rightGapButtons-brc.left, wrc.bottom-m_bottomGapLog-brc.top,
2138 SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOZORDER|SWP_NOCOPYBITS );
2139 m_ListenCtl.GetWindowRect(&brc); ScreenToClient(&brc);
2140 m_ListenCtl.SetWindowPos(
2141 0,
2142 wrc.right-brc.Width()-m_rightGapButtons, wrc.bottom-brc.Height()-m_bottomGapListen,
2143 0,0,
2144 SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS );
2145 int i = m_Log.GetCount();
2146 if(i!=LB_ERR)
2147 m_Log.SetCurSel(i-1);
2148}
2149
2150void CPumpKINDlg::AdjustButton(CWnd& w,CRect& wrc)
2151{
2152 CRect brc;
2153 w.GetWindowRect(&brc); ScreenToClient(&brc);
2154 w.SetWindowPos(
2155 0,
2156 wrc.right-brc.Width()-m_rightGapButtons, brc.top,
2157 0, 0,
2158 SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS );
2159}
diff --git a/PumpKINDlg.h b/PumpKINDlg.h
index b247c56..c5469f1 100644
--- a/PumpKINDlg.h
+++ b/PumpKINDlg.h
@@ -1,487 +1,500 @@
1// PumpKINDlg.h : header file 1// PumpKINDlg.h : header file
2// 2//
3 3
4 //#define REVERSEBYTES(w)MAKEWORD(HIBYTE(w),LOBYTE(w)); 4 //#define REVERSEBYTES(w)MAKEWORD(HIBYTE(w),LOBYTE(w));
5 #defineREVERSEBYTES(w) (htons((WORD)w)) 5 #defineREVERSEBYTES(w) (htons((WORD)w))
6 #define tftpoBSize"blksize" 6 #define tftpoBSize"blksize"
7 #define tftpoTSize"tsize" 7 #define tftpoTSize"tsize"
8 #define tftpoTOut"timeout" 8 #define tftpoTOut"timeout"
9 9
10 #define tftpoXResume"x-resume" 10 #define tftpoXResume"x-resume"
11 11
12 struct tftp{ 12 struct tftp{
13 typedef CMapStringToString tftpOptions; 13 typedef CMapStringToString tftpOptions;
14 typedef WORD tftpLength; 14 typedef WORD tftpLength;
15 typedef WORD tftpOpcode; 15 typedef WORD tftpOpcode;
16 tftpLengthlength; 16 tftpLengthlength;
17 tftpOpcode opcode; 17 tftpOpcode opcode;
18 enum{ 18 enum{
19 opRRQ = 1, 19 opRRQ = 1,
20 opWRQ = 2, 20 opWRQ = 2,
21 opDATA = 3, 21 opDATA = 3,
22 opACK = 4, 22 opACK = 4,
23 opERROR = 5, 23 opERROR = 5,
24 opOACK = 6, 24 opOACK = 6,
25 25
26 errUndefined = 0, 26 errUndefined = 0,
27 errNotFound = 1, 27 errNotFound = 1,
28 errAccessViolation = 2, 28 errAccessViolation = 2,
29 errDiskFull = 3, 29 errDiskFull = 3,
30 errIllegalOp = 4, 30 errIllegalOp = 4,
31 errUnknownTID = 5, 31 errUnknownTID = 5,
32 errFileExists = 6, 32 errFileExists = 6,
33 errNoUser = 7, 33 errNoUser = 7,
34 errOption = 8 34 errOption = 8
35 }; 35 };
36 structtftpUNKNOWN { 36 structtftpUNKNOWN {
37 BYTE data[1]; 37 BYTE data[1];
38 }; 38 };
39 structtftpRQ { 39 structtftpRQ {
40 BYTE data[1]; 40 BYTE data[1];
41public: 41public:
42 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 42 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
43 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 43 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
44 }; 44 };
45 structtftpRRQ { 45 structtftpRRQ {
46 BYTE data[1]; 46 BYTE data[1];
47public: 47public:
48 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 48 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
49 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 49 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
50 }; 50 };
51 structtftpWRQ { 51 structtftpWRQ {
52 BYTE data[1]; 52 BYTE data[1];
53public: 53public:
54 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 54 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
55 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 55 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
56 }; 56 };
57 structtftpDATA { 57 structtftpDATA {
58 WORD block; 58 WORD block;
59 BYTE data[1]; 59 BYTE data[1];
60 public: 60 public:
61 WORD Block(); 61 WORD Block();
62 void SetBlock(WORD b); 62 void SetBlock(WORD b);
63 static UINT tftpSize(UINT blkSize=512); 63 static UINT tftpSize(UINT blkSize=512);
64 }; 64 };
65 struct tftpACK { 65 struct tftpACK {
66 WORD block; 66 WORD block;
67 public: 67 public:
68 static UINT tftpSize(); 68 static UINT tftpSize();
69 void SetBlock(WORD b); 69 void SetBlock(WORD b);
70 WORD Block(); 70 WORD Block();
71 }; 71 };
72 structtftpERROR { 72 structtftpERROR {
73 typedef WORD tftpErrorCode; 73 typedef WORD tftpErrorCode;
74 tftpErrorCode code; 74 tftpErrorCode code;
75 BYTE data[1]; 75 BYTE data[1];
76 public: 76 public:
77 void SetCode(WORD c); 77 void SetCode(WORD c);
78 WORD Code(); 78 WORD Code();
79 static UINT tftpSize(LPCTSTR msg); 79 static UINT tftpSize(LPCTSTR msg);
80 }; 80 };
81 struct tftpOACK { 81 struct tftpOACK {
82 BYTE data[1]; 82 BYTE data[1];
83 public: 83 public:
84 void Set(tftpOptions* ops); 84 void Set(tftpOptions* ops);
85 static UINT tftpSize(tftpOptions* ops); 85 static UINT tftpSize(tftpOptions* ops);
86 }; 86 };
87 uniontftpPacket { 87 uniontftpPacket {
88 tftpUNKNOWN m_UNKNOWN; 88 tftpUNKNOWN m_UNKNOWN;
89 tftpRQ m_RQ; 89 tftpRQ m_RQ;
90 tftpRRQ m_RRQ; 90 tftpRRQ m_RRQ;
91 tftpWRQ m_WRQ; 91 tftpWRQ m_WRQ;
92 tftpDATA m_DATA; 92 tftpDATA m_DATA;
93 tftpACK m_ACK; 93 tftpACK m_ACK;
94 tftpERROR m_ERROR; 94 tftpERROR m_ERROR;
95 tftpOACK m_OACK; 95 tftpOACK m_OACK;
96 }data; 96 }data;
97 97
98 void *udpBase(void){ return &opcode; } 98 void *udpBase(void){ return &opcode; }
99public: 99public:
100 static tftp* Copy(tftp *src); 100 static tftp* Copy(tftp *src);
101 CString errMessage(); 101 CString errMessage();
102 void SetOpcode(WORD op); 102 void SetOpcode(WORD op);
103 void errSet(UINT code,LPCTSTR msg); 103 void errSet(UINT code,LPCTSTR msg);
104 static tftp* Allocate(UINT tftpSize=0); 104 static tftp* Allocate(UINT tftpSize=0);
105 BOOL Send(CAsyncSocket *socket,SOCKADDR_IN* saddr); 105 BOOL Send(CAsyncSocket *socket,SOCKADDR_IN* saddr);
106 CString rqType(); 106 CString rqType();
107 CString rqFileName(); 107 CString rqFileName();
108 UINT GetOptions(tftpOptions* ops); 108 UINT GetOptions(tftpOptions* ops);
109 tftp(); 109 tftp();
110 UINT Opcode(); 110 UINT Opcode();
111 BOOL Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin=NULL); 111 BOOL Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin=NULL);
112}; 112};
113 #define tftpHdrSize(sizeof(tftp)-sizeof(tftp::tftpPacket)) 113 #define tftpHdrSize(sizeof(tftp)-sizeof(tftp::tftpPacket))
114 #definetftpSlackSize sizeof(tftp::tftpLength) 114 #definetftpSlackSize sizeof(tftp::tftpLength)
115 115
116struct acl_rule { 116struct acl_rule {
117 enum { 117 enum {
118 opRRQ=tftp::opRRQ, opWRQ=tftp::opWRQ 118 opRRQ=tftp::opRRQ, opWRQ=tftp::opWRQ
119 }; 119 };
120 int op; 120 int op;
121 DWORD addr, mask; 121 DWORD addr, mask;
122 enum { 122 enum {
123 rrqGrant=0, rrqPrompt, rrqDeny, 123 rrqGrant=0, rrqPrompt, rrqDeny,
124 rrqRules, 124 rrqRules,
125 rrqNone=-1 125 rrqNone=-1
126 }; 126 };
127 enum { 127 enum {
128 wrqGrant=0, wrqPromptIfExists, wrqPrompt, wrqDeny, 128 wrqGrant=0, wrqPromptIfExists, wrqPrompt, wrqDeny,
129 wrqRules, 129 wrqRules,
130 wrqNone=-1 130 wrqNone=-1
131 }; 131 };
132 int target; 132 int target;
133 133
134 acl_rule() 134 acl_rule()
135 : op(-1), addr(0), mask(0), target(-1) { } 135 : op(-1), addr(0), mask(0), target(-1) { }
136 acl_rule(int o,DWORD a,DWORD m,int t) 136 acl_rule(int o,DWORD a,DWORD m,int t)
137 : op(o), addr(a), mask(m), target(t) { } 137 : op(o), addr(a), mask(m), target(t) { }
138 acl_rule(const acl_rule& s) 138 acl_rule(const acl_rule& s)
139 : op(s.op), addr(s.addr), mask(s.mask), target(s.target) { } 139 : op(s.op), addr(s.addr), mask(s.mask), target(s.target) { }
140 140
141 BOOL IsValid() { 141 BOOL IsValid() {
142 if(op==opRRQ) { 142 if(op==opRRQ) {
143 if(target<rrqNone || target>=rrqRules) 143 if(target<rrqNone || target>=rrqRules)
144 return FALSE; 144 return FALSE;
145 }else if(op==opWRQ) { 145 }else if(op==opWRQ) {
146 if(target<wrqNone || target>=wrqRules) 146 if(target<wrqNone || target>=wrqRules)
147 return FALSE; 147 return FALSE;
148 }else 148 }else
149 return FALSE; 149 return FALSE;
150 return TRUE; 150 return TRUE;
151 } 151 }
152 152
153 BOOL IsMatch(int o,DWORD a) { 153 BOOL IsMatch(int o,DWORD a) {
154 if(o!=op) return FALSE; 154 if(o!=op) return FALSE;
155 if( (a&mask) != (addr&mask)) return FALSE; 155 if( (a&mask) != (addr&mask)) return FALSE;
156 return TRUE; 156 return TRUE;
157 } 157 }
158 158
159 CString str_addr() { 159 CString str_addr() {
160 return inet_ntoa(*(struct in_addr*)&addr); 160 return inet_ntoa(*(struct in_addr*)&addr);
161 } 161 }
162 CString str_mask() { 162 CString str_mask() {
163 return inet_ntoa(*(struct in_addr*)&mask); 163 return inet_ntoa(*(struct in_addr*)&mask);
164 } 164 }
165 CString str_target() { 165 CString str_target() {
166 if(op==opRRQ) { 166 if(op==opRRQ) {
167 switch(target) { 167 switch(target) {
168 case rrqNone: return "fallback"; 168 case rrqNone: return "fallback";
169 case rrqGrant: return "grant"; 169 case rrqGrant: return "grant";
170 case rrqPrompt: return "prompt"; 170 case rrqPrompt: return "prompt";
171 case rrqDeny: return "deny"; 171 case rrqDeny: return "deny";
172 default: return "?"; 172 default: return "?";
173 } 173 }
174 }else if(op==opWRQ) { 174 }else if(op==opWRQ) {
175 switch(target) { 175 switch(target) {
176 case wrqNone: return "fallback"; 176 case wrqNone: return "fallback";
177 case wrqGrant: return "grant"; 177 case wrqGrant: return "grant";
178 case wrqPromptIfExists: return "prompt if exists"; 178 case wrqPromptIfExists: return "prompt if exists";
179 case wrqPrompt: return "prompt"; 179 case wrqPrompt: return "prompt";
180 case wrqDeny: return "deny"; 180 case wrqDeny: return "deny";
181 default: return "?"; 181 default: return "?";
182 } 182 }
183 }else 183 }else
184 return "?"; 184 return "?";
185 } 185 }
186 186
187 void SaveProfile(CWinApp* app,int i) { 187 void SaveProfile(CWinApp* app,int i) {
188 CString n; n.Format("%d",i); 188 CString n; n.Format("%d",i);
189 app->WriteProfileInt("ACL","op_"+n,op); 189 app->WriteProfileInt("ACL","op_"+n,op);
190 app->WriteProfileString("ACL","addr_"+n,str_addr()); 190 app->WriteProfileString("ACL","addr_"+n,str_addr());
191 app->WriteProfileString("ACL","mask_"+n,str_mask()); 191 app->WriteProfileString("ACL","mask_"+n,str_mask());
192 app->WriteProfileInt("ACL","target_"+n,target); 192 app->WriteProfileInt("ACL","target_"+n,target);
193 } 193 }
194 194
195 void LoadProfile(CWinApp* app,int i) { 195 void LoadProfile(CWinApp* app,int i) {
196 CString n; n.Format("%d",i); 196 CString n; n.Format("%d",i);
197 op=app->GetProfileInt("ACL","op_"+n,-1); 197 op=app->GetProfileInt("ACL","op_"+n,-1);
198 addr=inet_addr(app->GetProfileString("ACL","addr_"+n)); 198 addr=inet_addr(app->GetProfileString("ACL","addr_"+n));
199 mask=inet_addr(app->GetProfileString("ACL","mask_"+n)); 199 mask=inet_addr(app->GetProfileString("ACL","mask_"+n));
200 target=app->GetProfileInt("ACL","target_"+n,-1); 200 target=app->GetProfileInt("ACL","target_"+n,-1);
201 } 201 }
202 202
203}; 203};
204 204
205class acl_rules_t : public CArray<acl_rule,acl_rule&> { 205class acl_rules_t : public CArray<acl_rule,acl_rule&> {
206public: 206public:
207 207
208 acl_rules_t& operator=(const acl_rules_t& s) { 208 acl_rules_t& operator=(const acl_rules_t& s) {
209 // Copy(s); XXX: unsuprisingly, there's a bug in MFC Copy, *pDst++=*pSrc (no ++ for Src) 209 // Copy(s); XXX: unsuprisingly, there's a bug in MFC Copy, *pDst++=*pSrc (no ++ for Src)
210 RemoveAll(); 210 RemoveAll();
211 int ns = s.GetSize(); 211 int ns = s.GetSize();
212 SetSize(ns); 212 SetSize(ns);
213 for(int i=0;i<ns;++i) 213 for(int i=0;i<ns;++i)
214 m_pData[i]=s.m_pData[i]; 214 m_pData[i]=s.m_pData[i];
215 return *this; 215 return *this;
216 } 216 }
217 217
218 int AppendRule(acl_rule& r) { 218 int AppendRule(acl_rule& r) {
219 return Add(r); 219 return Add(r);
220 } 220 }
221 221
222 void DeleteRule(int r) { 222 void DeleteRule(int r) {
223 RemoveAt(r); 223 RemoveAt(r);
224 } 224 }
225 225
226 int FindRule(int op,DWORD ip) { 226 int FindRule(int op,DWORD ip) {
227 for(int i=0;i<GetSize();++i) 227 for(int i=0;i<GetSize();++i)
228 if(m_pData[i].IsMatch(op,ip)) 228 if(m_pData[i].IsMatch(op,ip))
229 return i; 229 return i;
230 return -1; 230 return -1;
231 } 231 }
232 232
233 int FindTarget(int op,DWORD ip) { 233 int FindTarget(int op,DWORD ip) {
234 int r=FindRule(op,ip); 234 int r=FindRule(op,ip);
235 if(r<0) return -1; 235 if(r<0) return -1;
236 return m_pData[r].target; 236 return m_pData[r].target;
237 } 237 }
238 238
239 void SaveProfile(CWinApp* app) { 239 void SaveProfile(CWinApp* app) {
240 int s=GetSize(); 240 int s=GetSize();
241 for(int i=0;i<s;++i) 241 for(int i=0;i<s;++i)
242 m_pData[i].SaveProfile(app,i); 242 m_pData[i].SaveProfile(app,i);
243 app->WriteProfileInt("ACL","rules",s); 243 app->WriteProfileInt("ACL","rules",s);
244 } 244 }
245 void LoadProfile(CWinApp* app) { 245 void LoadProfile(CWinApp* app) {
246 RemoveAll(); 246 RemoveAll();
247 int s=app->GetProfileInt("ACL","rules",0); 247 int s=app->GetProfileInt("ACL","rules",0);
248 for(int i=0;i<s;++i) { 248 for(int i=0;i<s;++i) {
249 acl_rule r; 249 acl_rule r;
250 r.LoadProfile(app,i); 250 r.LoadProfile(app,i);
251 if(r.IsValid()) 251 if(r.IsValid())
252 Add(r); 252 Add(r);
253 } 253 }
254 } 254 }
255}; 255};
256 256
257class CPumpKINDlg; 257class CPumpKINDlg;
258 class CListenSocket : public CAsyncSocket{ 258 class CListenSocket : public CAsyncSocket{
259public: 259public:
260 CPumpKINDlg* m_Daddy; 260 CPumpKINDlg* m_Daddy;
261 BOOL m_bListen; 261 BOOL m_bListen;
262 262
263 CListenSocket() 263 CListenSocket()
264 : m_bListen(FALSE), m_Daddy(0) { } 264 : m_bListen(FALSE), m_Daddy(0) { }
265 265
266 BOOL SetListen(BOOL b); 266 BOOL SetListen(BOOL b);
267 virtual void OnReceive(int nErrorCode); 267 virtual void OnReceive(int nErrorCode);
268}; 268};
269 269
270 typedef CList<tftp*,tftp*>CTFTPList; 270 typedef CList<tftp*,tftp*>CTFTPList;
271class CResolver; 271class CResolver;
272 class CXferSocket : public CAsyncSocket{ 272 class CXferSocket : public CAsyncSocket{
273public: 273public:
274 UINT m__timeOut; 274 UINT m__timeOut;
275 UINT m__blkSize; 275 UINT m__blkSize;
276 tftp::tftpOptions m_Options; 276 tftp::tftpOptions m_Options;
277 LONG m_xferSize; 277 LONG m_xferSize;
278 UINT m_timeOut; 278 UINT m_timeOut;
279 UINT m_blkSize; 279 UINT m_blkSize;
280 BOOL m_bRetry; 280 BOOL m_bRetry;
281 void SetTry(tftp *p=NULL); 281 void SetTry(tftp *p=NULL);
282 tftp* m_Retry; 282 tftp* m_Retry;
283 void OnRetry(); 283 void OnRetry();
284 BOOL CheckBadRelativeness(LPCTSTR file); 284 BOOL CheckBadRelativeness(LPCTSTR file);
285 CString ApplyRootGently(LPCTSTR fn); 285 CString ApplyRootGently(LPCTSTR fn);
286 CString m_HostName; 286 CString m_HostName;
287 virtual void OnResolved(); 287 virtual void OnResolved();
288 virtual void OnFailedToResolve(); 288 virtual void OnFailedToResolve();
289 CResolver *m_wndResolver; 289 CResolver *m_wndResolver;
290 BYTE m_ResolveBuff[MAXGETHOSTSTRUCT]; 290 BYTE m_ResolveBuff[MAXGETHOSTSTRUCT];
291 virtual void Abort(); 291 virtual void Abort();
292 void ResetTimeout(); 292 void ResetTimeout();
293 enum{ 293 enum{
294 stateNone, stateDeny, stateInit, stateOACK, stateXfer, stateFinish, stateClosing 294 stateNone, stateDeny, stateInit, stateOACK, stateXfer, stateFinish, stateClosing
295 }; 295 };
296 int state; 296 int state;
297 void Deny(UINT errCode,UINT errID); 297 void Deny(UINT errCode,UINT errID);
298 void Deny(CFileException* e); 298 void Deny(CFileException* e);
299 CString ApplyRoot(LPCTSTR fileName); 299 CString ApplyRoot(LPCTSTR fileName);
300 void TurnSlashes(CString& fn,BOOL bBack=TRUE); 300 void TurnSlashes(CString& fn,BOOL bBack=TRUE);
301 virtual void Destroy(BOOL success=TRUE); 301 virtual void Destroy(BOOL success=TRUE);
302 void PostError(CFileException* e); 302 void PostError(CFileException* e);
303 void PostError(UINT errCode,UINT errID); 303 void PostError(UINT errCode,UINT errID);
304 void PostTFTP(tftp* p,BOOL retryable=FALSE); 304 void PostTFTP(tftp* p,BOOL retryable=FALSE);
305 CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin); 305 CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin);
306 CFile m_File; 306 CFile m_File;
307 virtual ULONG GetACK(); 307 virtual ULONG GetACK();
308 CString m_Type; 308 CString m_Type;
309 CString m_FileName; 309 CString m_FileName;
310 CXferSocket(); 310 CXferSocket();
311 void UpdateList(); 311 void UpdateList();
312 void SetPeer(SOCKADDR_IN *sin); 312 void SetPeer(SOCKADDR_IN *sin);
313 virtual BOOL OnTFTP(tftp* p) = 0; 313 virtual BOOL OnTFTP(tftp* p) = 0;
314 virtual void OnReceive(int nErrorCode); 314 virtual void OnReceive(int nErrorCode);
315 void DoSelect(); 315 void DoSelect();
316 SOCKADDR_IN m_Peer; 316 SOCKADDR_IN m_Peer;
317 virtual void OnSend(int nErrorCode); 317 virtual void OnSend(int nErrorCode);
318 CPumpKINDlg* m_Daddy; 318 CPumpKINDlg* m_Daddy;
319 CTFTPList m_Queue; 319 CTFTPList m_Queue;
320 320
321 DECLARE_DYNAMIC(CXferSocket) 321 DECLARE_DYNAMIC(CXferSocket)
322}; 322};
323class CWRQSocket : public CXferSocket { 323class CWRQSocket : public CXferSocket {
324public: 324public:
325 BOOL m_bResume; 325 BOOL m_bResume;
326 void OnHostKnown(); 326 void OnHostKnown();
327 virtual void OnResolved(); 327 virtual void OnResolved();
328 UINT m_LastSlack; 328 UINT m_LastSlack;
329 ULONG GetACK(); 329 ULONG GetACK();
330 void DoXfer(); 330 void DoXfer();
331 UINT m_ACK; 331 UINT m_ACK;
332 BOOL SaveAs(CString& fn); 332 BOOL SaveAs(CString& fn);
333 BOOL RenameFile(CString& fn); 333 BOOL RenameFile(CString& fn);
334 BOOL m_Rename; 334 BOOL m_Rename;
335 BOOL ConfirmRequest(); 335 BOOL ConfirmRequest();
336 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL); 336 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL);
337 CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin); 337 CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin);
338 BOOL OnTFTP(tftp* p); 338 BOOL OnTFTP(tftp* p);
339 339
340 DECLARE_DYNAMIC(CWRQSocket) 340 DECLARE_DYNAMIC(CWRQSocket)
341}; 341};
342class CRRQSocket : public CXferSocket { 342class CRRQSocket : public CXferSocket {
343public: 343public:
344 void OnHostKnown(); 344 void OnHostKnown();
345 virtual void OnResolved(); 345 virtual void OnResolved();
346 BOOL ConfirmRequest(); 346 BOOL ConfirmRequest();
347 WORD m_LastSlack; 347 WORD m_LastSlack;
348 UINT m_ACK; 348 UINT m_ACK;
349 BOOL OnTFTP(tftp* p); 349 BOOL OnTFTP(tftp* p);
350 ULONG GetACK(void); 350 ULONG GetACK(void);
351 void DoXfer(); 351 void DoXfer();
352 CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin); 352 CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin);
353 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL); 353 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL);
354 354
355 DECLARE_DYNAMIC(CRRQSocket) 355 DECLARE_DYNAMIC(CRRQSocket)
356}; 356};
357 357
358 typedef CMap<SOCKET,SOCKET,CXferSocket*,CXferSocket*>CTIDMap; 358 typedef CMap<SOCKET,SOCKET,CXferSocket*,CXferSocket*>CTIDMap;
359typedef CMap<CTime*,CTime*,CTime*,CTime*> CTimeMap; 359typedef CMap<CTime*,CTime*,CTime*,CTime*> CTimeMap;
360 360
361///////////////////////////////////////////////////////////////////////////// 361/////////////////////////////////////////////////////////////////////////////
362// CPumpKINDlg dialog 362// CPumpKINDlg dialog
363 363
364class CTrayer; 364class CTrayer;
365class CRetrier; 365class CRetrier;
366class CPumpKINDlg : public CDialog 366class CPumpKINDlg : public CDialog
367{ 367{
368// Construction 368// Construction
369public: 369public:
370 void AdjustButton(CWnd& w,CRect& wrc);
371 void RecalcLayout(int,int);
372 CSize m_MinSize;
373 UINT m_bottomGapLog;
374 UINT m_bottomGapListen;
375 UINT m_rightGapList;
376 UINT m_rightGapButtons;
370 CString m_lastlogerr; 377 CString m_lastlogerr;
371 void LogLine(LPCTSTR str); 378 void LogLine(LPCTSTR str);
372 CString m_LogFile; 379 CString m_LogFile;
373 BOOL m_bListen; 380 BOOL m_bListen;
374 acl_rules_t m_aclRules; 381 acl_rules_t m_aclRules;
375 CString m_bnwRequest; 382 CString m_bnwRequest;
376 CString m_bnwSuccess; 383 CString m_bnwSuccess;
377 CString m_bnwAbort; 384 CString m_bnwAbort;
378 CBellsNWhistles m_bnw; 385 CBellsNWhistles m_bnw;
379 CTrayer *m_Trayer; 386 CTrayer *m_Trayer;
380 CTimeSpan m_RetryTimeOut; 387 CTimeSpan m_RetryTimeOut;
381 virtual ~CPumpKINDlg(); 388 virtual ~CPumpKINDlg();
382 CRetrier* m_Retrier; 389 CRetrier* m_Retrier;
383 virtual BOOL PreTranslateMessage(MSG* pMsg); 390 virtual BOOL PreTranslateMessage(MSG* pMsg);
384 BOOL m_bShown; 391 BOOL m_bShown;
385 BOOL m_bExiting; 392 BOOL m_bExiting;
386 void SaveSettings(); 393 void SaveSettings();
387 void LoadSettings(); 394 void LoadSettings();
388 void SetupButtons(); 395 void SetupButtons();
389 BITMAP m_bitmapBack; 396 BITMAP m_bitmapBack;
390 CBitmap m_bmpBack; 397 CBitmap m_bmpBack;
391 UINT m_PromptTimeOut; 398 UINT m_PromptTimeOut;
392 UINT m_SpeakPort; 399 UINT m_SpeakPort;
393 void LogLine(UINT msgID); 400 void LogLine(UINT msgID);
394 CTimeMap m_LogTimes; 401 CTimeMap m_LogTimes;
395 void LogLineToFile(LPCTSTR str); 402 void LogLineToFile(LPCTSTR str);
396 void LogLineToScreen(LPCTSTR str); 403 void LogLineToScreen(LPCTSTR str);
397 int m_LogLength; 404 int m_LogLength;
398 enum{ 405 enum{
399 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize 406 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize
400 }; 407 };
401 int m_iWRQ; 408 int m_iWRQ;
402 int m_iRRQ; 409 int m_iRRQ;
403 CImageList m_Images; 410 CImageList m_Images;
404 CTIDMap m_Xfers; 411 CTIDMap m_Xfers;
405 CTimeSpan m_TFTPTimeOut; 412 CTimeSpan m_TFTPTimeOut;
406 enum{ 413 enum{
407 rrqGiveAll=acl_rule::rrqGrant, 414 rrqGiveAll=acl_rule::rrqGrant,
408 rrqAlwaysConfirm=acl_rule::rrqPrompt, 415 rrqAlwaysConfirm=acl_rule::rrqPrompt,
409 rrqDenyAll=acl_rule::rrqDeny, 416 rrqDenyAll=acl_rule::rrqDeny,
410 rrqFallback=acl_rule::rrqNone, 417 rrqFallback=acl_rule::rrqNone,
411 rrqGrant=rrqGiveAll, rrqDeny=rrqDenyAll, rrqPrompt=rrqAlwaysConfirm 418 rrqGrant=rrqGiveAll, rrqDeny=rrqDenyAll, rrqPrompt=rrqAlwaysConfirm
412 }; 419 };
413 enum{ 420 enum{
414 wrqTakeAll=acl_rule::wrqGrant, 421 wrqTakeAll=acl_rule::wrqGrant,
415 wrqConfirmIfExists=acl_rule::wrqPromptIfExists, 422 wrqConfirmIfExists=acl_rule::wrqPromptIfExists,
416 wrqAlwaysConfirm=acl_rule::wrqPrompt, 423 wrqAlwaysConfirm=acl_rule::wrqPrompt,
417 wrqDenyAll=acl_rule::wrqDeny, 424 wrqDenyAll=acl_rule::wrqDeny,
418 wrqFallback=acl_rule::wrqNone, 425 wrqFallback=acl_rule::wrqNone,
419 wrqGrant=wrqTakeAll,wrqDeny=wrqDenyAll, wrqPrompt=wrqAlwaysConfirm 426 wrqGrant=wrqTakeAll,wrqDeny=wrqDenyAll, wrqPrompt=wrqAlwaysConfirm
420 }; 427 };
421 UINT m_RRQMode; 428 UINT m_RRQMode;
422 UINT m_WRQMode; 429 UINT m_WRQMode;
423 BOOL m_bTFTPSubdirs; 430 BOOL m_bTFTPSubdirs;
424 CString m_TFTPRoot; 431 CString m_TFTPRoot;
425 UINT m_ListenPort; 432 UINT m_ListenPort;
426 UINT m_BlockSize; 433 UINT m_BlockSize;
427 CListenSocket m_Listener; 434 CListenSocket m_Listener;
428 CPumpKINDlg(CWnd* pParent = NULL);// standard constructor 435 CPumpKINDlg(CWnd* pParent = NULL);// standard constructor
429 436
430// Dialog Data 437// Dialog Data
431 //{{AFX_DATA(CPumpKINDlg) 438 //{{AFX_DATA(CPumpKINDlg)
432 enum { IDD = IDD_PUMPKIN_DIALOG }; 439 enum { IDD = IDD_PUMPKIN_DIALOG };
440 CButtonm_HelpCtl;
441 CButtonm_PutCtl;
442 CButtonm_GetCtl;
443 CButtonm_ExitCtl;
433 CButtonm_ListenCtl; 444 CButtonm_ListenCtl;
434 CButtonm_AbortCtl; 445 CButtonm_AbortCtl;
435 CButtonm_OptionsCtl; 446 CButtonm_OptionsCtl;
436 CListBoxm_Log; 447 CListBoxm_Log;
437 CListCtrlm_List; 448 CListCtrlm_List;
438 //}}AFX_DATA 449 //}}AFX_DATA
439 450
440 // ClassWizard generated virtual function overrides 451 // ClassWizard generated virtual function overrides
441 //{{AFX_VIRTUAL(CPumpKINDlg) 452 //{{AFX_VIRTUAL(CPumpKINDlg)
442 protected: 453 protected:
443 virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support 454 virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support
444 //}}AFX_VIRTUAL 455 //}}AFX_VIRTUAL
445 456
446// Implementation 457// Implementation
447protected: 458protected:
448 CToolTipCtrl m_tooltip; 459 CToolTipCtrl m_tooltip;
449 HICON m_hIcon; 460 HICON m_hIcon;
450 461
451 // Generated message map functions 462 // Generated message map functions
452 //{{AFX_MSG(CPumpKINDlg) 463 //{{AFX_MSG(CPumpKINDlg)
453 virtual BOOL OnInitDialog(); 464 virtual BOOL OnInitDialog();
454 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 465 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
455 afx_msg void OnDestroy(); 466 afx_msg void OnDestroy();
456 afx_msg void OnPaint(); 467 afx_msg void OnPaint();
457 afx_msg HCURSOR OnQueryDragIcon(); 468 afx_msg HCURSOR OnQueryDragIcon();
458 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 469 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
459 afx_msg void OnOptions(); 470 afx_msg void OnOptions();
460 afx_msg void OnTimer(UINT nIDEvent); 471 afx_msg void OnTimer(UINT nIDEvent);
461 afx_msg void OnExit(); 472 afx_msg void OnExit();
462 afx_msg void OnPut(); 473 afx_msg void OnPut();
463 afx_msg void OnGet(); 474 afx_msg void OnGet();
464 afx_msg void OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult); 475 afx_msg void OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult);
465 afx_msg void OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult); 476 afx_msg void OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult);
466 afx_msg void OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult); 477 afx_msg void OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult);
467 afx_msg void OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult); 478 afx_msg void OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult);
468 afx_msg void OnAbort(); 479 afx_msg void OnAbort();
469 afx_msg void OnClose(); 480 afx_msg void OnClose();
470 afx_msg void OnTrayShowpumpkinwindow(); 481 afx_msg void OnTrayShowpumpkinwindow();
471 afx_msg void OnTrayListen(); 482 afx_msg void OnTrayListen();
472 afx_msg void OnTrayExit(); 483 afx_msg void OnTrayExit();
473 afx_msg void OnTrayAboutpumpkin(); 484 afx_msg void OnTrayAboutpumpkin();
474 afx_msg void OnTrayFetchfile(); 485 afx_msg void OnTrayFetchfile();
475 afx_msg void OnTrayHelp(); 486 afx_msg void OnTrayHelp();
476 afx_msg void OnTrayOptions(); 487 afx_msg void OnTrayOptions();
477 afx_msg void OnTraySendfile(); 488 afx_msg void OnTraySendfile();
478 afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos); 489 afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
479 afx_msg void OnSelchangeLog(); 490 afx_msg void OnSelchangeLog();
480 afx_msg void OnTrayOpenfilesfolder(); 491 afx_msg void OnTrayOpenfilesfolder();
481 afx_msg void OnDropFiles(HDROP hDropInfo); 492 afx_msg void OnDropFiles(HDROP hDropInfo);
482 virtual void OnCancel(); 493 virtual void OnCancel();
483 afx_msg void OnHelp(); 494 afx_msg void OnHelp();
484 afx_msg void OnListening(); 495 afx_msg void OnListening();
496 afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
497 afx_msg void OnSize(UINT nType, int cx, int cy);
485 //}}AFX_MSG 498 //}}AFX_MSG
486 DECLARE_MESSAGE_MAP() 499 DECLARE_MESSAGE_MAP()
487}; 500};
diff --git a/help/pumpkin.rtf b/help/pumpkin.rtf
index abdca4f..505cbf2 100644
--- a/help/pumpkin.rtf
+++ b/help/pumpkin.rtf
@@ -1,138 +1,139 @@
1{\rtf1\ansi 1{\rtf1\ansi
2@{\footnote 2@{\footnote
3THIS FILE WAS AUTOMATICALLY GENERATED FROM XML DOCUMENT. 3THIS FILE WAS AUTOMATICALLY GENERATED FROM XML DOCUMENT.
4DO NOT MODIFY THIS FILE DIRECTLY. EDIT XML DOCUMENT INSTEAD 4DO NOT MODIFY THIS FILE DIRECTLY. EDIT XML DOCUMENT INSTEAD
5} 5}
6{\fonttbl{\f0\froman Times New Roman;}{\f1\fswiss Arial;}{\f3\froman Symbol;}}{\colortbl; 6{\fonttbl{\f0\froman Times New Roman;}{\f1\fswiss Arial;}{\f3\froman Symbol;}}{\colortbl;
7 \red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; 7 \red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
8 \red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255; 8 \red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;
9 \red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128; 9 \red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
10 \red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} 10 \red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
11 11
12\pard\plain\keepn 12\pard\plain\keepn
13#{\footnote About} 13#{\footnote About}
14${\footnote About PumpKIN} 14${\footnote About PumpKIN}
15K{\footnote about} 15K{\footnote about}
16{ \f1\fs18\b\sb120 About {\b PumpKIN}} 16{ \f1\fs18\b\sb120 About {\b PumpKIN}}
17\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} is a program designed to send and receive files over the net while having {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} session running using {\i TFTP} ({\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}) protocol. It includes full-functional {\i TFTP} server/client so it may be useful for maintaining {\uldb CISCO}{\v %!ExecFile("http://www.cisco.com/")} routers and other network equipment. 17\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} is a program designed to send and receive files over the net while having {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} session running using {\i TFTP} ({\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}) protocol. It includes full-functional {\i TFTP} server/client so it may be useful for maintaining {\uldb CISCO}{\v %!ExecFile("http://www.cisco.com/")} routers and other network equipment.
18\par\sa120\sb120\qj\pard \f1\fs18\sb120 18\par\sa120\sb120\qj\pard \f1\fs18\sb120
19\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b {\i Enjoy!}} 19\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b {\i Enjoy!}}
20{ 20{
21\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2006 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")} 21\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2006 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")}
22\par\qj\sb120\sa120Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 22\par\qj\sb120\sa120Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
23\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 23\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
24\par \sa360 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24\par \sa360 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25} 25}
26\page 26\page
27 27
28\pard\plain 28\pard\plain
29#{\footnote News} 29#{\footnote News}
30${\footnote What's New} 30${\footnote What's New}
31\par\pard\plain\f1\fs24\qc\cf2\b 2.7 - 31\par\pard\plain\f1\fs24\qc\cf2\b 2.7 -
32\par\pard\plain\fi0\li0\f1\fs18 \bullet Added acess lists based on request IP address and TFTP opcode for automating access policy 32\par\pard\plain\fi0\li0\f1\fs18 \bullet Added acess lists based on request IP address and TFTP opcode for automating access policy
33\par\pard\plain\fi0\li0\f1\fs18 \bullet Added possibility to start/stop TFTP server, while keeping client functionality intact 33\par\pard\plain\fi0\li0\f1\fs18 \bullet Added possibility to start/stop TFTP server, while keeping client functionality intact
34\par\pard\plain\fi0\li0\f1\fs18 \bullet Logging to file 34\par\pard\plain\fi0\li0\f1\fs18 \bullet Logging to file
35\par\pard\plain\fi0\li0\f1\fs18 \bullet Resizable main window
35\par\pard\plain\f1\fs24\qc\cf2\b 2.6 - August 6th, 2005 36\par\pard\plain\f1\fs24\qc\cf2\b 2.6 - August 6th, 2005
36\par\pard\plain\fi0\li0\f1\fs18 \bullet more robust solution to the backslash/slash dilemma 37\par\pard\plain\fi0\li0\f1\fs18 \bullet more robust solution to the backslash/slash dilemma
37\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate error reporting 38\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate error reporting
38\par\pard\plain\fi0\li0\f1\fs18 \bullet Fixed uninstall procedure so that it works on XP 39\par\pard\plain\fi0\li0\f1\fs18 \bullet Fixed uninstall procedure so that it works on XP
39\par\pard\plain\f1\fs24\qc\cf2\b 2.5 - July 11th, 2004 40\par\pard\plain\f1\fs24\qc\cf2\b 2.5 - July 11th, 2004
40\par\pard\plain\fi0\li0\f1\fs18 \bullet Change of {\uldb license}{\v About} and opening the source. 41\par\pard\plain\fi0\li0\f1\fs18 \bullet Change of {\uldb license}{\v About} and opening the source.
41\par\pard\plain\fi0\li0\f1\fs18 \bullet Minor cosmetic changes 42\par\pard\plain\fi0\li0\f1\fs18 \bullet Minor cosmetic changes
42\par\pard\plain\f1\fs24\qc\cf2\b 2.0 - June 13th, 1998 43\par\pard\plain\f1\fs24\qc\cf2\b 2.0 - June 13th, 1998
43\par\pard\plain\fi0\li0\f1\fs18 \bullet Sounds customization. Now you can customize {\b PumpKIN} bells and whistles or turn them off completely. 44\par\pard\plain\fi0\li0\f1\fs18 \bullet Sounds customization. Now you can customize {\b PumpKIN} bells and whistles or turn them off completely.
44\par\pard\plain\fi0\li0\f1\fs18 \bullet Previous version of {\b PumpKIN} had a bug causing it to misbehave when you're requesting file from remote {\i tftp} server using {\b IP Address} (as opposed to {\b hostname}). 45\par\pard\plain\fi0\li0\f1\fs18 \bullet Previous version of {\b PumpKIN} had a bug causing it to misbehave when you're requesting file from remote {\i tftp} server using {\b IP Address} (as opposed to {\b hostname}).
45\par\pard\plain\fi0\li0\f1\fs18 \bullet Typo causing {\b PumpKIN} to log outgoing request in reverse (i.e. {\i Requesting 'hostname' from 'filename'}) fixed. 46\par\pard\plain\fi0\li0\f1\fs18 \bullet Typo causing {\b PumpKIN} to log outgoing request in reverse (i.e. {\i Requesting 'hostname' from 'filename'}) fixed.
46\par\pard\plain\fi0\li0\f1\fs18 \bullet Something else that you may not notice and I can not remember. 47\par\pard\plain\fi0\li0\f1\fs18 \bullet Something else that you may not notice and I can not remember.
47\par\pard\plain\f1\fs24\qc\cf2\b 1.5 - February 12th, 1998 48\par\pard\plain\f1\fs24\qc\cf2\b 1.5 - February 12th, 1998
48\par\pard\plain\fi0\li0\f1\fs18 \bullet Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer. 49\par\pard\plain\fi0\li0\f1\fs18 \bullet Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer.
49\par\pard\plain\fi0\li0\f1\fs18 \bullet Support for {\b block size}, {\b trasnfer size} and {\b transfer timeout} options as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")}, {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")}. I'm not sure if there are any other {\i TFTP} implementations supporting this, but at least it makes sense if you use {\b PumpKIN} on both ends. 50\par\pard\plain\fi0\li0\f1\fs18 \bullet Support for {\b block size}, {\b trasnfer size} and {\b transfer timeout} options as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")}, {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")}. I'm not sure if there are any other {\i TFTP} implementations supporting this, but at least it makes sense if you use {\b PumpKIN} on both ends.
50\par\pard\plain\fi0\li0\f1\fs18 \bullet New Install program 51\par\pard\plain\fi0\li0\f1\fs18 \bullet New Install program
51\page 52\page
52 53
53\pard\plain\keepn 54\pard\plain\keepn
54#{\footnote Using} 55#{\footnote Using}
55${\footnote Using PumpKIN} 56${\footnote Using PumpKIN}
56{ \f1\fs18\b\sb120 Using {\b PumpKIN}} 57{ \f1\fs18\b\sb120 Using {\b PumpKIN}}
57\par\sa120\sb120\qj\pard \f1\fs18\sb120 This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} conversation. It uses open sessions to determine IP address of your party. Also you may use it as a {\i TFTP} client/server by itself. To get/put files from/to {\i TFTP} server you need to enter host name/IP address manually in the {\uldb Request Dialog}{\v Request}. 58\par\sa120\sb120\qj\pard \f1\fs18\sb120 This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} conversation. It uses open sessions to determine IP address of your party. Also you may use it as a {\i TFTP} client/server by itself. To get/put files from/to {\i TFTP} server you need to enter host name/IP address manually in the {\uldb Request Dialog}{\v Request}.
58\par\sa120\sb120\qj\pard \f1\fs18\sb120 To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click {\b Abort xfer} button. 59\par\sa120\sb120\qj\pard \f1\fs18\sb120 To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click {\b Abort xfer} button.
59\par\sa120\sb120\qj\pard \f1\fs18\sb120 You may want to hide {\b PumpKIN} window and leave it as a tray icon only. Just click the \{bmct pumpkin.bmp\} icon in the tray or simply close the window. 60\par\sa120\sb120\qj\pard \f1\fs18\sb120 You may want to hide {\b PumpKIN} window and leave it as a tray icon only. Just click the \{bmct pumpkin.bmp\} icon in the tray or simply close the window.
60\par\sa120\sb120\qj\pard \f1\fs18\sb120 Use {\uldb Options}{\v Options} button to set {\b PumpKIN} options. 61\par\sa120\sb120\qj\pard \f1\fs18\sb120 Use {\uldb Options}{\v Options} button to set {\b PumpKIN} options.
61\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can start and stop {\b PumpKIN}'s {\i TFTP} server by checking and unchecking the {\b Server is running} checkbox in the lower right corner of main {\b PumpKIN} window. 62\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can start and stop {\b PumpKIN}'s {\i TFTP} server by checking and unchecking the {\b Server is running} checkbox in the lower right corner of main {\b PumpKIN} window.
62\page 63\page
63 64
64\pard\plain\keepn 65\pard\plain\keepn
65#{\footnote ConfirmRRQ} 66#{\footnote ConfirmRRQ}
66${\footnote Confirm Read Request Dialog} 67${\footnote Confirm Read Request Dialog}
67{ \f1\fs18\b\sb120 Confirm Read Request Dialog} 68{ \f1\fs18\b\sb120 Confirm Read Request Dialog}
68\par\sa120\sb120\qj\pard \f1\fs18\sb120 When the file is requested from your {\i TFTP} server you may choose to {\b Grant Access} to this file or to {\b Deny Access}. If you hesitate to answer for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeout} ({\i default - 30 seconds}) {\b PumpKIN} defaults to denial of all requests. 69\par\sa120\sb120\qj\pard \f1\fs18\sb120 When the file is requested from your {\i TFTP} server you may choose to {\b Grant Access} to this file or to {\b Deny Access}. If you hesitate to answer for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeout} ({\i default - 30 seconds}) {\b PumpKIN} defaults to denial of all requests.
69\page 70\page
70 71
71\pard\plain\keepn 72\pard\plain\keepn
72#{\footnote ConfirmWRQ} 73#{\footnote ConfirmWRQ}
73${\footnote Confirm Write Request Dialog} 74${\footnote Confirm Write Request Dialog}
74{ \f1\fs18\b\sb120 Confirm Write Request Dialog} 75{ \f1\fs18\b\sb120 Confirm Write Request Dialog}
75\par\sa120\sb120\qj\pard \f1\fs18\sb120 Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the {\b Rename} option. If you already have file with such name you may chose to {\b resume} transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use {\b PumpKIN} on both ends. If you are still unsure for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeOut} ({\i default - 30 seconds}) {\b PumpKIN} will make safe decision for you (deny). 76\par\sa120\sb120\qj\pard \f1\fs18\sb120 Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the {\b Rename} option. If you already have file with such name you may chose to {\b resume} transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use {\b PumpKIN} on both ends. If you are still unsure for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeOut} ({\i default - 30 seconds}) {\b PumpKIN} will make safe decision for you (deny).
76\page 77\page
77 78
78\pard\plain\keepn 79\pard\plain\keepn
79#{\footnote Request} 80#{\footnote Request}
80${\footnote Request Dialog} 81${\footnote Request Dialog}
81{ \f1\fs18\b\sb120 Request Dialog} 82{ \f1\fs18\b\sb120 Request Dialog}
82\par\sa120\sb120\qj\pard \f1\fs18\sb120 Request dialog is aimed to let you form read or write request. You may set the following options:\pard 83\par\sa120\sb120\qj\pard \f1\fs18\sb120 Request dialog is aimed to let you form read or write request. You may set the following options:\pard
83\par \fi0\li0 \bullet {\b Local File} - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use {\b Browse} button to select the file. 84\par \fi0\li0 \bullet {\b Local File} - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use {\b Browse} button to select the file.
84\par \fi0\li0 \bullet {\b Remote File} Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request). 85\par \fi0\li0 \bullet {\b Remote File} Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request).
85\par \fi0\li0 \bullet {\b Remote Host} is your party's host or {\i TFTP} server you're requesting file from/sending file to. To refresh the list of your talk windows use {\b REFRESH} button. 86\par \fi0\li0 \bullet {\b Remote Host} is your party's host or {\i TFTP} server you're requesting file from/sending file to. To refresh the list of your talk windows use {\b REFRESH} button.
86\par \fi0\li0 \bullet {\b Type} is the type of transfer as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}. Doesn't mean much, really. Defined types are '{\i octet}' or '{\i netascii}'. Default is '{\i octet}'. 87\par \fi0\li0 \bullet {\b Type} is the type of transfer as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}. Doesn't mean much, really. Defined types are '{\i octet}' or '{\i netascii}'. Default is '{\i octet}'.
87\par \fi0\li0 \bullet {\b Block Size} - Use this block size if remote is {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}-compliant. If remote doesn't support this option {\b PumpKIN} will fallback to 512 bytes per block.\pard 88\par \fi0\li0 \bullet {\b Block Size} - Use this block size if remote is {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}-compliant. If remote doesn't support this option {\b PumpKIN} will fallback to 512 bytes per block.\pard
88\page 89\page
89 90
90\pard\plain\keepn 91\pard\plain\keepn
91#{\footnote Options} 92#{\footnote Options}
92${\footnote Options} 93${\footnote Options}
93{ \f1\fs18\b\sb120 Options} 94{ \f1\fs18\b\sb120 Options}
94\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} options property sheet consists of two tabs. For more information see {\uldb {\b Network}}{\v NetworkOptions} and {\b Server} options. 95\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} options property sheet consists of two tabs. For more information see {\uldb {\b Network}}{\v NetworkOptions} and {\b Server} options.
95\page 96\page
96 97
97\pard\plain\keepn 98\pard\plain\keepn
98#{\footnote NetworkOptions} 99#{\footnote NetworkOptions}
99${\footnote Network Options} 100${\footnote Network Options}
100{ \f1\fs18\b\sb120 Network Options}\pard 101{ \f1\fs18\b\sb120 Network Options}\pard
101\par \fi0\li0 \bullet {\b UDP Ports}\pard 102\par \fi0\li0 \bullet {\b UDP Ports}\pard
102\par \fi0\li0 \bullet {\b Listen for incoming connections on port} - specifies the port we're listening to. The default as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")} is 69. 103\par \fi0\li0 \bullet {\b Listen for incoming connections on port} - specifies the port we're listening to. The default as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")} is 69.
103\par \fi0\li0 \bullet {\b Send outgoing requests to port} - specifies the port we're going to send all requests to.\pard 104\par \fi0\li0 \bullet {\b Send outgoing requests to port} - specifies the port we're going to send all requests to.\pard
104\par \fi0\li0 \bullet {\b Default Connection timeout} - if there's no activity for specified time, transfer is considered to be dead and terminated. {\b PumpKIN} tries to propagate this value to remote as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")} if possible. 105\par \fi0\li0 \bullet {\b Default Connection timeout} - if there's no activity for specified time, transfer is considered to be dead and terminated. {\b PumpKIN} tries to propagate this value to remote as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")} if possible.
105\par \fi0\li0 \bullet {\b Default Block Size} - {\b PumpKIN} tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}{\b PumpKIN} falls back to 512 bytes per block.\pard 106\par \fi0\li0 \bullet {\b Default Block Size} - {\b PumpKIN} tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}{\b PumpKIN} falls back to 512 bytes per block.\pard
106\page 107\page
107 108
108\pard\plain\keepn 109\pard\plain\keepn
109#{\footnote ServerOptions} 110#{\footnote ServerOptions}
110${\footnote Server Options} 111${\footnote Server Options}
111{ \f1\fs18\b\sb120 Server Options}\pard 112{ \f1\fs18\b\sb120 Server Options}\pard
112\par \fi0\li0 \bullet {\b TFTP Filesystem root} - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start {\b PumpKIN} for the first time from. 113\par \fi0\li0 \bullet {\b TFTP Filesystem root} - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start {\b PumpKIN} for the first time from.
113\par \fi0\li0 \bullet {\b Allow access to subdirectories} - specifies whether you want allow access to the whole subtree of {\b TFTP Root} or only to the directory itself. 114\par \fi0\li0 \bullet {\b Allow access to subdirectories} - specifies whether you want allow access to the whole subtree of {\b TFTP Root} or only to the directory itself.
114\par \fi0\li0 \bullet {\b Read Request Behavior} - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here. 115\par \fi0\li0 \bullet {\b Read Request Behavior} - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here.
115\par \fi0\li0 \bullet {\b Write Request Behavior} - You may chose to {\b take all files} ({\i not recommended}), to {\b prompt only if file exists already}, {\b Always prompt} or {\b Deny all requests}. 116\par \fi0\li0 \bullet {\b Write Request Behavior} - You may chose to {\b take all files} ({\i not recommended}), to {\b prompt only if file exists already}, {\b Always prompt} or {\b Deny all requests}.
116\par \fi0\li0 \bullet {#{\footnote ConfirmationTimeOut}}{\b Confirmation timeout} - this is the time {\b PumpKIN} will wait for you to accept or deny request before it will give up and take default action which is always deny. 117\par \fi0\li0 \bullet {#{\footnote ConfirmationTimeOut}}{\b Confirmation timeout} - this is the time {\b PumpKIN} will wait for you to accept or deny request before it will give up and take default action which is always deny.
117\par \fi0\li0 \bullet {\b Log file} - If you want to enable logging to file, set the destination file here.\pard 118\par \fi0\li0 \bullet {\b Log file} - If you want to enable logging to file, set the destination file here.\pard
118\page 119\page
119 120
120\pard\plain\keepn 121\pard\plain\keepn
121#{\footnote SoundsOptions} 122#{\footnote SoundsOptions}
122${\footnote Sounds Options} 123${\footnote Sounds Options}
123{ \f1\fs18\b\sb120 Sounds} 124{ \f1\fs18\b\sb120 Sounds}
124\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted. 125\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted.
125\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list. 126\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list.
126\page 127\page
127 128
128\pard\plain\keepn 129\pard\plain\keepn
129#{\footnote ACL} 130#{\footnote ACL}
130${\footnote Access Lists} 131${\footnote Access Lists}
131{ \f1\fs18\b\sb120 Access Lists} 132{ \f1\fs18\b\sb120 Access Lists}
132\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can slightly automate your access policies by setting up read/write request behavior for different incoming requests. 133\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.
133\par\sa120\sb120\qj\pard \f1\fs18\sb120 The rule consists of {\b request type}, source network ({\b ip} and {\b netmask}) and {\b action} to take (see also {\uldb Server Options}{\v ServerOptions}). 134\par\sa120\sb120\qj\pard \f1\fs18\sb120 The rule consists of {\b request type}, source network ({\b ip} and {\b netmask}) and {\b action} to take (see also {\uldb Server Options}{\v ServerOptions}).
134\par\sa120\sb120\qj\pard \f1\fs18\sb120 When {\b PumpKIN} receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button. 135\par\sa120\sb120\qj\pard \f1\fs18\sb120 When {\b PumpKIN} receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.
135\par\sa120\sb120\qj\pard \f1\fs18\sb120 To add a new rule fill in the information about {\b request type}, source {\b address} and {\b netmask} and desired action. Then click on the 'Add new rule' button. 136\par\sa120\sb120\qj\pard \f1\fs18\sb120 To add a new rule fill in the information about {\b request type}, source {\b address} and {\b netmask} and desired action. Then click on the 'Add new rule' button.
136\par\sa120\sb120\qj\pard \f1\fs18\sb120 If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button. 137\par\sa120\sb120\qj\pard \f1\fs18\sb120 If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.
137\page 138\page
138} \ No newline at end of file 139} \ No newline at end of file
diff --git a/help/pumpkin.xml b/help/pumpkin.xml
index 46e3bbc..5c951bb 100644
--- a/help/pumpkin.xml
+++ b/help/pumpkin.xml
@@ -1,106 +1,107 @@
1<?xml version="1.0"?> 1<?xml version="1.0"?>
2<winhelp> 2<winhelp>
3 <topic id="About" title="About PumpKIN" keywords="about"> 3 <topic id="About" title="About PumpKIN" keywords="about">
4 <heading scroll="no">About <kin>PumpKIN</kin></heading> 4 <heading scroll="no">About <kin>PumpKIN</kin></heading>
5 <p><kin>PumpKIN</kin> is a program designed to send and receive files over the net while having <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> session running using <term>TFTP</term> (<rfc num="1350"/>) protocol. It includes full-functional <term>TFTP</term> server/client so it may be useful for maintaining <a href="http://www.cisco.com/">CISCO</a> routers and other network equipment.</p> 5 <p><kin>PumpKIN</kin> is a program designed to send and receive files over the net while having <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> session running using <term>TFTP</term> (<rfc num="1350"/>) protocol. It includes full-functional <term>TFTP</term> server/client so it may be useful for maintaining <a href="http://www.cisco.com/">CISCO</a> routers and other network equipment.</p>
6 <p/> 6 <p/>
7 <p><b><i>Enjoy!</i></b></p> 7 <p><b><i>Enjoy!</i></b></p>
8 <license years="1997-2006"/> 8 <license years="1997-2006"/>
9 <credist/> 9 <credist/>
10 </topic> 10 </topic>
11 <topic id="News" title="What's New"> 11 <topic id="News" title="What's New">
12 <newsfor version="2.7" date=""> 12 <newsfor version="2.7" date="">
13 <ni>Added acess lists based on request IP address and TFTP opcode for automating access policy</ni> 13 <ni>Added acess lists based on request IP address and TFTP opcode for automating access policy</ni>
14 <ni>Added possibility to start/stop TFTP server, while keeping client functionality intact</ni> 14 <ni>Added possibility to start/stop TFTP server, while keeping client functionality intact</ni>
15 <ni>Logging to file</ni> 15 <ni>Logging to file</ni>
16 <ni>Resizable main window</ni>
16 </newsfor> 17 </newsfor>
17 <newsfor version="2.6" date="August 6th, 2005"> 18 <newsfor version="2.6" date="August 6th, 2005">
18 <ni>more robust solution to the backslash/slash dilemma</ni> 19 <ni>more robust solution to the backslash/slash dilemma</ni>
19 <ni>A bit more elaborate error reporting</ni> 20 <ni>A bit more elaborate error reporting</ni>
20 <ni>Fixed uninstall procedure so that it works on XP</ni> 21 <ni>Fixed uninstall procedure so that it works on XP</ni>
21 </newsfor> 22 </newsfor>
22 <newsfor version="2.5" date="July 11th, 2004"> 23 <newsfor version="2.5" date="July 11th, 2004">
23 <ni>Change of <a href="#About">license</a> and opening the source.</ni> 24 <ni>Change of <a href="#About">license</a> and opening the source.</ni>
24 <ni>Minor cosmetic changes</ni> 25 <ni>Minor cosmetic changes</ni>
25 </newsfor> 26 </newsfor>
26 <newsfor version="2.0" date="June 13th, 1998"> 27 <newsfor version="2.0" date="June 13th, 1998">
27 <ni>Sounds customization. Now you can customize <kin>PumpKIN</kin> bells and whistles or turn them off completely.</ni> 28 <ni>Sounds customization. Now you can customize <kin>PumpKIN</kin> bells and whistles or turn them off completely.</ni>
28 <ni>Previous version of <kin>PumpKIN</kin> had a bug causing it to misbehave when you're requesting file from remote <term>tftp</term> server using <b>IP Address</b> (as opposed to <b>hostname</b>).</ni> 29 <ni>Previous version of <kin>PumpKIN</kin> had a bug causing it to misbehave when you're requesting file from remote <term>tftp</term> server using <b>IP Address</b> (as opposed to <b>hostname</b>).</ni>
29 <ni>Typo causing <kin>PumpKIN</kin> to log outgoing request in reverse (i.e. <i>Requesting 'hostname' from 'filename'</i>) fixed.</ni> 30 <ni>Typo causing <kin>PumpKIN</kin> to log outgoing request in reverse (i.e. <i>Requesting 'hostname' from 'filename'</i>) fixed.</ni>
30 <ni>Something else that you may not notice and I can not remember.</ni> 31 <ni>Something else that you may not notice and I can not remember.</ni>
31 </newsfor> 32 </newsfor>
32 <newsfor version="1.5" date="February 12th, 1998"> 33 <newsfor version="1.5" date="February 12th, 1998">
33 <ni>Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer.</ni> 34 <ni>Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer.</ni>
34 <ni>Support for <b>block size</b>, <b>trasnfer size</b> and <b>transfer timeout</b> options as described in <rfc num="1782"/>, <rfc num="1783"/> and <rfc num="1784"/>. I'm not sure if there are any other <term>TFTP</term> implementations supporting this, but at least it makes sense if you use <kin>PumpKIN</kin> on both ends.</ni> 35 <ni>Support for <b>block size</b>, <b>trasnfer size</b> and <b>transfer timeout</b> options as described in <rfc num="1782"/>, <rfc num="1783"/> and <rfc num="1784"/>. I'm not sure if there are any other <term>TFTP</term> implementations supporting this, but at least it makes sense if you use <kin>PumpKIN</kin> on both ends.</ni>
35 <ni>New Install program</ni> 36 <ni>New Install program</ni>
36 </newsfor> 37 </newsfor>
37 </topic> 38 </topic>
38 <topic id="Using" title="Using PumpKIN"> 39 <topic id="Using" title="Using PumpKIN">
39 <heading scroll="no">Using <kin>PumpKIN</kin></heading> 40 <heading scroll="no">Using <kin>PumpKIN</kin></heading>
40 <p>This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> conversation. It uses open sessions to determine IP address of your party. Also you may use it as a <term>TFTP</term> client/server by itself. To get/put files from/to <term>TFTP</term> server you need to enter host name/IP address manually in the <a href="#Request">Request Dialog</a>.</p> 41 <p>This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> conversation. It uses open sessions to determine IP address of your party. Also you may use it as a <term>TFTP</term> client/server by itself. To get/put files from/to <term>TFTP</term> server you need to enter host name/IP address manually in the <a href="#Request">Request Dialog</a>.</p>
41 <p>To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click <b>Abort xfer</b> button.</p> 42 <p>To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click <b>Abort xfer</b> button.</p>
42 <p>You may want to hide <kin>PumpKIN</kin> window and leave it as a tray icon only. Just click the <image source="pumpkin.bmp"/> icon in the tray or simply close the window.</p> 43 <p>You may want to hide <kin>PumpKIN</kin> window and leave it as a tray icon only. Just click the <image source="pumpkin.bmp"/> icon in the tray or simply close the window.</p>
43 <p>Use <a href="#Options">Options</a> button to set <kin>PumpKIN</kin> options.</p> 44 <p>Use <a href="#Options">Options</a> button to set <kin>PumpKIN</kin> options.</p>
44 <p>You can start and stop <kin>PumpKIN</kin>'s <term>TFTP</term> server by checking and unchecking the <b>Server is running</b> checkbox in the lower right corner of main <kin>PumpKIN</kin> window.</p> 45 <p>You can start and stop <kin>PumpKIN</kin>'s <term>TFTP</term> server by checking and unchecking the <b>Server is running</b> checkbox in the lower right corner of main <kin>PumpKIN</kin> window.</p>
45 </topic> 46 </topic>
46 <topic id="ConfirmRRQ" title="Confirm Read Request Dialog"> 47 <topic id="ConfirmRRQ" title="Confirm Read Request Dialog">
47 <heading scroll="no">Confirm Read Request Dialog</heading> 48 <heading scroll="no">Confirm Read Request Dialog</heading>
48 <p>When the file is requested from your <term>TFTP</term> server you may choose to <b>Grant Access</b> to this file or to <b>Deny Access</b>. If you hesitate to answer for <a href="#ConfirmationTimeout"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> defaults to denial of all requests.</p> 49 <p>When the file is requested from your <term>TFTP</term> server you may choose to <b>Grant Access</b> to this file or to <b>Deny Access</b>. If you hesitate to answer for <a href="#ConfirmationTimeout"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> defaults to denial of all requests.</p>
49 </topic> 50 </topic>
50 <topic id="ConfirmWRQ" title="Confirm Write Request Dialog"> 51 <topic id="ConfirmWRQ" title="Confirm Write Request Dialog">
51 <heading scroll="no">Confirm Write Request Dialog</heading> 52 <heading scroll="no">Confirm Write Request Dialog</heading>
52 <p>Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the <b>Rename</b> option. If you already have file with such name you may chose to <b>resume</b> transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use <kin>PumpKIN</kin> on both ends. If you are still unsure for <a href="#ConfirmationTimeOut"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> will make safe decision for you (deny).</p> 53 <p>Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the <b>Rename</b> option. If you already have file with such name you may chose to <b>resume</b> transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use <kin>PumpKIN</kin> on both ends. If you are still unsure for <a href="#ConfirmationTimeOut"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> will make safe decision for you (deny).</p>
53 </topic> 54 </topic>
54 <topic id="Request" title="Request Dialog"> 55 <topic id="Request" title="Request Dialog">
55 <heading scroll="no">Request Dialog</heading> 56 <heading scroll="no">Request Dialog</heading>
56 <p>Request dialog is aimed to let you form read or write request. You may set the following options:</p> 57 <p>Request dialog is aimed to let you form read or write request. You may set the following options:</p>
57 <ul> 58 <ul>
58 <li><b>Local File</b> - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use <b>Browse</b> button to select the file.</li> 59 <li><b>Local File</b> - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use <b>Browse</b> button to select the file.</li>
59 <li><b>Remote File</b> Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request).</li> 60 <li><b>Remote File</b> Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request).</li>
60 <li><b>Remote Host</b> is your party's host or <term>TFTP</term> server you're requesting file from/sending file to. To refresh the list of your talk windows use <b>REFRESH</b> button.</li> 61 <li><b>Remote Host</b> is your party's host or <term>TFTP</term> server you're requesting file from/sending file to. To refresh the list of your talk windows use <b>REFRESH</b> button.</li>
61 <li><b>Type</b> is the type of transfer as defined in <rfc num="1350"/>. Doesn't mean much, really. Defined types are '<i>octet</i>' or '<i>netascii</i>'. Default is '<i>octet</i>'.</li> 62 <li><b>Type</b> is the type of transfer as defined in <rfc num="1350"/>. Doesn't mean much, really. Defined types are '<i>octet</i>' or '<i>netascii</i>'. Default is '<i>octet</i>'.</li>
62 <li><b>Block Size</b> - Use this block size if remote is <rfc num="1783"/>-compliant. If remote doesn't support this option <kin>PumpKIN</kin> will fallback to 512 bytes per block.</li> 63 <li><b>Block Size</b> - Use this block size if remote is <rfc num="1783"/>-compliant. If remote doesn't support this option <kin>PumpKIN</kin> will fallback to 512 bytes per block.</li>
63 </ul> 64 </ul>
64 </topic> 65 </topic>
65 <topic id="Options" title="Options"> 66 <topic id="Options" title="Options">
66 <heading scroll="no">Options</heading> 67 <heading scroll="no">Options</heading>
67 <p><kin>PumpKIN</kin> options property sheet consists of two tabs. For more information see <a href="#NetworkOptions"><b>Network</b></a> and <a herf="#ServerOptions"><b>Server</b></a> options.</p> 68 <p><kin>PumpKIN</kin> options property sheet consists of two tabs. For more information see <a href="#NetworkOptions"><b>Network</b></a> and <a herf="#ServerOptions"><b>Server</b></a> options.</p>
68 </topic> 69 </topic>
69 <topic id="NetworkOptions" title="Network Options"> 70 <topic id="NetworkOptions" title="Network Options">
70 <heading scroll="no">Network Options</heading> 71 <heading scroll="no">Network Options</heading>
71 <ul> 72 <ul>
72 <li><b>UDP Ports</b> 73 <li><b>UDP Ports</b>
73 <ul> 74 <ul>
74 <li><b>Listen for incoming connections on port</b> - specifies the port we're listening to. The default as defined in <rfc num="1350"/> is 69.</li> 75 <li><b>Listen for incoming connections on port</b> - specifies the port we're listening to. The default as defined in <rfc num="1350"/> is 69.</li>
75 <li><b>Send outgoing requests to port</b> - specifies the port we're going to send all requests to.</li> 76 <li><b>Send outgoing requests to port</b> - specifies the port we're going to send all requests to.</li>
76 </ul> 77 </ul>
77 </li> 78 </li>
78 <li><b>Default Connection timeout</b> - if there's no activity for specified time, transfer is considered to be dead and terminated. <kin>PumpKIN</kin> tries to propagate this value to remote as described in <rfc num="1782"/> and <rfc num="1784"/> if possible.</li> 79 <li><b>Default Connection timeout</b> - if there's no activity for specified time, transfer is considered to be dead and terminated. <kin>PumpKIN</kin> tries to propagate this value to remote as described in <rfc num="1782"/> and <rfc num="1784"/> if possible.</li>
79 <li><b>Default Block Size</b> - <kin>PumpKIN</kin> tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support <rfc num="1782"/> and <rfc num="1783"/> <kin>PumpKIN</kin> falls back to 512 bytes per block.</li> 80 <li><b>Default Block Size</b> - <kin>PumpKIN</kin> tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support <rfc num="1782"/> and <rfc num="1783"/> <kin>PumpKIN</kin> falls back to 512 bytes per block.</li>
80 </ul> 81 </ul>
81 </topic> 82 </topic>
82 <topic id="ServerOptions" title="Server Options"> 83 <topic id="ServerOptions" title="Server Options">
83 <heading scroll="no">Server Options</heading> 84 <heading scroll="no">Server Options</heading>
84 <ul> 85 <ul>
85 <li><b>TFTP Filesystem root</b> - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start <kin>PumpKIN</kin> for the first time from.</li> 86 <li><b>TFTP Filesystem root</b> - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start <kin>PumpKIN</kin> for the first time from.</li>
86 <li><b>Allow access to subdirectories</b> - specifies whether you want allow access to the whole subtree of <b>TFTP Root</b> or only to the directory itself.</li> 87 <li><b>Allow access to subdirectories</b> - specifies whether you want allow access to the whole subtree of <b>TFTP Root</b> or only to the directory itself.</li>
87 <li><b>Read Request Behavior</b> - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here.</li> 88 <li><b>Read Request Behavior</b> - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here.</li>
88 <li><b>Write Request Behavior</b> - You may chose to <b>take all files</b> (<i>not recommended</i>), to <b>prompt only if file exists already</b>, <b>Always prompt</b> or <b>Deny all requests</b>.</li> 89 <li><b>Write Request Behavior</b> - You may chose to <b>take all files</b> (<i>not recommended</i>), to <b>prompt only if file exists already</b>, <b>Always prompt</b> or <b>Deny all requests</b>.</li>
89 <li><a name="ConfirmationTimeOut"/><b>Confirmation timeout</b> - this is the time <kin>PumpKIN</kin> will wait for you to accept or deny request before it will give up and take default action which is always deny.</li> 90 <li><a name="ConfirmationTimeOut"/><b>Confirmation timeout</b> - this is the time <kin>PumpKIN</kin> will wait for you to accept or deny request before it will give up and take default action which is always deny.</li>
90 <li><b>Log file</b> - If you want to enable logging to file, set the destination file here.</li> 91 <li><b>Log file</b> - If you want to enable logging to file, set the destination file here.</li>
91 </ul> 92 </ul>
92 </topic> 93 </topic>
93 <topic id="SoundsOptions" title="Sounds Options"> 94 <topic id="SoundsOptions" title="Sounds Options">
94 <heading scroll="no">Sounds</heading> 95 <heading scroll="no">Sounds</heading>
95 <p>You can customize <kin>PumpKIN</kin> sounds notifications here. There are three customizable sounds defined - <b>Incoming request</b>, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. <b>xfer Aborted</b> - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. <b>xfer Finished</b> means that your file was successfully transmitted.</p> 96 <p>You can customize <kin>PumpKIN</kin> sounds notifications here. There are three customizable sounds defined - <b>Incoming request</b>, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. <b>xfer Aborted</b> - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. <b>xfer Finished</b> means that your file was successfully transmitted.</p>
96 <p>You can select any <b>.wav</b> file or one of the predefined sounds from the dropdown list.</p> 97 <p>You can select any <b>.wav</b> file or one of the predefined sounds from the dropdown list.</p>
97 </topic> 98 </topic>
98 <topic id="ACL" title="Access Lists"> 99 <topic id="ACL" title="Access Lists">
99 <heading scroll="no">Access Lists</heading> 100 <heading scroll="no">Access Lists</heading>
100 <p>You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.</p> 101 <p>You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.</p>
101 <p>The rule consists of <b>request type</b>, source network (<b>ip</b> and <b>netmask</b>) and <b>action</b> to take (see also <a href="#ServerOptions">Server Options</a>).</p> 102 <p>The rule consists of <b>request type</b>, source network (<b>ip</b> and <b>netmask</b>) and <b>action</b> to take (see also <a href="#ServerOptions">Server Options</a>).</p>
102 <p>When <kin>PumpKIN</kin> receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.</p> 103 <p>When <kin>PumpKIN</kin> receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.</p>
103 <p>To add a new rule fill in the information about <b>request type</b>, source <b>address</b> and <b>netmask</b> and desired action. Then click on the 'Add new rule' button.</p> 104 <p>To add a new rule fill in the information about <b>request type</b>, source <b>address</b> and <b>netmask</b> and desired action. Then click on the 'Add new rule' button.</p>
104 <p>If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.</p> 105 <p>If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.</p>
105 </topic> 106 </topic>
106</winhelp> 107</winhelp>
diff --git a/pumpkin.clw b/pumpkin.clw
index 5344bfd..213d8c1 100644
--- a/pumpkin.clw
+++ b/pumpkin.clw
@@ -1,327 +1,327 @@
1; CLW file contains information for the MFC ClassWizard 1; CLW file contains information for the MFC ClassWizard
2 2
3[General Info] 3[General Info]
4Version=1 4Version=1
5LastClass=CPropsServer 5LastClass=CPumpKINDlg
6LastTemplate=CComboBox 6LastTemplate=CComboBox
7NewFileInclude1=#include "stdafx.h" 7NewFileInclude1=#include "stdafx.h"
8NewFileInclude2=#include "PumpKIN.h" 8NewFileInclude2=#include "PumpKIN.h"
9 9
10ClassCount=14 10ClassCount=14
11Class1=CPumpKINApp 11Class1=CPumpKINApp
12Class2=CPumpKINDlg 12Class2=CPumpKINDlg
13Class3=CAboutDlg 13Class3=CAboutDlg
14 14
15ResourceCount=10 15ResourceCount=10
16Resource1=IDD_REQUEST 16Resource1=IDD_REQUEST
17Resource2=IDD_PROPS_NETWORK 17Resource2=IDD_PROPS_NETWORK
18Resource3=IDD_CONFIRM_RRQ 18Resource3=IDD_CONFIRM_RRQ
19Resource4=IDD_ABOUTBOX 19Resource4=IDD_PROPS_SERVER
20Class4=CPropsServer 20Class4=CPropsServer
21Class5=CPropsNetwork 21Class5=CPropsNetwork
22Resource5=IDD_CONFIRM_WRQ 22Resource5=IDD_CONFIRM_WRQ
23Resource6=IDD_PROPS_ACL 23Resource6=IDD_PROPS_ACL
24Class6=CConfirmRRQDlg 24Class6=CConfirmRRQDlg
25Class7=CConfirmWRQDlg 25Class7=CConfirmWRQDlg
26Resource7=IDD_PUMPKIN_DIALOG 26Resource7=IDD_ABOUTBOX
27Class8=CRequestDlg 27Class8=CRequestDlg
28Class9=CResolver 28Class9=CResolver
29Class10=CRetrier 29Class10=CRetrier
30Class11=CTrayer 30Class11=CTrayer
31Resource8=IDD_PROPS_SOUNDS 31Resource8=IDD_PROPS_SOUNDS
32Class12=CPropsSounds 32Class12=CPropsSounds
33Resource9=IDM_POPUPS 33Resource9=IDM_POPUPS
34Class13=CPropsACL 34Class13=CPropsACL
35Class14=CACLTargetCombo 35Class14=CACLTargetCombo
36Resource10=IDD_PROPS_SERVER 36Resource10=IDD_PUMPKIN_DIALOG
37 37
38[CLS:CPumpKINApp] 38[CLS:CPumpKINApp]
39Type=0 39Type=0
40HeaderFile=PumpKIN.h 40HeaderFile=PumpKIN.h
41ImplementationFile=PumpKIN.cpp 41ImplementationFile=PumpKIN.cpp
42Filter=N 42Filter=N
43 43
44[CLS:CPumpKINDlg] 44[CLS:CPumpKINDlg]
45Type=0 45Type=0
46HeaderFile=PumpKINDlg.h 46HeaderFile=PumpKINDlg.h
47ImplementationFile=PumpKINDlg.cpp 47ImplementationFile=PumpKINDlg.cpp
48Filter=W 48Filter=W
49BaseClass=CDialog 49BaseClass=CDialog
50VirtualFilter=dWC 50VirtualFilter=dWC
51LastObject=CPumpKINDlg 51LastObject=CPumpKINDlg
52 52
53[CLS:CAboutDlg] 53[CLS:CAboutDlg]
54Type=0 54Type=0
55HeaderFile=PumpKINDlg.h 55HeaderFile=PumpKINDlg.h
56ImplementationFile=PumpKINDlg.cpp 56ImplementationFile=PumpKINDlg.cpp
57Filter=D 57Filter=D
58BaseClass=CDialog 58BaseClass=CDialog
59VirtualFilter=dWC 59VirtualFilter=dWC
60LastObject=CAboutDlg 60LastObject=CAboutDlg
61 61
62[DLG:IDD_ABOUTBOX] 62[DLG:IDD_ABOUTBOX]
63Type=1 63Type=1
64Class=CAboutDlg 64Class=CAboutDlg
65ControlCount=5 65ControlCount=5
66Control1=IDC_STATIC,static,1342177283 66Control1=IDC_STATIC,static,1342177283
67Control2=IDC_STATIC,static,1342308480 67Control2=IDC_STATIC,static,1342308480
68Control3=IDC_STATIC,static,1342308352 68Control3=IDC_STATIC,static,1342308352
69Control4=IDOK,button,1342373889 69Control4=IDOK,button,1342373889
70Control5=IDC_KLEVERNET,button,1342242816 70Control5=IDC_KLEVERNET,button,1342242816
71 71
72[DLG:IDD_PUMPKIN_DIALOG] 72[DLG:IDD_PUMPKIN_DIALOG]
73Type=1 73Type=1
74Class=CPumpKINDlg 74Class=CPumpKINDlg
75ControlCount=10 75ControlCount=10
76Control1=IDC_CONNECTIONS,SysListView32,1350631681 76Control1=IDC_CONNECTIONS,SysListView32,1350631681
77Control2=IDC_GET,button,1342259200 77Control2=IDC_GET,button,1342259200
78Control3=IDC_PUT,button,1342259200 78Control3=IDC_PUT,button,1342259200
79Control4=IDC_ABORT,button,1342259200 79Control4=IDC_ABORT,button,1342259200
80Control5=IDC_OPTIONS,button,1342259200 80Control5=IDC_OPTIONS,button,1342259200
81Control6=IDC_EXIT,button,1342259200 81Control6=IDC_EXIT,button,1342259200
82Control7=ID_HELP,button,1342259200 82Control7=ID_HELP,button,1342259200
83Control8=IDC_LOG,listbox,1353728129 83Control8=IDC_LOG,listbox,1353728385
84Control9=IDCANCEL,button,1073741824 84Control9=IDCANCEL,button,1073741824
85Control10=IDC_LISTENING,button,1342275619 85Control10=IDC_LISTENING,button,1342275619
86 86
87[DLG:IDD_PROPS_SERVER] 87[DLG:IDD_PROPS_SERVER]
88Type=1 88Type=1
89Class=CPropsServer 89Class=CPropsServer
90ControlCount=18 90ControlCount=18
91Control1=IDC_STATIC,button,1342177287 91Control1=IDC_STATIC,button,1342177287
92Control2=IDC_TFTPROOT,edit,1350631552 92Control2=IDC_TFTPROOT,edit,1350631552
93Control3=IDC_BROWSE,button,1342242880 93Control3=IDC_BROWSE,button,1342242880
94Control4=IDC_TFTPSUBDIRS,button,1342242819 94Control4=IDC_TFTPSUBDIRS,button,1342242819
95Control5=IDC_STATIC,button,1342177287 95Control5=IDC_STATIC,button,1342177287
96Control6=IDC_RRQ_GIVEALL,button,1342324745 96Control6=IDC_RRQ_GIVEALL,button,1342324745
97Control7=IDC_RRQ_ALWAYSCONFIRM,button,1342193673 97Control7=IDC_RRQ_ALWAYSCONFIRM,button,1342193673
98Control8=IDC_RRQ_DENYALL,button,1342193673 98Control8=IDC_RRQ_DENYALL,button,1342193673
99Control9=IDC_STATIC,button,1342308359 99Control9=IDC_STATIC,button,1342308359
100Control10=IDC_WRQ_TAKEALL,button,1342308361 100Control10=IDC_WRQ_TAKEALL,button,1342308361
101Control11=IDC_WRQ_PROMPTEXISTING,button,1342177289 101Control11=IDC_WRQ_PROMPTEXISTING,button,1342177289
102Control12=IDC_WRQ_ALWAYSCONFIRM,button,1342177289 102Control12=IDC_WRQ_ALWAYSCONFIRM,button,1342177289
103Control13=IDC_WRQ_DENYALL,button,1342177289 103Control13=IDC_WRQ_DENYALL,button,1342177289
104Control14=IDC_STATIC,static,1342308609 104Control14=IDC_STATIC,static,1342308609
105Control15=IDC_PROMPTTIMEOUT,msctls_trackbar32,1342242823 105Control15=IDC_PROMPTTIMEOUT,msctls_trackbar32,1342242823
106Control16=IDC_STATIC,button,1342177287 106Control16=IDC_STATIC,button,1342177287
107Control17=IDC_LOGFILE,edit,1350631552 107Control17=IDC_LOGFILE,edit,1350631552
108Control18=IDC_LOGFILE_BROWSE,button,1342242880 108Control18=IDC_LOGFILE_BROWSE,button,1342242880
109 109
110[DLG:IDD_PROPS_NETWORK] 110[DLG:IDD_PROPS_NETWORK]
111Type=1 111Type=1
112Class=CPropsNetwork 112Class=CPropsNetwork
113ControlCount=15 113ControlCount=15
114Control1=IDC_STATIC,button,1342177287 114Control1=IDC_STATIC,button,1342177287
115Control2=IDC_STATIC,static,1342308354 115Control2=IDC_STATIC,static,1342308354
116Control3=IDC_LISTENPORT,edit,1350631552 116Control3=IDC_LISTENPORT,edit,1350631552
117Control4=IDC_LISTENSPIN,msctls_updown32,1342177463 117Control4=IDC_LISTENSPIN,msctls_updown32,1342177463
118Control5=IDC_STATIC,static,1342308354 118Control5=IDC_STATIC,static,1342308354
119Control6=IDC_SPEAKPORT,edit,1350631552 119Control6=IDC_SPEAKPORT,edit,1350631552
120Control7=IDC_SPEAKSPIN,msctls_updown32,1342177463 120Control7=IDC_SPEAKSPIN,msctls_updown32,1342177463
121Control8=IDC_STATIC,static,1342308352 121Control8=IDC_STATIC,static,1342308352
122Control9=IDC_TIMEOUT,edit,1350639744 122Control9=IDC_TIMEOUT,edit,1350639744
123Control10=IDC_TIMESPIN,msctls_updown32,1342177463 123Control10=IDC_TIMESPIN,msctls_updown32,1342177463
124Control11=IDC_STATIC,static,1342308352 124Control11=IDC_STATIC,static,1342308352
125Control12=IDC_STATIC,static,1342308352 125Control12=IDC_STATIC,static,1342308352
126Control13=IDC_STATIC,static,1342308352 126Control13=IDC_STATIC,static,1342308352
127Control14=IDC_BLOCKSIZE,edit,1350639744 127Control14=IDC_BLOCKSIZE,edit,1350639744
128Control15=IDC_BSIZESPIN,msctls_updown32,1342177463 128Control15=IDC_BSIZESPIN,msctls_updown32,1342177463
129 129
130[CLS:CPropsServer] 130[CLS:CPropsServer]
131Type=0 131Type=0
132HeaderFile=PropsServer.h 132HeaderFile=PropsServer.h
133ImplementationFile=PropsServer.cpp 133ImplementationFile=PropsServer.cpp
134BaseClass=CPropertyPage 134BaseClass=CPropertyPage
135Filter=D 135Filter=D
136VirtualFilter=idWC 136VirtualFilter=idWC
137LastObject=IDC_LOGFILE_BROWSE 137LastObject=CPropsServer
138 138
139[CLS:CPropsNetwork] 139[CLS:CPropsNetwork]
140Type=0 140Type=0
141HeaderFile=PropsNetwork.h 141HeaderFile=PropsNetwork.h
142ImplementationFile=PropsNetwork.cpp 142ImplementationFile=PropsNetwork.cpp
143BaseClass=CPropertyPage 143BaseClass=CPropertyPage
144Filter=D 144Filter=D
145VirtualFilter=idWC 145VirtualFilter=idWC
146LastObject=IDC_BLOCKSIZE 146LastObject=IDC_BLOCKSIZE
147 147
148[DLG:IDD_CONFIRM_RRQ] 148[DLG:IDD_CONFIRM_RRQ]
149Type=1 149Type=1
150Class=CConfirmRRQDlg 150Class=CConfirmRRQDlg
151ControlCount=9 151ControlCount=9
152Control1=IDOK,button,1342242817 152Control1=IDOK,button,1342242817
153Control2=IDCANCEL,button,1342242816 153Control2=IDCANCEL,button,1342242816
154Control3=IDC_STATIC,static,1342308352 154Control3=IDC_STATIC,static,1342308352
155Control4=IDC_HOST,static,1350701313 155Control4=IDC_HOST,static,1350701313
156Control5=IDC_STATIC,static,1342308353 156Control5=IDC_STATIC,static,1342308353
157Control6=IDC_FILE,static,1350701313 157Control6=IDC_FILE,static,1350701313
158Control7=IDC_STATIC,static,1342177296 158Control7=IDC_STATIC,static,1342177296
159Control8=IDC_STATIC,static,1342177283 159Control8=IDC_STATIC,static,1342177283
160Control9=IDC_STATIC,static,1342177283 160Control9=IDC_STATIC,static,1342177283
161 161
162[DLG:IDD_CONFIRM_WRQ] 162[DLG:IDD_CONFIRM_WRQ]
163Type=1 163Type=1
164Class=CConfirmWRQDlg 164Class=CConfirmWRQDlg
165ControlCount=11 165ControlCount=11
166Control1=IDOK,button,1342242817 166Control1=IDOK,button,1342242817
167Control2=IDC_RENAME,button,1342242816 167Control2=IDC_RENAME,button,1342242816
168Control3=IDCANCEL,button,1342242816 168Control3=IDCANCEL,button,1342242816
169Control4=IDC_STATIC,static,1342308352 169Control4=IDC_STATIC,static,1342308352
170Control5=IDC_HOST,static,1350701313 170Control5=IDC_HOST,static,1350701313
171Control6=IDC_STATIC,static,1342308353 171Control6=IDC_STATIC,static,1342308353
172Control7=IDC_FILE,static,1350701313 172Control7=IDC_FILE,static,1350701313
173Control8=IDC_STATIC,static,1342177296 173Control8=IDC_STATIC,static,1342177296
174Control9=IDC_STATIC,static,1342177283 174Control9=IDC_STATIC,static,1342177283
175Control10=IDC_STATIC,static,1342177283 175Control10=IDC_STATIC,static,1342177283
176Control11=IDC_RESUME,button,1342242816 176Control11=IDC_RESUME,button,1342242816
177 177
178[CLS:CConfirmRRQDlg] 178[CLS:CConfirmRRQDlg]
179Type=0 179Type=0
180HeaderFile=ConfirmRRQDlg.h 180HeaderFile=ConfirmRRQDlg.h
181ImplementationFile=ConfirmRRQDlg.cpp 181ImplementationFile=ConfirmRRQDlg.cpp
182BaseClass=CDialog 182BaseClass=CDialog
183Filter=D 183Filter=D
184VirtualFilter=dWC 184VirtualFilter=dWC
185LastObject=CConfirmRRQDlg 185LastObject=CConfirmRRQDlg
186 186
187[CLS:CConfirmWRQDlg] 187[CLS:CConfirmWRQDlg]
188Type=0 188Type=0
189HeaderFile=ConfirmWRQDlg.h 189HeaderFile=ConfirmWRQDlg.h
190ImplementationFile=ConfirmWRQDlg.cpp 190ImplementationFile=ConfirmWRQDlg.cpp
191BaseClass=CDialog 191BaseClass=CDialog
192Filter=D 192Filter=D
193VirtualFilter=dWC 193VirtualFilter=dWC
194LastObject=IDC_RESUME 194LastObject=IDC_RESUME
195 195
196[DLG:IDD_REQUEST] 196[DLG:IDD_REQUEST]
197Type=1 197Type=1
198Class=CRequestDlg 198Class=CRequestDlg
199ControlCount=15 199ControlCount=15
200Control1=IDC_STATIC,static,1342308608 200Control1=IDC_STATIC,static,1342308608
201Control2=IDC_LOCALFILE,edit,1350631552 201Control2=IDC_LOCALFILE,edit,1350631552
202Control3=IDC_BROWSE,button,1342242880 202Control3=IDC_BROWSE,button,1342242880
203Control4=IDC_STATIC,static,1342308608 203Control4=IDC_STATIC,static,1342308608
204Control5=IDC_REMOTEFILE,edit,1350631552 204Control5=IDC_REMOTEFILE,edit,1350631552
205Control6=IDC_STATIC,static,1342308608 205Control6=IDC_STATIC,static,1342308608
206Control7=IDC_TALKS,combobox,1344341313 206Control7=IDC_TALKS,combobox,1344341313
207Control8=IDC_REFRESH,button,1342271232 207Control8=IDC_REFRESH,button,1342271232
208Control9=IDC_STATIC,static,1342308352 208Control9=IDC_STATIC,static,1342308352
209Control10=IDC_TYPE,combobox,1344356418 209Control10=IDC_TYPE,combobox,1344356418
210Control11=IDC_STATIC,static,1342308352 210Control11=IDC_STATIC,static,1342308352
211Control12=IDC_BSIZE,combobox,1344339970 211Control12=IDC_BSIZE,combobox,1344339970
212Control13=IDOK,button,1342242817 212Control13=IDOK,button,1342242817
213Control14=IDCANCEL,button,1342242816 213Control14=IDCANCEL,button,1342242816
214Control15=IDC_STATIC,static,1342177297 214Control15=IDC_STATIC,static,1342177297
215 215
216[CLS:CRequestDlg] 216[CLS:CRequestDlg]
217Type=0 217Type=0
218HeaderFile=RequestDlg.h 218HeaderFile=RequestDlg.h
219ImplementationFile=RequestDlg.cpp 219ImplementationFile=RequestDlg.cpp
220BaseClass=CDialog 220BaseClass=CDialog
221Filter=W 221Filter=W
222VirtualFilter=dWC 222VirtualFilter=dWC
223LastObject=CRequestDlg 223LastObject=CRequestDlg
224 224
225[CLS:CResolver] 225[CLS:CResolver]
226Type=0 226Type=0
227HeaderFile=Resolver.h 227HeaderFile=Resolver.h
228ImplementationFile=Resolver.cpp 228ImplementationFile=Resolver.cpp
229BaseClass=CWnd 229BaseClass=CWnd
230Filter=W 230Filter=W
231LastObject=CResolver 231LastObject=CResolver
232VirtualFilter=WC 232VirtualFilter=WC
233 233
234[MNU:IDM_POPUPS] 234[MNU:IDM_POPUPS]
235Type=1 235Type=1
236Class=CPumpKINDlg 236Class=CPumpKINDlg
237Command1=ID_TRAY_SENDFILE 237Command1=ID_TRAY_SENDFILE
238Command2=ID_TRAY_FETCHFILE 238Command2=ID_TRAY_FETCHFILE
239Command3=ID_TRAY_OPTIONS 239Command3=ID_TRAY_OPTIONS
240Command4=ID_TRAY_LISTEN 240Command4=ID_TRAY_LISTEN
241Command5=ID_TRAY_SHOWPUMPKINWINDOW 241Command5=ID_TRAY_SHOWPUMPKINWINDOW
242Command6=ID_TRAY_OPENFILESFOLDER 242Command6=ID_TRAY_OPENFILESFOLDER
243Command7=ID_TRAY_HELP 243Command7=ID_TRAY_HELP
244Command8=ID_TRAY_ABOUTPUMPKIN 244Command8=ID_TRAY_ABOUTPUMPKIN
245Command9=ID_TRAY_EXIT 245Command9=ID_TRAY_EXIT
246CommandCount=9 246CommandCount=9
247 247
248[CLS:CRetrier] 248[CLS:CRetrier]
249Type=0 249Type=0
250HeaderFile=Retrier.h 250HeaderFile=Retrier.h
251ImplementationFile=Retrier.cpp 251ImplementationFile=Retrier.cpp
252BaseClass=CWnd 252BaseClass=CWnd
253Filter=W 253Filter=W
254LastObject=CRetrier 254LastObject=CRetrier
255VirtualFilter=WC 255VirtualFilter=WC
256 256
257[CLS:CTrayer] 257[CLS:CTrayer]
258Type=0 258Type=0
259HeaderFile=Trayer.h 259HeaderFile=Trayer.h
260ImplementationFile=Trayer.cpp 260ImplementationFile=Trayer.cpp
261BaseClass=CWnd 261BaseClass=CWnd
262Filter=W 262Filter=W
263LastObject=CTrayer 263LastObject=CTrayer
264VirtualFilter=WC 264VirtualFilter=WC
265 265
266[DLG:IDD_PROPS_SOUNDS] 266[DLG:IDD_PROPS_SOUNDS]
267Type=1 267Type=1
268Class=CPropsSounds 268Class=CPropsSounds
269ControlCount=12 269ControlCount=12
270Control1=IDC_STATIC,static,1342308352 270Control1=IDC_STATIC,static,1342308352
271Control2=IDC_RING,combobox,1344340290 271Control2=IDC_RING,combobox,1344340290
272Control3=IDC_RING_BROWSE,button,1342242880 272Control3=IDC_RING_BROWSE,button,1342242880
273Control4=IDC_RING_PLAY,button,1342242880 273Control4=IDC_RING_PLAY,button,1342242880
274Control5=IDC_STATIC,static,1342308352 274Control5=IDC_STATIC,static,1342308352
275Control6=IDC_FINISHED,combobox,1344340290 275Control6=IDC_FINISHED,combobox,1344340290
276Control7=IDC_FINISHED_BROWSE,button,1342242880 276Control7=IDC_FINISHED_BROWSE,button,1342242880
277Control8=IDC_FINISHED_PLAY,button,1342242880 277Control8=IDC_FINISHED_PLAY,button,1342242880
278Control9=IDC_STATIC,static,1342308352 278Control9=IDC_STATIC,static,1342308352
279Control10=IDC_ABORTED,combobox,1344340290 279Control10=IDC_ABORTED,combobox,1344340290
280Control11=IDC_ABORTED_BROWSE,button,1342242880 280Control11=IDC_ABORTED_BROWSE,button,1342242880
281Control12=IDC_ABORTED_PLAY,button,1342242880 281Control12=IDC_ABORTED_PLAY,button,1342242880
282 282
283[CLS:CPropsSounds] 283[CLS:CPropsSounds]
284Type=0 284Type=0
285HeaderFile=PropsSounds.h 285HeaderFile=PropsSounds.h
286ImplementationFile=PropsSounds.cpp 286ImplementationFile=PropsSounds.cpp
287BaseClass=CPropertyPage 287BaseClass=CPropertyPage
288Filter=D 288Filter=D
289LastObject=CPropsSounds 289LastObject=CPropsSounds
290VirtualFilter=idWC 290VirtualFilter=idWC
291 291
292[DLG:IDD_PROPS_ACL] 292[DLG:IDD_PROPS_ACL]
293Type=1 293Type=1
294Class=CPropsACL 294Class=CPropsACL
295ControlCount=14 295ControlCount=14
296Control1=IDC_ACL_LIST,SysListView32,1350631425 296Control1=IDC_ACL_LIST,SysListView32,1350631425
297Control2=IDC_ACL_UP,button,1342246720 297Control2=IDC_ACL_UP,button,1342246720
298Control3=IDC_ACL_DOWN,button,1342246720 298Control3=IDC_ACL_DOWN,button,1342246720
299Control4=IDC_ACL_REMOVE,button,1342246720 299Control4=IDC_ACL_REMOVE,button,1342246720
300Control5=IDC_STATIC,static,1342308352 300Control5=IDC_STATIC,static,1342308352
301Control6=IDC_ACL_XFER,combobox,1344339971 301Control6=IDC_ACL_XFER,combobox,1344339971
302Control7=IDC_STATIC,static,1342308352 302Control7=IDC_STATIC,static,1342308352
303Control8=IDC_ACL_ADDR,edit,1350631552 303Control8=IDC_ACL_ADDR,edit,1350631552
304Control9=IDC_STATIC,static,1342308352 304Control9=IDC_STATIC,static,1342308352
305Control10=IDC_ACL_NETMASK,edit,1350631552 305Control10=IDC_ACL_NETMASK,edit,1350631552
306Control11=IDC_STATIC,static,1342308352 306Control11=IDC_STATIC,static,1342308352
307Control12=IDC_ACL_RULE,combobox,1344339971 307Control12=IDC_ACL_RULE,combobox,1344339971
308Control13=IDC_ACL_ADD,button,1342242816 308Control13=IDC_ACL_ADD,button,1342242816
309Control14=IDC_ACL_REPLACE,button,1342242816 309Control14=IDC_ACL_REPLACE,button,1342242816
310 310
311[CLS:CPropsACL] 311[CLS:CPropsACL]
312Type=0 312Type=0
313HeaderFile=PropsACL.h 313HeaderFile=PropsACL.h
314ImplementationFile=PropsACL.cpp 314ImplementationFile=PropsACL.cpp
315BaseClass=CPropertyPage 315BaseClass=CPropertyPage
316Filter=D 316Filter=D
317LastObject=CPropsACL 317LastObject=CPropsACL
318VirtualFilter=idWC 318VirtualFilter=idWC
319 319
320[CLS:CACLTargetCombo] 320[CLS:CACLTargetCombo]
321Type=0 321Type=0
322HeaderFile=ACLTargetCombo.h 322HeaderFile=ACLTargetCombo.h
323ImplementationFile=ACLTargetCombo.cpp 323ImplementationFile=ACLTargetCombo.cpp
324BaseClass=CComboBox 324BaseClass=CComboBox
325Filter=W 325Filter=W
326LastObject=CACLTargetCombo 326LastObject=CACLTargetCombo
327 327
diff --git a/pumpkin.mak b/pumpkin.mak
index 7d2ec22..a22a6fa 100644
--- a/pumpkin.mak
+++ b/pumpkin.mak
@@ -1,1729 +1,1685 @@
1# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 1# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
2# ** DO NOT EDIT ** 2# ** DO NOT EDIT **
3 3
4# TARGTYPE "Win32 (x86) Application" 0x0101 4# TARGTYPE "Win32 (x86) Application" 0x0101
5 5
6!IF "$(CFG)" == "" 6!IF "$(CFG)" == ""
7CFG=Install - Win32 Debug 7CFG=Install - Win32 Debug
8!MESSAGE No configuration specified. Defaulting to Install - Win32 Debug. 8!MESSAGE No configuration specified. Defaulting to Install - Win32 Debug.
9!ENDIF 9!ENDIF
10 10
11!IF "$(CFG)" != "PumpKIN - Win32 Release" && "$(CFG)" !=\ 11!IF "$(CFG)" != "PumpKIN - Win32 Release" && "$(CFG)" !=\
12 "PumpKIN - Win32 Debug" && "$(CFG)" != "PumpKIN - Win32 Static" && "$(CFG)" !=\ 12 "PumpKIN - Win32 Debug" && "$(CFG)" != "PumpKIN - Win32 Static" && "$(CFG)" !=\
13 "Install - Win32 Debug" && "$(CFG)" != "Install - Win32 Pure" && "$(CFG)" !=\ 13 "Install - Win32 Debug" && "$(CFG)" != "Install - Win32 Pure" && "$(CFG)" !=\
14 "Install - Win32 Static" && "$(CFG)" != "Install - Win32 Canned" 14 "Install - Win32 Static" && "$(CFG)" != "Install - Win32 Canned"
15!MESSAGE Invalid configuration "$(CFG)" specified. 15!MESSAGE Invalid configuration "$(CFG)" specified.
16!MESSAGE You can specify a configuration when running NMAKE on this makefile 16!MESSAGE You can specify a configuration when running NMAKE on this makefile
17!MESSAGE by defining the macro CFG on the command line. For example: 17!MESSAGE by defining the macro CFG on the command line. For example:
18!MESSAGE 18!MESSAGE
19!MESSAGE NMAKE /f "pumpkin.mak" CFG="Install - Win32 Debug" 19!MESSAGE NMAKE /f "pumpkin.mak" CFG="Install - Win32 Debug"
20!MESSAGE 20!MESSAGE
21!MESSAGE Possible choices for configuration are: 21!MESSAGE Possible choices for configuration are:
22!MESSAGE 22!MESSAGE
23!MESSAGE "PumpKIN - Win32 Release" (based on "Win32 (x86) Application") 23!MESSAGE "PumpKIN - Win32 Release" (based on "Win32 (x86) Application")
24!MESSAGE "PumpKIN - Win32 Debug" (based on "Win32 (x86) Application") 24!MESSAGE "PumpKIN - Win32 Debug" (based on "Win32 (x86) Application")
25!MESSAGE "PumpKIN - Win32 Static" (based on "Win32 (x86) Application") 25!MESSAGE "PumpKIN - Win32 Static" (based on "Win32 (x86) Application")
26!MESSAGE "Install - Win32 Debug" (based on "Win32 (x86) Application") 26!MESSAGE "Install - Win32 Debug" (based on "Win32 (x86) Application")
27!MESSAGE "Install - Win32 Pure" (based on "Win32 (x86) Application") 27!MESSAGE "Install - Win32 Pure" (based on "Win32 (x86) Application")
28!MESSAGE "Install - Win32 Static" (based on "Win32 (x86) Application") 28!MESSAGE "Install - Win32 Static" (based on "Win32 (x86) Application")
29!MESSAGE "Install - Win32 Canned" (based on "Win32 (x86) Application") 29!MESSAGE "Install - Win32 Canned" (based on "Win32 (x86) Application")
30!MESSAGE 30!MESSAGE
31!ERROR An invalid configuration is specified. 31!ERROR An invalid configuration is specified.
32!ENDIF 32!ENDIF
33 33
34!IF "$(OS)" == "Windows_NT" 34!IF "$(OS)" == "Windows_NT"
35NULL= 35NULL=
36!ELSE 36!ELSE
37NULL=nul 37NULL=nul
38!ENDIF 38!ENDIF
39################################################################################ 39################################################################################
40# Begin Project 40# Begin Project
41# PROP Target_Last_Scanned "Install - Win32 Canned" 41# PROP Target_Last_Scanned "PumpKIN - Win32 Debug"
42CPP=cl.exe 42CPP=cl.exe
43RSC=rc.exe 43RSC=rc.exe
44MTL=mktyplib.exe 44MTL=mktyplib.exe
45 45
46!IF "$(CFG)" == "PumpKIN - Win32 Release" 46!IF "$(CFG)" == "PumpKIN - Win32 Release"
47 47
48# PROP BASE Use_MFC 6 48# PROP BASE Use_MFC 6
49# PROP BASE Use_Debug_Libraries 0 49# PROP BASE Use_Debug_Libraries 0
50# PROP BASE Output_Dir "Release" 50# PROP BASE Output_Dir "Release"
51# PROP BASE Intermediate_Dir "Release" 51# PROP BASE Intermediate_Dir "Release"
52# PROP BASE Target_Dir "" 52# PROP BASE Target_Dir ""
53# PROP Use_MFC 6 53# PROP Use_MFC 6
54# PROP Use_Debug_Libraries 0 54# PROP Use_Debug_Libraries 0
55# PROP Output_Dir "Release" 55# PROP Output_Dir "Release"
56# PROP Intermediate_Dir "Release" 56# PROP Intermediate_Dir "Release"
57# PROP Target_Dir "" 57# PROP Target_Dir ""
58OUTDIR=.\Release 58OUTDIR=.\Release
59INTDIR=.\Release 59INTDIR=.\Release
60# Begin Custom Macros 60# Begin Custom Macros
61OutDir=.\Release 61OutDir=.\Release
62TargetName=pumpkin 62TargetName=pumpkin
63# End Custom Macros 63# End Custom Macros
64 64
65ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\ 65ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\
66 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_" 66 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_"
67 67
68CLEAN : 68CLEAN :
69 -@erase "$(INTDIR)\ACLTargetCombo.obj" 69 -@erase "$(INTDIR)\ACLTargetCombo.obj"
70 -@erase "$(INTDIR)\ConfirmRRQDlg.obj" 70 -@erase "$(INTDIR)\ConfirmRRQDlg.obj"
71 -@erase "$(INTDIR)\ConfirmWRQDlg.obj" 71 -@erase "$(INTDIR)\ConfirmWRQDlg.obj"
72 -@erase "$(INTDIR)\PropsACL.obj" 72 -@erase "$(INTDIR)\PropsACL.obj"
73 -@erase "$(INTDIR)\PropsNetwork.obj" 73 -@erase "$(INTDIR)\PropsNetwork.obj"
74 -@erase "$(INTDIR)\PropsServer.obj" 74 -@erase "$(INTDIR)\PropsServer.obj"
75 -@erase "$(INTDIR)\PropsSounds.obj" 75 -@erase "$(INTDIR)\PropsSounds.obj"
76 -@erase "$(INTDIR)\pumpkin.cn_" 76 -@erase "$(INTDIR)\pumpkin.cn_"
77 -@erase "$(INTDIR)\pumpkin.cnt" 77 -@erase "$(INTDIR)\pumpkin.cnt"
78 -@erase "$(INTDIR)\pumpkin.hl_" 78 -@erase "$(INTDIR)\pumpkin.hl_"
79 -@erase "$(INTDIR)\pumpkin.hlp" 79 -@erase "$(INTDIR)\pumpkin.hlp"
80 -@erase "$(INTDIR)\PumpKIN.obj" 80 -@erase "$(INTDIR)\PumpKIN.obj"
81 -@erase "$(INTDIR)\pumpkin.pch" 81 -@erase "$(INTDIR)\pumpkin.pch"
82 -@erase "$(INTDIR)\pumpkin.res" 82 -@erase "$(INTDIR)\pumpkin.res"
83 -@erase "$(INTDIR)\PumpKINDlg.obj" 83 -@erase "$(INTDIR)\PumpKINDlg.obj"
84 -@erase "$(INTDIR)\RequestDlg.obj" 84 -@erase "$(INTDIR)\RequestDlg.obj"
85 -@erase "$(INTDIR)\Resolver.obj" 85 -@erase "$(INTDIR)\Resolver.obj"
86 -@erase "$(INTDIR)\Retrier.obj" 86 -@erase "$(INTDIR)\Retrier.obj"
87 -@erase "$(INTDIR)\StdAfx.obj" 87 -@erase "$(INTDIR)\StdAfx.obj"
88 -@erase "$(INTDIR)\Trayer.obj" 88 -@erase "$(INTDIR)\Trayer.obj"
89 -@erase "$(OUTDIR)\pumpkin.ex_" 89 -@erase "$(OUTDIR)\pumpkin.ex_"
90 -@erase "$(OUTDIR)\pumpkin.exe" 90 -@erase "$(OUTDIR)\pumpkin.exe"
91 91
92"$(OUTDIR)" : 92"$(OUTDIR)" :
93 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" 93 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
94 94
95# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c 95# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c
96# ADD CPP /nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c 96# ADD CPP /nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c
97CPP_PROJ=/nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ 97CPP_PROJ=/nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\
98 "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yu"stdafx.h" /Fo"$(INTDIR)/"\ 98 "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yu"stdafx.h" /Fo"$(INTDIR)/"\
99 /c 99 /c
100CPP_OBJS=.\Release/ 100CPP_OBJS=.\Release/
101CPP_SBRS=.\. 101CPP_SBRS=.\.
102# ADD BASE MTL /nologo /D "NDEBUG" /win32 102# ADD BASE MTL /nologo /D "NDEBUG" /win32
103# ADD MTL /nologo /D "NDEBUG" /win32 103# ADD MTL /nologo /D "NDEBUG" /win32
104MTL_PROJ=/nologo /D "NDEBUG" /win32 104MTL_PROJ=/nologo /D "NDEBUG" /win32
105# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" 105# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
106# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" 106# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
107RSC_PROJ=/l 0x409 /fo"$(INTDIR)/pumpkin.res" /d "NDEBUG" /d "_AFXDLL" 107RSC_PROJ=/l 0x409 /fo"$(INTDIR)/pumpkin.res" /d "NDEBUG" /d "_AFXDLL"
108BSC32=bscmake.exe 108BSC32=bscmake.exe
109# ADD BASE BSC32 /nologo 109# ADD BASE BSC32 /nologo
110# ADD BSC32 /nologo 110# ADD BSC32 /nologo
111BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc" 111BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc"
112BSC32_SBRS= \ 112BSC32_SBRS= \
113 113
114LINK32=link.exe 114LINK32=link.exe
115# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386 115# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
116# ADD LINK32 /nologo /subsystem:windows /machine:I386 116# ADD LINK32 /nologo /subsystem:windows /machine:I386
117LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\ 117LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\
118 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe" 118 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe"
119LINK32_OBJS= \ 119LINK32_OBJS= \
120 "$(INTDIR)\ACLTargetCombo.obj" \ 120 "$(INTDIR)\ACLTargetCombo.obj" \
121 "$(INTDIR)\ConfirmRRQDlg.obj" \ 121 "$(INTDIR)\ConfirmRRQDlg.obj" \
122 "$(INTDIR)\ConfirmWRQDlg.obj" \ 122 "$(INTDIR)\ConfirmWRQDlg.obj" \
123 "$(INTDIR)\PropsACL.obj" \ 123 "$(INTDIR)\PropsACL.obj" \
124 "$(INTDIR)\PropsNetwork.obj" \ 124 "$(INTDIR)\PropsNetwork.obj" \
125 "$(INTDIR)\PropsServer.obj" \ 125 "$(INTDIR)\PropsServer.obj" \
126 "$(INTDIR)\PropsSounds.obj" \ 126 "$(INTDIR)\PropsSounds.obj" \
127 "$(INTDIR)\PumpKIN.obj" \ 127 "$(INTDIR)\PumpKIN.obj" \
128 "$(INTDIR)\pumpkin.res" \ 128 "$(INTDIR)\pumpkin.res" \
129 "$(INTDIR)\PumpKINDlg.obj" \ 129 "$(INTDIR)\PumpKINDlg.obj" \
130 "$(INTDIR)\RequestDlg.obj" \ 130 "$(INTDIR)\RequestDlg.obj" \
131 "$(INTDIR)\Resolver.obj" \ 131 "$(INTDIR)\Resolver.obj" \
132 "$(INTDIR)\Retrier.obj" \ 132 "$(INTDIR)\Retrier.obj" \
133 "$(INTDIR)\StdAfx.obj" \ 133 "$(INTDIR)\StdAfx.obj" \
134 "$(INTDIR)\Trayer.obj" 134 "$(INTDIR)\Trayer.obj"
135 135
136"$(OUTDIR)\pumpkin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) 136"$(OUTDIR)\pumpkin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
137 $(LINK32) @<< 137 $(LINK32) @<<
138 $(LINK32_FLAGS) $(LINK32_OBJS) 138 $(LINK32_FLAGS) $(LINK32_OBJS)
139<< 139<<
140 140
141# Begin Custom Build 141# Begin Custom Build
142OutDir=.\Release 142OutDir=.\Release
143TargetName=pumpkin 143TargetName=pumpkin
144InputPath=.\Release\pumpkin.exe 144InputPath=.\Release\pumpkin.exe
145SOURCE=$(InputPath) 145SOURCE=$(InputPath)
146 146
147"$(OutDir)\$(TargetName).ex_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 147"$(OutDir)\$(TargetName).ex_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
148 compress $(OutDir)\$(TargetName).exe $(OutDir)\$(TargetName).ex_ 148 compress $(OutDir)\$(TargetName).exe $(OutDir)\$(TargetName).ex_
149 149
150# End Custom Build 150# End Custom Build
151 151
152!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 152!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
153 153
154# PROP BASE Use_MFC 6 154# PROP BASE Use_MFC 6
155# PROP BASE Use_Debug_Libraries 1 155# PROP BASE Use_Debug_Libraries 1
156# PROP BASE Output_Dir "Debug" 156# PROP BASE Output_Dir "Debug"
157# PROP BASE Intermediate_Dir "Debug" 157# PROP BASE Intermediate_Dir "Debug"
158# PROP BASE Target_Dir "" 158# PROP BASE Target_Dir ""
159# PROP Use_MFC 6 159# PROP Use_MFC 6
160# PROP Use_Debug_Libraries 1 160# PROP Use_Debug_Libraries 1
161# PROP Output_Dir "Debug" 161# PROP Output_Dir "Debug"
162# PROP Intermediate_Dir "Debug" 162# PROP Intermediate_Dir "Debug"
163# PROP Target_Dir "" 163# PROP Target_Dir ""
164OUTDIR=.\Debug 164OUTDIR=.\Debug
165INTDIR=.\Debug 165INTDIR=.\Debug
166# Begin Custom Macros 166# Begin Custom Macros
167OutDir=.\Debug 167OutDir=.\Debug
168TargetName=pumpkin 168TargetName=pumpkin
169# End Custom Macros 169# End Custom Macros
170 170
171ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.bsc" "$(OUTDIR)\pumpkin.ex_"\ 171ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.bsc" "$(OUTDIR)\pumpkin.ex_"\
172 "$(OUTDIR)\pumpkin.hlp" "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_"\ 172 "$(OUTDIR)\pumpkin.hlp" "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_"\
173 "$(OUTDIR)\pumpkin.cn_" 173 "$(OUTDIR)\pumpkin.cn_"
174 174
175CLEAN : 175CLEAN :
176 -@erase "$(INTDIR)\ACLTargetCombo.obj" 176 -@erase "$(INTDIR)\ACLTargetCombo.obj"
177 -@erase "$(INTDIR)\ACLTargetCombo.sbr" 177 -@erase "$(INTDIR)\ACLTargetCombo.sbr"
178 -@erase "$(INTDIR)\ConfirmRRQDlg.obj" 178 -@erase "$(INTDIR)\ConfirmRRQDlg.obj"
179 -@erase "$(INTDIR)\ConfirmRRQDlg.sbr" 179 -@erase "$(INTDIR)\ConfirmRRQDlg.sbr"
180 -@erase "$(INTDIR)\ConfirmWRQDlg.obj" 180 -@erase "$(INTDIR)\ConfirmWRQDlg.obj"
181 -@erase "$(INTDIR)\ConfirmWRQDlg.sbr" 181 -@erase "$(INTDIR)\ConfirmWRQDlg.sbr"
182 -@erase "$(INTDIR)\PropsACL.obj" 182 -@erase "$(INTDIR)\PropsACL.obj"
183 -@erase "$(INTDIR)\PropsACL.sbr" 183 -@erase "$(INTDIR)\PropsACL.sbr"
184 -@erase "$(INTDIR)\PropsNetwork.obj" 184 -@erase "$(INTDIR)\PropsNetwork.obj"
185 -@erase "$(INTDIR)\PropsNetwork.sbr" 185 -@erase "$(INTDIR)\PropsNetwork.sbr"
186 -@erase "$(INTDIR)\PropsServer.obj" 186 -@erase "$(INTDIR)\PropsServer.obj"
187 -@erase "$(INTDIR)\PropsServer.sbr" 187 -@erase "$(INTDIR)\PropsServer.sbr"
188 -@erase "$(INTDIR)\PropsSounds.obj" 188 -@erase "$(INTDIR)\PropsSounds.obj"
189 -@erase "$(INTDIR)\PropsSounds.sbr" 189 -@erase "$(INTDIR)\PropsSounds.sbr"
190 -@erase "$(INTDIR)\pumpkin.cn_" 190 -@erase "$(INTDIR)\pumpkin.cn_"
191 -@erase "$(INTDIR)\pumpkin.cnt" 191 -@erase "$(INTDIR)\pumpkin.cnt"
192 -@erase "$(INTDIR)\pumpkin.hl_" 192 -@erase "$(INTDIR)\pumpkin.hl_"
193 -@erase "$(INTDIR)\pumpkin.hlp" 193 -@erase "$(INTDIR)\pumpkin.hlp"
194 -@erase "$(INTDIR)\PumpKIN.obj" 194 -@erase "$(INTDIR)\PumpKIN.obj"
195 -@erase "$(INTDIR)\pumpkin.pch" 195 -@erase "$(INTDIR)\pumpkin.pch"
196 -@erase "$(INTDIR)\pumpkin.res" 196 -@erase "$(INTDIR)\pumpkin.res"
197 -@erase "$(INTDIR)\PumpKIN.sbr" 197 -@erase "$(INTDIR)\PumpKIN.sbr"
198 -@erase "$(INTDIR)\PumpKINDlg.obj" 198 -@erase "$(INTDIR)\PumpKINDlg.obj"
199 -@erase "$(INTDIR)\PumpKINDlg.sbr" 199 -@erase "$(INTDIR)\PumpKINDlg.sbr"
200 -@erase "$(INTDIR)\RequestDlg.obj" 200 -@erase "$(INTDIR)\RequestDlg.obj"
201 -@erase "$(INTDIR)\RequestDlg.sbr" 201 -@erase "$(INTDIR)\RequestDlg.sbr"
202 -@erase "$(INTDIR)\Resolver.obj" 202 -@erase "$(INTDIR)\Resolver.obj"
203 -@erase "$(INTDIR)\Resolver.sbr" 203 -@erase "$(INTDIR)\Resolver.sbr"
204 -@erase "$(INTDIR)\Retrier.obj" 204 -@erase "$(INTDIR)\Retrier.obj"
205 -@erase "$(INTDIR)\Retrier.sbr" 205 -@erase "$(INTDIR)\Retrier.sbr"
206 -@erase "$(INTDIR)\StdAfx.obj" 206 -@erase "$(INTDIR)\StdAfx.obj"
207 -@erase "$(INTDIR)\StdAfx.sbr" 207 -@erase "$(INTDIR)\StdAfx.sbr"
208 -@erase "$(INTDIR)\Trayer.obj" 208 -@erase "$(INTDIR)\Trayer.obj"
209 -@erase "$(INTDIR)\Trayer.sbr" 209 -@erase "$(INTDIR)\Trayer.sbr"
210 -@erase "$(INTDIR)\vc40.idb" 210 -@erase "$(INTDIR)\vc40.idb"
211 -@erase "$(INTDIR)\vc40.pdb" 211 -@erase "$(INTDIR)\vc40.pdb"
212 -@erase "$(OUTDIR)\pumpkin.bsc" 212 -@erase "$(OUTDIR)\pumpkin.bsc"
213 -@erase "$(OUTDIR)\pumpkin.ex_" 213 -@erase "$(OUTDIR)\pumpkin.ex_"
214 -@erase "$(OUTDIR)\pumpkin.exe" 214 -@erase "$(OUTDIR)\pumpkin.exe"
215 -@erase "$(OUTDIR)\pumpkin.ilk" 215 -@erase "$(OUTDIR)\pumpkin.ilk"
216 -@erase "$(OUTDIR)\pumpkin.pdb" 216 -@erase "$(OUTDIR)\pumpkin.pdb"
217 217
218"$(OUTDIR)" : 218"$(OUTDIR)" :
219 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" 219 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
220 220
221# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c 221# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c
222# ADD CPP /nologo /Zp1 /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR /Yu"stdafx.h" /c 222# ADD CPP /nologo /Zp1 /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR /Yu"stdafx.h" /c
223CPP_PROJ=/nologo /Zp1 /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D\ 223CPP_PROJ=/nologo /Zp1 /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D\
224 "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/pumpkin.pch"\ 224 "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/pumpkin.pch"\
225 /Yu"stdafx.h" /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c 225 /Yu"stdafx.h" /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
226CPP_OBJS=.\Debug/ 226CPP_OBJS=.\Debug/
227CPP_SBRS=.\Debug/ 227CPP_SBRS=.\Debug/
228# ADD BASE MTL /nologo /D "_DEBUG" /win32 228# ADD BASE MTL /nologo /D "_DEBUG" /win32
229# ADD MTL /nologo /D "_DEBUG" /win32 229# ADD MTL /nologo /D "_DEBUG" /win32
230MTL_PROJ=/nologo /D "_DEBUG" /win32 230MTL_PROJ=/nologo /D "_DEBUG" /win32
231# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL" 231# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
232# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL" 232# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
233RSC_PROJ=/l 0x409 /fo"$(INTDIR)/pumpkin.res" /d "_DEBUG" /d "_AFXDLL" 233RSC_PROJ=/l 0x409 /fo"$(INTDIR)/pumpkin.res" /d "_DEBUG" /d "_AFXDLL"
234BSC32=bscmake.exe 234BSC32=bscmake.exe
235# ADD BASE BSC32 /nologo 235# ADD BASE BSC32 /nologo
236# ADD BSC32 /nologo 236# ADD BSC32 /nologo
237BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc" 237BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc"
238BSC32_SBRS= \ 238BSC32_SBRS= \
239 "$(INTDIR)\ACLTargetCombo.sbr" \ 239 "$(INTDIR)\ACLTargetCombo.sbr" \
240 "$(INTDIR)\ConfirmRRQDlg.sbr" \ 240 "$(INTDIR)\ConfirmRRQDlg.sbr" \
241 "$(INTDIR)\ConfirmWRQDlg.sbr" \ 241 "$(INTDIR)\ConfirmWRQDlg.sbr" \
242 "$(INTDIR)\PropsACL.sbr" \ 242 "$(INTDIR)\PropsACL.sbr" \
243 "$(INTDIR)\PropsNetwork.sbr" \ 243 "$(INTDIR)\PropsNetwork.sbr" \
244 "$(INTDIR)\PropsServer.sbr" \ 244 "$(INTDIR)\PropsServer.sbr" \
245 "$(INTDIR)\PropsSounds.sbr" \ 245 "$(INTDIR)\PropsSounds.sbr" \
246 "$(INTDIR)\PumpKIN.sbr" \ 246 "$(INTDIR)\PumpKIN.sbr" \
247 "$(INTDIR)\PumpKINDlg.sbr" \ 247 "$(INTDIR)\PumpKINDlg.sbr" \
248 "$(INTDIR)\RequestDlg.sbr" \ 248 "$(INTDIR)\RequestDlg.sbr" \
249 "$(INTDIR)\Resolver.sbr" \ 249 "$(INTDIR)\Resolver.sbr" \
250 "$(INTDIR)\Retrier.sbr" \ 250 "$(INTDIR)\Retrier.sbr" \
251 "$(INTDIR)\StdAfx.sbr" \ 251 "$(INTDIR)\StdAfx.sbr" \
252 "$(INTDIR)\Trayer.sbr" 252 "$(INTDIR)\Trayer.sbr"
253 253
254"$(OUTDIR)\pumpkin.bsc" : "$(OUTDIR)" $(BSC32_SBRS) 254"$(OUTDIR)\pumpkin.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
255 $(BSC32) @<< 255 $(BSC32) @<<
256 $(BSC32_FLAGS) $(BSC32_SBRS) 256 $(BSC32_FLAGS) $(BSC32_SBRS)
257<< 257<<
258 258
259LINK32=link.exe 259LINK32=link.exe
260# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 260# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386
261# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 261# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386
262LINK32_FLAGS=/nologo /subsystem:windows /incremental:yes\ 262LINK32_FLAGS=/nologo /subsystem:windows /incremental:yes\
263 /pdb:"$(OUTDIR)/pumpkin.pdb" /debug /machine:I386 /out:"$(OUTDIR)/pumpkin.exe" 263 /pdb:"$(OUTDIR)/pumpkin.pdb" /debug /machine:I386 /out:"$(OUTDIR)/pumpkin.exe"
264LINK32_OBJS= \ 264LINK32_OBJS= \
265 "$(INTDIR)\ACLTargetCombo.obj" \ 265 "$(INTDIR)\ACLTargetCombo.obj" \
266 "$(INTDIR)\ConfirmRRQDlg.obj" \ 266 "$(INTDIR)\ConfirmRRQDlg.obj" \
267 "$(INTDIR)\ConfirmWRQDlg.obj" \ 267 "$(INTDIR)\ConfirmWRQDlg.obj" \
268 "$(INTDIR)\PropsACL.obj" \ 268 "$(INTDIR)\PropsACL.obj" \
269 "$(INTDIR)\PropsNetwork.obj" \ 269 "$(INTDIR)\PropsNetwork.obj" \
270 "$(INTDIR)\PropsServer.obj" \ 270 "$(INTDIR)\PropsServer.obj" \
271 "$(INTDIR)\PropsSounds.obj" \ 271 "$(INTDIR)\PropsSounds.obj" \
272 "$(INTDIR)\PumpKIN.obj" \ 272 "$(INTDIR)\PumpKIN.obj" \
273 "$(INTDIR)\pumpkin.res" \ 273 "$(INTDIR)\pumpkin.res" \
274 "$(INTDIR)\PumpKINDlg.obj" \ 274 "$(INTDIR)\PumpKINDlg.obj" \
275 "$(INTDIR)\RequestDlg.obj" \ 275 "$(INTDIR)\RequestDlg.obj" \
276 "$(INTDIR)\Resolver.obj" \ 276 "$(INTDIR)\Resolver.obj" \
277 "$(INTDIR)\Retrier.obj" \ 277 "$(INTDIR)\Retrier.obj" \
278 "$(INTDIR)\StdAfx.obj" \ 278 "$(INTDIR)\StdAfx.obj" \
279 "$(INTDIR)\Trayer.obj" 279 "$(INTDIR)\Trayer.obj"
280 280
281"$(OUTDIR)\pumpkin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) 281"$(OUTDIR)\pumpkin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
282 $(LINK32) @<< 282 $(LINK32) @<<
283 $(LINK32_FLAGS) $(LINK32_OBJS) 283 $(LINK32_FLAGS) $(LINK32_OBJS)
284<< 284<<
285 285
286# Begin Custom Build 286# Begin Custom Build
287OutDir=.\Debug 287OutDir=.\Debug
288TargetName=pumpkin 288TargetName=pumpkin
289InputPath=.\Debug\pumpkin.exe 289InputPath=.\Debug\pumpkin.exe
290SOURCE=$(InputPath) 290SOURCE=$(InputPath)
291 291
292"$(OutDir)\$(TargetName).ex_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 292"$(OutDir)\$(TargetName).ex_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
293 compress $(OutDir)\$(TargetName).exe $(OutDir)\$(TargetName).ex_ 293 compress $(OutDir)\$(TargetName).exe $(OutDir)\$(TargetName).ex_
294 294
295# End Custom Build 295# End Custom Build
296 296
297!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 297!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
298 298
299# PROP BASE Use_MFC 6 299# PROP BASE Use_MFC 6
300# PROP BASE Use_Debug_Libraries 0 300# PROP BASE Use_Debug_Libraries 0
301# PROP BASE Output_Dir "PumpKIN_" 301# PROP BASE Output_Dir "PumpKIN_"
302# PROP BASE Intermediate_Dir "PumpKIN_" 302# PROP BASE Intermediate_Dir "PumpKIN_"
303# PROP BASE Target_Dir "" 303# PROP BASE Target_Dir ""
304# PROP Use_MFC 5 304# PROP Use_MFC 5
305# PROP Use_Debug_Libraries 0 305# PROP Use_Debug_Libraries 0
306# PROP Output_Dir "Releast" 306# PROP Output_Dir "Releast"
307# PROP Intermediate_Dir "Releast" 307# PROP Intermediate_Dir "Releast"
308# PROP Target_Dir "" 308# PROP Target_Dir ""
309OUTDIR=.\Releast 309OUTDIR=.\Releast
310INTDIR=.\Releast 310INTDIR=.\Releast
311# Begin Custom Macros 311# Begin Custom Macros
312OutDir=.\Releast 312OutDir=.\Releast
313TargetName=pumpkin 313TargetName=pumpkin
314# End Custom Macros 314# End Custom Macros
315 315
316ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\ 316ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\
317 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_" 317 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_"
318 318
319CLEAN : 319CLEAN :
320 -@erase "$(INTDIR)\ACLTargetCombo.obj" 320 -@erase "$(INTDIR)\ACLTargetCombo.obj"
321 -@erase "$(INTDIR)\ConfirmRRQDlg.obj" 321 -@erase "$(INTDIR)\ConfirmRRQDlg.obj"
322 -@erase "$(INTDIR)\ConfirmWRQDlg.obj" 322 -@erase "$(INTDIR)\ConfirmWRQDlg.obj"
323 -@erase "$(INTDIR)\PropsACL.obj" 323 -@erase "$(INTDIR)\PropsACL.obj"
324 -@erase "$(INTDIR)\PropsNetwork.obj" 324 -@erase "$(INTDIR)\PropsNetwork.obj"
325 -@erase "$(INTDIR)\PropsServer.obj" 325 -@erase "$(INTDIR)\PropsServer.obj"
326 -@erase "$(INTDIR)\PropsSounds.obj" 326 -@erase "$(INTDIR)\PropsSounds.obj"
327 -@erase "$(INTDIR)\pumpkin.cn_" 327 -@erase "$(INTDIR)\pumpkin.cn_"
328 -@erase "$(INTDIR)\pumpkin.cnt" 328 -@erase "$(INTDIR)\pumpkin.cnt"
329 -@erase "$(INTDIR)\pumpkin.hl_" 329 -@erase "$(INTDIR)\pumpkin.hl_"
330 -@erase "$(INTDIR)\pumpkin.hlp" 330 -@erase "$(INTDIR)\pumpkin.hlp"
331 -@erase "$(INTDIR)\PumpKIN.obj" 331 -@erase "$(INTDIR)\PumpKIN.obj"
332 -@erase "$(INTDIR)\pumpkin.pch" 332 -@erase "$(INTDIR)\pumpkin.pch"
333 -@erase "$(INTDIR)\pumpkin.res" 333 -@erase "$(INTDIR)\pumpkin.res"
334 -@erase "$(INTDIR)\PumpKINDlg.obj" 334 -@erase "$(INTDIR)\PumpKINDlg.obj"
335 -@erase "$(INTDIR)\RequestDlg.obj" 335 -@erase "$(INTDIR)\RequestDlg.obj"
336 -@erase "$(INTDIR)\Resolver.obj" 336 -@erase "$(INTDIR)\Resolver.obj"
337 -@erase "$(INTDIR)\Retrier.obj" 337 -@erase "$(INTDIR)\Retrier.obj"
338 -@erase "$(INTDIR)\StdAfx.obj" 338 -@erase "$(INTDIR)\StdAfx.obj"
339 -@erase "$(INTDIR)\Trayer.obj" 339 -@erase "$(INTDIR)\Trayer.obj"
340 -@erase "$(OUTDIR)\pumpkin.ex_" 340 -@erase "$(OUTDIR)\pumpkin.ex_"
341 -@erase "$(OUTDIR)\pumpkin.exe" 341 -@erase "$(OUTDIR)\pumpkin.exe"
342 342
343"$(OUTDIR)" : 343"$(OUTDIR)" :
344 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" 344 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
345 345
346# ADD BASE CPP /nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c 346# ADD BASE CPP /nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /c
347# ADD CPP /nologo /Zp1 /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /c 347# ADD CPP /nologo /Zp1 /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /c
348CPP_PROJ=/nologo /Zp1 /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ 348CPP_PROJ=/nologo /Zp1 /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\
349 "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yu"stdafx.h" /Fo"$(INTDIR)/" /c 349 "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yu"stdafx.h" /Fo"$(INTDIR)/" /c
350CPP_OBJS=.\Releast/ 350CPP_OBJS=.\Releast/
351CPP_SBRS=.\. 351CPP_SBRS=.\.
352# ADD BASE MTL /nologo /D "NDEBUG" /win32 352# ADD BASE MTL /nologo /D "NDEBUG" /win32
353# ADD MTL /nologo /D "NDEBUG" /win32 353# ADD MTL /nologo /D "NDEBUG" /win32
354MTL_PROJ=/nologo /D "NDEBUG" /win32 354MTL_PROJ=/nologo /D "NDEBUG" /win32
355# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" 355# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
356# ADD RSC /l 0x409 /d "NDEBUG" 356# ADD RSC /l 0x409 /d "NDEBUG"
357RSC_PROJ=/l 0x409 /fo"$(INTDIR)/pumpkin.res" /d "NDEBUG" 357RSC_PROJ=/l 0x409 /fo"$(INTDIR)/pumpkin.res" /d "NDEBUG"
358BSC32=bscmake.exe 358BSC32=bscmake.exe
359# ADD BASE BSC32 /nologo 359# ADD BASE BSC32 /nologo
360# ADD BSC32 /nologo 360# ADD BSC32 /nologo
361BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc" 361BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc"
362BSC32_SBRS= \ 362BSC32_SBRS= \
363 363
364LINK32=link.exe 364LINK32=link.exe
365# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386 365# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
366# ADD LINK32 /nologo /subsystem:windows /machine:I386 366# ADD LINK32 /nologo /subsystem:windows /machine:I386
367LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\ 367LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\
368 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe" 368 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe"
369LINK32_OBJS= \ 369LINK32_OBJS= \
370 "$(INTDIR)\ACLTargetCombo.obj" \ 370 "$(INTDIR)\ACLTargetCombo.obj" \
371 "$(INTDIR)\ConfirmRRQDlg.obj" \ 371 "$(INTDIR)\ConfirmRRQDlg.obj" \
372 "$(INTDIR)\ConfirmWRQDlg.obj" \ 372 "$(INTDIR)\ConfirmWRQDlg.obj" \
373 "$(INTDIR)\PropsACL.obj" \ 373 "$(INTDIR)\PropsACL.obj" \
374 "$(INTDIR)\PropsNetwork.obj" \ 374 "$(INTDIR)\PropsNetwork.obj" \
375 "$(INTDIR)\PropsServer.obj" \ 375 "$(INTDIR)\PropsServer.obj" \
376 "$(INTDIR)\PropsSounds.obj" \ 376 "$(INTDIR)\PropsSounds.obj" \
377 "$(INTDIR)\PumpKIN.obj" \ 377 "$(INTDIR)\PumpKIN.obj" \
378 "$(INTDIR)\pumpkin.res" \ 378 "$(INTDIR)\pumpkin.res" \
379 "$(INTDIR)\PumpKINDlg.obj" \ 379 "$(INTDIR)\PumpKINDlg.obj" \
380 "$(INTDIR)\RequestDlg.obj" \ 380 "$(INTDIR)\RequestDlg.obj" \
381 "$(INTDIR)\Resolver.obj" \ 381 "$(INTDIR)\Resolver.obj" \
382 "$(INTDIR)\Retrier.obj" \ 382 "$(INTDIR)\Retrier.obj" \
383 "$(INTDIR)\StdAfx.obj" \ 383 "$(INTDIR)\StdAfx.obj" \
384 "$(INTDIR)\Trayer.obj" 384 "$(INTDIR)\Trayer.obj"
385 385
386"$(OUTDIR)\pumpkin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) 386"$(OUTDIR)\pumpkin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
387 $(LINK32) @<< 387 $(LINK32) @<<
388 $(LINK32_FLAGS) $(LINK32_OBJS) 388 $(LINK32_FLAGS) $(LINK32_OBJS)
389<< 389<<
390 390
391# Begin Custom Build 391# Begin Custom Build
392OutDir=.\Releast 392OutDir=.\Releast
393TargetName=pumpkin 393TargetName=pumpkin
394InputPath=.\Releast\pumpkin.exe 394InputPath=.\Releast\pumpkin.exe
395SOURCE=$(InputPath) 395SOURCE=$(InputPath)
396 396
397"$(OutDir)\$(TargetName).ex_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 397"$(OutDir)\$(TargetName).ex_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
398 compress $(OutDir)\$(TargetName).exe $(OutDir)\$(TargetName).ex_ 398 compress $(OutDir)\$(TargetName).exe $(OutDir)\$(TargetName).ex_
399 399
400# End Custom Build 400# End Custom Build
401 401
402!ELSEIF "$(CFG)" == "Install - Win32 Debug" 402!ELSEIF "$(CFG)" == "Install - Win32 Debug"
403 403
404# PROP BASE Use_MFC 2 404# PROP BASE Use_MFC 2
405# PROP BASE Use_Debug_Libraries 1 405# PROP BASE Use_Debug_Libraries 1
406# PROP BASE Output_Dir "Install\Debug" 406# PROP BASE Output_Dir "Install\Debug"
407# PROP BASE Intermediate_Dir "Install\Debug" 407# PROP BASE Intermediate_Dir "Install\Debug"
408# PROP BASE Target_Dir "Install" 408# PROP BASE Target_Dir "Install"
409# PROP Use_MFC 0 409# PROP Use_MFC 0
410# PROP Use_Debug_Libraries 1 410# PROP Use_Debug_Libraries 1
411# PROP Output_Dir "Install\Debug" 411# PROP Output_Dir "Install\Debug"
412# PROP Intermediate_Dir "Install\Debug" 412# PROP Intermediate_Dir "Install\Debug"
413# PROP Target_Dir "Install" 413# PROP Target_Dir "Install"
414OUTDIR=.\Install\Debug 414OUTDIR=.\Install\Debug
415INTDIR=.\Install\Debug 415INTDIR=.\Install\Debug
416 416
417ALL : "$(OUTDIR)\Install.exe" 417ALL : "$(OUTDIR)\Install.exe"
418 418
419CLEAN : 419CLEAN :
420 -@erase "$(INTDIR)\install.obj" 420 -@erase "$(INTDIR)\install.obj"
421 -@erase "$(INTDIR)\Install.res" 421 -@erase "$(INTDIR)\Install.res"
422 -@erase "$(INTDIR)\vc40.idb" 422 -@erase "$(INTDIR)\vc40.idb"
423 -@erase "$(INTDIR)\vc40.pdb" 423 -@erase "$(INTDIR)\vc40.pdb"
424 -@erase "$(OUTDIR)\Install.exe" 424 -@erase "$(OUTDIR)\Install.exe"
425 -@erase "$(OUTDIR)\Install.ilk" 425 -@erase "$(OUTDIR)\Install.ilk"
426 -@erase "$(OUTDIR)\Install.pdb" 426 -@erase "$(OUTDIR)\Install.pdb"
427 427
428"$(OUTDIR)" : 428"$(OUTDIR)" :
429 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" 429 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
430 430
431# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c 431# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c
432# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /c 432# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /c
433CPP_PROJ=/nologo /MLd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ 433CPP_PROJ=/nologo /MLd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\
434 /D "_MBCS" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c 434 /D "_MBCS" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
435CPP_OBJS=.\Install\Debug/ 435CPP_OBJS=.\Install\Debug/
436CPP_SBRS=.\. 436CPP_SBRS=.\.
437# ADD BASE MTL /nologo /D "_DEBUG" /win32 437# ADD BASE MTL /nologo /D "_DEBUG" /win32
438# ADD MTL /nologo /D "_DEBUG" /win32 438# ADD MTL /nologo /D "_DEBUG" /win32
439MTL_PROJ=/nologo /D "_DEBUG" /win32 439MTL_PROJ=/nologo /D "_DEBUG" /win32
440# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL" 440# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
441# ADD RSC /l 0x409 /d "_DEBUG" 441# ADD RSC /l 0x409 /d "_DEBUG"
442RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "_DEBUG" 442RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "_DEBUG"
443BSC32=bscmake.exe 443BSC32=bscmake.exe
444# ADD BASE BSC32 /nologo 444# ADD BASE BSC32 /nologo
445# ADD BSC32 /nologo 445# ADD BSC32 /nologo
446BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc" 446BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc"
447BSC32_SBRS= \ 447BSC32_SBRS= \
448 448
449LINK32=link.exe 449LINK32=link.exe
450# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 450# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386
451# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /debug /machine:I386 451# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /debug /machine:I386
452LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ 452LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
453 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ 453 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
454 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:yes\ 454 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:yes\
455 /pdb:"$(OUTDIR)/Install.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Install.exe" 455 /pdb:"$(OUTDIR)/Install.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Install.exe"
456LINK32_OBJS= \ 456LINK32_OBJS= \
457 "$(INTDIR)\install.obj" \ 457 "$(INTDIR)\install.obj" \
458 "$(INTDIR)\Install.res" 458 "$(INTDIR)\Install.res"
459 459
460"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) 460"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
461 $(LINK32) @<< 461 $(LINK32) @<<
462 $(LINK32_FLAGS) $(LINK32_OBJS) 462 $(LINK32_FLAGS) $(LINK32_OBJS)
463<< 463<<
464 464
465!ELSEIF "$(CFG)" == "Install - Win32 Pure" 465!ELSEIF "$(CFG)" == "Install - Win32 Pure"
466 466
467# PROP BASE Use_MFC 2 467# PROP BASE Use_MFC 2
468# PROP BASE Use_Debug_Libraries 0 468# PROP BASE Use_Debug_Libraries 0
469# PROP BASE Output_Dir "Install\Pure" 469# PROP BASE Output_Dir "Install\Pure"
470# PROP BASE Intermediate_Dir "Install\Pure" 470# PROP BASE Intermediate_Dir "Install\Pure"
471# PROP BASE Target_Dir "Install" 471# PROP BASE Target_Dir "Install"
472# PROP Use_MFC 0 472# PROP Use_MFC 0
473# PROP Use_Debug_Libraries 0 473# PROP Use_Debug_Libraries 0
474# PROP Output_Dir "Install\Pure" 474# PROP Output_Dir "Install\Pure"
475# PROP Intermediate_Dir "Install\Pure" 475# PROP Intermediate_Dir "Install\Pure"
476# PROP Target_Dir "Install" 476# PROP Target_Dir "Install"
477OUTDIR=.\Install\Pure 477OUTDIR=.\Install\Pure
478INTDIR=.\Install\Pure 478INTDIR=.\Install\Pure
479 479
480ALL : "$(OUTDIR)\Install.exe" "$(OUTDIR)\Install.bsc" 480ALL : "$(OUTDIR)\Install.exe" "$(OUTDIR)\Install.bsc"
481 481
482CLEAN : 482CLEAN :
483 -@erase "$(INTDIR)\install.obj" 483 -@erase "$(INTDIR)\install.obj"
484 -@erase "$(INTDIR)\Install.res" 484 -@erase "$(INTDIR)\Install.res"
485 -@erase "$(INTDIR)\install.sbr" 485 -@erase "$(INTDIR)\install.sbr"
486 -@erase "$(OUTDIR)\Install.bsc" 486 -@erase "$(OUTDIR)\Install.bsc"
487 -@erase "$(OUTDIR)\Install.exe" 487 -@erase "$(OUTDIR)\Install.exe"
488 488
489"$(OUTDIR)" : 489"$(OUTDIR)" :
490 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" 490 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
491 491
492# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c 492# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c
493# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FR /YX /c 493# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FR /YX /c
494CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ 494CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\
495 "_MBCS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /c 495 "_MBCS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /c
496CPP_OBJS=.\Install\Pure/ 496CPP_OBJS=.\Install\Pure/
497CPP_SBRS=.\Install\Pure/ 497CPP_SBRS=.\Install\Pure/
498# ADD BASE MTL /nologo /D "NDEBUG" /win32 498# ADD BASE MTL /nologo /D "NDEBUG" /win32
499# ADD MTL /nologo /D "NDEBUG" /win32 499# ADD MTL /nologo /D "NDEBUG" /win32
500MTL_PROJ=/nologo /D "NDEBUG" /win32 500MTL_PROJ=/nologo /D "NDEBUG" /win32
501# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" 501# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
502# ADD RSC /l 0x409 /d "NDEBUG" 502# ADD RSC /l 0x409 /d "NDEBUG"
503RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "NDEBUG" 503RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "NDEBUG"
504BSC32=bscmake.exe 504BSC32=bscmake.exe
505# ADD BASE BSC32 /nologo 505# ADD BASE BSC32 /nologo
506# ADD BSC32 /nologo 506# ADD BSC32 /nologo
507BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc" 507BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc"
508BSC32_SBRS= \ 508BSC32_SBRS= \
509 "$(INTDIR)\install.sbr" 509 "$(INTDIR)\install.sbr"
510 510
511"$(OUTDIR)\Install.bsc" : "$(OUTDIR)" $(BSC32_SBRS) 511"$(OUTDIR)\Install.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
512 $(BSC32) @<< 512 $(BSC32) @<<
513 $(BSC32_FLAGS) $(BSC32_SBRS) 513 $(BSC32_FLAGS) $(BSC32_SBRS)
514<< 514<<
515 515
516LINK32=link.exe 516LINK32=link.exe
517# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386 517# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
518# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /machine:I386 518# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /machine:I386
519LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ 519LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
520 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ 520 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
521 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:no\ 521 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:no\
522 /pdb:"$(OUTDIR)/Install.pdb" /machine:I386 /out:"$(OUTDIR)/Install.exe" 522 /pdb:"$(OUTDIR)/Install.pdb" /machine:I386 /out:"$(OUTDIR)/Install.exe"
523LINK32_OBJS= \ 523LINK32_OBJS= \
524 "$(INTDIR)\install.obj" \ 524 "$(INTDIR)\install.obj" \
525 "$(INTDIR)\Install.res" 525 "$(INTDIR)\Install.res"
526 526
527"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) 527"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
528 $(LINK32) @<< 528 $(LINK32) @<<
529 $(LINK32_FLAGS) $(LINK32_OBJS) 529 $(LINK32_FLAGS) $(LINK32_OBJS)
530<< 530<<
531 531
532!ELSEIF "$(CFG)" == "Install - Win32 Static" 532!ELSEIF "$(CFG)" == "Install - Win32 Static"
533 533
534# PROP BASE Use_MFC 2 534# PROP BASE Use_MFC 2
535# PROP BASE Use_Debug_Libraries 0 535# PROP BASE Use_Debug_Libraries 0
536# PROP BASE Output_Dir "Install\Static" 536# PROP BASE Output_Dir "Install\Static"
537# PROP BASE Intermediate_Dir "Install\Static" 537# PROP BASE Intermediate_Dir "Install\Static"
538# PROP BASE Target_Dir "Install" 538# PROP BASE Target_Dir "Install"
539# PROP Use_MFC 0 539# PROP Use_MFC 0
540# PROP Use_Debug_Libraries 0 540# PROP Use_Debug_Libraries 0
541# PROP Output_Dir "Install\Static" 541# PROP Output_Dir "Install\Static"
542# PROP Intermediate_Dir "Install\Static" 542# PROP Intermediate_Dir "Install\Static"
543# PROP Target_Dir "Install" 543# PROP Target_Dir "Install"
544OUTDIR=.\Install\Static 544OUTDIR=.\Install\Static
545INTDIR=.\Install\Static 545INTDIR=.\Install\Static
546 546
547ALL : "$(OUTDIR)\Install.exe" 547ALL : "$(OUTDIR)\Install.exe"
548 548
549CLEAN : 549CLEAN :
550 -@erase "$(INTDIR)\install.obj" 550 -@erase "$(INTDIR)\install.obj"
551 -@erase "$(INTDIR)\Install.res" 551 -@erase "$(INTDIR)\Install.res"
552 -@erase "$(OUTDIR)\Install.exe" 552 -@erase "$(OUTDIR)\Install.exe"
553 553
554"$(OUTDIR)" : 554"$(OUTDIR)" :
555 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" 555 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
556 556
557# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c 557# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c
558# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "STATI_K" /YX /c 558# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "STATI_K" /YX /c
559CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ 559CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\
560 "_MBCS" /D "STATI_K" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /c 560 "_MBCS" /D "STATI_K" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /c
561CPP_OBJS=.\Install\Static/ 561CPP_OBJS=.\Install\Static/
562CPP_SBRS=.\. 562CPP_SBRS=.\.
563# ADD BASE MTL /nologo /D "NDEBUG" /win32 563# ADD BASE MTL /nologo /D "NDEBUG" /win32
564# ADD MTL /nologo /D "NDEBUG" /win32 564# ADD MTL /nologo /D "NDEBUG" /win32
565MTL_PROJ=/nologo /D "NDEBUG" /win32 565MTL_PROJ=/nologo /D "NDEBUG" /win32
566# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" 566# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
567# ADD RSC /l 0x409 /d "NDEBUG" /d "STATI_K" 567# ADD RSC /l 0x409 /d "NDEBUG" /d "STATI_K"
568RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "NDEBUG" /d "STATI_K" 568RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "NDEBUG" /d "STATI_K"
569BSC32=bscmake.exe 569BSC32=bscmake.exe
570# ADD BASE BSC32 /nologo 570# ADD BASE BSC32 /nologo
571# ADD BSC32 /nologo 571# ADD BSC32 /nologo
572BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc" 572BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc"
573BSC32_SBRS= \ 573BSC32_SBRS= \
574 574
575LINK32=link.exe 575LINK32=link.exe
576# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386 576# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
577# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /machine:I386 577# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /machine:I386
578LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ 578LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
579 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ 579 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
580 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:no\ 580 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:no\
581 /pdb:"$(OUTDIR)/Install.pdb" /machine:I386 /out:"$(OUTDIR)/Install.exe" 581 /pdb:"$(OUTDIR)/Install.pdb" /machine:I386 /out:"$(OUTDIR)/Install.exe"
582LINK32_OBJS= \ 582LINK32_OBJS= \
583 "$(INTDIR)\install.obj" \ 583 "$(INTDIR)\install.obj" \
584 "$(INTDIR)\Install.res" 584 "$(INTDIR)\Install.res"
585 585
586"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) 586"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
587 $(LINK32) @<< 587 $(LINK32) @<<
588 $(LINK32_FLAGS) $(LINK32_OBJS) 588 $(LINK32_FLAGS) $(LINK32_OBJS)
589<< 589<<
590 590
591!ELSEIF "$(CFG)" == "Install - Win32 Canned" 591!ELSEIF "$(CFG)" == "Install - Win32 Canned"
592 592
593# PROP BASE Use_MFC 2 593# PROP BASE Use_MFC 2
594# PROP BASE Use_Debug_Libraries 0 594# PROP BASE Use_Debug_Libraries 0
595# PROP BASE Output_Dir "Install\Canned" 595# PROP BASE Output_Dir "Install\Canned"
596# PROP BASE Intermediate_Dir "Install\Canned" 596# PROP BASE Intermediate_Dir "Install\Canned"
597# PROP BASE Target_Dir "Install" 597# PROP BASE Target_Dir "Install"
598# PROP Use_MFC 0 598# PROP Use_MFC 0
599# PROP Use_Debug_Libraries 0 599# PROP Use_Debug_Libraries 0
600# PROP Output_Dir "Install\Canned" 600# PROP Output_Dir "Install\Canned"
601# PROP Intermediate_Dir "Install\Canned" 601# PROP Intermediate_Dir "Install\Canned"
602# PROP Target_Dir "Install" 602# PROP Target_Dir "Install"
603OUTDIR=.\Install\Canned 603OUTDIR=.\Install\Canned
604INTDIR=.\Install\Canned 604INTDIR=.\Install\Canned
605 605
606ALL : "$(OUTDIR)\Install.exe" 606ALL : "$(OUTDIR)\Install.exe"
607 607
608CLEAN : 608CLEAN :
609 -@erase "$(INTDIR)\install.obj" 609 -@erase "$(INTDIR)\install.obj"
610 -@erase "$(INTDIR)\Install.res" 610 -@erase "$(INTDIR)\Install.res"
611 -@erase "$(OUTDIR)\Install.exe" 611 -@erase "$(OUTDIR)\Install.exe"
612 612
613"$(OUTDIR)" : 613"$(OUTDIR)" :
614 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" 614 if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
615 615
616# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c 616# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /YX /c
617# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "K_ANNED" /YX /c 617# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "K_ANNED" /YX /c
618CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ 618CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\
619 "_MBCS" /D "K_ANNED" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /c 619 "_MBCS" /D "K_ANNED" /Fp"$(INTDIR)/Install.pch" /YX /Fo"$(INTDIR)/" /c
620CPP_OBJS=.\Install\Canned/ 620CPP_OBJS=.\Install\Canned/
621CPP_SBRS=.\. 621CPP_SBRS=.\.
622# ADD BASE MTL /nologo /D "NDEBUG" /win32 622# ADD BASE MTL /nologo /D "NDEBUG" /win32
623# ADD MTL /nologo /D "NDEBUG" /win32 623# ADD MTL /nologo /D "NDEBUG" /win32
624MTL_PROJ=/nologo /D "NDEBUG" /win32 624MTL_PROJ=/nologo /D "NDEBUG" /win32
625# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" 625# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
626# ADD RSC /l 0x409 /d "NDEBUG" /d "K_ANNED" 626# ADD RSC /l 0x409 /d "NDEBUG" /d "K_ANNED"
627RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "NDEBUG" /d "K_ANNED" 627RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Install.res" /d "NDEBUG" /d "K_ANNED"
628BSC32=bscmake.exe 628BSC32=bscmake.exe
629# ADD BASE BSC32 /nologo 629# ADD BASE BSC32 /nologo
630# ADD BSC32 /nologo 630# ADD BSC32 /nologo
631BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc" 631BSC32_FLAGS=/nologo /o"$(OUTDIR)/Install.bsc"
632BSC32_SBRS= \ 632BSC32_SBRS= \
633 633
634LINK32=link.exe 634LINK32=link.exe
635# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386 635# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
636# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /machine:I386 636# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib /nologo /subsystem:windows /machine:I386
637LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ 637LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
638 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ 638 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
639 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:no\ 639 odbccp32.lib version.lib /nologo /subsystem:windows /incremental:no\
640 /pdb:"$(OUTDIR)/Install.pdb" /machine:I386 /out:"$(OUTDIR)/Install.exe" 640 /pdb:"$(OUTDIR)/Install.pdb" /machine:I386 /out:"$(OUTDIR)/Install.exe"
641LINK32_OBJS= \ 641LINK32_OBJS= \
642 "$(INTDIR)\install.obj" \ 642 "$(INTDIR)\install.obj" \
643 "$(INTDIR)\Install.res" 643 "$(INTDIR)\Install.res"
644 644
645"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) 645"$(OUTDIR)\Install.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
646 $(LINK32) @<< 646 $(LINK32) @<<
647 $(LINK32_FLAGS) $(LINK32_OBJS) 647 $(LINK32_FLAGS) $(LINK32_OBJS)
648<< 648<<
649 649
650!ENDIF 650!ENDIF
651 651
652.c{$(CPP_OBJS)}.obj: 652.c{$(CPP_OBJS)}.obj:
653 $(CPP) $(CPP_PROJ) $< 653 $(CPP) $(CPP_PROJ) $<
654 654
655.cpp{$(CPP_OBJS)}.obj: 655.cpp{$(CPP_OBJS)}.obj:
656 $(CPP) $(CPP_PROJ) $< 656 $(CPP) $(CPP_PROJ) $<
657 657
658.cxx{$(CPP_OBJS)}.obj: 658.cxx{$(CPP_OBJS)}.obj:
659 $(CPP) $(CPP_PROJ) $< 659 $(CPP) $(CPP_PROJ) $<
660 660
661.c{$(CPP_SBRS)}.sbr: 661.c{$(CPP_SBRS)}.sbr:
662 $(CPP) $(CPP_PROJ) $< 662 $(CPP) $(CPP_PROJ) $<
663 663
664.cpp{$(CPP_SBRS)}.sbr: 664.cpp{$(CPP_SBRS)}.sbr:
665 $(CPP) $(CPP_PROJ) $< 665 $(CPP) $(CPP_PROJ) $<
666 666
667.cxx{$(CPP_SBRS)}.sbr: 667.cxx{$(CPP_SBRS)}.sbr:
668 $(CPP) $(CPP_PROJ) $< 668 $(CPP) $(CPP_PROJ) $<
669 669
670################################################################################ 670################################################################################
671# Begin Target 671# Begin Target
672 672
673# Name "PumpKIN - Win32 Release" 673# Name "PumpKIN - Win32 Release"
674# Name "PumpKIN - Win32 Debug" 674# Name "PumpKIN - Win32 Debug"
675# Name "PumpKIN - Win32 Static" 675# Name "PumpKIN - Win32 Static"
676 676
677!IF "$(CFG)" == "PumpKIN - Win32 Release" 677!IF "$(CFG)" == "PumpKIN - Win32 Release"
678 678
679!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 679!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
680 680
681!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 681!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
682 682
683!ENDIF 683!ENDIF
684 684
685################################################################################ 685################################################################################
686# Begin Source File 686# Begin Source File
687 687
688SOURCE=.\PumpKIN.cpp 688SOURCE=.\PumpKIN.cpp
689 689
690!IF "$(CFG)" == "PumpKIN - Win32 Release" 690!IF "$(CFG)" == "PumpKIN - Win32 Release"
691 691
692DEP_CPP_PUMPK=\ 692DEP_CPP_PUMPK=\
693 ".\pumpkin.h"\ 693 ".\pumpkin.h"\
694 ".\PumpKINDlg.h"\ 694 ".\PumpKINDlg.h"\
695 ".\shared-code\BellsNWhistles.h"\ 695 ".\shared-code\BellsNWhistles.h"\
696 ".\shared-code\kHelpers.h"\ 696 ".\shared-code\kHelpers.h"\
697 ".\stdafx.h"\ 697 ".\stdafx.h"\
698 698
699 699
700"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\ 700"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\
701 "$(INTDIR)\pumpkin.pch" 701 "$(INTDIR)\pumpkin.pch"
702 702
703 703
704!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 704!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
705 705
706DEP_CPP_PUMPK=\ 706DEP_CPP_PUMPK=\
707 ".\pumpkin.h"\ 707 ".\pumpkin.h"\
708 ".\PumpKINDlg.h"\ 708 ".\PumpKINDlg.h"\
709 ".\shared-code\BellsNWhistles.h"\
709 ".\shared-code\kHelpers.h"\ 710 ".\shared-code\kHelpers.h"\
710 ".\stdafx.h"\ 711 ".\stdafx.h"\
711 712
712 713
713"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\ 714"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\
714 "$(INTDIR)\pumpkin.pch" 715 "$(INTDIR)\pumpkin.pch"
715 716
716"$(INTDIR)\PumpKIN.sbr" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\ 717"$(INTDIR)\PumpKIN.sbr" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\
717 "$(INTDIR)\pumpkin.pch" 718 "$(INTDIR)\pumpkin.pch"
718 719
719 720
720!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 721!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
721 722
722DEP_CPP_PUMPK=\ 723DEP_CPP_PUMPK=\
723 ".\pumpkin.h"\ 724 ".\pumpkin.h"\
724 ".\PumpKINDlg.h"\ 725 ".\PumpKINDlg.h"\
725 ".\shared-code\BellsNWhistles.h"\ 726 ".\shared-code\BellsNWhistles.h"\
726 ".\shared-code\kHelpers.h"\ 727 ".\shared-code\kHelpers.h"\
727 ".\stdafx.h"\ 728 ".\stdafx.h"\
728 729
729 730
730"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\ 731"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\
731 "$(INTDIR)\pumpkin.pch" 732 "$(INTDIR)\pumpkin.pch"
732 733
733 734
734!ENDIF 735!ENDIF
735 736
736# End Source File 737# End Source File
737################################################################################ 738################################################################################
738# Begin Source File 739# Begin Source File
739 740
740SOURCE=.\PumpKINDlg.cpp 741SOURCE=.\PumpKINDlg.cpp
741
742!IF "$(CFG)" == "PumpKIN - Win32 Release"
743
744DEP_CPP_PUMPKI=\ 742DEP_CPP_PUMPKI=\
745 ".\ACLTargetCombo.h"\ 743 ".\ACLTargetCombo.h"\
746 ".\ConfirmRRQDlg.h"\ 744 ".\ConfirmRRQDlg.h"\
747 ".\ConfirmWRQDlg.h"\ 745 ".\ConfirmWRQDlg.h"\
748 ".\PropsACL.h"\ 746 ".\PropsACL.h"\
749 ".\PropsNetwork.h"\ 747 ".\PropsNetwork.h"\
750 ".\PropsServer.h"\ 748 ".\PropsServer.h"\
751 ".\PropsSounds.h"\ 749 ".\PropsSounds.h"\
752 ".\pumpkin.h"\ 750 ".\pumpkin.h"\
753 ".\PumpKINDlg.h"\ 751 ".\PumpKINDlg.h"\
754 ".\RequestDlg.h"\ 752 ".\RequestDlg.h"\
755 ".\Resolver.h"\ 753 ".\Resolver.h"\
756 ".\Retrier.h"\ 754 ".\Retrier.h"\
757 ".\shared-code\BellsNWhistles.h"\ 755 ".\shared-code\BellsNWhistles.h"\
758 ".\shared-code\kHelpers.h"\ 756 ".\shared-code\kHelpers.h"\
759 ".\stdafx.h"\ 757 ".\stdafx.h"\
760 ".\Trayer.h"\ 758 ".\Trayer.h"\
761 759
762 760
761!IF "$(CFG)" == "PumpKIN - Win32 Release"
762
763
763"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\ 764"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\
764 "$(INTDIR)\pumpkin.pch" 765 "$(INTDIR)\pumpkin.pch"
765 766
766 767
767!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 768!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
768 769
769DEP_CPP_PUMPKI=\
770 ".\ACLTargetCombo.h"\
771 ".\ConfirmRRQDlg.h"\
772 ".\ConfirmWRQDlg.h"\
773 ".\PropsACL.h"\
774 ".\PropsNetwork.h"\
775 ".\PropsServer.h"\
776 ".\PropsSounds.h"\
777 ".\pumpkin.h"\
778 ".\PumpKINDlg.h"\
779 ".\RequestDlg.h"\
780 ".\Resolver.h"\
781 ".\Retrier.h"\
782 ".\shared-code\BellsNWhistles.h"\
783 ".\shared-code\kHelpers.h"\
784 ".\stdafx.h"\
785 ".\Trayer.h"\
786
787 770
788"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\ 771"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\
789 "$(INTDIR)\pumpkin.pch" 772 "$(INTDIR)\pumpkin.pch"
790 773
791"$(INTDIR)\PumpKINDlg.sbr" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\ 774"$(INTDIR)\PumpKINDlg.sbr" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\
792 "$(INTDIR)\pumpkin.pch" 775 "$(INTDIR)\pumpkin.pch"
793 776
794 777
795!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 778!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
796 779
797DEP_CPP_PUMPKI=\
798 ".\ACLTargetCombo.h"\
799 ".\ConfirmRRQDlg.h"\
800 ".\ConfirmWRQDlg.h"\
801 ".\PropsACL.h"\
802 ".\PropsNetwork.h"\
803 ".\PropsServer.h"\
804 ".\PropsSounds.h"\
805 ".\pumpkin.h"\
806 ".\PumpKINDlg.h"\
807 ".\RequestDlg.h"\
808 ".\Resolver.h"\
809 ".\Retrier.h"\
810 ".\shared-code\BellsNWhistles.h"\
811 ".\shared-code\kHelpers.h"\
812 ".\stdafx.h"\
813 ".\Trayer.h"\
814
815 780
816"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\ 781"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\
817 "$(INTDIR)\pumpkin.pch" 782 "$(INTDIR)\pumpkin.pch"
818 783
819 784
820!ENDIF 785!ENDIF
821 786
822# End Source File 787# End Source File
823################################################################################ 788################################################################################
824# Begin Source File 789# Begin Source File
825 790
826SOURCE=.\StdAfx.cpp 791SOURCE=.\StdAfx.cpp
827DEP_CPP_STDAF=\ 792DEP_CPP_STDAF=\
828 ".\shared-code\BellsNWhistles.h"\ 793 ".\shared-code\BellsNWhistles.h"\
829 ".\shared-code\kHelpers.h"\ 794 ".\shared-code\kHelpers.h"\
830 ".\stdafx.h"\ 795 ".\stdafx.h"\
831 796
832 797
833!IF "$(CFG)" == "PumpKIN - Win32 Release" 798!IF "$(CFG)" == "PumpKIN - Win32 Release"
834 799
835# ADD CPP /Yc"stdafx.h" 800# ADD CPP /Yc"stdafx.h"
836 801
837BuildCmds= \ 802BuildCmds= \
838 $(CPP) /nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ 803 $(CPP) /nologo /Zp1 /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\
839 "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yc"stdafx.h" /Fo"$(INTDIR)/"\ 804 "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yc"stdafx.h" /Fo"$(INTDIR)/"\
840 /c $(SOURCE) \ 805 /c $(SOURCE) \
841 806
842 807
843"$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" 808"$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)"
844 $(BuildCmds) 809 $(BuildCmds)
845 810
846"$(INTDIR)\pumpkin.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" 811"$(INTDIR)\pumpkin.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)"
847 $(BuildCmds) 812 $(BuildCmds)
848 813
849!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 814!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
850 815
851# ADD CPP /Yc"stdafx.h" 816# ADD CPP /Yc"stdafx.h"
852 817
853BuildCmds= \ 818BuildCmds= \
854 $(CPP) /nologo /Zp1 /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D\ 819 $(CPP) /nologo /Zp1 /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D\
855 "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/pumpkin.pch"\ 820 "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/pumpkin.pch"\
856 /Yc"stdafx.h" /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \ 821 /Yc"stdafx.h" /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c $(SOURCE) \
857 822
858 823
859"$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" 824"$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)"
860 $(BuildCmds) 825 $(BuildCmds)
861 826
862"$(INTDIR)\StdAfx.sbr" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" 827"$(INTDIR)\StdAfx.sbr" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)"
863 $(BuildCmds) 828 $(BuildCmds)
864 829
865"$(INTDIR)\pumpkin.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" 830"$(INTDIR)\pumpkin.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)"
866 $(BuildCmds) 831 $(BuildCmds)
867 832
868!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 833!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
869 834
870# ADD BASE CPP /Yc"stdafx.h" 835# ADD BASE CPP /Yc"stdafx.h"
871# ADD CPP /Yc"stdafx.h" 836# ADD CPP /Yc"stdafx.h"
872 837
873BuildCmds= \ 838BuildCmds= \
874 $(CPP) /nologo /Zp1 /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ 839 $(CPP) /nologo /Zp1 /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\
875 "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yc"stdafx.h" /Fo"$(INTDIR)/" /c $(SOURCE) \ 840 "_MBCS" /Fp"$(INTDIR)/pumpkin.pch" /Yc"stdafx.h" /Fo"$(INTDIR)/" /c $(SOURCE) \
876 841
877 842
878"$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" 843"$(INTDIR)\StdAfx.obj" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)"
879 $(BuildCmds) 844 $(BuildCmds)
880 845
881"$(INTDIR)\pumpkin.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)" 846"$(INTDIR)\pumpkin.pch" : $(SOURCE) $(DEP_CPP_STDAF) "$(INTDIR)"
882 $(BuildCmds) 847 $(BuildCmds)
883 848
884!ENDIF 849!ENDIF
885 850
886# End Source File 851# End Source File
887################################################################################ 852################################################################################
888# Begin Source File 853# Begin Source File
889 854
890SOURCE=.\pumpkin.rc 855SOURCE=.\pumpkin.rc
891DEP_RSC_PUMPKIN=\ 856DEP_RSC_PUMPKIN=\
892 ".\res\down.ico"\ 857 ".\res\down.ico"\
893 ".\res\failed.wav"\ 858 ".\res\failed.wav"\
894 ".\res\finished.wav"\ 859 ".\res\finished.wav"\
895 ".\res\PumpKIN.ico"\ 860 ".\res\PumpKIN.ico"\
896 ".\res\pumpkin.rc2"\ 861 ".\res\pumpkin.rc2"\
897 ".\res\remove.ico"\ 862 ".\res\remove.ico"\
898 ".\res\ring.wav"\ 863 ".\res\ring.wav"\
899 ".\res\rrq.ico"\ 864 ".\res\rrq.ico"\
900 ".\res\up.ico"\ 865 ".\res\up.ico"\
901 ".\res\wrq.ico"\ 866 ".\res\wrq.ico"\
902 ".\shared-data\browse-icon.ico"\ 867 ".\shared-data\browse-icon.ico"\
903 ".\shared-data\klever-background.bmp"\ 868 ".\shared-data\klever-background.bmp"\
904 ".\shared-data\play-icon.ico"\ 869 ".\shared-data\play-icon.ico"\
905 870
906 871
907!IF "$(CFG)" == "PumpKIN - Win32 Release" 872!IF "$(CFG)" == "PumpKIN - Win32 Release"
908 873
909 874
910"$(INTDIR)\pumpkin.res" : $(SOURCE) $(DEP_RSC_PUMPKIN) "$(INTDIR)" 875"$(INTDIR)\pumpkin.res" : $(SOURCE) $(DEP_RSC_PUMPKIN) "$(INTDIR)"
911 $(RSC) $(RSC_PROJ) $(SOURCE) 876 $(RSC) $(RSC_PROJ) $(SOURCE)
912 877
913 878
914!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 879!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
915 880
916 881
917"$(INTDIR)\pumpkin.res" : $(SOURCE) $(DEP_RSC_PUMPKIN) "$(INTDIR)" 882"$(INTDIR)\pumpkin.res" : $(SOURCE) $(DEP_RSC_PUMPKIN) "$(INTDIR)"
918 $(RSC) $(RSC_PROJ) $(SOURCE) 883 $(RSC) $(RSC_PROJ) $(SOURCE)
919 884
920 885
921!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 886!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
922 887
923 888
924"$(INTDIR)\pumpkin.res" : $(SOURCE) $(DEP_RSC_PUMPKIN) "$(INTDIR)" 889"$(INTDIR)\pumpkin.res" : $(SOURCE) $(DEP_RSC_PUMPKIN) "$(INTDIR)"
925 $(RSC) $(RSC_PROJ) $(SOURCE) 890 $(RSC) $(RSC_PROJ) $(SOURCE)
926 891
927 892
928!ENDIF 893!ENDIF
929 894
930# End Source File 895# End Source File
931################################################################################ 896################################################################################
932# Begin Source File 897# Begin Source File
933 898
934SOURCE=.\help\pumpkin.hpj 899SOURCE=.\help\pumpkin.hpj
935 900
936!IF "$(CFG)" == "PumpKIN - Win32 Release" 901!IF "$(CFG)" == "PumpKIN - Win32 Release"
937 902
938# Begin Custom Build - Making help files... 903# Begin Custom Build - Making help files...
939OutDir=.\Release 904OutDir=.\Release
940ProjDir=. 905ProjDir=.
941TargetName=pumpkin 906TargetName=pumpkin
942InputPath=.\help\pumpkin.hpj 907InputPath=.\help\pumpkin.hpj
943 908
944BuildCmds= \ 909BuildCmds= \
945 "$(ProjDir)\makehelp.bat" \ 910 "$(ProjDir)\makehelp.bat" \
946 compress $(OutDir)\$(TargetName).hlp $(OutDir)\$(TargetName).hl_ \ 911 compress $(OutDir)\$(TargetName).hlp $(OutDir)\$(TargetName).hl_ \
947 compress $(OutDir)\$(TargetName).cnt $(OutDir)\$(TargetName).cn_ \ 912 compress $(OutDir)\$(TargetName).cnt $(OutDir)\$(TargetName).cn_ \
948 913
949 914
950"$(OutDir)\$(TargetName).hlp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 915"$(OutDir)\$(TargetName).hlp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
951 $(BuildCmds) 916 $(BuildCmds)
952 917
953"$(OutDir)\$(TargetName).cnt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 918"$(OutDir)\$(TargetName).cnt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
954 $(BuildCmds) 919 $(BuildCmds)
955 920
956"$(OutDir)\$(TargetName).hl_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 921"$(OutDir)\$(TargetName).hl_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
957 $(BuildCmds) 922 $(BuildCmds)
958 923
959"$(OutDir)\$(TargetName).cn_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 924"$(OutDir)\$(TargetName).cn_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
960 $(BuildCmds) 925 $(BuildCmds)
961# End Custom Build 926# End Custom Build
962 927
963!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 928!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
964 929
965# Begin Custom Build - Making help files... 930# Begin Custom Build - Making help files...
966OutDir=.\Debug 931OutDir=.\Debug
967ProjDir=. 932ProjDir=.
968TargetName=pumpkin 933TargetName=pumpkin
969InputPath=.\help\pumpkin.hpj 934InputPath=.\help\pumpkin.hpj
970 935
971BuildCmds= \ 936BuildCmds= \
972 "$(ProjDir)\makehelp.bat" \ 937 "$(ProjDir)\makehelp.bat" \
973 compress $(OutDir)\$(TargetName).hlp $(OutDir)\$(TargetName).hl_ \ 938 compress $(OutDir)\$(TargetName).hlp $(OutDir)\$(TargetName).hl_ \
974 compress $(OutDir)\$(TargetName).cnt $(OutDir)\$(TargetName).cn_ \ 939 compress $(OutDir)\$(TargetName).cnt $(OutDir)\$(TargetName).cn_ \
975 940
976 941
977"$(OutDir)\$(TargetName).hlp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 942"$(OutDir)\$(TargetName).hlp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
978 $(BuildCmds) 943 $(BuildCmds)
979 944
980"$(OutDir)\$(TargetName).cnt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 945"$(OutDir)\$(TargetName).cnt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
981 $(BuildCmds) 946 $(BuildCmds)
982 947
983"$(OutDir)\$(TargetName).hl_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 948"$(OutDir)\$(TargetName).hl_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
984 $(BuildCmds) 949 $(BuildCmds)
985 950
986"$(OutDir)\$(TargetName).cn_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 951"$(OutDir)\$(TargetName).cn_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
987 $(BuildCmds) 952 $(BuildCmds)
988# End Custom Build 953# End Custom Build
989 954
990!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 955!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
991 956
992# Begin Custom Build - Making help files... 957# Begin Custom Build - Making help files...
993OutDir=.\Releast 958OutDir=.\Releast
994ProjDir=. 959ProjDir=.
995TargetName=pumpkin 960TargetName=pumpkin
996InputPath=.\help\pumpkin.hpj 961InputPath=.\help\pumpkin.hpj
997 962
998BuildCmds= \ 963BuildCmds= \
999 "$(ProjDir)\makehelp.bat" \ 964 "$(ProjDir)\makehelp.bat" \
1000 compress $(OutDir)\$(TargetName).hlp $(OutDir)\$(TargetName).hl_ \ 965 compress $(OutDir)\$(TargetName).hlp $(OutDir)\$(TargetName).hl_ \
1001 compress $(OutDir)\$(TargetName).cnt $(OutDir)\$(TargetName).cn_ \ 966 compress $(OutDir)\$(TargetName).cnt $(OutDir)\$(TargetName).cn_ \
1002 967
1003 968
1004"$(OutDir)\$(TargetName).hlp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 969"$(OutDir)\$(TargetName).hlp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
1005 $(BuildCmds) 970 $(BuildCmds)
1006 971
1007"$(OutDir)\$(TargetName).cnt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 972"$(OutDir)\$(TargetName).cnt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
1008 $(BuildCmds) 973 $(BuildCmds)
1009 974
1010"$(OutDir)\$(TargetName).hl_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 975"$(OutDir)\$(TargetName).hl_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
1011 $(BuildCmds) 976 $(BuildCmds)
1012 977
1013"$(OutDir)\$(TargetName).cn_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" 978"$(OutDir)\$(TargetName).cn_" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
1014 $(BuildCmds) 979 $(BuildCmds)
1015# End Custom Build 980# End Custom Build
1016 981
1017!ENDIF 982!ENDIF
1018 983
1019# End Source File 984# End Source File
1020################################################################################ 985################################################################################
1021# Begin Source File 986# Begin Source File
1022 987
1023SOURCE=.\PropsServer.cpp 988SOURCE=.\PropsServer.cpp
1024 989
1025!IF "$(CFG)" == "PumpKIN - Win32 Release" 990!IF "$(CFG)" == "PumpKIN - Win32 Release"
1026 991
1027DEP_CPP_PROPS=\ 992DEP_CPP_PROPS=\
1028 ".\PropsServer.h"\ 993 ".\PropsServer.h"\
1029 ".\pumpkin.h"\ 994 ".\pumpkin.h"\
1030 ".\shared-code\BellsNWhistles.h"\ 995 ".\shared-code\BellsNWhistles.h"\
1031 ".\shared-code\kHelpers.h"\ 996 ".\shared-code\kHelpers.h"\
1032 ".\stdafx.h"\ 997 ".\stdafx.h"\
1033 998
1034 999
1035"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\ 1000"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\
1036 "$(INTDIR)\pumpkin.pch" 1001 "$(INTDIR)\pumpkin.pch"
1037 1002
1038 1003
1039!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1004!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1040 1005
1041DEP_CPP_PROPS=\ 1006DEP_CPP_PROPS=\
1042 ".\PropsServer.h"\ 1007 ".\PropsServer.h"\
1043 ".\pumpkin.h"\ 1008 ".\pumpkin.h"\
1009 ".\shared-code\BellsNWhistles.h"\
1044 ".\shared-code\kHelpers.h"\ 1010 ".\shared-code\kHelpers.h"\
1045 ".\stdafx.h"\ 1011 ".\stdafx.h"\
1046 1012
1047 1013
1048"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\ 1014"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\
1049 "$(INTDIR)\pumpkin.pch" 1015 "$(INTDIR)\pumpkin.pch"
1050 1016
1051"$(INTDIR)\PropsServer.sbr" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\ 1017"$(INTDIR)\PropsServer.sbr" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\
1052 "$(INTDIR)\pumpkin.pch" 1018 "$(INTDIR)\pumpkin.pch"
1053 1019
1054 1020
1055!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1021!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1056 1022
1057DEP_CPP_PROPS=\ 1023DEP_CPP_PROPS=\
1058 ".\PropsServer.h"\ 1024 ".\PropsServer.h"\
1059 ".\pumpkin.h"\ 1025 ".\pumpkin.h"\
1060 ".\shared-code\BellsNWhistles.h"\ 1026 ".\shared-code\BellsNWhistles.h"\
1061 ".\shared-code\kHelpers.h"\ 1027 ".\shared-code\kHelpers.h"\
1062 ".\stdafx.h"\ 1028 ".\stdafx.h"\
1063 1029
1064 1030
1065"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\ 1031"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\
1066 "$(INTDIR)\pumpkin.pch" 1032 "$(INTDIR)\pumpkin.pch"
1067 1033
1068 1034
1069!ENDIF 1035!ENDIF
1070 1036
1071# End Source File 1037# End Source File
1072################################################################################ 1038################################################################################
1073# Begin Source File 1039# Begin Source File
1074 1040
1075SOURCE=.\PropsNetwork.cpp 1041SOURCE=.\PropsNetwork.cpp
1076DEP_CPP_PROPSN=\ 1042DEP_CPP_PROPSN=\
1077 ".\PropsNetwork.h"\ 1043 ".\PropsNetwork.h"\
1078 ".\pumpkin.h"\ 1044 ".\pumpkin.h"\
1079 ".\shared-code\BellsNWhistles.h"\ 1045 ".\shared-code\BellsNWhistles.h"\
1080 ".\shared-code\kHelpers.h"\ 1046 ".\shared-code\kHelpers.h"\
1081 ".\stdafx.h"\ 1047 ".\stdafx.h"\
1082 1048
1083 1049
1084!IF "$(CFG)" == "PumpKIN - Win32 Release" 1050!IF "$(CFG)" == "PumpKIN - Win32 Release"
1085 1051
1086 1052
1087"$(INTDIR)\PropsNetwork.obj" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\ 1053"$(INTDIR)\PropsNetwork.obj" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\
1088 "$(INTDIR)\pumpkin.pch" 1054 "$(INTDIR)\pumpkin.pch"
1089 1055
1090 1056
1091!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1057!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1092 1058
1093 1059
1094"$(INTDIR)\PropsNetwork.obj" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\ 1060"$(INTDIR)\PropsNetwork.obj" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\
1095 "$(INTDIR)\pumpkin.pch" 1061 "$(INTDIR)\pumpkin.pch"
1096 1062
1097"$(INTDIR)\PropsNetwork.sbr" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\ 1063"$(INTDIR)\PropsNetwork.sbr" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\
1098 "$(INTDIR)\pumpkin.pch" 1064 "$(INTDIR)\pumpkin.pch"
1099 1065
1100 1066
1101!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1067!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1102 1068
1103 1069
1104"$(INTDIR)\PropsNetwork.obj" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\ 1070"$(INTDIR)\PropsNetwork.obj" : $(SOURCE) $(DEP_CPP_PROPSN) "$(INTDIR)"\
1105 "$(INTDIR)\pumpkin.pch" 1071 "$(INTDIR)\pumpkin.pch"
1106 1072
1107 1073
1108!ENDIF 1074!ENDIF
1109 1075
1110# End Source File 1076# End Source File
1111################################################################################ 1077################################################################################
1112# Begin Source File 1078# Begin Source File
1113 1079
1114SOURCE=.\ConfirmRRQDlg.cpp 1080SOURCE=.\ConfirmRRQDlg.cpp
1115 1081
1116!IF "$(CFG)" == "PumpKIN - Win32 Release" 1082!IF "$(CFG)" == "PumpKIN - Win32 Release"
1117 1083
1118DEP_CPP_CONFI=\ 1084DEP_CPP_CONFI=\
1119 ".\ConfirmRRQDlg.h"\ 1085 ".\ConfirmRRQDlg.h"\
1120 ".\pumpkin.h"\ 1086 ".\pumpkin.h"\
1121 ".\PumpKINDlg.h"\ 1087 ".\PumpKINDlg.h"\
1122 ".\shared-code\BellsNWhistles.h"\ 1088 ".\shared-code\BellsNWhistles.h"\
1123 ".\shared-code\kHelpers.h"\ 1089 ".\shared-code\kHelpers.h"\
1124 ".\stdafx.h"\ 1090 ".\stdafx.h"\
1125 1091
1126 1092
1127"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\ 1093"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\
1128 "$(INTDIR)\pumpkin.pch" 1094 "$(INTDIR)\pumpkin.pch"
1129 1095
1130 1096
1131!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1097!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1132 1098
1133DEP_CPP_CONFI=\ 1099DEP_CPP_CONFI=\
1134 ".\ConfirmRRQDlg.h"\ 1100 ".\ConfirmRRQDlg.h"\
1135 ".\pumpkin.h"\ 1101 ".\pumpkin.h"\
1136 ".\PumpKINDlg.h"\ 1102 ".\PumpKINDlg.h"\
1103 ".\shared-code\BellsNWhistles.h"\
1137 ".\shared-code\kHelpers.h"\ 1104 ".\shared-code\kHelpers.h"\
1138 ".\stdafx.h"\ 1105 ".\stdafx.h"\
1139 1106
1140 1107
1141"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\ 1108"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\
1142 "$(INTDIR)\pumpkin.pch" 1109 "$(INTDIR)\pumpkin.pch"
1143 1110
1144"$(INTDIR)\ConfirmRRQDlg.sbr" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\ 1111"$(INTDIR)\ConfirmRRQDlg.sbr" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\
1145 "$(INTDIR)\pumpkin.pch" 1112 "$(INTDIR)\pumpkin.pch"
1146 1113
1147 1114
1148!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1115!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1149 1116
1150DEP_CPP_CONFI=\ 1117DEP_CPP_CONFI=\
1151 ".\ConfirmRRQDlg.h"\ 1118 ".\ConfirmRRQDlg.h"\
1152 ".\pumpkin.h"\ 1119 ".\pumpkin.h"\
1153 ".\PumpKINDlg.h"\ 1120 ".\PumpKINDlg.h"\
1154 ".\shared-code\BellsNWhistles.h"\ 1121 ".\shared-code\BellsNWhistles.h"\
1155 ".\shared-code\kHelpers.h"\ 1122 ".\shared-code\kHelpers.h"\
1156 ".\stdafx.h"\ 1123 ".\stdafx.h"\
1157 1124
1158 1125
1159"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\ 1126"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\
1160 "$(INTDIR)\pumpkin.pch" 1127 "$(INTDIR)\pumpkin.pch"
1161 1128
1162 1129
1163!ENDIF 1130!ENDIF
1164 1131
1165# End Source File 1132# End Source File
1166################################################################################ 1133################################################################################
1167# Begin Source File 1134# Begin Source File
1168 1135
1169SOURCE=.\ConfirmWRQDlg.cpp 1136SOURCE=.\ConfirmWRQDlg.cpp
1170 1137
1171!IF "$(CFG)" == "PumpKIN - Win32 Release" 1138!IF "$(CFG)" == "PumpKIN - Win32 Release"
1172 1139
1173DEP_CPP_CONFIR=\ 1140DEP_CPP_CONFIR=\
1174 ".\ConfirmWRQDlg.h"\ 1141 ".\ConfirmWRQDlg.h"\
1175 ".\pumpkin.h"\ 1142 ".\pumpkin.h"\
1176 ".\PumpKINDlg.h"\ 1143 ".\PumpKINDlg.h"\
1177 ".\shared-code\BellsNWhistles.h"\ 1144 ".\shared-code\BellsNWhistles.h"\
1178 ".\shared-code\kHelpers.h"\ 1145 ".\shared-code\kHelpers.h"\
1179 ".\stdafx.h"\ 1146 ".\stdafx.h"\
1180 1147
1181 1148
1182"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\ 1149"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\
1183 "$(INTDIR)\pumpkin.pch" 1150 "$(INTDIR)\pumpkin.pch"
1184 1151
1185 1152
1186!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1153!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1187 1154
1188DEP_CPP_CONFIR=\ 1155DEP_CPP_CONFIR=\
1189 ".\ConfirmWRQDlg.h"\ 1156 ".\ConfirmWRQDlg.h"\
1190 ".\pumpkin.h"\ 1157 ".\pumpkin.h"\
1191 ".\PumpKINDlg.h"\ 1158 ".\PumpKINDlg.h"\
1159 ".\shared-code\BellsNWhistles.h"\
1192 ".\shared-code\kHelpers.h"\ 1160 ".\shared-code\kHelpers.h"\
1193 ".\stdafx.h"\ 1161 ".\stdafx.h"\
1194 1162
1195 1163
1196"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\ 1164"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\
1197 "$(INTDIR)\pumpkin.pch" 1165 "$(INTDIR)\pumpkin.pch"
1198 1166
1199"$(INTDIR)\ConfirmWRQDlg.sbr" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\ 1167"$(INTDIR)\ConfirmWRQDlg.sbr" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\
1200 "$(INTDIR)\pumpkin.pch" 1168 "$(INTDIR)\pumpkin.pch"
1201 1169
1202 1170
1203!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1171!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1204 1172
1205DEP_CPP_CONFIR=\ 1173DEP_CPP_CONFIR=\
1206 ".\ConfirmWRQDlg.h"\ 1174 ".\ConfirmWRQDlg.h"\
1207 ".\pumpkin.h"\ 1175 ".\pumpkin.h"\
1208 ".\PumpKINDlg.h"\ 1176 ".\PumpKINDlg.h"\
1209 ".\shared-code\BellsNWhistles.h"\ 1177 ".\shared-code\BellsNWhistles.h"\
1210 ".\shared-code\kHelpers.h"\ 1178 ".\shared-code\kHelpers.h"\
1211 ".\stdafx.h"\ 1179 ".\stdafx.h"\
1212 1180
1213 1181
1214"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\ 1182"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\
1215 "$(INTDIR)\pumpkin.pch" 1183 "$(INTDIR)\pumpkin.pch"
1216 1184
1217 1185
1218!ENDIF 1186!ENDIF
1219 1187
1220# End Source File 1188# End Source File
1221################################################################################ 1189################################################################################
1222# Begin Source File 1190# Begin Source File
1223 1191
1224SOURCE=.\RequestDlg.cpp 1192SOURCE=.\RequestDlg.cpp
1225DEP_CPP_REQUE=\ 1193DEP_CPP_REQUE=\
1226 ".\pumpkin.h"\ 1194 ".\pumpkin.h"\
1227 ".\RequestDlg.h"\ 1195 ".\RequestDlg.h"\
1228 ".\shared-code\BellsNWhistles.h"\ 1196 ".\shared-code\BellsNWhistles.h"\
1229 ".\shared-code\kHelpers.h"\ 1197 ".\shared-code\kHelpers.h"\
1230 ".\stdafx.h"\ 1198 ".\stdafx.h"\
1231 1199
1232 1200
1233!IF "$(CFG)" == "PumpKIN - Win32 Release" 1201!IF "$(CFG)" == "PumpKIN - Win32 Release"
1234 1202
1235 1203
1236"$(INTDIR)\RequestDlg.obj" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\ 1204"$(INTDIR)\RequestDlg.obj" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\
1237 "$(INTDIR)\pumpkin.pch" 1205 "$(INTDIR)\pumpkin.pch"
1238 1206
1239 1207
1240!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1208!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1241 1209
1242 1210
1243"$(INTDIR)\RequestDlg.obj" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\ 1211"$(INTDIR)\RequestDlg.obj" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\
1244 "$(INTDIR)\pumpkin.pch" 1212 "$(INTDIR)\pumpkin.pch"
1245 1213
1246"$(INTDIR)\RequestDlg.sbr" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\ 1214"$(INTDIR)\RequestDlg.sbr" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\
1247 "$(INTDIR)\pumpkin.pch" 1215 "$(INTDIR)\pumpkin.pch"
1248 1216
1249 1217
1250!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1218!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1251 1219
1252 1220
1253"$(INTDIR)\RequestDlg.obj" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\ 1221"$(INTDIR)\RequestDlg.obj" : $(SOURCE) $(DEP_CPP_REQUE) "$(INTDIR)"\
1254 "$(INTDIR)\pumpkin.pch" 1222 "$(INTDIR)\pumpkin.pch"
1255 1223
1256 1224
1257!ENDIF 1225!ENDIF
1258 1226
1259# End Source File 1227# End Source File
1260################################################################################ 1228################################################################################
1261# Begin Source File 1229# Begin Source File
1262 1230
1263SOURCE=.\Resolver.cpp 1231SOURCE=.\Resolver.cpp
1264 1232
1265!IF "$(CFG)" == "PumpKIN - Win32 Release" 1233!IF "$(CFG)" == "PumpKIN - Win32 Release"
1266 1234
1267DEP_CPP_RESOL=\ 1235DEP_CPP_RESOL=\
1268 ".\pumpkin.h"\ 1236 ".\pumpkin.h"\
1269 ".\PumpKINDlg.h"\ 1237 ".\PumpKINDlg.h"\
1270 ".\Resolver.h"\ 1238 ".\Resolver.h"\
1271 ".\shared-code\BellsNWhistles.h"\ 1239 ".\shared-code\BellsNWhistles.h"\
1272 ".\shared-code\kHelpers.h"\ 1240 ".\shared-code\kHelpers.h"\
1273 ".\stdafx.h"\ 1241 ".\stdafx.h"\
1274 1242
1275 1243
1276"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\ 1244"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\
1277 "$(INTDIR)\pumpkin.pch" 1245 "$(INTDIR)\pumpkin.pch"
1278 1246
1279 1247
1280!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1248!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1281 1249
1282DEP_CPP_RESOL=\ 1250DEP_CPP_RESOL=\
1283 ".\pumpkin.h"\ 1251 ".\pumpkin.h"\
1284 ".\PumpKINDlg.h"\ 1252 ".\PumpKINDlg.h"\
1285 ".\Resolver.h"\ 1253 ".\Resolver.h"\
1254 ".\shared-code\BellsNWhistles.h"\
1286 ".\shared-code\kHelpers.h"\ 1255 ".\shared-code\kHelpers.h"\
1287 ".\stdafx.h"\ 1256 ".\stdafx.h"\
1288 1257
1289 1258
1290"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\ 1259"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\
1291 "$(INTDIR)\pumpkin.pch" 1260 "$(INTDIR)\pumpkin.pch"
1292 1261
1293"$(INTDIR)\Resolver.sbr" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\ 1262"$(INTDIR)\Resolver.sbr" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\
1294 "$(INTDIR)\pumpkin.pch" 1263 "$(INTDIR)\pumpkin.pch"
1295 1264
1296 1265
1297!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1266!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1298 1267
1299DEP_CPP_RESOL=\ 1268DEP_CPP_RESOL=\
1300 ".\pumpkin.h"\ 1269 ".\pumpkin.h"\
1301 ".\PumpKINDlg.h"\ 1270 ".\PumpKINDlg.h"\
1302 ".\Resolver.h"\ 1271 ".\Resolver.h"\
1303 ".\shared-code\BellsNWhistles.h"\ 1272 ".\shared-code\BellsNWhistles.h"\
1304 ".\shared-code\kHelpers.h"\ 1273 ".\shared-code\kHelpers.h"\
1305 ".\stdafx.h"\ 1274 ".\stdafx.h"\
1306 1275
1307 1276
1308"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\ 1277"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\
1309 "$(INTDIR)\pumpkin.pch" 1278 "$(INTDIR)\pumpkin.pch"
1310 1279
1311 1280
1312!ENDIF 1281!ENDIF
1313 1282
1314# End Source File 1283# End Source File
1315################################################################################ 1284################################################################################
1316# Begin Source File 1285# Begin Source File
1317 1286
1318SOURCE=.\Retrier.cpp 1287SOURCE=.\Retrier.cpp
1319 1288
1320!IF "$(CFG)" == "PumpKIN - Win32 Release" 1289!IF "$(CFG)" == "PumpKIN - Win32 Release"
1321 1290
1322DEP_CPP_RETRI=\ 1291DEP_CPP_RETRI=\
1323 ".\pumpkin.h"\ 1292 ".\pumpkin.h"\
1324 ".\PumpKINDlg.h"\ 1293 ".\PumpKINDlg.h"\
1325 ".\Retrier.h"\ 1294 ".\Retrier.h"\
1326 ".\shared-code\BellsNWhistles.h"\ 1295 ".\shared-code\BellsNWhistles.h"\
1327 ".\shared-code\kHelpers.h"\ 1296 ".\shared-code\kHelpers.h"\
1328 ".\stdafx.h"\ 1297 ".\stdafx.h"\
1329 1298
1330 1299
1331"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\ 1300"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\
1332 "$(INTDIR)\pumpkin.pch" 1301 "$(INTDIR)\pumpkin.pch"
1333 1302
1334 1303
1335!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1304!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1336 1305
1337DEP_CPP_RETRI=\ 1306DEP_CPP_RETRI=\
1338 ".\pumpkin.h"\ 1307 ".\pumpkin.h"\
1339 ".\PumpKINDlg.h"\ 1308 ".\PumpKINDlg.h"\
1340 ".\Retrier.h"\ 1309 ".\Retrier.h"\
1310 ".\shared-code\BellsNWhistles.h"\
1341 ".\shared-code\kHelpers.h"\ 1311 ".\shared-code\kHelpers.h"\
1342 ".\stdafx.h"\ 1312 ".\stdafx.h"\
1343 1313
1344 1314
1345"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\ 1315"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\
1346 "$(INTDIR)\pumpkin.pch" 1316 "$(INTDIR)\pumpkin.pch"
1347 1317
1348"$(INTDIR)\Retrier.sbr" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\ 1318"$(INTDIR)\Retrier.sbr" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\
1349 "$(INTDIR)\pumpkin.pch" 1319 "$(INTDIR)\pumpkin.pch"
1350 1320
1351 1321
1352!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1322!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1353 1323
1354DEP_CPP_RETRI=\ 1324DEP_CPP_RETRI=\
1355 ".\pumpkin.h"\ 1325 ".\pumpkin.h"\
1356 ".\PumpKINDlg.h"\ 1326 ".\PumpKINDlg.h"\
1357 ".\Retrier.h"\ 1327 ".\Retrier.h"\
1358 ".\shared-code\BellsNWhistles.h"\ 1328 ".\shared-code\BellsNWhistles.h"\
1359 ".\shared-code\kHelpers.h"\ 1329 ".\shared-code\kHelpers.h"\
1360 ".\stdafx.h"\ 1330 ".\stdafx.h"\
1361 1331
1362 1332
1363"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\ 1333"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\
1364 "$(INTDIR)\pumpkin.pch" 1334 "$(INTDIR)\pumpkin.pch"
1365 1335
1366 1336
1367!ENDIF 1337!ENDIF
1368 1338
1369# End Source File 1339# End Source File
1370################################################################################ 1340################################################################################
1371# Begin Source File 1341# Begin Source File
1372 1342
1373SOURCE=.\Trayer.cpp 1343SOURCE=.\Trayer.cpp
1374 1344
1375!IF "$(CFG)" == "PumpKIN - Win32 Release" 1345!IF "$(CFG)" == "PumpKIN - Win32 Release"
1376 1346
1377DEP_CPP_TRAYE=\ 1347DEP_CPP_TRAYE=\
1378 ".\pumpkin.h"\ 1348 ".\pumpkin.h"\
1379 ".\PumpKINDlg.h"\ 1349 ".\PumpKINDlg.h"\
1380 ".\shared-code\BellsNWhistles.h"\ 1350 ".\shared-code\BellsNWhistles.h"\
1381 ".\shared-code\kHelpers.h"\ 1351 ".\shared-code\kHelpers.h"\
1382 ".\stdafx.h"\ 1352 ".\stdafx.h"\
1383 ".\Trayer.h"\ 1353 ".\Trayer.h"\
1384 1354
1385 1355
1386"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\ 1356"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\
1387 "$(INTDIR)\pumpkin.pch" 1357 "$(INTDIR)\pumpkin.pch"
1388 1358
1389 1359
1390!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1360!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1391 1361
1392DEP_CPP_TRAYE=\ 1362DEP_CPP_TRAYE=\
1393 ".\pumpkin.h"\ 1363 ".\pumpkin.h"\
1394 ".\PumpKINDlg.h"\ 1364 ".\PumpKINDlg.h"\
1365 ".\shared-code\BellsNWhistles.h"\
1395 ".\shared-code\kHelpers.h"\ 1366 ".\shared-code\kHelpers.h"\
1396 ".\stdafx.h"\ 1367 ".\stdafx.h"\
1397 ".\Trayer.h"\ 1368 ".\Trayer.h"\
1398 1369
1399 1370
1400"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\ 1371"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\
1401 "$(INTDIR)\pumpkin.pch" 1372 "$(INTDIR)\pumpkin.pch"
1402 1373
1403"$(INTDIR)\Trayer.sbr" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\ 1374"$(INTDIR)\Trayer.sbr" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\
1404 "$(INTDIR)\pumpkin.pch" 1375 "$(INTDIR)\pumpkin.pch"
1405 1376
1406 1377
1407!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1378!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1408 1379
1409DEP_CPP_TRAYE=\ 1380DEP_CPP_TRAYE=\
1410 ".\pumpkin.h"\ 1381 ".\pumpkin.h"\
1411 ".\PumpKINDlg.h"\ 1382 ".\PumpKINDlg.h"\
1412 ".\shared-code\BellsNWhistles.h"\ 1383 ".\shared-code\BellsNWhistles.h"\
1413 ".\shared-code\kHelpers.h"\ 1384 ".\shared-code\kHelpers.h"\
1414 ".\stdafx.h"\ 1385 ".\stdafx.h"\
1415 ".\Trayer.h"\ 1386 ".\Trayer.h"\
1416 1387
1417 1388
1418"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\ 1389"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\
1419 "$(INTDIR)\pumpkin.pch" 1390 "$(INTDIR)\pumpkin.pch"
1420 1391
1421 1392
1422!ENDIF 1393!ENDIF
1423 1394
1424# End Source File 1395# End Source File
1425################################################################################ 1396################################################################################
1426# Begin Source File 1397# Begin Source File
1427 1398
1428SOURCE=.\help\pumpkin.cnt 1399SOURCE=.\help\pumpkin.cnt
1429 1400
1430!IF "$(CFG)" == "PumpKIN - Win32 Release" 1401!IF "$(CFG)" == "PumpKIN - Win32 Release"
1431 1402
1432# PROP Exclude_From_Build 1 1403# PROP Exclude_From_Build 1
1433 1404
1434!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1405!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1435 1406
1436# PROP Exclude_From_Build 1 1407# PROP Exclude_From_Build 1
1437 1408
1438!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1409!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1439 1410
1440# PROP Exclude_From_Build 1 1411# PROP Exclude_From_Build 1
1441 1412
1442!ENDIF 1413!ENDIF
1443 1414
1444# End Source File 1415# End Source File
1445################################################################################ 1416################################################################################
1446# Begin Source File 1417# Begin Source File
1447 1418
1448SOURCE=.\PropsSounds.cpp 1419SOURCE=.\PropsSounds.cpp
1449 1420
1450!IF "$(CFG)" == "PumpKIN - Win32 Release" 1421!IF "$(CFG)" == "PumpKIN - Win32 Release"
1451 1422
1452DEP_CPP_PROPSS=\ 1423DEP_CPP_PROPSS=\
1453 ".\PropsSounds.h"\ 1424 ".\PropsSounds.h"\
1454 ".\pumpkin.h"\ 1425 ".\pumpkin.h"\
1455 ".\PumpKINDlg.h"\ 1426 ".\PumpKINDlg.h"\
1456 ".\shared-code\BellsNWhistles.h"\ 1427 ".\shared-code\BellsNWhistles.h"\
1457 ".\shared-code\kHelpers.h"\ 1428 ".\shared-code\kHelpers.h"\
1458 ".\stdafx.h"\ 1429 ".\stdafx.h"\
1459 1430
1460 1431
1461"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\ 1432"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\
1462 "$(INTDIR)\pumpkin.pch" 1433 "$(INTDIR)\pumpkin.pch"
1463 1434
1464 1435
1465!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1436!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1466 1437
1467DEP_CPP_PROPSS=\ 1438DEP_CPP_PROPSS=\
1468 ".\PropsSounds.h"\ 1439 ".\PropsSounds.h"\
1469 ".\pumpkin.h"\ 1440 ".\pumpkin.h"\
1470 ".\PumpKINDlg.h"\ 1441 ".\PumpKINDlg.h"\
1442 ".\shared-code\BellsNWhistles.h"\
1471 ".\shared-code\kHelpers.h"\ 1443 ".\shared-code\kHelpers.h"\
1472 ".\stdafx.h"\ 1444 ".\stdafx.h"\
1473 1445
1474 1446
1475"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\ 1447"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\
1476 "$(INTDIR)\pumpkin.pch" 1448 "$(INTDIR)\pumpkin.pch"
1477 1449
1478"$(INTDIR)\PropsSounds.sbr" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\ 1450"$(INTDIR)\PropsSounds.sbr" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\
1479 "$(INTDIR)\pumpkin.pch" 1451 "$(INTDIR)\pumpkin.pch"
1480 1452
1481 1453
1482!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1454!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1483 1455
1484DEP_CPP_PROPSS=\ 1456DEP_CPP_PROPSS=\
1485 ".\PropsSounds.h"\ 1457 ".\PropsSounds.h"\
1486 ".\pumpkin.h"\ 1458 ".\pumpkin.h"\
1487 ".\PumpKINDlg.h"\ 1459 ".\PumpKINDlg.h"\
1488 ".\shared-code\BellsNWhistles.h"\ 1460 ".\shared-code\BellsNWhistles.h"\
1489 ".\shared-code\kHelpers.h"\ 1461 ".\shared-code\kHelpers.h"\
1490 ".\stdafx.h"\ 1462 ".\stdafx.h"\
1491 1463
1492 1464
1493"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\ 1465"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\
1494 "$(INTDIR)\pumpkin.pch" 1466 "$(INTDIR)\pumpkin.pch"
1495 1467
1496 1468
1497!ENDIF 1469!ENDIF
1498 1470
1499# End Source File 1471# End Source File
1500################################################################################ 1472################################################################################
1501# Begin Source File 1473# Begin Source File
1502 1474
1503SOURCE=.\PropsACL.cpp 1475SOURCE=.\PropsACL.cpp
1504
1505!IF "$(CFG)" == "PumpKIN - Win32 Release"
1506
1507DEP_CPP_PROPSA=\ 1476DEP_CPP_PROPSA=\
1508 ".\ACLTargetCombo.h"\ 1477 ".\ACLTargetCombo.h"\
1509 ".\PropsACL.h"\ 1478 ".\PropsACL.h"\
1510 ".\pumpkin.h"\ 1479 ".\pumpkin.h"\
1511 ".\PumpKINDlg.h"\ 1480 ".\PumpKINDlg.h"\
1512 ".\shared-code\BellsNWhistles.h"\ 1481 ".\shared-code\BellsNWhistles.h"\
1513 ".\shared-code\kHelpers.h"\ 1482 ".\shared-code\kHelpers.h"\
1514 ".\stdafx.h"\ 1483 ".\stdafx.h"\
1515 1484
1516 1485
1486!IF "$(CFG)" == "PumpKIN - Win32 Release"
1487
1488
1517"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\ 1489"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1518 "$(INTDIR)\pumpkin.pch" 1490 "$(INTDIR)\pumpkin.pch"
1519 1491
1520 1492
1521!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1493!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1522 1494
1523DEP_CPP_PROPSA=\
1524 ".\ACLTargetCombo.h"\
1525 ".\PropsACL.h"\
1526 ".\pumpkin.h"\
1527 ".\PumpKINDlg.h"\
1528 ".\shared-code\kHelpers.h"\
1529 ".\stdafx.h"\
1530
1531 1495
1532"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\ 1496"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1533 "$(INTDIR)\pumpkin.pch" 1497 "$(INTDIR)\pumpkin.pch"
1534 1498
1535"$(INTDIR)\PropsACL.sbr" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\ 1499"$(INTDIR)\PropsACL.sbr" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1536 "$(INTDIR)\pumpkin.pch" 1500 "$(INTDIR)\pumpkin.pch"
1537 1501
1538 1502
1539!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1503!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1540 1504
1541DEP_CPP_PROPSA=\
1542 ".\ACLTargetCombo.h"\
1543 ".\PropsACL.h"\
1544 ".\pumpkin.h"\
1545 ".\PumpKINDlg.h"\
1546 ".\shared-code\BellsNWhistles.h"\
1547 ".\shared-code\kHelpers.h"\
1548 ".\stdafx.h"\
1549
1550 1505
1551"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\ 1506"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1552 "$(INTDIR)\pumpkin.pch" 1507 "$(INTDIR)\pumpkin.pch"
1553 1508
1554 1509
1555!ENDIF 1510!ENDIF
1556 1511
1557# End Source File 1512# End Source File
1558################################################################################ 1513################################################################################
1559# Begin Source File 1514# Begin Source File
1560 1515
1561SOURCE=.\ACLTargetCombo.cpp 1516SOURCE=.\ACLTargetCombo.cpp
1562 1517
1563!IF "$(CFG)" == "PumpKIN - Win32 Release" 1518!IF "$(CFG)" == "PumpKIN - Win32 Release"
1564 1519
1565DEP_CPP_ACLTA=\ 1520DEP_CPP_ACLTA=\
1566 ".\ACLTargetCombo.h"\ 1521 ".\ACLTargetCombo.h"\
1567 ".\pumpkin.h"\ 1522 ".\pumpkin.h"\
1568 ".\PumpKINDlg.h"\ 1523 ".\PumpKINDlg.h"\
1569 ".\shared-code\BellsNWhistles.h"\ 1524 ".\shared-code\BellsNWhistles.h"\
1570 ".\shared-code\kHelpers.h"\ 1525 ".\shared-code\kHelpers.h"\
1571 ".\stdafx.h"\ 1526 ".\stdafx.h"\
1572 1527
1573 1528
1574"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\ 1529"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1575 "$(INTDIR)\pumpkin.pch" 1530 "$(INTDIR)\pumpkin.pch"
1576 1531
1577 1532
1578!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1533!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1579 1534
1580DEP_CPP_ACLTA=\ 1535DEP_CPP_ACLTA=\
1581 ".\ACLTargetCombo.h"\ 1536 ".\ACLTargetCombo.h"\
1582 ".\pumpkin.h"\ 1537 ".\pumpkin.h"\
1583 ".\PumpKINDlg.h"\ 1538 ".\PumpKINDlg.h"\
1539 ".\shared-code\BellsNWhistles.h"\
1584 ".\shared-code\kHelpers.h"\ 1540 ".\shared-code\kHelpers.h"\
1585 ".\stdafx.h"\ 1541 ".\stdafx.h"\
1586 1542
1587 1543
1588"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\ 1544"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1589 "$(INTDIR)\pumpkin.pch" 1545 "$(INTDIR)\pumpkin.pch"
1590 1546
1591"$(INTDIR)\ACLTargetCombo.sbr" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\ 1547"$(INTDIR)\ACLTargetCombo.sbr" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1592 "$(INTDIR)\pumpkin.pch" 1548 "$(INTDIR)\pumpkin.pch"
1593 1549
1594 1550
1595!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1551!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1596 1552
1597DEP_CPP_ACLTA=\ 1553DEP_CPP_ACLTA=\
1598 ".\ACLTargetCombo.h"\ 1554 ".\ACLTargetCombo.h"\
1599 ".\pumpkin.h"\ 1555 ".\pumpkin.h"\
1600 ".\PumpKINDlg.h"\ 1556 ".\PumpKINDlg.h"\
1601 ".\shared-code\BellsNWhistles.h"\ 1557 ".\shared-code\BellsNWhistles.h"\
1602 ".\shared-code\kHelpers.h"\ 1558 ".\shared-code\kHelpers.h"\
1603 ".\stdafx.h"\ 1559 ".\stdafx.h"\
1604 1560
1605 1561
1606"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\ 1562"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1607 "$(INTDIR)\pumpkin.pch" 1563 "$(INTDIR)\pumpkin.pch"
1608 1564
1609 1565
1610!ENDIF 1566!ENDIF
1611 1567
1612# End Source File 1568# End Source File
1613# End Target 1569# End Target
1614################################################################################ 1570################################################################################
1615# Begin Target 1571# Begin Target
1616 1572
1617# Name "Install - Win32 Debug" 1573# Name "Install - Win32 Debug"
1618# Name "Install - Win32 Pure" 1574# Name "Install - Win32 Pure"
1619# Name "Install - Win32 Static" 1575# Name "Install - Win32 Static"
1620# Name "Install - Win32 Canned" 1576# Name "Install - Win32 Canned"
1621 1577
1622!IF "$(CFG)" == "Install - Win32 Debug" 1578!IF "$(CFG)" == "Install - Win32 Debug"
1623 1579
1624!ELSEIF "$(CFG)" == "Install - Win32 Pure" 1580!ELSEIF "$(CFG)" == "Install - Win32 Pure"
1625 1581
1626!ELSEIF "$(CFG)" == "Install - Win32 Static" 1582!ELSEIF "$(CFG)" == "Install - Win32 Static"
1627 1583
1628!ELSEIF "$(CFG)" == "Install - Win32 Canned" 1584!ELSEIF "$(CFG)" == "Install - Win32 Canned"
1629 1585
1630!ENDIF 1586!ENDIF
1631 1587
1632################################################################################ 1588################################################################################
1633# Begin Source File 1589# Begin Source File
1634 1590
1635SOURCE=.\Install\Install.rc 1591SOURCE=.\Install\Install.rc
1636DEP_RSC_INSTA=\ 1592DEP_RSC_INSTA=\
1637 ".\Install\Custom.rch"\ 1593 ".\Install\Custom.rch"\
1638 ".\shared-data\install-icon.ico"\ 1594 ".\shared-data\install-icon.ico"\
1639 1595
1640 1596
1641!IF "$(CFG)" == "Install - Win32 Debug" 1597!IF "$(CFG)" == "Install - Win32 Debug"
1642 1598
1643 1599
1644"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)" 1600"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)"
1645 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "_DEBUG"\ 1601 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "_DEBUG"\
1646 $(SOURCE) 1602 $(SOURCE)
1647 1603
1648 1604
1649!ELSEIF "$(CFG)" == "Install - Win32 Pure" 1605!ELSEIF "$(CFG)" == "Install - Win32 Pure"
1650 1606
1651 1607
1652"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)" 1608"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)"
1653 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "NDEBUG"\ 1609 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "NDEBUG"\
1654 $(SOURCE) 1610 $(SOURCE)
1655 1611
1656 1612
1657!ELSEIF "$(CFG)" == "Install - Win32 Static" 1613!ELSEIF "$(CFG)" == "Install - Win32 Static"
1658 1614
1659 1615
1660"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)" 1616"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)"
1661 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "NDEBUG" /d\ 1617 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "NDEBUG" /d\
1662 "STATI_K" $(SOURCE) 1618 "STATI_K" $(SOURCE)
1663 1619
1664 1620
1665!ELSEIF "$(CFG)" == "Install - Win32 Canned" 1621!ELSEIF "$(CFG)" == "Install - Win32 Canned"
1666 1622
1667 1623
1668"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)" 1624"$(INTDIR)\Install.res" : $(SOURCE) $(DEP_RSC_INSTA) "$(INTDIR)"
1669 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "NDEBUG" /d\ 1625 $(RSC) /l 0x409 /fo"$(INTDIR)/Install.res" /i "Install" /d "NDEBUG" /d\
1670 "K_ANNED" $(SOURCE) 1626 "K_ANNED" $(SOURCE)
1671 1627
1672 1628
1673!ENDIF 1629!ENDIF
1674 1630
1675# End Source File 1631# End Source File
1676################################################################################ 1632################################################################################
1677# Begin Source File 1633# Begin Source File
1678 1634
1679SOURCE=.\Install\install.cpp 1635SOURCE=.\Install\install.cpp
1680DEP_CPP_INSTAL=\ 1636DEP_CPP_INSTAL=\
1681 ".\shared-code\install.h"\ 1637 ".\shared-code\install.h"\
1682 1638
1683 1639
1684!IF "$(CFG)" == "Install - Win32 Debug" 1640!IF "$(CFG)" == "Install - Win32 Debug"
1685 1641
1686 1642
1687"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)" 1643"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)"
1688 $(CPP) $(CPP_PROJ) $(SOURCE) 1644 $(CPP) $(CPP_PROJ) $(SOURCE)
1689 1645
1690 1646
1691!ELSEIF "$(CFG)" == "Install - Win32 Pure" 1647!ELSEIF "$(CFG)" == "Install - Win32 Pure"
1692 1648
1693 1649
1694BuildCmds= \ 1650BuildCmds= \
1695 $(CPP) $(CPP_PROJ) $(SOURCE) \ 1651 $(CPP) $(CPP_PROJ) $(SOURCE) \
1696 1652
1697 1653
1698"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)" 1654"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)"
1699 $(BuildCmds) 1655 $(BuildCmds)
1700 1656
1701"$(INTDIR)\install.sbr" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)" 1657"$(INTDIR)\install.sbr" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)"
1702 $(BuildCmds) 1658 $(BuildCmds)
1703 1659
1704!ELSEIF "$(CFG)" == "Install - Win32 Static" 1660!ELSEIF "$(CFG)" == "Install - Win32 Static"
1705 1661
1706 1662
1707"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)" 1663"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)"
1708 $(CPP) $(CPP_PROJ) $(SOURCE) 1664 $(CPP) $(CPP_PROJ) $(SOURCE)
1709 1665
1710 1666
1711!ELSEIF "$(CFG)" == "Install - Win32 Canned" 1667!ELSEIF "$(CFG)" == "Install - Win32 Canned"
1712 1668
1713 1669
1714"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)" 1670"$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTAL) "$(INTDIR)"
1715 $(CPP) $(CPP_PROJ) $(SOURCE) 1671 $(CPP) $(CPP_PROJ) $(SOURCE)
1716 1672
1717 1673
1718!ENDIF 1674!ENDIF
1719 1675
1720# End Source File 1676# End Source File
1721# End Target 1677# End Target
1722# End Project 1678# End Project
1723################################################################################ 1679################################################################################
1724################################################################################ 1680################################################################################
1725# Section PumpKIN : {4FD78B34-1FD7-11D0-A9FB-444553540000} 1681# Section PumpKIN : {4FD78B34-1FD7-11D0-A9FB-444553540000}
1726 # 2:11:CPumpKINDlg:1 1682 # 2:11:CPumpKINDlg:1
1727 # 2:11:CRequestDlg:1 1683 # 2:11:CRequestDlg:1
1728# End Section 1684# End Section
1729################################################################################ 1685################################################################################
diff --git a/pumpkin.rc b/pumpkin.rc
index 87745db..9933454 100644
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -1,686 +1,686 @@
1//Microsoft Developer Studio generated resource script. 1//Microsoft Developer Studio generated resource script.
2// 2//
3#include "resource.h" 3#include "resource.h"
4 4
5#define APSTUDIO_READONLY_SYMBOLS 5#define APSTUDIO_READONLY_SYMBOLS
6///////////////////////////////////////////////////////////////////////////// 6/////////////////////////////////////////////////////////////////////////////
7// 7//
8// Generated from the TEXTINCLUDE 2 resource. 8// Generated from the TEXTINCLUDE 2 resource.
9// 9//
10#include "afxres.h" 10#include "afxres.h"
11 11
12///////////////////////////////////////////////////////////////////////////// 12/////////////////////////////////////////////////////////////////////////////
13#undef APSTUDIO_READONLY_SYMBOLS 13#undef APSTUDIO_READONLY_SYMBOLS
14 14
15///////////////////////////////////////////////////////////////////////////// 15/////////////////////////////////////////////////////////////////////////////
16// English (U.S.) resources 16// English (U.S.) resources
17 17
18#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 18#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
19#ifdef _WIN32 19#ifdef _WIN32
20LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 20LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
21#pragma code_page(1252) 21#pragma code_page(1252)
22#endif //_WIN32 22#endif //_WIN32
23 23
24#ifdef APSTUDIO_INVOKED 24#ifdef APSTUDIO_INVOKED
25///////////////////////////////////////////////////////////////////////////// 25/////////////////////////////////////////////////////////////////////////////
26// 26//
27// TEXTINCLUDE 27// TEXTINCLUDE
28// 28//
29 29
301 TEXTINCLUDE DISCARDABLE 301 TEXTINCLUDE DISCARDABLE
31BEGIN 31BEGIN
32 "resource.h\0" 32 "resource.h\0"
33END 33END
34 34
352 TEXTINCLUDE DISCARDABLE 352 TEXTINCLUDE DISCARDABLE
36BEGIN 36BEGIN
37 "#include ""afxres.h""\r\n" 37 "#include ""afxres.h""\r\n"
38 "\0" 38 "\0"
39END 39END
40 40
413 TEXTINCLUDE DISCARDABLE 413 TEXTINCLUDE DISCARDABLE
42BEGIN 42BEGIN
43 "#define _AFX_NO_SPLITTER_RESOURCES\r\n" 43 "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
44 "#define _AFX_NO_OLE_RESOURCES\r\n" 44 "#define _AFX_NO_OLE_RESOURCES\r\n"
45 "#define _AFX_NO_TRACKER_RESOURCES\r\n" 45 "#define _AFX_NO_TRACKER_RESOURCES\r\n"
46 "#define _AFX_NO_PROPERTY_RESOURCES\r\n" 46 "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
47 "\r\n" 47 "\r\n"
48 "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" 48 "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
49 "#ifdef _WIN32\r\n" 49 "#ifdef _WIN32\r\n"
50 "LANGUAGE 9, 1\r\n" 50 "LANGUAGE 9, 1\r\n"
51 "#pragma code_page(1252)\r\n" 51 "#pragma code_page(1252)\r\n"
52 "#endif\r\n" 52 "#endif\r\n"
53 "#include ""res\\PumpKIN.rc2"" // non-Microsoft Visual C++ edited resources\r\n" 53 "#include ""res\\PumpKIN.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
54 "#include ""afxres.rc"" // Standard components\r\n" 54 "#include ""afxres.rc"" // Standard components\r\n"
55 "#endif\0" 55 "#endif\0"
56END 56END
57 57
58#endif // APSTUDIO_INVOKED 58#endif // APSTUDIO_INVOKED
59 59
60 60
61///////////////////////////////////////////////////////////////////////////// 61/////////////////////////////////////////////////////////////////////////////
62// 62//
63// Icon 63// Icon
64// 64//
65 65
66// Icon with lowest ID value placed first to ensure application icon 66// Icon with lowest ID value placed first to ensure application icon
67// remains consistent on all systems. 67// remains consistent on all systems.
68IDI_RRQ ICON DISCARDABLE "res\\wrq.ico" 68IDI_RRQ ICON DISCARDABLE "res\\wrq.ico"
69IDI_WRQ ICON DISCARDABLE "res\\rrq.ico" 69IDI_WRQ ICON DISCARDABLE "res\\rrq.ico"
70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico" 70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico"
71IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico" 71IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico"
72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico" 72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico"
73IDI_UP ICON DISCARDABLE "res\\up.ico" 73IDI_UP ICON DISCARDABLE "res\\up.ico"
74IDI_DOWN ICON DISCARDABLE "res\\down.ico" 74IDI_DOWN ICON DISCARDABLE "res\\down.ico"
75IDI_REMOVE ICON DISCARDABLE "res\\remove.ico" 75IDI_REMOVE ICON DISCARDABLE "res\\remove.ico"
76 76
77///////////////////////////////////////////////////////////////////////////// 77/////////////////////////////////////////////////////////////////////////////
78// 78//
79// Dialog 79// Dialog
80// 80//
81 81
82IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 74 82IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 74
83STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 83STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
84CAPTION "About PumpKIN" 84CAPTION "About PumpKIN"
85FONT 8, "MS Sans Serif" 85FONT 8, "MS Sans Serif"
86BEGIN 86BEGIN
87 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20 87 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20
88 LTEXT "PumpKIN, Version 2.7",IDC_STATIC,40,15,119,8, 88 LTEXT "PumpKIN, Version 2.7",IDC_STATIC,40,15,119,8,
89 SS_NOPREFIX 89 SS_NOPREFIX
90 LTEXT "Copyright © 1997-2006 Klever Group",IDC_STATIC,40,30, 90 LTEXT "Copyright © 1997-2006 Klever Group",IDC_STATIC,40,30,
91 170,8 91 170,8
92 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP 92 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
93 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14 93 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14
94END 94END
95 95
96IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 193 96IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 193
97STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 97STYLE DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
98 WS_SYSMENU
99EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW 98EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW
100CAPTION " PumpKIN" 99CAPTION " PumpKIN"
101FONT 8, "MS Sans Serif" 100FONT 8, "MS Sans Serif"
102BEGIN 101BEGIN
103 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT | 102 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT |
104 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108, 103 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108,
105 WS_EX_DLGMODALFRAME 104 WS_EX_DLGMODALFRAME
106 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY, 105 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY,
107 WS_EX_CLIENTEDGE 106 WS_EX_CLIENTEDGE
108 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY, 107 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY,
109 WS_EX_CLIENTEDGE 108 WS_EX_CLIENTEDGE
110 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY, 109 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY,
111 WS_EX_CLIENTEDGE 110 WS_EX_CLIENTEDGE
112 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY, 111 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY,
113 WS_EX_CLIENTEDGE 112 WS_EX_CLIENTEDGE
114 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 113 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
115 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 114 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
116 LISTBOX IDC_LOG,7,115,348,65,LBS_USETABSTOPS | LBS_NOSEL | 115 LISTBOX IDC_LOG,7,115,348,64,LBS_USETABSTOPS |
117 WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME 116 LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_VSCROLL |
117 WS_HSCROLL,WS_EX_DLGMODALFRAME
118 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP 118 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP
119 CONTROL "&Server is running",IDC_LISTENING,"Button", 119 CONTROL "&Server is running",IDC_LISTENING,"Button",
120 BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT | WS_TABSTOP,286, 120 BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT | WS_TABSTOP,286,
121 180,69,11,WS_EX_TRANSPARENT | WS_EX_STATICEDGE 121 181,69,11,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
122END 122END
123 123
124IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 300, 201 124IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 300, 201
125STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 125STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
126CAPTION "Server" 126CAPTION "Server"
127FONT 8, "MS Sans Serif" 127FONT 8, "MS Sans Serif"
128BEGIN 128BEGIN
129 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7, 129 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7,
130 286,38 130 286,38
131 EDITTEXT IDC_TFTPROOT,13,16,256,13,ES_AUTOHSCROLL 131 EDITTEXT IDC_TFTPROOT,13,16,256,13,ES_AUTOHSCROLL
132 PUSHBUTTON "&B",IDC_BROWSE,274,16,13,13,BS_ICON 132 PUSHBUTTON "&B",IDC_BROWSE,274,16,13,13,BS_ICON
133 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS, 133 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS,
134 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10 134 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10
135 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,243,56 135 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,243,56
136 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button", 136 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button",
137 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,63,53,10 137 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,63,53,10
138 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM, 138 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM,
139 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,43,75,91,10 139 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,43,75,91,10
140 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button", 140 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button",
141 BS_AUTORADIOBUTTON | BS_NOTIFY,73,87,70,10 141 BS_AUTORADIOBUTTON | BS_NOTIFY,73,87,70,10
142 GROUPBOX "Write Request Behavior",IDC_STATIC,7,106,243,56, 142 GROUPBOX "Write Request Behavior",IDC_STATIC,7,106,243,56,
143 WS_GROUP 143 WS_GROUP
144 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button", 144 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button",
145 BS_AUTORADIOBUTTON | WS_GROUP,13,116,55,10 145 BS_AUTORADIOBUTTON | WS_GROUP,13,116,55,10
146 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button", 146 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button",
147 BS_AUTORADIOBUTTON,43,126,73,10 147 BS_AUTORADIOBUTTON,43,126,73,10
148 CONTROL "Always pro&mpt before accepting file", 148 CONTROL "Always pro&mpt before accepting file",
149 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,73,136, 149 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,73,136,
150 139,10 150 139,10
151 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button", 151 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button",
152 BS_AUTORADIOBUTTON,103,146,70,10 152 BS_AUTORADIOBUTTON,103,146,70,10
153 CTEXT "Confirmation &timeout",IDC_STATIC,253,52,40,19, 153 CTEXT "Confirmation &timeout",IDC_STATIC,253,52,40,19,
154 SS_NOTIFY 154 SS_NOTIFY
155 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32", 155 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32",
156 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,272,72, 156 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,272,72,
157 21,90 157 21,90
158 GROUPBOX "Log file (leave empty to disable logging to file)", 158 GROUPBOX "Log file (leave empty to disable logging to file)",
159 IDC_STATIC,7,165,286,29 159 IDC_STATIC,7,165,286,29
160 EDITTEXT IDC_LOGFILE,13,175,256,13,ES_AUTOHSCROLL 160 EDITTEXT IDC_LOGFILE,13,175,256,13,ES_AUTOHSCROLL
161 PUSHBUTTON "",IDC_LOGFILE_BROWSE,274,175,13,13,BS_ICON 161 PUSHBUTTON "",IDC_LOGFILE_BROWSE,274,175,13,13,BS_ICON
162END 162END
163 163
164IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 300, 201 164IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 300, 201
165STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 165STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
166CAPTION "Network" 166CAPTION "Network"
167FONT 8, "MS Sans Serif" 167FONT 8, "MS Sans Serif"
168BEGIN 168BEGIN
169 GROUPBOX "UDP Ports",IDC_STATIC,7,7,286,40 169 GROUPBOX "UDP Ports",IDC_STATIC,7,7,286,40
170 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13, 170 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13,
171 18,135,8 171 18,135,8
172 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL 172 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL
173 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP | 173 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP |
174 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 174 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
175 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13 175 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13
176 RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8 176 RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8
177 EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL 177 EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL
178 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP | 178 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP |
179 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 179 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
180 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13 180 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13
181 LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8 181 LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8
182 EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER 182 EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER
183 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP | 183 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP |
184 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 184 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
185 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13 185 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13
186 LTEXT "Default block size:",IDC_STATIC,7,66,59,8 186 LTEXT "Default block size:",IDC_STATIC,7,66,59,8
187 LTEXT "seconds",IDC_STATIC,154,52,28,8 187 LTEXT "seconds",IDC_STATIC,154,52,28,8
188 LTEXT "bytes",IDC_STATIC,154,66,18,8 188 LTEXT "bytes",IDC_STATIC,154,66,18,8
189 EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER 189 EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER
190 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP | 190 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP |
191 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 191 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
192 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13 192 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13
193END 193END
194 194
195IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79 195IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79
196STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | 196STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP |
197 WS_CAPTION 197 WS_CAPTION
198EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 198EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
199CAPTION " PumpKIN - Confirm Read Request" 199CAPTION " PumpKIN - Confirm Read Request"
200FONT 8, "MS Sans Serif", 0, 0, 0x1 200FONT 8, "MS Sans Serif", 0, 0, 0x1
201BEGIN 201BEGIN
202 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14 202 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14
203 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14 203 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14
204 LTEXT "The host",IDC_STATIC,77,7,29,8 204 LTEXT "The host",IDC_STATIC,77,7,29,8
205 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY | 205 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY |
206 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 206 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
207 WS_EX_CLIENTEDGE 207 WS_EX_CLIENTEDGE
208 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8 208 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8
209 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN | 209 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN |
210 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 210 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
211 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1 211 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1
212 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20 212 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20
213 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20 213 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20
214END 214END
215 215
216IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95 216IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95
217STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION 217STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION
218EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 218EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
219CAPTION " PumpKIN - Confirm Write Request" 219CAPTION " PumpKIN - Confirm Write Request"
220FONT 8, "MS Sans Serif", 0, 0, 0x1 220FONT 8, "MS Sans Serif", 0, 0, 0x1
221BEGIN 221BEGIN
222 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14 222 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14
223 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14 223 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14
224 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14 224 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14
225 LTEXT "The host",IDC_STATIC,87,7,29,8 225 LTEXT "The host",IDC_STATIC,87,7,29,8
226 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY | 226 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY |
227 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 227 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
228 WS_EX_CLIENTEDGE 228 WS_EX_CLIENTEDGE
229 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135, 229 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135,
230 8 230 8
231 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN | 231 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN |
232 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 232 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
233 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1 233 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1
234 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20 234 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20
235 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20 235 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20
236 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14 236 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14
237END 237END
238 238
239IDD_REQUEST DIALOGEX 0, 0, 191, 161 239IDD_REQUEST DIALOGEX 0, 0, 191, 161
240STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION | 240STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION |
241 WS_SYSMENU 241 WS_SYSMENU
242EXSTYLE WS_EX_CLIENTEDGE 242EXSTYLE WS_EX_CLIENTEDGE
243CAPTION "Request" 243CAPTION "Request"
244FONT 8, "MS Sans Serif", 0, 0, 0x1 244FONT 8, "MS Sans Serif", 0, 0, 0x1
245BEGIN 245BEGIN
246 LTEXT "&Local file:",IDC_STATIC,7,7,31,8,SS_NOTIFY 246 LTEXT "&Local file:",IDC_STATIC,7,7,31,8,SS_NOTIFY
247 EDITTEXT IDC_LOCALFILE,7,16,157,14,ES_AUTOHSCROLL, 247 EDITTEXT IDC_LOCALFILE,7,16,157,14,ES_AUTOHSCROLL,
248 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 248 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
249 PUSHBUTTON "...",IDC_BROWSE,165,16,19,14,BS_ICON,WS_EX_STATICEDGE 249 PUSHBUTTON "...",IDC_BROWSE,165,16,19,14,BS_ICON,WS_EX_STATICEDGE
250 LTEXT "&Remote file:",IDC_STATIC,7,34,38,8,SS_NOTIFY 250 LTEXT "&Remote file:",IDC_STATIC,7,34,38,8,SS_NOTIFY
251 EDITTEXT IDC_REMOTEFILE,7,44,177,14,ES_AUTOHSCROLL, 251 EDITTEXT IDC_REMOTEFILE,7,44,177,14,ES_AUTOHSCROLL,
252 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 252 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
253 LTEXT "Remote &host:",IDC_STATIC,7,61,43,8,SS_NOTIFY 253 LTEXT "Remote &host:",IDC_STATIC,7,61,43,8,SS_NOTIFY
254 COMBOBOX IDC_TALKS,7,72,157,66,CBS_SIMPLE | CBS_AUTOHSCROLL | 254 COMBOBOX IDC_TALKS,7,72,157,66,CBS_SIMPLE | CBS_AUTOHSCROLL |
255 CBS_SORT | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | 255 CBS_SORT | CBS_NOINTEGRALHEIGHT | WS_VSCROLL |
256 WS_TABSTOP,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 256 WS_TABSTOP,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
257 PUSHBUTTON "R\nE\n&F\nR\nE\nS\nH",IDC_REFRESH,165,72,19,66, 257 PUSHBUTTON "R\nE\n&F\nR\nE\nS\nH",IDC_REFRESH,165,72,19,66,
258 BS_CENTER | BS_VCENTER | BS_MULTILINE | BS_NOTIFY, 258 BS_CENTER | BS_VCENTER | BS_MULTILINE | BS_NOTIFY,
259 WS_EX_CLIENTEDGE 259 WS_EX_CLIENTEDGE
260 LTEXT "&Type:",IDC_STATIC,58,34,19,8 260 LTEXT "&Type:",IDC_STATIC,58,34,19,8
261 COMBOBOX IDC_TYPE,80,31,43,41,CBS_DROPDOWN | CBS_AUTOHSCROLL | 261 COMBOBOX IDC_TYPE,80,31,43,41,CBS_DROPDOWN | CBS_AUTOHSCROLL |
262 CBS_LOWERCASE | WS_VSCROLL | WS_TABSTOP 262 CBS_LOWERCASE | WS_VSCROLL | WS_TABSTOP
263 LTEXT "&Block:",IDC_STATIC,127,34,21,8 263 LTEXT "&Block:",IDC_STATIC,127,34,21,8
264 COMBOBOX IDC_BSIZE,149,31,35,53,CBS_DROPDOWN | WS_VSCROLL | 264 COMBOBOX IDC_BSIZE,149,31,35,53,CBS_DROPDOWN | WS_VSCROLL |
265 WS_TABSTOP 265 WS_TABSTOP
266 DEFPUSHBUTTON "OK",IDOK,35,140,50,14 266 DEFPUSHBUTTON "OK",IDOK,35,140,50,14
267 PUSHBUTTON "Cancel",IDCANCEL,101,140,50,14 267 PUSHBUTTON "Cancel",IDCANCEL,101,140,50,14
268 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11 268 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11
269END 269END
270 270
271IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 300, 201 271IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 300, 201
272STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 272STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
273CAPTION "Sounds" 273CAPTION "Sounds"
274FONT 8, "MS Sans Serif" 274FONT 8, "MS Sans Serif"
275BEGIN 275BEGIN
276 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8 276 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8
277 COMBOBOX IDC_RING,70,7,188,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 277 COMBOBOX IDC_RING,70,7,188,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
278 CBS_SORT | WS_VSCROLL | WS_TABSTOP 278 CBS_SORT | WS_VSCROLL | WS_TABSTOP
279 PUSHBUTTON "browse",IDC_RING_BROWSE,263,7,13,13,BS_ICON 279 PUSHBUTTON "browse",IDC_RING_BROWSE,263,7,13,13,BS_ICON
280 PUSHBUTTON "play",IDC_RING_PLAY,280,7,13,13,BS_ICON 280 PUSHBUTTON "play",IDC_RING_PLAY,280,7,13,13,BS_ICON
281 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8 281 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8
282 COMBOBOX IDC_FINISHED,70,22,188,100,CBS_DROPDOWN | 282 COMBOBOX IDC_FINISHED,70,22,188,100,CBS_DROPDOWN |
283 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP 283 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
284 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,263,22,13,13,BS_ICON 284 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,263,22,13,13,BS_ICON
285 PUSHBUTTON "play",IDC_FINISHED_PLAY,280,22,13,13,BS_ICON 285 PUSHBUTTON "play",IDC_FINISHED_PLAY,280,22,13,13,BS_ICON
286 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8 286 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8
287 COMBOBOX IDC_ABORTED,70,37,188,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 287 COMBOBOX IDC_ABORTED,70,37,188,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
288 CBS_SORT | WS_VSCROLL | WS_TABSTOP 288 CBS_SORT | WS_VSCROLL | WS_TABSTOP
289 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,263,37,13,13,BS_ICON 289 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,263,37,13,13,BS_ICON
290 PUSHBUTTON "play",IDC_ABORTED_PLAY,280,37,13,13,BS_ICON 290 PUSHBUTTON "play",IDC_ABORTED_PLAY,280,37,13,13,BS_ICON
291END 291END
292 292
293IDD_PROPS_ACL DIALOG DISCARDABLE 0, 0, 300, 201 293IDD_PROPS_ACL DIALOG DISCARDABLE 0, 0, 300, 201
294STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 294STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
295CAPTION "Access Lists" 295CAPTION "Access Lists"
296FONT 8, "MS Sans Serif" 296FONT 8, "MS Sans Serif"
297BEGIN 297BEGIN
298 CONTROL "List1",IDC_ACL_LIST,"SysListView32",LVS_REPORT | 298 CONTROL "List1",IDC_ACL_LIST,"SysListView32",LVS_REPORT |
299 WS_BORDER | WS_TABSTOP,7,7,258,110 299 WS_BORDER | WS_TABSTOP,7,7,258,110
300 PUSHBUTTON "&Up",IDC_ACL_UP,273,7,20,30,BS_ICON | BS_CENTER | 300 PUSHBUTTON "&Up",IDC_ACL_UP,273,7,20,30,BS_ICON | BS_CENTER |
301 BS_VCENTER 301 BS_VCENTER
302 PUSHBUTTON "&Down",IDC_ACL_DOWN,273,87,20,30,BS_ICON | BS_CENTER | 302 PUSHBUTTON "&Down",IDC_ACL_DOWN,273,87,20,30,BS_ICON | BS_CENTER |
303 BS_VCENTER 303 BS_VCENTER
304 PUSHBUTTON "&Remove",IDC_ACL_REMOVE,273,47,20,30,BS_ICON | 304 PUSHBUTTON "&Remove",IDC_ACL_REMOVE,273,47,20,30,BS_ICON |
305 BS_CENTER | BS_VCENTER 305 BS_CENTER | BS_VCENTER
306 LTEXT "If",IDC_STATIC,13,128,8,8 306 LTEXT "If",IDC_STATIC,13,128,8,8
307 COMBOBOX IDC_ACL_XFER,21,125,48,67,CBS_DROPDOWNLIST | WS_VSCROLL | 307 COMBOBOX IDC_ACL_XFER,21,125,48,67,CBS_DROPDOWNLIST | WS_VSCROLL |
308 WS_TABSTOP 308 WS_TABSTOP
309 LTEXT "request comes from the address in the network", 309 LTEXT "request comes from the address in the network",
310 IDC_STATIC,71,128,122,8 310 IDC_STATIC,71,128,122,8
311 EDITTEXT IDC_ACL_ADDR,47,143,80,12,ES_AUTOHSCROLL 311 EDITTEXT IDC_ACL_ADDR,47,143,80,12,ES_AUTOHSCROLL
312 LTEXT "with netmask",IDC_STATIC,129,145,41,8 312 LTEXT "with netmask",IDC_STATIC,129,145,41,8
313 EDITTEXT IDC_ACL_NETMASK,173,143,80,12,ES_AUTOHSCROLL 313 EDITTEXT IDC_ACL_NETMASK,173,143,80,12,ES_AUTOHSCROLL
314 LTEXT "then",IDC_STATIC,124,160,15,8 314 LTEXT "then",IDC_STATIC,124,160,15,8
315 COMBOBOX IDC_ACL_RULE,143,158,123,117,CBS_DROPDOWNLIST | 315 COMBOBOX IDC_ACL_RULE,143,158,123,117,CBS_DROPDOWNLIST |
316 WS_VSCROLL | WS_TABSTOP 316 WS_VSCROLL | WS_TABSTOP
317 PUSHBUTTON "&Add new rule",IDC_ACL_ADD,7,178,130,16 317 PUSHBUTTON "&Add new rule",IDC_ACL_ADD,7,178,130,16
318 PUSHBUTTON "&Replace rule",IDC_ACL_REPLACE,152,178,130,16 318 PUSHBUTTON "&Replace rule",IDC_ACL_REPLACE,152,178,130,16
319END 319END
320 320
321 321
322#ifndef _MAC 322#ifndef _MAC
323///////////////////////////////////////////////////////////////////////////// 323/////////////////////////////////////////////////////////////////////////////
324// 324//
325// Version 325// Version
326// 326//
327 327
328VS_VERSION_INFO VERSIONINFO 328VS_VERSION_INFO VERSIONINFO
329 FILEVERSION 2,7,0,0 329 FILEVERSION 2,7,0,0
330 PRODUCTVERSION 2,7,0,0 330 PRODUCTVERSION 2,7,0,0
331 FILEFLAGSMASK 0x3fL 331 FILEFLAGSMASK 0x3fL
332#ifdef _DEBUG 332#ifdef _DEBUG
333 FILEFLAGS 0x1L 333 FILEFLAGS 0x1L
334#else 334#else
335 FILEFLAGS 0x0L 335 FILEFLAGS 0x0L
336#endif 336#endif
337 FILEOS 0x4L 337 FILEOS 0x4L
338 FILETYPE 0x1L 338 FILETYPE 0x1L
339 FILESUBTYPE 0x0L 339 FILESUBTYPE 0x0L
340BEGIN 340BEGIN
341 BLOCK "StringFileInfo" 341 BLOCK "StringFileInfo"
342 BEGIN 342 BEGIN
343 BLOCK "040904b0" 343 BLOCK "040904b0"
344 BEGIN 344 BEGIN
345 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0" 345 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
346 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0" 346 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0"
347 VALUE "FileVersion", "2, 7, 0, 0\0" 347 VALUE "FileVersion", "2, 7, 0, 0\0"
348 VALUE "InternalName", "PUMPKIN\0" 348 VALUE "InternalName", "PUMPKIN\0"
349 VALUE "LegalCopyright", "Copyright © 1997-2006 Klever Group (http://www.klever.net)\0" 349 VALUE "LegalCopyright", "Copyright © 1997-2006 Klever Group (http://www.klever.net)\0"
350 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0" 350 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
351 VALUE "OriginalFilename", "PUMPKIN.EXE\0" 351 VALUE "OriginalFilename", "PUMPKIN.EXE\0"
352 VALUE "ProductName", "PumpKIN\0" 352 VALUE "ProductName", "PumpKIN\0"
353 VALUE "ProductVersion", "2, 7, 0, 0\0" 353 VALUE "ProductVersion", "2, 7, 0, 0\0"
354 END 354 END
355 END 355 END
356 BLOCK "VarFileInfo" 356 BLOCK "VarFileInfo"
357 BEGIN 357 BEGIN
358 VALUE "Translation", 0x409, 1200 358 VALUE "Translation", 0x409, 1200
359 END 359 END
360END 360END
361 361
362#endif // !_MAC 362#endif // !_MAC
363 363
364 364
365///////////////////////////////////////////////////////////////////////////// 365/////////////////////////////////////////////////////////////////////////////
366// 366//
367// DESIGNINFO 367// DESIGNINFO
368// 368//
369 369
370#ifdef APSTUDIO_INVOKED 370#ifdef APSTUDIO_INVOKED
371GUIDELINES DESIGNINFO DISCARDABLE 371GUIDELINES DESIGNINFO DISCARDABLE
372BEGIN 372BEGIN
373 IDD_ABOUTBOX, DIALOG 373 IDD_ABOUTBOX, DIALOG
374 BEGIN 374 BEGIN
375 LEFTMARGIN, 7 375 LEFTMARGIN, 7
376 RIGHTMARGIN, 210 376 RIGHTMARGIN, 210
377 TOPMARGIN, 7 377 TOPMARGIN, 7
378 BOTTOMMARGIN, 67 378 BOTTOMMARGIN, 67
379 END 379 END
380 380
381 IDD_PUMPKIN_DIALOG, DIALOG 381 IDD_PUMPKIN_DIALOG, DIALOG
382 BEGIN 382 BEGIN
383 LEFTMARGIN, 7 383 LEFTMARGIN, 7
384 RIGHTMARGIN, 355 384 RIGHTMARGIN, 355
385 TOPMARGIN, 7 385 TOPMARGIN, 7
386 BOTTOMMARGIN, 186 386 BOTTOMMARGIN, 186
387 HORZGUIDE, 115 387 HORZGUIDE, 115
388 END 388 END
389 389
390 IDD_PROPS_SERVER, DIALOG 390 IDD_PROPS_SERVER, DIALOG
391 BEGIN 391 BEGIN
392 LEFTMARGIN, 7 392 LEFTMARGIN, 7
393 RIGHTMARGIN, 293 393 RIGHTMARGIN, 293
394 TOPMARGIN, 7 394 TOPMARGIN, 7
395 BOTTOMMARGIN, 194 395 BOTTOMMARGIN, 194
396 END 396 END
397 397
398 IDD_PROPS_NETWORK, DIALOG 398 IDD_PROPS_NETWORK, DIALOG
399 BEGIN 399 BEGIN
400 LEFTMARGIN, 7 400 LEFTMARGIN, 7
401 RIGHTMARGIN, 293 401 RIGHTMARGIN, 293
402 TOPMARGIN, 7 402 TOPMARGIN, 7
403 BOTTOMMARGIN, 194 403 BOTTOMMARGIN, 194
404 END 404 END
405 405
406 IDD_CONFIRM_RRQ, DIALOG 406 IDD_CONFIRM_RRQ, DIALOG
407 BEGIN 407 BEGIN
408 LEFTMARGIN, 7 408 LEFTMARGIN, 7
409 RIGHTMARGIN, 174 409 RIGHTMARGIN, 174
410 TOPMARGIN, 7 410 TOPMARGIN, 7
411 BOTTOMMARGIN, 72 411 BOTTOMMARGIN, 72
412 END 412 END
413 413
414 IDD_CONFIRM_WRQ, DIALOG 414 IDD_CONFIRM_WRQ, DIALOG
415 BEGIN 415 BEGIN
416 LEFTMARGIN, 7 416 LEFTMARGIN, 7
417 RIGHTMARGIN, 194 417 RIGHTMARGIN, 194
418 TOPMARGIN, 7 418 TOPMARGIN, 7
419 BOTTOMMARGIN, 88 419 BOTTOMMARGIN, 88
420 END 420 END
421 421
422 IDD_REQUEST, DIALOG 422 IDD_REQUEST, DIALOG
423 BEGIN 423 BEGIN
424 LEFTMARGIN, 7 424 LEFTMARGIN, 7
425 RIGHTMARGIN, 184 425 RIGHTMARGIN, 184
426 TOPMARGIN, 7 426 TOPMARGIN, 7
427 BOTTOMMARGIN, 154 427 BOTTOMMARGIN, 154
428 END 428 END
429 429
430 IDD_PROPS_SOUNDS, DIALOG 430 IDD_PROPS_SOUNDS, DIALOG
431 BEGIN 431 BEGIN
432 LEFTMARGIN, 7 432 LEFTMARGIN, 7
433 RIGHTMARGIN, 293 433 RIGHTMARGIN, 293
434 TOPMARGIN, 7 434 TOPMARGIN, 7
435 BOTTOMMARGIN, 194 435 BOTTOMMARGIN, 194
436 END 436 END
437 437
438 IDD_PROPS_ACL, DIALOG 438 IDD_PROPS_ACL, DIALOG
439 BEGIN 439 BEGIN
440 LEFTMARGIN, 7 440 LEFTMARGIN, 7
441 RIGHTMARGIN, 293 441 RIGHTMARGIN, 293
442 TOPMARGIN, 7 442 TOPMARGIN, 7
443 BOTTOMMARGIN, 194 443 BOTTOMMARGIN, 194
444 HORZGUIDE, 117 444 HORZGUIDE, 117
445 HORZGUIDE, 125 445 HORZGUIDE, 125
446 END 446 END
447END 447END
448#endif // APSTUDIO_INVOKED 448#endif // APSTUDIO_INVOKED
449 449
450 450
451///////////////////////////////////////////////////////////////////////////// 451/////////////////////////////////////////////////////////////////////////////
452// 452//
453// Bitmap 453// Bitmap
454// 454//
455 455
456IDB_BACKGROUND BITMAP DISCARDABLE "shared-data/klever-background.bmp" 456IDB_BACKGROUND BITMAP DISCARDABLE "shared-data/klever-background.bmp"
457 457
458///////////////////////////////////////////////////////////////////////////// 458/////////////////////////////////////////////////////////////////////////////
459// 459//
460// WAVE 460// WAVE
461// 461//
462 462
463IDR_WAVE_RING WAVE DISCARDABLE "res\\ring.wav" 463IDR_WAVE_RING WAVE DISCARDABLE "res\\ring.wav"
464IDR_WAVE_FINISHED WAVE DISCARDABLE "res\\finished.wav" 464IDR_WAVE_FINISHED WAVE DISCARDABLE "res\\finished.wav"
465IDR_WAVE_ABORTED WAVE DISCARDABLE "res\\failed.wav" 465IDR_WAVE_ABORTED WAVE DISCARDABLE "res\\failed.wav"
466 466
467///////////////////////////////////////////////////////////////////////////// 467/////////////////////////////////////////////////////////////////////////////
468// 468//
469// Dialog Info 469// Dialog Info
470// 470//
471 471
472IDD_REQUEST DLGINIT 472IDD_REQUEST DLGINIT
473BEGIN 473BEGIN
474 IDC_TYPE, 0x403, 6, 0 474 IDC_TYPE, 0x403, 6, 0
4750x636f, 0x6574, 0x0074, 4750x636f, 0x6574, 0x0074,
476 IDC_TYPE, 0x403, 9, 0 476 IDC_TYPE, 0x403, 9, 0
4770x656e, 0x6174, 0x6373, 0x6969, "\000" 4770x656e, 0x6174, 0x6373, 0x6969, "\000"
478 IDC_BSIZE, 0x403, 4, 0 478 IDC_BSIZE, 0x403, 4, 0
4790x3135, 0x0032, 4790x3135, 0x0032,
480 IDC_BSIZE, 0x403, 5, 0 480 IDC_BSIZE, 0x403, 5, 0
4810x3031, 0x3432, "\000" 4810x3031, 0x3432, "\000"
482 IDC_BSIZE, 0x403, 5, 0 482 IDC_BSIZE, 0x403, 5, 0
4830x3032, 0x3834, "\000" 4830x3032, 0x3834, "\000"
484 IDC_BSIZE, 0x403, 5, 0 484 IDC_BSIZE, 0x403, 5, 0
4850x3034, 0x3639, "\000" 4850x3034, 0x3639, "\000"
486 IDC_BSIZE, 0x403, 5, 0 486 IDC_BSIZE, 0x403, 5, 0
4870x3138, 0x3239, "\000" 4870x3138, 0x3239, "\000"
488 0 488 0
489END 489END
490 490
491IDD_PROPS_ACL DLGINIT 491IDD_PROPS_ACL DLGINIT
492BEGIN 492BEGIN
493 IDC_ACL_XFER, 0x403, 5, 0 493 IDC_ACL_XFER, 0x403, 5, 0
4940x6572, 0x6461, "\000" 4940x6572, 0x6461, "\000"
495 IDC_ACL_XFER, 0x403, 6, 0 495 IDC_ACL_XFER, 0x403, 6, 0
4960x7277, 0x7469, 0x0065, 4960x7277, 0x7469, 0x0065,
497 IDC_ACL_RULE, 0x403, 12, 0 497 IDC_ACL_RULE, 0x403, 12, 0
4980x6361, 0x6563, 0x7470, 0x6620, 0x6c69, 0x0065, 4980x6361, 0x6563, 0x7470, 0x6620, 0x6c69, 0x0065,
499 IDC_ACL_RULE, 0x403, 33, 0 499 IDC_ACL_RULE, 0x403, 33, 0
5000x6361, 0x6563, 0x7470, 0x6120, 0x646e, 0x7220, 0x6e65, 0x6d61, 0x2065, 5000x6361, 0x6563, 0x7470, 0x6120, 0x646e, 0x7220, 0x6e65, 0x6d61, 0x2065,
5010x6669, 0x6620, 0x6c69, 0x2065, 0x7865, 0x7369, 0x7374, "\000" 5010x6669, 0x6620, 0x6c69, 0x2065, 0x7865, 0x7369, 0x7374, "\000"
502 IDC_ACL_RULE, 0x403, 12, 0 502 IDC_ACL_RULE, 0x403, 12, 0
5030x6572, 0x656a, 0x7463, 0x6620, 0x6c69, 0x0065, 5030x6572, 0x656a, 0x7463, 0x6620, 0x6c69, 0x0065,
504 IDC_ACL_RULE, 0x403, 31, 0 504 IDC_ACL_RULE, 0x403, 31, 0
5050x6166, 0x6c6c, 0x6162, 0x6b63, 0x7420, 0x206f, 0x6874, 0x2065, 0x6c67, 5050x6166, 0x6c6c, 0x6162, 0x6b63, 0x7420, 0x206f, 0x6874, 0x2065, 0x6c67,
5060x626f, 0x6c61, 0x7320, 0x7465, 0x6974, 0x676e, "\000" 5060x626f, 0x6c61, 0x7320, 0x7465, 0x6974, 0x676e, "\000"
507 0 507 0
508END 508END
509 509
510 510
511///////////////////////////////////////////////////////////////////////////// 511/////////////////////////////////////////////////////////////////////////////
512// 512//
513// Menu 513// Menu
514// 514//
515 515
516IDM_POPUPS MENU DISCARDABLE 516IDM_POPUPS MENU DISCARDABLE
517BEGIN 517BEGIN
518 POPUP "&Tray" 518 POPUP "&Tray"
519 BEGIN 519 BEGIN
520 MENUITEM "&Send File", ID_TRAY_SENDFILE 520 MENUITEM "&Send File", ID_TRAY_SENDFILE
521 MENUITEM "F&etch file", ID_TRAY_FETCHFILE 521 MENUITEM "F&etch file", ID_TRAY_FETCHFILE
522 MENUITEM "&Options", ID_TRAY_OPTIONS 522 MENUITEM "&Options", ID_TRAY_OPTIONS
523 MENUITEM "&Listen to requests", ID_TRAY_LISTEN 523 MENUITEM "&Listen to requests", ID_TRAY_LISTEN
524 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW 524 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW
525 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER 525 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER
526 MENUITEM SEPARATOR 526 MENUITEM SEPARATOR
527 MENUITEM "&Help Topics", ID_TRAY_HELP 527 MENUITEM "&Help Topics", ID_TRAY_HELP
528 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN 528 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN
529 MENUITEM SEPARATOR 529 MENUITEM SEPARATOR
530 MENUITEM "E&xit", ID_TRAY_EXIT 530 MENUITEM "E&xit", ID_TRAY_EXIT
531 END 531 END
532END 532END
533 533
534 534
535///////////////////////////////////////////////////////////////////////////// 535/////////////////////////////////////////////////////////////////////////////
536// 536//
537// String Table 537// String Table
538// 538//
539 539
540STRINGTABLE DISCARDABLE 540STRINGTABLE DISCARDABLE
541BEGIN 541BEGIN
542 IDS_ABOUTBOX "&About PumpKIN..." 542 IDS_ABOUTBOX "&About PumpKIN..."
543 IDS_FMT_BYTES "%lu" 543 IDS_FMT_BYTES "%lu"
544 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed." 544 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed."
545 IDS_TFTP_ERROR_ACCESS "Access violation" 545 IDS_TFTP_ERROR_ACCESS "Access violation"
546 IDS_TFTP_ERROR_NOTFOUND "File not found" 546 IDS_TFTP_ERROR_NOTFOUND "File not found"
547 IDS_TFTP_ERROR_DIRFULL "Directory is full" 547 IDS_TFTP_ERROR_DIRFULL "Directory is full"
548 IDS_TFTP_ERROR_SHARING "Sharing violation" 548 IDS_TFTP_ERROR_SHARING "Sharing violation"
549 IDS_TFTP_ERROR_DISKFULL "Disk full" 549 IDS_TFTP_ERROR_DISKFULL "Disk full"
550 IDS_TFTP_ERROR_UNDEFINED "Undefined error" 550 IDS_TFTP_ERROR_UNDEFINED "Undefined error"
551 IDS_LOG_START "PumpKIN started" 551 IDS_LOG_START "PumpKIN started"
552 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections" 552 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections"
553END 553END
554 554
555STRINGTABLE DISCARDABLE 555STRINGTABLE DISCARDABLE
556BEGIN 556BEGIN
557 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection" 557 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection"
558 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s" 558 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s"
559 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request" 559 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request"
560 IDS_LOG_XFERUDPSEND "UDP packet send failed" 560 IDS_LOG_XFERUDPSEND "UDP packet send failed"
561 IDS_LOG_XFERRECEIVE "Error on xfer socket" 561 IDS_LOG_XFERRECEIVE "Error on xfer socket"
562 IDS_LOG_XFERSEND "Error on xfer socket" 562 IDS_LOG_XFERSEND "Error on xfer socket"
563 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed" 563 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed"
564 IDS_LOG_XFERSOURCETID "Packet from unexpected source" 564 IDS_LOG_XFERSOURCETID "Packet from unexpected source"
565 IDS_LOG_SENTTFTPERROR ":%u: %s" 565 IDS_LOG_SENTTFTPERROR ":%u: %s"
566 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s" 566 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s"
567 IDS_LOG_XFEROPCODE "Invalid opcode (%u) during transfer received" 567 IDS_LOG_XFEROPCODE "Invalid opcode (%u) during transfer received"
568 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed" 568 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed"
569 IDS_TITLE_OPTIONS "Options" 569 IDS_TITLE_OPTIONS "Options"
570 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s" 570 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s"
571 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file" 571 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file"
572 IDS_RENAME_TITLE "Save As" 572 IDS_RENAME_TITLE "Save As"
573END 573END
574 574
575STRINGTABLE DISCARDABLE 575STRINGTABLE DISCARDABLE
576BEGIN 576BEGIN
577 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out" 577 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out"
578 IDS_CONFIRMEXIT_TITLE "Exit" 578 IDS_CONFIRMEXIT_TITLE "Exit"
579 IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?" 579 IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?"
580 IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed" 580 IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed"
581 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted" 581 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted"
582 IDS_TITLE_PUTREQUEST "Send file" 582 IDS_TITLE_PUTREQUEST "Send file"
583 IDS_TITLE_GETREQUEST "Fetch file" 583 IDS_TITLE_GETREQUEST "Fetch file"
584 IDS_WTALKHEADING "Talk with " 584 IDS_WTALKHEADING "Talk with "
585 IDS_TITLE_BROWSEFILE "Browse" 585 IDS_TITLE_BROWSEFILE "Browse"
586 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'" 586 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'"
587 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'" 587 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'"
588 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'" 588 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'"
589 IDS_OTALXHEADING "Open Talks: talking to " 589 IDS_OTALXHEADING "Open Talks: talking to "
590 IDS_REGISTRYKEY "Klever Group" 590 IDS_REGISTRYKEY "Klever Group"
591 IDS_KLEVERNET_URL "http://www.klever.net/" 591 IDS_KLEVERNET_URL "http://www.klever.net/"
592 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d" 592 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d"
593END 593END
594 594
595STRINGTABLE DISCARDABLE 595STRINGTABLE DISCARDABLE
596BEGIN 596BEGIN
597 ID_TRAY_HELP "Read the help on PumpKIN" 597 ID_TRAY_HELP "Read the help on PumpKIN"
598 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator" 598 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator"
599 ID_TRAY_EXIT "Close PumpKIN" 599 ID_TRAY_EXIT "Close PumpKIN"
600 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete" 600 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete"
601 ID_TRAY_FETCHFILE "Fetch file from remote computer" 601 ID_TRAY_FETCHFILE "Fetch file from remote computer"
602 ID_TRAY_OPTIONS "Set PumpKIN options" 602 ID_TRAY_OPTIONS "Set PumpKIN options"
603 ID_TRAY_SHOWPUMPKINWINDOW "Show main window" 603 ID_TRAY_SHOWPUMPKINWINDOW "Show main window"
604 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder" 604 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder"
605 ID_TRAY_LISTEN "Listen for incoming requests" 605 ID_TRAY_LISTEN "Listen for incoming requests"
606END 606END
607 607
608STRINGTABLE DISCARDABLE 608STRINGTABLE DISCARDABLE
609BEGIN 609BEGIN
610 IDC_CONNECTIONS "Active transfers" 610 IDC_CONNECTIONS "Active transfers"
611 IDC_LOG "PumpKIN Activity Log" 611 IDC_LOG "PumpKIN Activity Log"
612 IDC_GET "Fetch file from remote server" 612 IDC_GET "Fetch file from remote server"
613 IDC_PUT "Send file over the net" 613 IDC_PUT "Send file over the net"
614 IDC_ABORT "Abort transfer currently in progress" 614 IDC_ABORT "Abort transfer currently in progress"
615 IDC_EXIT "Close PumpKIN" 615 IDC_EXIT "Close PumpKIN"
616END 616END
617 617
618STRINGTABLE DISCARDABLE 618STRINGTABLE DISCARDABLE
619BEGIN 619BEGIN
620 IDC_OPTIONS "Set PumpKIN options" 620 IDC_OPTIONS "Set PumpKIN options"
621 IDC_REFRESH "Refresh talks list" 621 IDC_REFRESH "Refresh talks list"
622 IDC_BROWSE "Browse" 622 IDC_BROWSE "Browse"
623END 623END
624 624
625STRINGTABLE DISCARDABLE 625STRINGTABLE DISCARDABLE
626BEGIN 626BEGIN
627 ID_HELP "Read help on PumpKIN" 627 ID_HELP "Read help on PumpKIN"
628END 628END
629 629
630STRINGTABLE DISCARDABLE 630STRINGTABLE DISCARDABLE
631BEGIN 631BEGIN
632 IDS_DROPFILES_TITLE "Drop Files" 632 IDS_DROPFILES_TITLE "Drop Files"
633 IDS_NOMULTIPLEDROP_TEXT "You can't drop more than one file here. Only the first one will be accepted" 633 IDS_NOMULTIPLEDROP_TEXT "You can't drop more than one file here. Only the first one will be accepted"
634 IDS_LOG_REQUESTING "Requesting '%s' from '%s'" 634 IDS_LOG_REQUESTING "Requesting '%s' from '%s'"
635 IDS_LOG_SENDING "Sending '%s' to '%s'" 635 IDS_LOG_SENDING "Sending '%s' to '%s'"
636 IDS_WTALKAT "@" 636 IDS_WTALKAT "@"
637 IDS_OTALXAT " at " 637 IDS_OTALXAT " at "
638 IDS_TFTP_ERROR_TSIZE "Invalid transfer size" 638 IDS_TFTP_ERROR_TSIZE "Invalid transfer size"
639 IDS_TFTP_ERROR_BSIZE "Invalid block size" 639 IDS_TFTP_ERROR_BSIZE "Invalid block size"
640 IDS_TFTP_ERROR_TOUT "Invalid timeout" 640 IDS_TFTP_ERROR_TOUT "Invalid timeout"
641 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.." 641 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.."
642 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||" 642 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||"
643 IDS_TITLE_WAV "Select sound.." 643 IDS_TITLE_WAV "Select sound.."
644 IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application." 644 IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application."
645 IDS_NO_XFER_OP "No request type specified." 645 IDS_NO_XFER_OP "No request type specified."
646 IDS_INVALID_IP "Invalid IP address." 646 IDS_INVALID_IP "Invalid IP address."
647 IDS_INVALID_NETMASK "Invalid netmask." 647 IDS_INVALID_NETMASK "Invalid netmask."
648END 648END
649 649
650STRINGTABLE DISCARDABLE 650STRINGTABLE DISCARDABLE
651BEGIN 651BEGIN
652 AFX_IDS_APP_TITLE "PUMPKIN" 652 AFX_IDS_APP_TITLE "PUMPKIN"
653END 653END
654 654
655STRINGTABLE DISCARDABLE 655STRINGTABLE DISCARDABLE
656BEGIN 656BEGIN
657 IDS_INVALID_RULE "Invalid access rule." 657 IDS_INVALID_RULE "Invalid access rule."
658 IDS_LOG_LOGERROR "Error logging to '%s'" 658 IDS_LOG_LOGERROR "Error logging to '%s'"
659END 659END
660 660
661#endif // English (U.S.) resources 661#endif // English (U.S.) resources
662///////////////////////////////////////////////////////////////////////////// 662/////////////////////////////////////////////////////////////////////////////
663 663
664 664
665 665
666#ifndef APSTUDIO_INVOKED 666#ifndef APSTUDIO_INVOKED
667///////////////////////////////////////////////////////////////////////////// 667/////////////////////////////////////////////////////////////////////////////
668// 668//
669// Generated from the TEXTINCLUDE 3 resource. 669// Generated from the TEXTINCLUDE 3 resource.
670// 670//
671#define _AFX_NO_SPLITTER_RESOURCES 671#define _AFX_NO_SPLITTER_RESOURCES
672#define _AFX_NO_OLE_RESOURCES 672#define _AFX_NO_OLE_RESOURCES
673#define _AFX_NO_TRACKER_RESOURCES 673#define _AFX_NO_TRACKER_RESOURCES
674#define _AFX_NO_PROPERTY_RESOURCES 674#define _AFX_NO_PROPERTY_RESOURCES
675 675
676#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 676#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
677#ifdef _WIN32 677#ifdef _WIN32
678LANGUAGE 9, 1 678LANGUAGE 9, 1
679#pragma code_page(1252) 679#pragma code_page(1252)
680#endif 680#endif
681#include "res\PumpKIN.rc2" // non-Microsoft Visual C++ edited resources 681#include "res\PumpKIN.rc2" // non-Microsoft Visual C++ edited resources
682#include "afxres.rc" // Standard components 682#include "afxres.rc" // Standard components
683#endif 683#endif
684///////////////////////////////////////////////////////////////////////////// 684/////////////////////////////////////////////////////////////////////////////
685#endif // not APSTUDIO_INVOKED 685#endif // not APSTUDIO_INVOKED
686 686