QuickWho

Check-in [269ef2bdc2]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Change service for geo-ip because of shutdown of freegeoip.net; update docs
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:269ef2bdc2f76b11ebf9d5c0a007c783b1467c40
User & Date: kevin 2016-04-02 22:20:12
Context
2016-04-02
22:22
Further tweaks to documentation check-in: e62814de6b user: kevin tags: trunk
22:20
Change service for geo-ip because of shutdown of freegeoip.net; update docs check-in: 269ef2bdc2 user: kevin tags: trunk
02:28
Update help, image files check-in: adac992a96 user: kevin tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to QuickWho.py.

504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
...
519
520
521
522
523
524
525

526
527
528
529
530
531
532
...
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
...
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619

620
621
622
623
624
625
626
627
628
629
630
631
632
            self.searchfield.delete(0, 'end')
            self.searchfield.insert(0, data)
            self.getInfo()


    def geo_ip_lookup(self, domain):

        service = 'http://freegeoip.net'
        kind = '/json/'
        ip = domain

        url = service + kind + ip
        return json.loads(urllib.request.urlopen(url).read().decode('utf-8'))

        
................................................................................
    #get the whois data
    def getInfo(self):
     
        if self.searchfield.get() == "":
            return

        domain = self.searchterm.get()

        self.status.set('Displaying domain information for ' + (str(domain.strip('='))))
        self.clearData()

        #First, check to make sure domain name isn't hijacked by squatters, cf 'apple.com', add '=' if it is.
        try:
            self.pyurl = pythonwhois.get_whois(domain, normalized=True)
        except:
................................................................................
                 pass
             
        #Ok, we have a usable domain. Retrieve and parse data. 
        try:
            self.pyurl = pythonwhois.get_whois(domain, normalized=True)
            self.search_ip = domain.strip('=')
            self.domaindata =  self.geo_ip_lookup(self.search_ip)
            self.latitude = self.domaindata['latitude']
            self.longitude = self.domaindata['longitude']

            #Isolate image creation from the domain text output.
            try:
                base_url = "http://open.mapquestapi.com/staticmap/v4/getmap?key=Fmjtd%7Cluubn9u82h%2Cr2%3Do5-902lq0&size=600,600&zoom=10&imageType=png&center="
                final_url = base_url+str(self.latitude)+","+str(self.longitude)
                f = urllib.request.urlopen(final_url)
                baseimage = os.path.join(self.cachedir, 'mapquest.png')
................................................................................
                )

                self.inserturltext("Creation Date: " + "\t" +  ", ".join(['%s' % i for i in self.pyurl["creation_date"]]) + "\n")
                self.inserturltext("Expiration Date: "+ "\t"  + ", ".join(['%s' % i for i in self.pyurl["expiration_date"]]) + "\n") 
                self.inserturltext("Name Servers: " + "\t"  + ", ".join(['%s' % i for i in self.pyurl["nameservers"]]) + "\n" )
                self.inserturltext("Updated: " + "\t" + ", ".join(['%s' % i for i in self.pyurl["updated_date"]]) + "\n") 
                self.inserturltext("Whois Server: " + "\t" +  ", ".join(['%s' % i for i in self.pyurl["whois_server"]]) + "\n")
                self.inserturltext('IP Address:\t\t ' + self.domaindata['ip'] + '\n\n')
                self.inserturltext('Latitude:\t\t ' + str(self.domaindata['latitude']) + '\n')
                self.inserturltext('Longitude:\t\t ' +  str(self.domaindata['longitude']) + '\n')
                self.inserturltext('City:\t\t ' + self.domaindata['city'] + '\n')
                self.inserturltext('Region:\t\t '+ self.domaindata['region_code'] + '\n')
                self.inserturltext('Country:\t\t ' + self.domaindata['country_name'] + '\n\n')

                self.inserturltext('* * * * *\n\n')
                self.inserturltext('Geolocation powered by FreeGeoIp, http://freegeoip.net')
                self.inserturltext('\n\n')
                self.update()

            except KeyError:

                self.inserturltext('\n'.join(self.pyurl['raw']) + '\n\n')
                self.inserturltext('* * * * *\n\n')
                self.inserturltext('Geolocation powered by FreeGeoIp, http://freegeoip.net')
                self.inserturltext('\n\n')
                self.update()
                pass
 
        #If everything goes haywire, return an error message.
        except:
            raise
            self.inserturltext('Unable to retrieve domain information for' + (str(domain.strip('='))) + '.\n\n')
            try:
                self.bottomcanvas.delete(self.displaymap)







