*require TSV *require TextClass

## Table of Contents

DatabaseListbox
DatabaseSearchListbox
Listbox
Notepad
PasswordBox
TextClass
Thermometer
ToplevelListbox
about_neosoft
add_pulldown
add_pulldown_separator
bind_pulldown_menus
center_window
combine_widgetnames
create_pulldown_menu
create_scrollable_canvas
fileselect
fileselect.default.cmd
kfileselect
list_listbox_subwindow
list_subwindow_cancel
list_subwindow_ok
modal_dialog
modal_dialog_bitmap
neosoft:font1:crack_fonts
neosoft:font1:create_font_selector
neosoft:font1:create_font_tag
neosoft:font1:drop_fontinfolist
neosoft:font1:drop_fontlist
neosoft:font1:drop_fontsizelist
neosoft:font1:dump_fonts
neosoft:font1:get_current_font_string
neosoft:font1:set_font_defaults
neosoft_init

[next] [TOC]

## Command

DatabaseListbox - an [incr tcl] class

### Synopsis

DatabaseListbox object

inherits ToplevelListbox TSV

object query arrayName fields expression
object record_matched fields object offset arrayName

### Description

    #
    # Superclass containing a TSV database and a toplevel listbox.
    #

        inherit ToplevelListbox TSV

        constructor {config} {
    	ToplevelListbox::constructor
    	TSV::constructor
        }

        method query {arrayName fields expression} {
    	empty
    	upvar $arrayName x
    	TSV::query x $fields $expression  "$this DatabaseListbox::record_matched [list $fields]"
        }

        method record_matched {fields object offset arrayName} {
    	upvar $arrayName x

            set result ""
    	foreach fieldName $fields {
    	    lappend result $x($fieldName)
    	}
    	add $result [location_of_last_record]
        }

[next] [prev] [TOC]

## Command

DatabaseSearchListbox - an [incr tcl] class

### Synopsis

DatabaseSearchListbox object

inherits TSVsearcher DatabaseListbox

object matches nMatches
object searchtext text
object build_searchframe w
object search_from_entry
object search pattern searchtextUpdate 1
object record_matched key

### Description

    #
    # Superclass containing a TSV database index search and a toplevel listbox.
    #

        inherit TSVsearcher DatabaseListbox

        constructor {config} {
    	DatabaseListbox::constructor
    	TSV::constructor
    	TSVsearcher::constructor
    	build_searchframe $windowName
        }

        method matches {nMatches} {
    	$matchframe.matches configure -text $nMatches
        }

        method searchtext {text} {
    	$searchframe.entry delete 0 end
    	$searchframe.entry insert 0 $text
        }

        method build_searchframe {w} {
    	set searchframe $w.searchframe
    	frame $searchframe
    	pack $searchframe -side top -fill x

    	button $searchframe.button -text "Search"  -command "$this search_from_entry"
    	pack $searchframe.button -side left

    	entry $searchframe.entry -width 20 -relief sunken
    	pack $searchframe.entry -side left -fill x

    	set matchframe $w.matchframe
    	frame $matchframe
    	pack $matchframe -side top -fill x

    	label $matchframe.label -text "Matches"
    	pack $matchframe.label -side left

    	label $matchframe.matches -width 5 -text 0 -relief raised
    	pack $matchframe.matches -side left

    	bind $searchframe.entry <Return> "$this search_from_entry"
        }

        method search_from_entry {} {
    	search [$searchframe.entry get] 0
        }

        method search {pattern {searchtextUpdate 1}} {
    	if {$searchtextUpdate} {searchtext $pattern}
    	empty
    	matches "-----"
    	update
    	TSVsearcher::search *$pattern* var {$this DatabaseSearchListbox::record_matched $var} -glob
    	matches [size]
        }

        method record_matched {key} {
    	add $key [locate $key]
        }

        protected searchframe
        protected matchframe

[next] [prev] [TOC]

## Command

Listbox - an [incr tcl] class

### Synopsis

Listbox object -title something -callback {} -indexCallback {} -saveCallback {} -frame something -geometry 20x10

inherits

object configure config
object empty
object size
object isempty
object get index
object setf index line
object save fileName
object add text hidden
object select
object remove index

### Description

    #@package: listboxes Listbox ToplevelListbox DatabaseListbox DatabaseSearchListbox
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # Handy Little Listbox Class
    #
    # Copyright (C) 1996 NeoSoft, All Rights Reserved
    #
    # This defines a listbox class which has methods to add
    # to a listbox and run callbacks when items are selected.
    #
    # Most nice about it is that it can keep some data in
    # parallel to the listbox but squirreled away, not
    # in the box itself.  This way nasty-but-essential things
    # like indexes and pointers and stuff can be kept out
    # of sight.
    #
    # $Id
    #

        #
        # Set up a window that has a listbox in it,
        # with a couple of useful buttons.
        #
        # Listbox listboxname -frame framename [-title title]
        #    [-callback callback_routine] [-indexCallback index_callback_routine]
        #    [-saveCallback save_callback] [-geometry nxm]
        #
        constructor {config} {
    	set w $frame

    	if {$saveCallback != ""} {
    	    frame $w.saveframe
    	    pack $w.saveframe -fill x
    	    button $w.saveframe.savebutton -text "Save" -command $saveCallback
    	    pack $w.saveframe.savebutton -side left
    	}

    	set boxframe $w.boxframe
    	frame $boxframe
    	set box $boxframe.box
    	scrollbar $boxframe.bar -relief sunken -command "$box yview"
    	listbox $box -yscroll "$boxframe.bar set" -relief sunken  -setgrid 1 -geometry $geometry
    	pack $boxframe.bar -side right -fill y
    	pack $box -side left -expand yes -fill both

    	pack $boxframe -side top -expand yes -fill both

            bind $box <Double-1> "$this select"
        }

        destructor {
    	catch {destroy $w}
        }

        method configure {config} {
        }

       #
       # empty out the listbox by deleting all the lines in it
       #
        method empty {} {
    	$box delete 0 end
        }

        #
        # return the number of lines in the listbox
        #
        method size {} {
    	return [$box size]
        }

        #
        # return 1 if the listbox is empty, else 0
        #
        method isempty {} {
    	return [expr [size] == 0]
        }

        #
        # return a line within the listbox by index
        #
        method get {index} {
    	return [$box get $index]
        }

        #
        # set a line in the listbox
        #
        method setf {index line} {
    	$box insert $index $line
    	$box delete [expr $index + 1]
    	return
        }

        #
        # save contents of listbox to a file
        #
        method save {fileName} {
    	set fp [::open $fileName w]
    	set size [size]
    	for {set i 0} {$i < $size} {incr i} {
    	    puts $fp [get $i]
    	}
    	::close $fp
        }

        #
        # Method to add an entry to the listbox.
        #
        # Arguments are the text to go into the listbox, and the
        # data associated with the text that isn't to be displayed,
        # i.e. a byte offset or something like that.
        #
        method add {text hidden} {
    	set hiddenData([size]) $hidden
    	$box insert end $text
        }

        #
        # Method to perform callbacks on all the selected items.
        #
        method select {} {
    	if {$callback != ""} {
    	    foreach index [$box curselection] {
    		set text [get $index]
    		eval $callback [list $text] [list $hiddenData($index)]
    	    }
    	}

    	if {$indexCallback != ""} {
    	    foreach index [$box curselection] {
    		eval $indexCallback $index
    	    }
    	}
        }

        #
        # remove an item from the box, by index.
        #
        method remove {index} {
    	$box delete $index
        }

        protected box
        protected hiddenData
        protected w

        public title
        public callback ""
        public indexCallback ""
        public saveCallback ""
        public frame
        public geometry "20x10"

