summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2005-07-25 22:45:28 (UTC)
committer Michael Krelin <hacker@klever.net>2005-07-25 22:45:28 (UTC)
commitd2f4327f3752ff30c3b0ec7fdd2e63bc1a1db5ee (patch) (side-by-side diff)
tree1b5ddc636cee876fac8e90eb78ca3546a1a631b1
parent10639b71121a3fe7de24fe141d8dbe399fa283ff (diff)
downloaddipstick-d2f4327f3752ff30c3b0ec7fdd2e63bc1a1db5ee.zip
dipstick-d2f4327f3752ff30c3b0ec7fdd2e63bc1a1db5ee.tar.gz
dipstick-d2f4327f3752ff30c3b0ec7fdd2e63bc1a1db5ee.tar.bz2
added ability to parse multiple urls from plaintext selection and bumped versions
git-svn-id: http://svn.klever.net/kin/dipstick/trunk@126 fe716a7a-6dde-0310-88d9-d003556173a8
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--COPYING2
-rw-r--r--DipstickDlg.cpp62
-rw-r--r--DipstickDlg.h2
-rw-r--r--dipstick.rc24
-rw-r--r--help/dipstick.rtf4
-rw-r--r--help/dipstick.xml5
-rw-r--r--install/install.cpp2
-rw-r--r--install/install.rc10
-rw-r--r--resource.h1
-rw-r--r--stdafx.h3
10 files changed, 83 insertions, 32 deletions
diff --git a/COPYING b/COPYING
index 427b0ba..fa23ff9 100644
--- a/COPYING
+++ b/COPYING
@@ -1,19 +1,19 @@
-Copyright (c) 1996-2004 Klever Group (http://www.klever.net/)
+Copyright (c) 1996-2005 Klever Group (http://www.klever.net/)
Permission 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:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
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.
diff --git a/DipstickDlg.cpp b/DipstickDlg.cpp
index ace2aff..f27b219 100644
--- a/DipstickDlg.cpp
+++ b/DipstickDlg.cpp
@@ -84,78 +84,81 @@ WORD hi,lo;
lo=app->GetProfileInt("Options","IntervalLo",LOWORD(m_Interval));
m_Interval=MAKELONG(lo,hi);
m_MaxThreads=app->GetProfileInt("Options","MaxThreads",m_MaxThreads);
m_PingSize=app->GetProfileInt("Options","PingSize",m_PingSize);
m_PingsPerHost=app->GetProfileInt("Options","PingsPerHost",m_PingsPerHost);
m_SortCriteria=app->GetProfileInt("Options","SortBy",m_SortCriteria);
hi=app->GetProfileInt("Options","TimeOutHi",HIWORD(m_TimeOut));
lo=app->GetProfileInt("Options","TimeOutLo",LOWORD(m_TimeOut));
m_TimeOut=MAKELONG(lo,hi);
m_bMSWorkAround = app->GetProfileInt("Options","InnermostURL",m_bMSWorkAround);
m_bAutoBest = app->GetProfileInt("Options","AutoBest",m_bAutoBest);
m_bSmartAdjust = app->GetProfileInt("Options","SmartAdjust",m_bSmartAdjust);
m_bAdjustInnermost = app->GetProfileInt("Options","AdjustInnermost",m_bAdjustInnermost);
m_bIgnorelative = app->GetProfileInt("Options","IgnoreRelative",m_bIgnorelative);
m_impexPath = app->GetProfileString("Options","ImportExportPath",m_impexPath);
//{{AFX_DATA_INIT(CDipstickDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_bmpBack.LoadBitmap(IDB_DIABACK);
m_bmpBack.GetBitmap(&m_bitmapBack);
CString tmp;
VERIFY(tmp.LoadString(IDS_REGEX_HTMLURL));
VERIFY(m_reHTMLURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase));
+ VERIFY(tmp.LoadString(IDS_REGEX_URL));
+ VERIFY(m_reURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase));
}
CDipstickDlg::~CDipstickDlg()
{
}
void CDipstickDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDipstickDlg)
DDX_Control(pDX, IDC_ADVANCED, m_AdvancedCtl);
DDX_Control(pDX, ID_HELP, m_HelpCtl);
DDX_Control(pDX, IDC_EXIT, m_ExitCtl);
DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl);
DDX_Control(pDX, IDC_MANUALPING, m_ManualPingCtl);
DDX_Control(pDX, IDC_REMOVE, m_RemoveCtl);
DDX_Control(pDX, IDC_REPINGALL, m_RepingAllCtl);
DDX_Control(pDX, IDC_REPING, m_RepingCtl);
DDX_Control(pDX, IDC_CLEAR, m_ClearListCtl);
DDX_Control(pDX, IDC_HOSTLIST, m_HostList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDipstickDlg, CDialog)
//{{AFX_MSG_MAP(CDipstickDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_OPTIONS, OnOptions)
+ ON_MESSAGE(WM_DNP_URLSPING, OnURLSPing)
ON_MESSAGE(WM_DNP_URLPING, OnUrlPing)
ON_MESSAGE(WM_DNP_ACTIVITYCOUNT, OnActivityCount)
ON_MESSAGE(WM_DNP_UPDATEHOSTDATA, OnUpdateHostData)
ON_MESSAGE(WM_DNP_HTML, OnHTMLTransfer)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_HOSTLIST, OnColumnclickHostlist)
ON_WM_WINDOWPOSCHANGING()
ON_COMMAND(ID_DRAGPAD_OPTIONS, OnDragpadOptions)
ON_COMMAND(ID_DRAGPAD_SHOWMAINWINDOW, OnDragpadShowmainwindow)
ON_COMMAND(ID_DRAGPAD_HELP, OnDragpadHelp)
ON_COMMAND(ID_DRAGPAD_ABOUT, OnDragpadAbout)
ON_COMMAND(ID_DRAGPAD_EXIT, OnDragpadExit)
ON_BN_CLICKED(IDC_MANUALPING, OnManualping)
ON_COMMAND(ID_DRAGPAD_MANUALPING, OnDragpadManualping)
ON_COMMAND(ID_DRAGPAD_REPINGALL, OnDragpadRepingAll)
ON_COMMAND(ID_DRAGPAD_REMOVEALL, OnDragpadRemoveAll)
ON_BN_CLICKED(IDC_REPING, OnReping)
ON_BN_CLICKED(IDC_REPINGALL, OnRepingall)
ON_BN_CLICKED(IDC_CLEAR, OnClear)
ON_NOTIFY(LVN_INSERTITEM, IDC_HOSTLIST, OnInsertitemHostlist)
ON_NOTIFY(LVN_DELETEITEM, IDC_HOSTLIST, OnDeleteitemHostlist)
ON_NOTIFY(LVN_DELETEALLITEMS, IDC_HOSTLIST, OnDeleteallitemsHostlist)
ON_BN_CLICKED(IDC_EXIT, OnExit)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_HOSTLIST, OnItemchangedHostlist)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
@@ -1164,120 +1167,159 @@ UINT cfNIF = RegisterClipboardFormat("Netscape Image Format");
break;
if(!(subs=strstr(lps,strSourceURL)))
break;
subs = &subs[strlen(strSourceURL)];
LPTSTR eol = strchr(subs,'\r');
if(!eol)
break;
(*eol)=0;
CString sourceURL = subs;
if(!sourceURL.GetLength())
break;
TRACE0("SourceURL = "+sourceURL+"\n");
_xferHTML* xf = new _xferHTML;
VERIFY(xf->src.Crack(sourceURL));
LPTSTR htmlBuff = xf->html.GetBuffer(endSelection-startSelection+2);
ASSERT(htmlBuff);
memmove(htmlBuff,&lps[startSelection],endSelection-startSelection+1);
htmlBuff[endSelection-startSelection+1]=0;
xf->html.ReleaseBuffer();
if(bTestOnly){
rv = m_reHTMLURL.Match(xf->html);
delete xf;
}else{
PostMessage(WM_DNP_HTML,0,(LPARAM)xf);
+ rv = TRUE;
}
}while(FALSE);
GlobalUnlock(hg);
GlobalFree(hg);
return rv;
}
if(pDO->IsDataAvailable(cfNIF)){
if(!bTestOnly){
HGLOBAL hg = pDO->GetGlobalData(cfNIF);
ASSERT(hg);
LPVOID lpv = GlobalLock(hg);
ASSERT(lpv);
struct _nif {
BYTE data[0x20];
DWORD m_offDescr;
DWORD m_offURL;
DWORD m_offToImage;
} *nif = (_nif*)lpv;
PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)&nif->data[nif->m_offURL]));
GlobalUnlock(hg);
GlobalFree(hg);
}
return TRUE;
}
if(pDO->IsDataAvailable(CF_TEXT)){
- if(!bTestOnly){
- HGLOBAL hg = pDO->GetGlobalData(CF_TEXT);
- ASSERT(hg);
- LPVOID lpv = GlobalLock(hg);
- ASSERT(lpv);
- PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv));
- GlobalUnlock(hg);
- GlobalFree(hg);
+ BOOL rv = FALSE;
+ HGLOBAL hg = pDO->GetGlobalData(CF_TEXT);
+ ASSERT(hg);
+ LPVOID lpv = GlobalLock(hg);
+ ASSERT(lpv);
+ if(bTestOnly){
+ rv = m_reURL.Match((LPCSTR)lpv);
+ }else{
+ CString sel = (LPCSTR)lpv;
+ if(m_reURL.Match(sel)) {
+ rv = TRUE;
+ CString tmp = m_reURL.GetMatch(CRegEx::matchPostMatch);
+ if(m_reURL.Match(tmp)) {
+ PostMessage(WM_DNP_URLSPING,0,(LPARAM)new CString((LPCSTR)lpv));
+ }else{
+ PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv));
+ }
+ }
}
- return TRUE;
+ GlobalUnlock(hg);
+ GlobalFree(hg);
+ return rv;
}
return FALSE;
}
LRESULT CDipstickDlg::OnHTMLTransfer(WPARAM wP, LPARAM lP)
{
_xferHTML* xf = (_xferHTML*)lP;
CSelectURLsDlg su;
su.m_bAdjust = m_bSmartAdjust;
su.m_bAdjustInnermost = m_bAdjustInnermost;
BeginWaitCursor();
while(m_reHTMLURL.Match(xf->html)){
CString url = m_reHTMLURL.GetMatch(1);
xf->html = m_reHTMLURL.GetMatch(CRegEx::matchPostMatch);
if(CCrackURL::GetHostName(url)==url){
if(m_bIgnorelative)
continue;
CCrackURL cracked;
VERIFY(cracked.Crack(url));
cracked.Adjust(xf->src);
url = cracked.Build();
}
if(!su.m_URLs.Find(url))
VERIFY(su.m_URLs.AddTail(url));
}
EndWaitCursor();
delete xf;
if(su.DoModal()==IDOK){
POSITION p = su.m_URLs.GetHeadPosition();
while(p){
CString url = su.m_URLs.GetNext(p);
PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url));
}
}
return 0;
}
+LRESULT CDipstickDlg::OnURLSPing(WPARAM wP,LPARAM lP)
+{
+CString *sel = (CString*)lP;
+TRACE1("URLS: %s\n",(LPCTSTR)*sel);
+CSelectURLsDlg su;
+ su.m_bAdjust = m_bSmartAdjust;
+ su.m_bAdjustInnermost = m_bAdjustInnermost;
+ BeginWaitCursor();
+ while(m_reURL.Match(*sel)){
+ CString url = m_reURL.GetMatch(CRegEx::matchMatch);
+ (*sel) = m_reURL.GetMatch(CRegEx::matchPostMatch);
+ if(!su.m_URLs.Find(url))
+ VERIFY(su.m_URLs.AddTail(url));
+ }
+ EndWaitCursor();
+ delete sel;
+ if(su.DoModal()==IDOK){
+ POSITION p = su.m_URLs.GetHeadPosition();
+ while(p){
+ CString url = su.m_URLs.GetNext(p);
+ PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url));
+ }
+ }
+ return 0;
+}
+
UINT CPingyHost::PingProc(LPVOID pParam)
{
CPingyHost* pThis = (CPingyHost*)pParam;
ASSERT(pThis->m_Daddy);
return pThis->DoPing();
}
UINT CPingyHost::DoPing()
{
CSingleLock slock(&m_mutex);
if(!slock.Lock(2000)){
m_Status.LoadString(IDS_PS_FAILEDTOLOCK);
return 1;
}
m_Pinging = TRUE;
m_bToPing = FALSE;
VERIFY(m_Daddy->m_eveStartup.SetEvent());
m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this);
in_addr ip;
UINT packets, lost;
packets=lost=0;
CICMP* pICMP = NULL;
UINT dataSize = m_Daddy->m_PingSize;
int ploss = 100;
@@ -1562,25 +1604,25 @@ void CDipstickDlg::OnDragpadAdvancedImportlist()
{
OnAdvancedImportlist();
}
void CPingyHost::Suicide()
{
CSingleLock sl(&m_mutex);
if(sl.Lock(10)){
sl.Unlock();
delete this;
}else{
if(!AfxBeginThread(CPingyHost::SuicideProc,this))
ASSERT(FALSE);
}
}
UINT CPingyHost::SuicideProc(LPVOID pParam)
{
CPingyHost* pThis = (CPingyHost*)pParam;
CSingleLock sl(&pThis->m_mutex);
sl.Lock();
VERIFY(sl.Unlock());
delete pThis;
return 0;
-}
+} \ No newline at end of file
diff --git a/DipstickDlg.h b/DipstickDlg.h
index ce9ed22..47c3e01 100644
--- a/DipstickDlg.h
+++ b/DipstickDlg.h
@@ -22,48 +22,50 @@ public:
CString m_HostName;
CString m_Status;
DWORD m_IP;
ULONG m_MinRTT;
ULONG m_AvgRTT;
ULONG m_MaxRTT;
BOOL m_Pinged;
int m_Packetloss;
};
typedef CList<CPingyHost*,CPingyHost*> CHostList;
/////////////////////////////////////////////////////////////////////////////
// CDipstickDlg dialog
class CDragPad;
class CDipstickDlg : public CDialog
{
// Construction
struct _xferHTML {
CString html;
CCrackURL src;
};
public:
+ LRESULT OnURLSPing(WPARAM wP,LPARAM lP);
+ CRegEx m_reURL;
BOOL ExportLocations(LPCTSTR file);
CString m_impexPath;
BOOL ImportLocations(LPCTSTR file);
BOOL m_bIgnorelative;
CEvent m_eveStartup;
UINT volatile m_ActiveThreads;
BOOL m_bAdjustInnermost;
BOOL m_bSmartAdjust;
BOOL CollectURLs(COleDataObject* pDO,BOOL bTestOnly=FALSE);
BOOL IsPasteableClipboard();
void UpdateDragpadTitle();
BOOL m_bAutoBest;
void RecalcLayout(int cx,int cy);
CSize m_MinSize;
UINT m_GapY;
UINT m_OverY;
UINT m_OverX;
BOOL m_bMSWorkAround;
CRegEx m_reCrackHost;
CRegEx m_reNestedURL;
CRegEx m_reHTMLURL; // 1 - URL
CRegEx m_reCrackURL; // 3 - schema, 4 - host, 5 - path, 7 - query string
BITMAP m_bitmapBack;
CBitmap m_bmpBack;
diff --git a/dipstick.rc b/dipstick.rc
index 55f9fde..8797946 100644
--- a/dipstick.rc
+++ b/dipstick.rc
@@ -61,61 +61,60 @@ END
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON DISCARDABLE "res\\Dipstick.ico"
IDI_PINGING ICON DISCARDABLE "res\\pinging.ico"
IDI_PENDING ICON DISCARDABLE "res\\pending.ico"
IDI_COMPLETED ICON DISCARDABLE "res\\complete.ico"
IDI_UNREACHABLE ICON DISCARDABLE "res\\unreach.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 213, 61
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Dipstick"
FONT 8, "MS Sans Serif"
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,11,17,21,20
- LTEXT "Dipstick, Version 3.0",IDC_STATIC,40,7,89,8,
- SS_NOPREFIX
- LTEXT "Copyright © 1996-2004 Klever Group",
- IDC_STATIC,40,25,166,8
+ LTEXT "Dipstick, Version 3.1-trunk",IDC_STATIC,40,7,89,8,SS_NOPREFIX
+ LTEXT "Copyright © 1996-2005 Klever Group",IDC_STATIC,40,25,
+ 166,8
DEFPUSHBUTTON "OK",IDOK,174,7,32,14,WS_GROUP
PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,40,40,91,14
END
IDD_DIPSTICK_DIALOG DIALOGEX 0, 0, 419, 152
STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE | WS_EX_CONTEXTHELP |
WS_EX_APPWINDOW
-CAPTION " Dipstick 3.0"
+CAPTION " Dipstick 3.1-trunk"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
CONTROL "List1",IDC_HOSTLIST,"SysListView32",LVS_REPORT |
LVS_SORTASCENDING | LVS_AUTOARRANGE | WS_BORDER |
WS_TABSTOP,8,8,349,136,WS_EX_CLIENTEDGE
PUSHBUTTON "&Manual Ping",IDC_MANUALPING,361,8,50,14
PUSHBUTTON "&Reping",IDC_REPING,361,23,50,14,WS_DISABLED
PUSHBUTTON "Reping &All",IDC_REPINGALL,361,38,50,14,WS_DISABLED
PUSHBUTTON "R&emove",IDC_REMOVE,361,53,50,14,WS_DISABLED
PUSHBUTTON "Remove A&ll",IDC_CLEAR,361,68,50,14,WS_DISABLED
PUSHBUTTON "&Help",ID_HELP,361,99,50,14
PUSHBUTTON "&Options",IDC_OPTIONS,361,114,50,14
PUSHBUTTON "E&xit Dipstick",IDC_EXIT,361,129,50,14
PUSHBUTTON "",IDCANCEL,411,2,6,6,NOT WS_VISIBLE | WS_DISABLED
PUSHBUTTON "Ad&vanced",IDC_ADVANCED,361,83,50,11
END
IDD_DRAGPAD DIALOGEX 0, 0, 53, 33
STYLE DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE | WS_EX_CONTEXTHELP
CAPTION " Drag URL here"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
CONTROL "Animate1",IDC_DNDTARGET,"SysAnimate32",WS_TABSTOP,0,0,
@@ -242,73 +241,73 @@ STYLE DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_MAXIMIZEBOX | WS_POPUP |
EXSTYLE WS_EX_CLIENTEDGE
CAPTION " Select URLs of interest"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
LISTBOX IDC_URLS,7,7,162,146,LBS_SORT | LBS_NOINTEGRALHEIGHT |
LBS_EXTENDEDSEL | NOT WS_BORDER | WS_VSCROLL |
WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE
DEFPUSHBUTTON "OK",IDOK,7,155,50,14
PUSHBUTTON "Cancel",IDCANCEL,7,171,50,14
CONTROL "&Smart adjust selection",IDC_DOADJUST,"Button",
BS_AUTOCHECKBOX | BS_TOP | WS_TABSTOP,63,157,106,10
CONTROL "Adjust by &innermost URL",IDC_ADJUSTINN,"Button",
BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,63,
175,106,10
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,0,0,0
- PRODUCTVERSION 3,0,0,0
+ FILEVERSION 3,1,0,0
+ PRODUCTVERSION 3,1,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
#else
FILEFLAGS 0x8L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
VALUE "FileDescription", "Dipstick, mirror locator\0"
- VALUE "FileVersion", "3, 0, 0, 0\0"
+ VALUE "FileVersion", "3, 1, 0, 0\0"
VALUE "InternalName", "DIPSTICK\0"
- VALUE "LegalCopyright", "Copyright © 1996-2004 Klever Group (http://www.klever.net/)\0"
+ VALUE "LegalCopyright", "Copyright © 1996-2005 Klever Group (http://www.klever.net/)\0"
VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
VALUE "OriginalFilename", "DIPSTICK.EXE\0"
VALUE "ProductName", "Dipstick\0"
- VALUE "ProductVersion", "3, 0, 0, 0\0"
+ VALUE "ProductVersion", "3, 1, 0, 0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 206
VERTGUIDE, 40
@@ -439,69 +438,69 @@ END
IDB_DIABACK BITMAP DISCARDABLE "shared-data/klever-background.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// WAVE
//
IDW_BESTURL WAVE DISCARDABLE "res\\best.wav"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_ABOUTBOX "&About Dipstick.."
IDS_PS_FAILEDTOLOCK "Failed to gain access to internal resources. Please, report to Klever."
IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed."
IDS_CSVEXT ".csv"
IDS_HN_BADURL "Bad URL"
IDS_ABEST_CLEANUP "Remove all locations from list?"
IDS_ABEST_NONEFOUND "No reachable locations were found."
IDS_ABEST_TITLE " Dipstick - report"
- IDS_DRAGPAD_TITLE " Dipstick 3.0"
+ IDS_DRAGPAD_TITLE " Dipstick 3.1-trunk"
IDS_DRAGPAD_URLS " %d/%d URL(s)"
IDS_REGEX_HTMLURL "<A[^[:alpha:]][^>]*href[[:space:]]*=[[:space:]]*""?([^[:space:]>""]+)""?[^>]*>"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_KLEVERNET_URL "http://www.klever.net/"
IDS_PS_INTERNALERROR "Internal Error. Please report to Klever."
IDS_PS_NETUNREACHABLE "Destination network unreachable"
IDS_PS_HOSTUNREACHABLE "Destination host unreachable"
IDS_PS_PROTUNREACHABLE "Destination protocol unreachable"
IDS_PS_PORTUNREACHABLE "Destination port unreachable"
IDS_PS_NORESOURCES "No resources"
IDS_PS_HWERROR "Hardware error"
IDS_PS_BIGPACKET "Packet size is too big"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDC_DNDTARGET "Dipstick 3.0, click the right mouse button to display main window, left mouse button for menu"
+ IDC_DNDTARGET "Dipstick 3.1-trunk, click the right mouse button to display main window, left mouse button for menu"
IDC_HOST "Host name as specified or resolved by Dipstick"
END
STRINGTABLE DISCARDABLE
BEGIN
IDC_URLCAPTION "Universal Resource Locator (URL) associated with this location"
IDC_URL "Universal Resource Locator (URL) associated with this location"
IDC_HOSTCAPTION "Host name as specified or resolved by Dipstick"
IDC_IPCAPTION "Host's IP address as specified or resolved by Dipstick"
IDC_TIMESCAPTION "Minmum, maximum and average round trip time in milliseconds. The less the better."
IDC_TIMES "Minmum, maximum and average round trip time in milliseconds. The less the better."
IDC_LOSSCAPTION "IP packets loss"
IDC_LOSS "IP packets loss"
IDC_STATUSCAPTION "Last error occured during attempt to ping this location"
IDC_STATUS "Last error occured during attempt to ping this location"
IDC_OPENURL "Open URL in your default browser"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_PS_TIMEOUT "Request timed out"
IDS_PS_BADROUTE "Bad route"
IDS_PS_TTLEXPTRANSIT "TTL expired in transit"
IDS_PS_TTLEXPREASM "TTL expired during reassembly"
@@ -516,48 +515,49 @@ BEGIN
IDS_TIP_UNREACHABLE "This location seems to be unreachable"
IDS_PS_FAILEDTORESOLVE "Unable to resolve host IP"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_PS_UNABLETOICMP "Unable to initialize ICMP services"
IDS_TIP_PENDING "This location is waiting for it's turn to get pinged"
IDS_TIP_COMPLETE "Pinging of this location has been completed"
IDS_TIP_PROPSOK "Click OK if you're done with looking and want to dismiss this window"
IDS_TIP_INTERVAL "Interval between ping requests in seconds"
IDS_TIP_OPTIONSOK "Click OK to make changes permanent"
IDS_TIP_OPTIONSCANCEL "Click CANCEL to leave dialog without making any changes"
IDS_TIP_PINGING "This location is being pinged at the moment.."
END
STRINGTABLE DISCARDABLE
BEGIN
IDC_MSWORKAROUND "In case of REDIRed URL - test the innermost one"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_CSVFILTER "Comma Separated Values (*.csv)|*.csv|All Files (*.*)|*.*||"
+ IDS_REGEX_URL "([a-zA-Z]+://)?[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]*)+(/[^ \t\r\n\\f]*)?"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif
#include "res\Dipstick.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
diff --git a/help/dipstick.rtf b/help/dipstick.rtf
index c91b3f4..839d331 100644
--- a/help/dipstick.rtf
+++ b/help/dipstick.rtf
@@ -1,57 +1,59 @@
{\rtf1\ansi
@{\footnote
THIS FILE WAS AUTOMATICALLY GENERATED FROM XML DOCUMENT.
DO NOT MODIFY THIS FILE DIRECTLY. EDIT XML DOCUMENT INSTEAD
}
{\fonttbl{\f0\froman Times New Roman;}{\f1\fswiss Arial;}{\f3\froman Symbol;}}{\colortbl;
\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;
\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
\pard\plain\keepn
#{\footnote About}
${\footnote About Dipstick}
K{\footnote about}
{ \f1\fs18\b\sb120 About {\b Dipstick}}
\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b Dipstick} is our award-winning freeware that allows you to evaluate {\i mirror sites} to figure out which one has currently the least traffic.
\par\sa120\sb120\qj\pard \f1\fs18\sb120
\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b {\i Enjoy!}}
{
-\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1996-2004 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")}
+\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1996-2005 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")}
\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:
\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
\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.
}
\par \sa0\sb120\ql \f1\fs16 Author: {\b\uldb\cf11 Michael Krelin ({\i hacker@klever.net})}{\v %!ExecFile("mailto:hacker@klever.net")}
\par \sa0\sb0 Fan mail send to {\i\uldb gefilte@klever.net}{\v %!ExecFile("mailto:gefilte@klever.net")}
\page
\pard\plain\keepn
#{\footnote News}
${\footnote What's new}
{ \f1\fs18\b\sb120 What's New}
+\par\pard\plain\f1\fs24\qc\cf2\b 3.1 - July 26th, 2005
+\par\pard\plain\fi0\li0\f1\fs18 \bullet Ability to parse multiple URLs from plaintext selection
\par\pard\plain\f1\fs24\qc\cf2\b 3.0 - July 11th, 2004
\par\pard\plain\fi0\li0\f1\fs18 \bullet Change of {\uldb license}{\v About} and opening the source.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Minor cosmetic changes
\par\pard\plain\f1\fs24\qc\cf2\b 2.52 - June 3rd, 1998
\par\pard\plain\fi0\li0\f1\fs18 \bullet Now works properly with Winsock 2 for Windows95. Also may start working with non-Microsoft TCP/IP stacks.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Fixed bug that caused GPF when removing all URLs after testing is over and you picked the URL of your choice.
\par\pard\plain\f1\fs24\qc\cf2\b 2.5 - December 30th, 1997
\par\pard\plain\fi0\li0\f1\fs18 \bullet Ability to export/import sets of URLs.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Copy URL menu command in the Main Window and button in the Best URL window.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Multiple URLs dragging or pasting. Works only for MSIE4 browser.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Annoying ToolTips removed.
\par\pard\plain\f1\fs24\qc\cf2\b 2.00 - July 1st, 1997
\par\pard\plain\fi0\li0\f1\fs18 \bullet Drag'n'drop source added to the Best URL window.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Completed/Total URLs counter added to {\b Dipstick} drag pad.
\par\pard\plain\fi0\li0\f1\fs18 \bullet You may now drag'n'drop URLs from main {\b Dipstick} dialog window.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Added ability to paste URLs into {\b Dipstick} instead of dropping.
\par\pard\plain\fi0\li0\f1\fs18 \bullet New install program now lets you install {\b Dipstick} to the location of your choice.
\par\pard\plain\f1\fs24\qc\cf2\b 1.01 - March 13th, 1997
\par\pard\plain\fi0\li0\f1\fs18 \bullet Resizable main {\b Dipstick} dialog window.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Come up with the best URL automatically.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Workaround for redir.dll
\par\pard\plain\fi0\li0\f1\fs18 \bullet No more {\b\cf6 MSIE} 3.0 requirement.
\par\pard\plain\fi0\li0\f1\fs18 \bullet Remembers window positions and size as well as columns widths.
\par\pard\plain\fi0\li0\f1\fs18 \bullet When manually adding locations - you may specify the URL, not host name as it was before (I still wonder how it came to my mind)
diff --git a/help/dipstick.xml b/help/dipstick.xml
index 4754e47..8ed0383 100644
--- a/help/dipstick.xml
+++ b/help/dipstick.xml
@@ -1,36 +1,39 @@
<?xml version="1.0"?>
<winhelp>
<topic id="About" title="About Dipstick" keywords="about">
<heading scroll="no">About <kin>Dipstick</kin></heading>
<p><kin>Dipstick</kin> is our award-winning freeware that allows you to evaluate <term>mirror sites</term> to figure out which one has currently the least traffic.</p>
<p/>
<p><b><i>Enjoy!</i></b></p>
- <license years="1996-2004"/>
+ <license years="1996-2005"/>
<credits/>
</topic>
<topic id="News" title="What's new">
<heading scroll="no">What's New</heading>
+ <newsfor version="3.1" date="July 26th, 2005">
+ <ni>Ability to parse multiple URLs from plaintext selection</ni>
+ </newsfor>
<newsfor version="3.0" date="July 11th, 2004">
<ni>Change of <a href="#About">license</a> and opening the source.</ni>
<ni>Minor cosmetic changes</ni>
</newsfor>
<newsfor version="2.52" date="June 3rd, 1998">
<ni>Now works properly with Winsock 2 for Windows95. Also may start working with non-Microsoft TCP/IP stacks.</ni>
<ni>Fixed bug that caused GPF when removing all URLs after testing is over and you picked the URL of your choice.</ni>
</newsfor>
<newsfor version="2.5" date="December 30th, 1997">
<ni>Ability to export/import sets of URLs.</ni>
<ni>Copy URL menu command in the Main Window and button in the Best URL window.</ni>
<ni>Multiple URLs dragging or pasting. Works only for MSIE4 browser.</ni>
<ni>Annoying ToolTips removed.</ni>
</newsfor>
<newsfor version="2.00" date="July 1st, 1997">
<ni>Drag'n'drop source added to the Best URL window.</ni>
<ni>Completed/Total URLs counter added to <kin>Dipstick</kin> drag pad.</ni>
<ni>You may now drag'n'drop URLs from main <kin>Dipstick</kin> dialog window.</ni>
<ni>Added ability to paste URLs into <kin>Dipstick</kin> instead of dropping.</ni>
<ni>New install program now lets you install <kin>Dipstick</kin> to the location of your choice.</ni>
</newsfor>
<newsfor version="1.01" date="March 13th, 1997">
<ni>Resizable main <kin>Dipstick</kin> dialog window.</ni>
<ni>Come up with the best URL automatically.</ni>
diff --git a/install/install.cpp b/install/install.cpp
index 296f3a3..1d91bc2 100644
--- a/install/install.cpp
+++ b/install/install.cpp
@@ -1,30 +1,30 @@
#include "resource.h"
#include "../shared-code/install.h"
#define KINNAME "Dipstick"
#define KINSHORT KINNAME
-#define VERSION "3.0"
+#define VERSION "3.1-trunk"
BOOL Install(void)
{
STRING dPath = strFETCH_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group",KINSHORT "Path");
STRING kPath = strFETCH_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group","KINPath");
LPCSTR qPath = ((LPCSTR)dPath)?(LPCSTR)dPath:(((LPCSTR)kPath)?(LPSTR)kPath:"C:\\Program Files\\Klever\\Nothings");
STRING path = REQUESTPATH(" " KINNAME " " VERSION,"\nEnter destination path:",qPath);
if(!path)
return NULL;
#ifdef K_ANNED
STRING sysDir(_MAX_PATH);
GetSystemDirectory(sysDir,_MAX_PATH);
INSTALLFILE("mfc42.dl_",sysDir,"mfc42.dll");
#endif
MAKE_PATH(path);
STRING shortPath = GET_SHORT_PATH(path);
if(!shortPath){
MessageBox(NULL,"Failed to install " KINNAME " " VERSION " in specified directory",NULL,MB_ICONERROR|MB_OK);
return FALSE;
}
if(!(
diff --git a/install/install.rc b/install/install.rc
index 016c554..2bdee9c 100644
--- a/install/install.rc
+++ b/install/install.rc
@@ -110,73 +110,73 @@ END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""custom.rch""\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON ICON DISCARDABLE "../shared-data/install-icon.ico"
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,0,0,0
- PRODUCTVERSION 3,0,0,0
+ FILEVERSION 3,1,0,0
+ PRODUCTVERSION 3,1,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
VALUE "FileDescription", "INSTALL: Dipstick, mirror locator\0"
- VALUE "FileVersion", "3, 0, 0, 0\0"
+ VALUE "FileVersion", "3, 1, 0, 0\0"
VALUE "InternalName", "INSTALL\0"
- VALUE "LegalCopyright", "Copyright © 1996-2004 Klever Group (http://www.klever.net/)\0"
+ VALUE "LegalCopyright", "Copyright © 1996-2005 Klever Group (http://www.klever.net/)\0"
VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
VALUE "OriginalFilename", "INSTALL.EXE\0"
VALUE "ProductName", "Dipstick\0"
- VALUE "ProductVersion", "3, 0, 0, 0\0"
+ VALUE "ProductVersion", "3, 1, 0, 0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // !_MAC
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#include "custom.rch"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
diff --git a/resource.h b/resource.h
index 2af32cb..2f7b81e 100644
--- a/resource.h
+++ b/resource.h
@@ -1,45 +1,46 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Dipstick.rc
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_DIPSTICK_DIALOG 102
#define IDS_REGEX_NESTEDURL 102
#define IDS_PS_FAILEDTOLOCK 102
#define IDP_SOCKETS_INIT_FAILED 103
#define IDS_REGEX_CRACKHOST 104
#define IDS_CSVEXT 104
#define IDS_HN_BADURL 105
#define IDS_ABEST_CLEANUP 106
#define IDS_ABEST_NONEFOUND 107
#define IDS_ABEST_TITLE 108
#define IDS_DRAGPAD_TITLE 109
#define IDS_DRAGPAD_URLS 110
#define IDS_REGEX_HTMLURL 111
#define IDS_CSVFILTER 112
+#define IDS_REGEX_URL 113
#define IDR_MAINFRAME 128
#define IDD_DRAGPAD 129
#define IDR_DNDAVI 130
#define IDD_OPTIONS 132
#define IDR_MENU 133
#define IDD_MANUALHOST 134
#define IDD_PROPS 135
#define IDI_PINGING 136
#define IDI_PENDING 137
#define IDI_COMPLETED 138
#define IDI_UNREACHABLE 139
#define IDB_DIABACK 140
#define IDD_AUTOBEST 141
#define IDW_BESTURL 142
#define IDR_DRAGAVI 143
#define IDD_URLS 145
#define IDC_HOSTLIST 1002
#define IDC_DNDTARGET 1011
#define IDC_OPTIONS 1013
#define IDC_NPINGS 1014
#define IDC_PACKETSIZE 1015
#define IDC_TIMEOUT 1016
#define IDC_INTERVAL 1017
#define IDC_KLEVERNET 1017
diff --git a/stdafx.h b/stdafx.h
index 06ef43f..ed0fe4e 100644
--- a/stdafx.h
+++ b/stdafx.h
@@ -8,29 +8,30 @@
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows 95 Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxsock.h> // MFC socket extensions
#include <afxole.h>
#include <afxtempl.h>
#include <afxmt.h>
#include <winsock.h>
#include "shared-code/ms_icmp.h"
#include "shared-code/ip_icmp.h"
#include "shared-code/kICMP.h"
#include "shared-code/RegEx.h"
#include "CrackURL.h"
enum {
WM_DNP_ACTIVITYCOUNT = WM_USER+16,
WM_DNP_URLPING,
WM_DNP_UPDATEHOSTDATA,
- WM_DNP_HTML
+ WM_DNP_HTML,
+ WM_DNP_URLSPING
};
#include <MMSystem.h>
// CG: The following line was added by the Windows Multimedia component.
#pragma comment(lib, "winmm.lib")