|







 







>







 







|
|







 







|
|
|

|
|


|




>
|
|
|
|
|
|







504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
...
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
...
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
...
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
            self.searchfield.delete(0, 'end')
            self.searchfield.insert(0, data)
            self.getInfo()


    def geo_ip_lookup(self, domain):

        service = 'http://ip-api.com/'
        kind = '/json/'
        ip = domain

        url = service + kind + ip
        return json.loads(urllib.request.urlopen(url).read().decode('utf-8'))

        
................................................................................
    #get the whois data
    def getInfo(self):
     
        if self.searchfield.get() == "":
            return

        domain = self.searchterm.get()

        self.status.set('Displaying domain information for ' + (str(domain.strip('='))))
        self.clearData()

        #First, check to make sure domain name isn't hijacked by squatters, cf 'apple.com', add '=' if it is.
        try:
            self.pyurl = pythonwhois.get_whois(domain, normalized=True)
        except:
................................................................................
                 pass
             
        #Ok, we have a usable domain. Retrieve and parse data. 
        try:
            self.pyurl = pythonwhois.get_whois(domain, normalized=True)
            self.search_ip = domain.strip('=')
            self.domaindata =  self.geo_ip_lookup(self.search_ip)
            self.latitude = self.domaindata['lat']
            self.longitude = self.domaindata['lon']

            #Isolate image creation from the domain text output.
            try:
                base_url = "http://open.mapquestapi.com/staticmap/v4/getmap?key=Fmjtd%7Cluubn9u82h%2Cr2%3Do5-902lq0&size=600,600&zoom=10&imageType=png&center="
                final_url = base_url+str(self.latitude)+","+str(self.longitude)
                f = urllib.request.urlopen(final_url)
                baseimage = os.path.join(self.cachedir, 'mapquest.png')
................................................................................
                )

                self.inserturltext("Creation Date: " + "\t" +  ", ".join(['%s' % i for i in self.pyurl["creation_date"]]) + "\n")
                self.inserturltext("Expiration Date: "+ "\t"  + ", ".join(['%s' % i for i in self.pyurl["expiration_date"]]) + "\n") 
                self.inserturltext("Name Servers: " + "\t"  + ", ".join(['%s' % i for i in self.pyurl["nameservers"]]) + "\n" )
                self.inserturltext("Updated: " + "\t" + ", ".join(['%s' % i for i in self.pyurl["updated_date"]]) + "\n") 
                self.inserturltext("Whois Server: " + "\t" +  ", ".join(['%s' % i for i in self.pyurl["whois_server"]]) + "\n")
                self.inserturltext('IP Address:\t\t ' + self.domaindata['query'] + '\n\n')
                self.inserturltext('Latitude:\t\t ' + str(self.domaindata['lat']) + '\n')
                self.inserturltext('Longitude:\t\t ' +  str(self.domaindata['lon']) + '\n')
                self.inserturltext('City:\t\t ' + self.domaindata['city'] + '\n')
                self.inserturltext('Region:\t\t '+ self.domaindata['region'] + '\n')
                self.inserturltext('Country:\t\t ' + self.domaindata['country'] + '\n\n')

                self.inserturltext('* * * * *\n\n')
                self.inserturltext('Geolocation powered by http://ip-api.com')
                self.inserturltext('\n\n')
                self.update()

            except KeyError:
                raise
               # self.inserturltext('\n'.join(self.pyurl['raw']) + '\n\n')
              #  self.inserturltext('* * * * *\n\n')
              #  self.inserturltext('Geolocation powered by http://ip-api.com')
              #  self.inserturltext('\n\n')
              #  self.update()
               # pass
 
        #If everything goes haywire, return an error message.
        except:
            raise
            self.inserturltext('Unable to retrieve domain information for' + (str(domain.strip('='))) + '.\n\n')
            try:
                self.bottomcanvas.delete(self.displaymap)