[next] [prev] [TOC]

## Command

Notepad - an [incr tcl] class

### Synopsis

Notepad object -w something -currentFileName something

inherits TextClass

object append_file fileName
object save_file fileName
object add_menus

### Description

    #@package: notepad Notepad
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # Notepad class
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #

        inherit TextClass

        constructor {config} {
    	notepad
        }

        proc load_file {fileName} {
    	wm title $w "NeoSoft Notepad - $fileName"
    	empty_out_text
    	load $fileName
    	set currentFileName $fileName
        }

        method append_file {fileName} {

    	if {[catch {set textFp [open $fileName]} result] == 1} {
    	    return
    	}
    	$widgetName insert 1.0 [read $textFp]
    	close $textFp
        }

        method save_file {fileName} {
            set textfp [open $fileName w]
            puts $textfp [$textWidget get 1.0 end] nonewline
            close $textfp
        }

        method add_menus {} {
    	frame $w.menuFrame
    	pack $w.menuFrame -side top -fill both

    	create_pulldown_menu $w file File 0
    	add_pulldown command $w file About  -command "about_neosoft {NeoSoft Notepad} 1992-1996" -underline 0
    	add_pulldown command $w file New -underline 0
    	add_pulldown command $w file Open -command load_button -underline 0
    	add_pulldown command $w file Save -underline 0 -command save_button
    	add_pulldown command $w file "Save As..." -underline 5  -command save_as_button
    	add_pulldown command $w file Exit -command exit_notepad -underline 0

    	bind_pulldown_menus $w
        }

        proc save_as_button {} {
    	fileselect save_this_file "Save notepad as..."
        }

        proc save_button {} {
    	global currentFileName

    	save_text_widget $w.t $currentFileName
        }

        proc save_this_file {frame fileName} {
    	destroy $frame
    	save_text_widget $w.t [file root $fileName]
        }

        proc load_button {} {
    	fileselect load_this_file "Load notepad..."
        }

        proc empty_out_text {w} {
    	$w delete 1.0 end
        }

        proc notepad {{topnote .notepad}} {
    	set w $topnote

    	catch {destroy $w}
    	toplevel $w

    	set neoFrame $w.neoFrame
    	frame $neoFrame
    	label $neoFrame.label -bitmap @/usr/neosoft/icons/neosoft.xbm  -foreground blue4
    	pack $neoFrame.label -side left
    	label $neoFrame.idlabel -text "Notepad"
    	pack $neoFrame.idlabel -side left
    	pack $neoFrame -side top -fill both

    	add_menus

    	frame $w.titlebar -relief raised

    	wm title $w "NeoSoft Notepad"
    	wm iconname $w "Notepad"

    	# define the text widget
    	text $w.t -relief raised -bd 2 -yscrollcommand "$w.s set" -setgrid true  -width 70 -height 28 -wrap word  -exportselection true

    	set textWidget $w.t

    	scrollbar $w.s -relief flat -command "$w.t yview"
    	pack $w.s -side right -fill y
    	pack $w.t -expand 1 -fill both

    	# Set up display styles

    	$w.t mark set insert 0.0
    	bind $w <Any-Enter> "focus $w.t"
        }

        proc exit_notepad {} {
    	destroy .
        }

        public w
        public currentFileName

[next] [prev] [TOC]

## Command

PasswordBox - an [incr tcl] class

### Synopsis

PasswordBox object -password {} -widgetName .password

inherits

object insert_char char key
object delete_char
object run config
object configure config

### Description

    #@package: PasswordBox PasswordBox
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # This file defines a PasswordBox class which will create a password
    # widget that types asterisks into the entry widget as the user types keys,
    # rather than the keys the user typed.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #

        method insert_char {char key} {
    	if {$char == ""} return

    	append password $char

    	$widgetName.password insert end "*"
        }

        method delete_char {} {

            if {$password == ""} return
    	set length [clength $password]
    	if {$length == 0} return
    	if {$length == 1} {
    	    set password ""
    	    $widgetName.password delete 0 end
    	    return
    	}
    	set password [crange $password 0 {[clength $password] - 2}]
    	$widgetName.password delete 0
        }

        method run {config} {
    	set password ""
    	catch {destroy $widgetName}
    	toplevel $widgetName
    	wm minsize $widgetName 1 1
    	wm title $widgetName "Password Entry"

    	label $widgetName.label -text "Enter Password:"
    	pack $widgetName.label

    	entry $widgetName.password -relief raised
    	pack $widgetName.password

    	focus $widgetName.password

    	bind $widgetName.password <Key> "$this insert_char %A %K"
    	bind $widgetName.password  "$this delete_char"
    	bind $widgetName.password  "$this delete_char"
    	bind $widgetName.password  "destroy $widgetName"

    	center_window $widgetName

    	tkwait window $widgetName
    	return $password
        }

        method configure {config} {
        }

        public password ""
        public widgetName ".password"

