###########################################################################
#
#	File:     main.icn
#
#	Subject:  Procedure for main part of charpatt
#
#	Author:   Ralph E. Griswold
#
#	Date:     September 24, 1998
#
############################################################################
#
#  This file is in the public domain.
#
############################################################################

link interact
link io
link lindgen
link lists
link navitrix
link strings
link tables
link vsetup

global definitions		# definitions display area
global depth			# grammar depth
global filename			# file name display area
global find_string		# string specified for constant search
global goal			# goal string
global grammar			# grammar saved toggle
global gsize			# grammar size display area
global interrupt_signal		# note user interruption of searching
global maxl			# maximum repetition length
global maxn			# maximum n-gram length
global mid			# part of workspace string to search
global minl			# minimum repetition length
global minn			# minimum n-gram length
global variable		        # variable display area
global note			# comment related to grammar
global open_proc		# procedure for opening file
global plist			# pattern list vidget
global redo_list		# list of past states for redo feature
global root_cur			# current root vidget
global secrange			# range for section()
global slist			# symbol list vidget
global symbol			# focus symbol
global symbol_tbl		# table of symbols
global symbols_list		# list for symbol_tbl
global symbols_list_auto	# list of symbols for auto-encoding
global symbols_list_full	# full list of symbols
global symsleft			# symbols-left button
global token_tbl		# table of tokens
global touched			# dirty data toggle
global undo_list		# list of past states for undo feature
global vidgets			# table of vidgets
global workspace_string		# current working string

$include "defines.icn"

procedure main()
   local root, shortcuts_cur
   
   nav_init()			# setup up navigation interface

   vidgets := ui()		# &window will be this app's window ...

   root := vidgets["root"]

   plist := vidgets["plist"]	# pattern list vidget
   slist := vidgets["slist"]	# symbol list vidget

   definitions := vidgets["definitions"]	# definitions display area
   depth := vidgets["depth"]			# depth display area
   filename := vidgets["filename"]		# file name display area
   gsize := vidgets["size"]			# grammar size display area
   symsleft := vidgets["left"]			# symbols-left display area
   variable := vidgets["variable"]		# variable display area

   maxl := minl := "8"
   maxn := minn := 4
   secrange := "1:0"

   goal := "*"

   symbols_list_full := []
   every put(symbols_list_full, !(&ucase | &lcase | "!@$%^&_+-=`~|\\:;\"'.?/" |
      &cset[162:-1]))

   symbols_list_auto := []
   every put(symbols_list_auto, !(&lcase || &ucase || &digits ||
      &cset[162:-1]))

   symbols_list := copy(symbols_list_full)

   setup_grammar()

   repeat {			# event loop
      case Active() of {
         &window    :  {
            root_cur := root
            shortcuts_cur := shortcuts
            }
         nav_window :  {
            root_cur := nav_root
            shortcuts_cur := nav_keyboard
            }
         }
      ProcessEvent(root_cur, , shortcuts_cur)
      case nav_state of {
         &null   :  next
         "Okay"  :  open_proc()
         }
      nav_state := &null
      WAttrib(nav_window, "canvas=hidden")
      }

end