Changes to buildapp.

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  <channel>
    <title>QuickWho</title>
    <link>http://www.codebykevin.com/quickwho.html</link>
    <language>en</language>
    <item>

      <title>QuickWho $1</title>
      <sparkle:minimumSystemVersion>10.9</sparkle:minimumSystemVersion>
      <pubDate>$PUBDATE</pubDate>
      <author>Code by Kevin</author>
      <description><![CDATA[
       <p>This version of QuickWho has the following features and improvements:
       $RELEASE_NOTES
      ]]></description>
      <link>http://www.codebykevin.com/quickwho.html</link>







|







60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  <channel>
    <title>QuickWho</title>
    <link>http://www.codebykevin.com/quickwho.html</link>
    <language>en</language>
    <item>

      <title>QuickWho $1</title>
      <sparkle:minimumSystemVersion>10.11</sparkle:minimumSystemVersion>
      <pubDate>$PUBDATE</pubDate>
      <author>Code by Kevin</author>
      <description><![CDATA[
       <p>This version of QuickWho has the following features and improvements:
       $RELEASE_NOTES
      ]]></description>
      <link>http://www.codebykevin.com/quickwho.html</link>

Changes to scriptlibs/machelp/help.tcl.

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
...
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
    variable state
 
    catch {destroy $TOP}
    toplevel $TOP
    wm title $TOP "Help"

     frame $TOP.bottom -bd 2 -relief ridge
     button $TOP.b -text "Print" -command [list ::Help::PrintHelp $TOP]
     pack $TOP.bottom -side bottom -fill both
     pack $TOP.b -side bottom -expand 1 -pady 10 -in $TOP.bottom
 
    set P $TOP.p
    if {1} {                       ;# Need tags on treeview
        set state(haveTOC) 1
        ::ttk::panedwindow $P -orient horizontal
................................................................................
#
# ::Help::CreateTOC -- Creates a TOC display from tile's treeview widget
#
proc ::Help::CreateTOC {TOC} {
    variable W
 
    set W(tree) $TOC.tree
    scrollbar $TOC.sby -orient vert -command "$W(tree) yview"
    #scrollbar $TOC.sbx -orient hori -command "$W(tree) xview"
 
    ::ttk::treeview $W(tree) -padding {0 0 0 0} -selectmode browse \
        -yscrollcommand "$TOC.sby set"  ;#$ -xscrollcommand "$TOC.sbx set" 
 
    grid $W(tree) $TOC.sby -sticky news
    #grid $TOC.sbx -sticky ew







|







 







|







160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
...
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
    variable state
 
    catch {destroy $TOP}
    toplevel $TOP
    wm title $TOP "Help"

     frame $TOP.bottom -bd 2 -relief ridge
     ttk::button $TOP.b -text "Print" -command [list ::Help::PrintHelp $TOP]
     pack $TOP.bottom -side bottom -fill both
     pack $TOP.b -side bottom -expand 1 -pady 10 -in $TOP.bottom
 
    set P $TOP.p
    if {1} {                       ;# Need tags on treeview
        set state(haveTOC) 1
        ::ttk::panedwindow $P -orient horizontal
................................................................................
#
# ::Help::CreateTOC -- Creates a TOC display from tile's treeview widget
#
proc ::Help::CreateTOC {TOC} {
    variable W
 
    set W(tree) $TOC.tree
    ttk::scrollbar $TOC.sby -orient vert -command "$W(tree) yview"
    #scrollbar $TOC.sbx -orient hori -command "$W(tree) xview"
 
    ::ttk::treeview $W(tree) -padding {0 0 0 0} -selectmode browse \
        -yscrollcommand "$TOC.sby set"  ;#$ -xscrollcommand "$TOC.sbx set" 
 
    grid $W(tree) $TOC.sby -sticky news
    #grid $TOC.sbx -sticky ew

Changes to scriptlibs/machelp/help.txt.

1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
..
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57


58
59
60
61
62
63
64
..
73
74
75
76
77
78
79
80
81
82

83
84

85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

144
145
146
147
148





149
150
151
152
153
154
155
...
206
207
208
209
210
211
212
















title: QuickWho User Help
alias: TOC

 - [Overview of QuickWho]
 - [Installing QuickWho]
 - [Using QuickWho]
 - [Scriptability and Services]
 - [Window Menu]
 - [Help]
 - [Preferences]
 - [Acknowledgments]
 - [History]


-------------------
title: Overview of QuickWho
alias: Overview

QuickWho provides a rich array of information about specific Internet domains that surpasses other command-line, GUI or web-based "whois" tools. Are you curious about who owns a particular domain name? Do you want to contact them, or gather more information about them? QuickWho can help you with these tasks.

................................................................................

QuickWho provides a rich array of information about specific Internet domains. It offers several ways to get information about a domain. The fastest way is to type in the name of the domain name you are querying in the search field, hit return or the "information" toolbar button, and view the data in the text display. You can also select "Get Information" from the "whois" menu.

[quickwho-main]

Here is an overview of what QuickWho provides:

* Distills basic whois data to an at-a-glance list, with both domain information and geographic information about the domain. This is done through a mix of approaches: the Python pywhois library, for basic information about the domain; and the Quova domain information server, which retrieves geographic information about the domain (city/state/country, latitude, longitute) based on the IP address. The raw whois data can also be displayed; this can be configured in the preferences. The result is that more precise, accurate whois data is delivered.

* Displays the text data as rich text with clickable URL's for domain names and e-mail addresses, to facilitate e-mailing or displaying domain information in a browser.

* Displays map information from the domain, based on OpenMapquest ([http://open.mapquestapi.com/staticmap/]) for map data.This can be useful for gathering more information about the domain.

You can also search for information about the domain name over the Web using the "Web" toolbar item and the equivalent item in the "Whois" menu.

-------------------
title: Scriptability and Services
alias: Scripting



QuickWho offers basic AppleScript support with the "get domain" AppleScript command. The "get domain" call takes a domain name as a parameter, and will display data about that domain in the QuickWho GUI and will also log the data information to standard output for use in other applications. To use QuickWho's AppleScript support, create an AppleScript like this:

   tell application "QuickWho"
      get domain "apple.com"
   end tell

................................................................................
      end tell
   end tell

QuickWho can also be called from the Mac's Services menu. To call QuickWho from the services menu, highlight a domain name in a Services-aware application (such as Safari, Mail or TextEdit) and select "QuickWho: Display Domain Information" from the Services menu. That domain name will be passed to QuickWho and the domain information displayed in QuickWho's main window.

QuickWho also supports the ability to call other Mac applications from the Services menu. To call another application's service--for instance, to display a domain in Safari--simply highlight the text in QuickWho and then select the appropriate item from the Services menu.

-------------------
title: Window Menu
alias: Window


The window menu manages the various display windows of the application. It can minimize the selected window, or bring all application windows to the front.


To hide the main window, simply close it via the red button or via "Command-W" from the keyboard. To restore the window, click on the application's Dock icon or select "Main Window" from the window menu.

To minimize the window, click on the organze button or via "Command-M" from the keyboard. You can also double-click on the titlebar. To restore the window, select the window name from the window menu or click on the minimized window icon.

 
-------------------
title: Help
alias: Help

QuickWho provides comprehensive user documentation from the "Help" menu, and also provides tooltips for the toolbar buttons. Additional user support is available via the "Contact Code by Kevin" item in the Help menu.
 
-------------------
title: The Preferences Menu
alias: Preferences

QuickWho includes some user-configurable preference items, accessed from "Preferences" in the application menu.

'''Displaying Raw Whois Output'''

QuickWho allows you to display raw whois output from the "whois" command-line tool, as well as the basic whois data and geographic information.

[whois]

'''Copying Text'''

QuickWho includes a preference item that sets the text display to allow copying. If it is not checked, then copying is not permitted.

[copytext]

'''Font''' 

QuickWho also allows you to configure the font and point size of the text display, to enhance its readability to your specifications.

[font-config]

-------------------
title: Acknowledgments
alias: Acknowledgments

The following open-source technologies have gone into the development of QuickWho:

 * The Tcl/Tk GUI toolkit. Website: http://www.tcl.tk. License: [http://www.tcl.tk/software/tcltk/license.html]
 * The Python programming language. Website: http://www.python.org. License: [http://www.python.org].
 * The BWidget GUI library for Tcl/Tk. Website and license: [http://tcllib.sourceforge.net] and [http://tkinter.unpythonic.net/bwidget/].
* The Python pywhois library. Website and license (MIT): [http://code.google.com/p/pywhois/].
 * The Quova domain information server: [http://www.quova.com]
 * OpenMapquest ([http://open.mapquestapi.com/staticmap/]) for map data.
 * Tablelist widget for data display. Website and license: [http://www.nemethi.de]
 * The "windowlist" package. Website and license: [http://opensource.codebykevin.com].
 * The TclServices package. Website and license: [http://tk-components.sourceforge.net].
 * py-appscript by has. Website and license: [http://appscript.sourceforge.net/].
 * The cocoaprint package for native printing. Website and license: [http://tk-components.sourceforge.net].
 * App icon from the Gnome project. Website: [http://www.gnome.org]. License: [http://creativecommons.org/licenses/by-sa/3.0/].
 * Icon fonts from Iconic project. Website and license: [https://github.com/somerandomdude/Iconic].
 * TkImg for image formats. Website and license: [http://sourceforge.net/projects/tkimg/].
 * Sparkle updater support based on Sparkle framework by Andy Matuschak ([http://sparkle.andymatuschak.org]).
 * Help viewer by Keith Vetter: [http://wiki.tcl.tk/19649].
 * The customfont package. Website and license: [http://tk-components.sourceforge.net].

 
-------------------
title: QuickWho Version History
alias: History






'''5.1 (April 15, 2014):'''
 * Improvements to Sparkle update engine.
 * Minor bug fixes.

'''5.0 (January 1, 2014):'''
 * Updated, modern UI with support for Retina displays.
 * Fullscreen support.
................................................................................
 * Enhanced GUI with toolbar and keyboard shortcuts.
 * Quickly query multiple servers for whois information by browsing tree view.
 * Configure text display through preferences menu.
 * Save and print whois information.

'''1.0 (December 1, 2008):'''
 * Initial commercial release.























<

<


>







 







|





<
<



>
>







 







<
<
<
>

<
>

<
<
<








<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<








|
<
<

<
<
<
<
<

|
<
<

<
>





>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7

8

9
10
11
12
13
14
15
16
17
18
..
39
40
41
42
43
44
45
46
47
48
49
50
51


52
53
54
55
56
57
58
59
60
61
62
63
..
72
73
74
75
76
77
78



79
80

81
82



83
84
85
86
87
88
89
90
























91
92
93
94
95
96
97
98
99


100





101
102


103

104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
...
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
title: QuickWho User Help
alias: TOC

 - [Overview of QuickWho]
 - [Installing QuickWho]
 - [Using QuickWho]
 - [Scriptability and Services]

 - [Help]

 - [Acknowledgments]
 - [History]
 - [License]

-------------------
title: Overview of QuickWho
alias: Overview

QuickWho provides a rich array of information about specific Internet domains that surpasses other command-line, GUI or web-based "whois" tools. Are you curious about who owns a particular domain name? Do you want to contact them, or gather more information about them? QuickWho can help you with these tasks.

................................................................................

QuickWho provides a rich array of information about specific Internet domains. It offers several ways to get information about a domain. The fastest way is to type in the name of the domain name you are querying in the search field, hit return or the "information" toolbar button, and view the data in the text display. You can also select "Get Information" from the "whois" menu.

[quickwho-main]

Here is an overview of what QuickWho provides:

* Distills basic whois data to an at-a-glance list, with both domain information and geographic information about the domain. This is done through a mix of approaches: the Python pythonwhois library, for basic information about the domain; and the ip-api domain information server, which retrieves geographic information about the domain (city/state/country, latitude, longitude) based on the IP address. The raw whois data can also be displayed; this can be configured in the preferences. The result is that more precise, accurate whois data is delivered.

* Displays the text data as rich text with clickable URL's for domain names and e-mail addresses, to facilitate e-mailing or displaying domain information in a browser.

* Displays map information from the domain, based on OpenMapquest ([http://open.mapquestapi.com/staticmap/]) for map data.This can be useful for gathering more information about the domain.



-------------------
title: Scriptability and Services
alias: Scripting

'''Mac Scripting'''

QuickWho offers basic AppleScript support with the "get domain" AppleScript command. The "get domain" call takes a domain name as a parameter, and will display data about that domain in the QuickWho GUI and will also log the data information to standard output for use in other applications. To use QuickWho's AppleScript support, create an AppleScript like this:

   tell application "QuickWho"
      get domain "apple.com"
   end tell

................................................................................
      end tell
   end tell

QuickWho can also be called from the Mac's Services menu. To call QuickWho from the services menu, highlight a domain name in a Services-aware application (such as Safari, Mail or TextEdit) and select "QuickWho: Display Domain Information" from the Services menu. That domain name will be passed to QuickWho and the domain information displayed in QuickWho's main window.

QuickWho also supports the ability to call other Mac applications from the Services menu. To call another application's service--for instance, to display a domain in Safari--simply highlight the text in QuickWho and then select the appropriate item from the Services menu.




'''Windows Scripting'''


Windows scripting is currently under development.





 
-------------------
title: Help
alias: Help

QuickWho provides comprehensive user documentation from the "Help" menu, and also provides tooltips for the toolbar buttons. Additional user support is available via the "Contact Code by Kevin" item in the Help menu.
 
























-------------------
title: Acknowledgments
alias: Acknowledgments

The following open-source technologies have gone into the development of QuickWho:

 * The Tcl/Tk GUI toolkit. Website: http://www.tcl.tk. License: [http://www.tcl.tk/software/tcltk/license.html]
 * The Python programming language. Website: http://www.python.org. License: [http://www.python.org].
 * Ip-API ([http://www.ip-api.com]) for geo/IP data.


 * OpenMapquest ([http://open.mapquestapi.com/staticmap/]) for map data.





 * App icon from the Gnome project. Website: [http://www.gnome.org]. License: [http://creativecommons.org/licenses/by-sa/3.0/].
 * Toolbar icons from Iconic project. Website and license: [https://github.com/somerandomdude/Iconic].


 * Help viewer by Keith Vetter: [http://wiki.tcl.tk/19649].

 * pythonwhois library. Website and license: [https://pypi.python.org/pypi/pythonwhois/2.4.3]
 
-------------------
title: QuickWho Version History
alias: History

'''6.0 (May 1, 2016):'''
 * Updated whois library returns much better results.
 * Update to Python 3 modernizes development.
 * Initial port to Windows. 

'''5.1 (April 15, 2014):'''
 * Improvements to Sparkle update engine.
 * Minor bug fixes.

'''5.0 (January 1, 2014):'''
 * Updated, modern UI with support for Retina displays.
 * Fullscreen support.
................................................................................
 * Enhanced GUI with toolbar and keyboard shortcuts.
 * Quickly query multiple servers for whois information by browsing tree view.
 * Configure text display through preferences menu.
 * Save and print whois information.

'''1.0 (December 1, 2008):'''
 * Initial commercial release.

-------------------
title: License
alias: License
 
'''The MIT License (MIT)'''

QuickWho source code: [http://fossil.codebykevin.com/fossil.cgi/quickwho/]

Copyright (c) 2016 WordTech Communications LLC

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.

Changes to scriptlibs/machelp/images.tcl.

more than 10,000 changes