[next] [prev] [TOC]

## Command

TextClass - an [incr tcl] class

### Synopsis

TextClass object -textWidget something

inherits

object adjust_insert position
object up lines 1
object down lines 1
object left chars 1
object right chars 1
object home
object end
object add_bindings

### Description

    #@package: textclass TextClass
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # incr tcl class for manipulating text widgets
    #

        constructor {config} {
    	add_bindings
        }

        destructor {}

        method adjust_insert {position} {
    	$textWidget mark set insert $position
    	$textWidget yview -pickplace insert
        }

        method up {{lines 1}} {
    	adjust_insert "insert - $lines line"
        }

        method down {{lines 1}} {
    	adjust_insert "insert + $lines line"
        }

        method left {{chars 1}} {
    	adjust_insert "insert - $chars chars"
        }

        method right {{chars 1}} {
    	adjust_insert "insert + $chars chars"
        }

        method home {} {
    	adjust_insert 1.0
        }

        method end {} {adjust_insert end}

        method add_bindings {} {
    	bind $textWidget <Up> "$this up"
    	bind $textWidget  "$this down"
    	bind $textWidget  "$this left"
    	bind $textWidget  "$this right"
    	bind $textWidget  "$this home"
    	bind $textWidget  "$this end"
        }

        public textWidget

[next] [prev] [TOC]

## Command

Thermometer - an [incr tcl] class

### Synopsis

Thermometer object -scaleWindow something -text {Percent Complete}

inherits

object configure config
object create scaleWindowArg
object setf percent
object ratio howfar total
object text string

### Description

    #@package: Thermometer Thermometer
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # This file defines a Thermometer class, which can be used to graphically
    # show the progress of the loading of a file, etc.
    #
    # In its main function, it can take either a percent complete, or two number
    # which represent a ratio of how far done the activity is, and it will
    # adjust its appearance accordingly.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #

        constructor {config} {
        }

        method configure {config} {
        }

        method create {scaleWindowArg} {
    	set scaleWindow $scaleWindowArg

    	frame $scaleWindow

    	label $scaleWindow.label -text $text
    	pack $scaleWindow.label

    	frame $scaleWindow.progress
    	pack $scaleWindow.progress

            frame $scaleWindow.progress.indicator  -geometry 1x20 -relief raised -borderwidth 2  -bg SteelBlue1
            pack $scaleWindow.progress.indicator -expand yes -anchor sw

    	frame $scaleWindow.progress.distance -geometry 201x5  -relief flat -bg black
    	pack $scaleWindow.progress.distance -anchor sw
        }

        method setf {percent} {
    	if {$percent == $previousPercent} return
    	set previousPercent $percent
    	$scaleWindow.progress.indicator configure -geometry [expr $percent*2+1]x20
    	update
        }

        method ratio {howfar total} {
    	setf [expr int($howfar * 100.0 / $total)]
        }

        method text {string} {
    	$scaleWindow.label configure -text $string
        }

        protected previousPercent -1

        public scaleWindow
        public text "Percent Complete"

[next] [prev] [TOC]

## Command

ToplevelListbox - an [incr tcl] class

### Synopsis

ToplevelListbox object -windowName .toplevel_listbox -dismissCommand delete

inherits Listbox

object build_display config
object dismiss
object hide
object unhide

### Description

    #
    # This listbox builds on the previous one... It creates a
    # listbox in a toplevel window, and adds a "-dismissCommand" that
    # can be specified to do something special if the window is dismissed.
    #
    # In any case the dismiss button is created, if the -dismissCommand
    # is not specified, it just deletes the window.
    #

        inherit Listbox

        constructor {config} {
    	set w $windowName
    	build_display
        }

        destructor {
    	Listbox::destructor
    	catch {destroy $w}
        }

        method build_display {config} {
    	catch {destroy $w}
    	toplevel $w
    	wm minsize $w 1 1

    	frame $w.keys
    	pack $w.keys -fill x

    	button $w.keys.dismiss -text "Dismiss" -command "$this dismiss"
    	pack $w.keys.dismiss -side left

    	set boxframe $w.boxframe
    	frame $boxframe
    	Listbox::constructor -frame $boxframe
    	pack $w.boxframe -side top -expand yes -fill both
        }

        method dismiss {} {
    	eval $this $dismissCommand
        }

        method hide {} {
    	wm withdraw $w
        }

        method unhide {} {
    	wm deiconify $w
        }

        protected w

        public windowName ".toplevel_listbox"
        public dismissCommand "delete"

[next] [prev] [TOC]

## Command

about_neosoft

### Synopsis

about_neosoft application year

### Description

    #@package: neologo about_neosoft
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #

        global NEOSOFT_ENV

        set w .about_neosoft
        catch {destroy $w}
        toplevel $w

        frame $w.titleFrame -relief raised

        label $w.titleFrame.neologo  -bitmap @$NEOSOFT_ENV(desktopBitmaps)/neologo.medium.xbm
        label $w.titleFrame.neosoft  -bitmap @$NEOSOFT_ENV(desktopBitmaps)/large-neosoft.xbm
        pack $w.titleFrame.neologo -side left
        pack $w.titleFrame.neosoft -side left
        pack $w.titleFrame -side top

        message $w.message -aspect 500  -text "$application\nCopyright (C) $year NeoSoft.  All Rights Reserved"  -font "*-medium-o-normal--*-240-*"
        pack $w.message -side top -fill both

        frame $w.buttonFrame
        button $w.buttonFrame.okButton -text "OK" -command "destroy $w"
        pack $w.buttonFrame.okButton
        pack $w.buttonFrame -side top -fill both

[next] [prev] [TOC]

## Command

add_pulldown

### Synopsis

add_pulldown command parentFrame menuName entryName args

### Description

        set menuFrame [combine_widgetnames $parentFrame menuFrame]
        set menu $menuFrame.$menuName.m
        eval $menu add $command -label \"$entryName\" $args

[next] [prev] [TOC]

## Command

add_pulldown_separator

### Synopsis

add_pulldown_separator parentFrame menuName

### Description

        set menuFrame [combine_widgetnames $parentFrame menuFrame]
        set menu $menuFrame.$menuName.m
        $menu add separator

[next] [prev] [TOC]

## Command

bind_pulldown_menus

### Synopsis

bind_pulldown_menus parentFrame

### Description

        global pulldownMenuElements
        set menuFrame [combine_widgetnames $parentFrame menuFrame]

        foreach frame [array names pulldownMenuElements] {
            eval tk_menuBar $frame $pulldownMenuElements($frame)
        }
        tk_bindForTraversal $menuFrame
        bind $parentFrame <Any-Enter> "focus $menuFrame"

[next] [prev] [TOC]

## Command

center_window

### Synopsis

center_window w

### Description

    #@package: neowindow center_window
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    #
    # Miscellaneous window goodies
    #
    #
    #
    # Center a window on the screen
    #

        # Center the window on the screen.

        wm withdraw $w
        update idletasks
        set x [expr [winfo screenwidth $w]/2 - [winfo reqwidth $w]/2  - [winfo vrootx $w]]
        set y [expr [winfo screenheight $w]/2 - [winfo reqheight $w]/2  - [winfo vrooty $w]]
        wm geom $w +$x+$y
        wm deiconify $w

[next] [prev] [TOC]

## Command

combine_widgetnames

### Synopsis

combine_widgetnames parentName childName

### Description

    #@package: menu1 create_pulldown_menu
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    #
    # first cut at menus, see control station to see it in use
    #
    # doesn't do enough, but it at least simplifies things
    #
    #

        if {$parentName == "."} {
            return .$childName
        }
        return $parentName.$childName

[next] [prev] [TOC]

## Command

create_pulldown_menu

### Synopsis

create_pulldown_menu parentFrame menuName menuText underline {packing left}

### Description

        global pulldownMenuElements

        set menuFrame [combine_widgetnames $parentFrame menuFrame]
        set buttonName "$menuFrame.$menuName"
        menubutton $buttonName -text $menuText -menu $buttonName.m -underline $underline
        menu $buttonName.m
        pack append $menuFrame $buttonName $packing
        lappend pulldownMenuElements($menuFrame) $buttonName

[next] [prev] [TOC]

## Command

create_scrollable_canvas

### Synopsis

create_scrollable_canvas w

### Description

    #@package: neocanvas create_scrollable_canvas
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.

        frame $w
        canvas $w.canvas -yscroll "$w.yscroll set" -xscroll "$w.xscroll set"  -width 15c -height 5c -relief sunken

        scrollbar $w.yscroll -relief sunken  -command "$w.canvas yview"

        scrollbar $w.xscroll -relief sunken -orient horiz  -command "$w.canvas xview"

        pack $w.xscroll -side bottom -fill x
        pack $w.yscroll -side right -fill y
        pack $w.canvas -in $w -expand yes -fill both
        pack $w -side top -expand yes -fill both
        return $w

[next] [prev] [TOC]

## Command

fileselect

### Synopsis

fileselect {cmd fileselect.default.cmd} {purpose "file:"} {w .file_select}

### Description

      catch {destroy $w}

        global FS_cmd FS_w
        set FS_cmd $cmd
        set FS_w $w

        toplevel $w
        wm title $w "Select File"

        # path independent names for the widgets
        global entry FS_list ok cancel dirlabel

        set entry $w.file.eframe.entry
        set FS_list $w.file.sframe.list
        set scroll $w.file.sframe.scroll
        set ok $w.bframe.okframe.ok
        set cancel $w.bframe.cancel
        set dirlabel $w.file.dirlabel

        # widgets
        frame $w.file -bd 10
        frame $w.bframe -bd 10
        pack $w.file -side left -fill y
        pack $w.bframe -side left -expand yes -anchor n

        frame $w.file.eframe
        frame $w.file.sframe
        label $w.file.dirlabel -width 24 -anchor e -text [exec pwd]

        pack $w.file.eframe -side top -anchor w
        pack $w.file.sframe -side top -anchor w
        pack $w.file.dirlabel -side top -anchor w

        label $w.file.eframe.label -text "$purpose"
        entry $w.file.eframe.entry -relief sunken

        pack $w.file.eframe.label -side top -expand yes -anchor w
        pack $w.file.eframe.entry -side top -fill x -anchor w

        scrollbar $w.file.sframe.yscroll -relief sunken  -command "$w.file.sframe.list yview"

        listbox $w.file.sframe.list -relief sunken  -geometry "25x10"  -yscroll "$w.file.sframe.yscroll set"

        pack $w.file.sframe.yscroll -side right -fill y
        pack $w.file.sframe.list -side left

        # buttons
        frame $w.bframe.okframe -borderwidth 2 -relief sunken

        button $w.bframe.okframe.ok -text OK -relief raised -padx 10  -command "ok.cmd;"

        button $w.bframe.cancel -text cancel -relief raised -padx 10  -command "cancel.cmd; destroy $w"
        pack $w.bframe.okframe.ok -padx 10 -pady 10

        pack $w.bframe.okframe -expand yes -padx 20 -pady 20
        pack $w.bframe.cancel -side top

        # Fill the listbox with a list of all the files in the directory (run
        # the "ls" command to get that information).

        foreach i [exec ls -a [exec pwd]] {
            if {[string compare $i "."] != 0} {
                $FS_list insert end $i
            }
        }

       # Set up bindings for the browser.
        bind $entry <Return> {eval $ok invoke}
        bind $entry  {eval $cancel invoke}

        bind $w  {eval $cancel invoke}
        bind $w  {eval $ok invoke}

       bind $FS_list  {
            # puts stderr "button 1"
            %W select from [%W nearest %y]
            %W select to [%W nearest %y]
    	eval $entry delete 0 end
    	eval $entry insert 0 [%W get [%W nearest %y]]
        }

        bind $FS_list  {
            %W select from [%W nearest %y]
            %W select to [%W nearest %y]
            eval $entry delete 0 end
    	eval $entry insert 0 [%W get [%W nearest %y]]
        }

        bind $FS_list  " "

        bind $FS_list  {
            # puts stderr "double button 1"
    	eval $ok invoke
        }

        bind $FS_list  {
            %W select from [%W nearest %y]
            %W select to [%W nearest %y]
    	eval $entry delete 0 end
    	eval $entry insert 0 [%W get [%W nearest %y]]
    	eval $ok invoke
        }

        # button procedures

        proc cancel.cmd {} {
    	puts stderr "Cancel"
        }

        proc ok.cmd {} {

            global entry dirlabel FS_list
            set selected [$entry get]

            if {[file isdirectory $selected] != 0} {
                cd $selected
                set dir [exec pwd]
    	    eval $dirlabel configure -text $dir
                $FS_list delete 0 end
    	    foreach i [exec ls -a $dir] {
    	        if {[string compare $i "."] != 0} {
    	            eval $FS_list insert end $i
    	        }
    	    }
    	    return
    	}

            global FS_cmd FS_w
    	eval $FS_cmd $FS_w $selected
        }

[next] [prev] [TOC]

## Command

fileselect.default.cmd

### Synopsis

fileselect.default.cmd w f

### Description

    #@package: fileselect fileselect
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    # Originally from Mario J. Silva
    #From: msilva@mercenary.CS.Berkeley.EDU (Mario J. Silva)
    #Date: 16 Jan 93 15:12:01
    #Distribution: world
    #Message-ID:
    #References: <1j97ddINN43q@urmel.informatik.rwth-aachen.de>
    #In-reply-to: kuku@acds.physik.rwth-aachen.de's message of 16 Jan 1993 14:51:25 GMT
    #
    #This one mimicks Framemaker's file selector.
    #Never tried it with tk3.0, but I believe changes will be minimal, if
    #any. As this is pre-tk3.0, there are no grabs. That should now be
    #easy. Just add a couple of Tcl/Tk lines at the right place.
    #Mario Jorge Silva			          msilva@cs.Berkeley.EDU
    #University of California Berkeley                 Ph:    +1(510)642-8248
    #Computer Science Division, 571 Evans Hall         Fax:   +1(510)642-5775
    #Berkeley CA 94720
    #
    #
    #  file:                  +----+
    #  ____________________   | OK |
    #                         +----+
    #
    #  +------------------+    Cancel
    #  | ..               |S
    #  | file1            |c
    #  | file2            |r
    #  |                  |b
    #  | filen            |a
    #  |                  |r
    #  +------------------+
    #  currrent-directory
    # use the option command for further configuration

      puts stderr "selected file $f"
      destroy $w

[next] [prev] [TOC]

## Command

kfileselect

### Synopsis

kfileselect {purpose "file:"} {w .file_select}

### Description

    #@package: kfileselect kfileselect
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    # Originally from Mario J. Silva
    #From: msilva@mercenary.CS.Berkeley.EDU (Mario J. Silva)
    #Date: 16 Jan 93 15:12:01
    #Distribution: world
    #Message-ID:
    #References: <1j97ddINN43q@urmel.informatik.rwth-aachen.de>
    #In-reply-to: kuku@acds.physik.rwth-aachen.de's message of 16 Jan 1993 14:51:25 GMT
    #
    #This one mimicks Framemaker's file selector.
    #Never tried it with tk3.0, but I believe changes will be minimal, if
    #any. As this is pre-tk3.0, there are no grabs. That should now be
    #easy. Just add a couple of Tcl/Tk lines at the right place.
    #Mario Jorge Silva			          msilva@cs.Berkeley.EDU
    #University of California Berkeley                 Ph:    +1(510)642-8248
    #Computer Science Division, 571 Evans Hall         Fax:   +1(510)642-5775
    #Berkeley CA 94720
    #
    #
    #  file:                  +----+
    #  ____________________   | OK |
    #                         +----+
    #
    #  +------------------+    Cancel
    #  | ..               |S
    #  | file1            |c
    #  | file2            |r
    #  |                  |b
    #  | filen            |a
    #  |                  |r
    #  +------------------+
    #  currrent-directory
    # use the option command for further configuration

      catch {destroy $w}

        global FS_cmd FS_w
        set FS_cmd ""
        set FS_w $w

        toplevel $w
        wm title $w "Select File"
        wm minsize $w 1 1

        # path independent names for the widgets
        global entry FS_list ok cancel dirlabel

        set entry $w.file.eframe.entry
        set FS_list $w.file.sframe.list
        set scroll $w.file.sframe.scroll
        set ok $w.bframe.okframe.ok
        set cancel $w.bframe.cancel
        set dirlabel $w.file.dirlabel

        # widgets
        frame $w.file -bd 10
        frame $w.bframe -bd 10
        pack $w.file -side left -fill both -expand yes
        pack $w.bframe -side left -anchor n

        frame $w.file.eframe
        frame $w.file.sframe
        label $w.file.dirlabel -anchor w -text [pwd]

        pack $w.file.eframe -side top -anchor w -fill x
        pack $w.file.sframe -side top -anchor w -expand yes -fill both
        pack $w.file.dirlabel -side top -anchor w -fill x

        label $w.file.eframe.label -text "$purpose"
        entry $w.file.eframe.entry -relief sunken

        pack $w.file.eframe.label -side top -anchor w -fill x
        pack $w.file.eframe.entry -side top -fill x -anchor w

        scrollbar $w.file.sframe.yscroll -relief sunken  -command "$w.file.sframe.list yview"

        listbox $w.file.sframe.list -relief sunken  -geometry "25x10"  -yscroll "$w.file.sframe.yscroll set"

        pack $w.file.sframe.yscroll -side right -fill y
        pack $w.file.sframe.list -side left  -fill both -expand yes

        # buttons
        frame $w.bframe.okframe -borderwidth 2 -relief sunken

        button $w.bframe.okframe.ok -text OK -relief raised -padx 10  -command "ok.cmd"

        button $w.bframe.cancel -text cancel -relief raised -padx 10  -command "cancel.cmd"
        pack $w.bframe.okframe.ok -padx 10 -pady 10

        pack $w.bframe.okframe -padx 20 -pady 20
        pack $w.bframe.cancel -side top

        # Fill the listbox with a list of all the files in the directory (run
        # the "ls" command to get that information).

        foreach i [lsort [glob .* *]] {
            if {$i != "."} {
                $FS_list insert end $i
            }
        }

       # Set up bindings for the browser.
        bind $entry <Return> {eval $ok invoke}
        bind $entry  {eval $cancel invoke}

        bind $w  {eval $cancel invoke}
        bind $w  {eval $ok invoke}

       bind $FS_list  {
            # puts stderr "button 1"
            %W select from [%W nearest %y]
            %W select to [%W nearest %y]
    	eval $entry delete 0 end
    	eval $entry insert 0 [%W get [%W nearest %y]]
        }

        bind $FS_list  {
            %W select from [%W nearest %y]
            %W select to [%W nearest %y]
            eval $entry delete 0 end
    	eval $entry insert 0 [%W get [%W nearest %y]]
        }

        bind $FS_list  " "

        bind $FS_list  {
            # puts stderr "double button 1"
    	eval $ok invoke
        }

        bind $FS_list  {
            %W select from [%W nearest %y]
            %W select to [%W nearest %y]
    	eval $entry delete 0 end
    	eval $entry insert 0 [%W get [%W nearest %y]]
    	eval $ok invoke
        }

        # button procedures

        proc cancel.cmd {} {
            global FS_cmd FS_w
            set FS_cmd ""
            destroy $FS_w
        }

        proc ok.cmd {} {

            global entry dirlabel FS_list
            set selected [$entry get]

            if {[file isdirectory $selected] != 0} {
                cd $selected
                set dir [pwd]
    	    eval $dirlabel configure -text $dir
                $FS_list delete 0 end
    	    foreach i [lsort [glob $dir/.* $dir/*]] {
    	        if {[string compare $i "."] != 0} {
    	            eval $FS_list insert end $i
    	        }
    	    }
    	    return
    	}

            global FS_cmd FS_w
    	set FS_cmd $selected
            destroy $FS_w
        }

        tkwait window $w
        return $FS_cmd

[next] [prev] [TOC]

## Command

list_listbox_subwindow

### Synopsis

list_listbox_subwindow w label geometry list

### Description

    #@package: boxwindow list_listbox_subwindow
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    #
    #
    # set result [list_listbox_subwindow .windowname "Show this text" $list]
    #
    # Does a listbox thing with scroll bars where each entry is an element in
    # the passed list.  Clicking cancel causes it to
    # return empty, clicking OK or double clicking an entry returns the
    # name of the corresponding array element.
    #
    # If more than one entry is selected, only the first one is returned.
    #

        upvar #0 result_$w result
        catch {destroy $w}
        toplevel $w

        label $w.label -text $label
        pack $w.label -side top

        frame $w.frame
        pack $w.frame -side top

        scrollbar $w.frame.yscroll -relief sunken -command "$w.frame.list yview"
        pack $w.frame.yscroll -side right -fill y

        scrollbar $w.frame.xscroll -relief sunken -orient horizontal  -command "$w.frame.list xview"
        pack $w.frame.xscroll -side bottom -fill x

        listbox $w.frame.list -yscroll "$w.frame.yscroll set"  -xscroll "$w.frame.xscroll set"   -geometry $geometry -relief sunken
        pack $w.frame.list -side top

        bind $w.frame.list <Double-1> "list_subwindow_ok $w"

        foreach element $list {
            $w.frame.list insert end $element
        }

        frame $w.buttons
        button $w.buttons.ok -text OK -command "list_subwindow_ok $w"
        button $w.buttons.cancel -text Cancel -command "list_subwindow_cancel $w"
        pack $w.buttons.ok -side left -fill x
        pack $w.buttons.cancel -side left -fill x
        pack $w.buttons -side top

        tkwait window $w
        return $result

[next] [prev] [TOC]

## Command

list_subwindow_cancel

### Synopsis

list_subwindow_cancel w

### Description

        upvar #0 result_$w result
        set result ""
        destroy $w

[next] [prev] [TOC]

## Command

list_subwindow_ok

### Synopsis

list_subwindow_ok w

### Description

        upvar #0 result_$w result
        set result [$w.frame.list get [lindex [$w.frame.list curselection] 0]]
        destroy $w

[next] [prev] [TOC]

## Command

modal_dialog

### Synopsis

modal_dialog msgArgs args

### Description

    #@package: modal_dialog modal_dialog
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    # modal_dialog msgArgs list list ...
    #
    # Create a modal dialog box with a message and any number of buttons at
    # the bottom.
    #
    # Arguments:
    #    msgArgs -	List of arguments to use when creating the message of the
    #		dialog box (e.g. text, justifcation, etc.)
    #
    #    list -	A two-element list that describes one of the buttons that
    #		will appear at the bottom of the dialog.  The first element
    #		gives the text to be displayed in the button and the second
    #		gives the value to be returned when the button is invoked.
    #               If the second element doesn't exist, the first is returned.
    #
    #modal_dialog {-text {Modal dialog.} -aspect 250 -justify left} {OK ok} {Cancel slag_off}
    #

        global modalDialogResult

        set w ".modal_dialog"
        catch {destroy $w}
        toplevel $w -class Dialog
        wm minsize $w 1 1
        wm title $w "Dialog box"
        wm iconname $w "Dialog"

        # Create two frames in the main window. The top frame will hold the
        # message and the bottom one will hold the buttons.  Arrange them
        # one above the other, with any extra vertical space split between
        # them.

        frame $w.top -relief raised -border 1
        frame $w.bot -relief raised -border 1
        pack $w.top -side top -fill both -expand yes
        pack $w.bot -side top -fill both -expand yes

        # Create the message widget and arrange for it to be centered in the
        # top frame.

        eval message $w.top.msg -justify center  -font -Adobe-times-medium-r-normal--*-180* $msgArgs
        pack $w.top.msg -side top -expand yes -padx 5 -pady 5

        # Create as many buttons as needed and arrange them from left to right
        # in the bottom frame.  Embed the left button in an additional sunken
        # frame to indicate that it is the default button, and arrange for that
        # button to be invoked as the default action for clicks and returns in
        # the dialog.

        if {[llength $args] > 0} {
    	set arg [lindex $args 0]
            set resultText [lindex $arg 1]
            if {$resultText == ""} {
                set resultText [lindex $arg 0]
            }
    	frame $w.bot.0 -relief sunken -border 1
    	pack $w.bot.0 -side left -expand yes -padx 20 -pady 20
    	button $w.bot.0.button -text [lindex $arg 0]  -command "destroy $w; set modalDialogResult \"$resultText\""
    	pack $w.bot.0.button -expand yes -padx 12 -pady 12
    	bind $w <Return> "destroy $w; set modalDialogResult \"$resultText\""
    	focus $w

    	set i 1
    	foreach arg [lrange $args 1 end] {
                set resultText [lindex $arg 1]
                if {$resultText == ""} {
                    set resultText [lindex $arg 0]
                }
    	    button $w.bot.$i -text [lindex $arg 0]  -command "destroy $w; set modalDialogResult \"$resultText\""
    	    pack $w.bot.$i -side left -expand yes -padx 20
    	    set i [expr $i+1]
    	}
        }
        bind $w  [list focus $w]
        bind $w  "grab $w; focus $w"
        center_window $w
        tkwait window $w
        return $modalDialogResult

[next] [prev] [TOC]

## Command

modal_dialog_bitmap

### Synopsis

modal_dialog_bitmap bitmap msgArgs args

### Description

    #@package: modal_dialog2 modal_dialog_bitmap
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    # modal_dialog msgArgs list list ...
    #
    # Create a modal dialog box with a message and any number of buttons at
    # the bottom.
    #
    # Arguments:
    #    msgArgs -	List of arguments to use when creating the message of the
    #		dialog box (e.g. text, justifcation, etc.)
    #
    #    list -	A two-element list that describes one of the buttons that
    #		will appear at the bottom of the dialog.  The first element
    #		gives the text to be displayed in the button and the second
    #		gives the value to be returned when the button is invoked.
    #               If the second element doesn't exist, the first is returned.
    #
    #modal_dialog_bitmap @~/icons/skull.xbm {-text {Modal dialog.} -aspect 250 -justify left} {OK ok} {Cancel slag_off}
    #

        global modalDialogResult

        set w ".modal_dialog"
        catch {destroy $w}
        toplevel $w -class Dialog
        wm minsize $w 1 1
        wm title $w "Dialog box"
        wm iconname $w "Dialog"

        # Create two frames in the main window. The top frame will hold the
        # message and the bottom one will hold the buttons.  Arrange them
        # one above the other, with any extra vertical space split between
        # them.

        frame $w.top -relief raised -border 1
        frame $w.bot -relief raised -border 1
        pack $w.top -side top -fill both -expand yes
        pack  $w.bot -side top -fill both -expand yes

        # Create the message widget and arrange for it to be centered in the
        # top frame.

        label $w.top.label -bitmap $bitmap
        pack $w.top.label -side left -expand yes -padx 5 -pady 5

        eval message $w.top.msg -justify center  -font -Adobe-times-medium-r-normal--*-180* $msgArgs
        pack $w.top.msg -side left -expand yes -padx 5 -pady 5

        # Create as many buttons as needed and arrange them from left to right
        # in the bottom frame.  Embed the left button in an additional sunken
        # frame to indicate that it is the default button, and arrange for that
        # button to be invoked as the default action for clicks and returns in
        # the dialog.

        if {[llength $args] > 0} {
    	set arg [lindex $args 0]
            set resultText [lindex $arg 1]
            if {$resultText == ""} {
                set resultText [lindex $arg 0]
            }
    	frame $w.bot.0 -relief sunken -border 1
    	pack $w.bot.0 -side left -expand yes -padx 20 -pady 20
    	button $w.bot.0.button -text [lindex $arg 0]  -command "destroy $w; set modalDialogResult \"$resultText\""
    	pack $w.bot.0.button -expand yes -padx 12 -pady 12
    	bind $w <Return> "destroy $w; set modalDialogResult \"$resultText\""
    	focus $w

    	set i 1
    	foreach arg [lrange $args 1 end] {
                set resultText [lindex $arg 1]
                if {$resultText == ""} {
                    set resultText [lindex $arg 0]
                }
    	    button $w.bot.$i -text [lindex $arg 0]  -command "destroy $w; set modalDialogResult \"$resultText\""
    	    pack $w.bot.$i -side left -expand yes -padx 20
    	    set i [expr $i+1]
    	}
        }
        bind $w  [list focus $w]
        bind $w  "grab $w; focus $w"
        center_window $w
        tkwait window $w
        return $modalDialogResult

[next] [prev] [TOC]

## Command

neosoft:font1:crack_fonts

### Synopsis

neosoft:font1:crack_fonts

### Description

    # additional fields in assign_fields would be
    # pointSize xResolution yResolution spacing averageWidth
    # registry encoding

        global fontPoints fontInfo

        for_file line "|xlsfonts" {
            assign_fields [split $line "-"]  dummy foundry family weight slant width style pixelSize

            if [info exists fontPoints($family)] {
                if {[lsearch $fontPoints($family) $pixelSize] < 0} {
                    lappend fontPoints($family) $pixelSize
                }
            } else {
                set fontPoints($family) $pixelSize
            }

            lappend fontInfo($family:$pixelSize)  [list $foundry $weight $slant $width]
        }

[next] [prev] [TOC]

## Command

neosoft:font1:create_font_selector

### Synopsis

neosoft:font1:create_font_selector w

### Description

        global fontPoints fontInfo
        global NEOSOFT_ENV

        set dropBitmap $NEOSOFT_ENV(desktopBitmaps)/standard/Down

        frame $w

        label $w.name_label -text "Font"
        entry $w.font_name -relief raised -width 20
        button $w.drop_font_button -bitmap @$dropBitmap -command "neosoft:font1:drop_fontlist $w"
        pack $w.name_label -side left
        pack $w.font_name -side left
        pack $w.drop_font_button -side left

        label $w.size_label -text "Size"
        entry $w.font_size -relief raised -width 3
        button $w.drop_size_button -bitmap @$dropBitmap -command "neosoft:font1:drop_fontsizelist $w"
        pack $w.size_label -side left
        pack $w.font_size -side left
        pack $w.drop_size_button -side left

        label $w.info_label -text "Characteristics"
        entry $w.font_info -relief raised -width 30
        button $w.drop_info_button -bitmap @$dropBitmap -command "neosoft:font1:drop_fontinfolist $w"
        pack $w.info_label -side left
        pack $w.font_info -side left
        pack $w.drop_info_button -side left

        neosoft:font1:set_font_defaults $w
        return $w

[next] [prev] [TOC]

## Command

neosoft:font1:create_font_tag

### Synopsis

neosoft:font1:create_font_tag w textWidget

### Description

        set tagName [neosoft:font1:get_current_font_string $w]
        $textWidget tag configure $tagName -font $tagName

        return $tagName

[next] [prev] [TOC]

## Command

neosoft:font1:drop_fontinfolist

### Synopsis

neosoft:font1:drop_fontinfolist w

### Description

        global fontInfo fontPoints

        set fontName [$w.font_name get]
        if ![info exists fontPoints($fontName)] {
            modal_dialog "I know of no font named '$fontName'" Cancel
            return
        }

        set pixelSize [$w.font_size get]

        set indexName $fontName:$pixelSize
        if ![info exists fontInfo($indexName)] {
            modal_dialog "I have no font named '$fontName' at a pixel size of '$pixelSize'." Cancel
            return
        }

        set pointInfoList $fontInfo($indexName)
        set pointInfo [list_listbox_subwindow .fontlist  "Please select font characteristics."  35x4 [lsort $pointInfoList]]
        $w.font_info delete 0 end
        $w.font_info insert 0 $pointInfo

[next] [prev] [TOC]

## Command

neosoft:font1:drop_fontlist

### Synopsis

neosoft:font1:drop_fontlist w

### Description

        global fontPoints
        set font [list_listbox_subwindow .fontlist "Please pick a font."  20x10 [lsort [array names fontPoints]]]
        $w.font_name delete 0 end
        $w.font_name insert 0 $font

[next] [prev] [TOC]

## Command

neosoft:font1:drop_fontsizelist

### Synopsis

neosoft:font1:drop_fontsizelist w

### Description

        global fontPoints
        set fontName [$w.font_name get]
        if ![info exists fontPoints($fontName)] {
            modal_dialog "I know of no font named '$fontName'" Cancel
            return
        }
        set pixelSizeList $fontPoints($fontName)
        set pixelSize [list_listbox_subwindow .fontlist  "Please pick a point size."  5x5 [lsort $pixelSizeList]]
        $w.font_size delete 0 end
        $w.font_size insert 0 $pixelSize

[next] [prev] [TOC]

## Command

neosoft:font1:dump_fonts

### Synopsis

neosoft:font1:dump_fonts

### Description

        global fontPoints fontInfo

        foreach family [array names fontPoints] {

            set points [lsort $fontPoints($family)]
            echo '$family' $points
            foreach size $points {
                echo "    $fontInfo($family:$size)"
            }
        }

[next] [prev] [TOC]

## Command

neosoft:font1:get_current_font_string

### Synopsis

neosoft:font1:get_current_font_string w

### Description

        set fontName [$w.font_name get]
        set pixelSize [$w.font_size get]
        assign_fields [$w.font_info get] foundry weight slant width

        return [join [list "" $foundry $fontName $weight $slant $width "" $pixelSize *] "-"]

[next] [prev] [TOC]

## Command

neosoft:font1:set_font_defaults

### Synopsis

neosoft:font1:set_font_defaults w

### Description

    #@package: neosoft:font1 neosoft:font1:create_font_selector neosoft:font1:crack_fonts
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #
    #font family
    #    point size
    #        family
    #        weight
    #        slant
    #        width
    #        style

        $w.font_name delete 0 end
        $w.font_name insert end "new century schoolbook"

        $w.font_size delete 0 end
        $w.font_size insert end 10

        $w.font_info delete 0 end
        $w.font_info insert end "adobe medium i normal"

[prev] [TOC]

## Command

neosoft_init

### Synopsis

neosoft_init

### Description

    #@package: neosoft_init neosoft_init
    #
    # Copyright (C) 1992-1996 NeoSoft.
    #
    # Permission to use, copy, modify, and distribute this software and its
    # documentation for any purpose and without fee is hereby granted, provided
    # that the above copyright notice appear in all copies.  NeoSoft makes no
    # representations about the suitability of this software for any purpose.
    # It is provided "as is" without express or implied warranty.
    #
    # $Id: neo_tklib.html,v 1.1.1.1 1999/03/31 20:34:36 damon Exp $
    #