#!/usr/bin/env tclsh
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

source [file join [file dirname [info script]] ".." "prologue.tcl"]

proc putLibraryDirectory {} {
  foreach directory [concat $::tcl_library [lindex [::tcl::pkgconfig get libdir,install] 0] $::auto_path] {
     set file [file join $directory tclConfig.sh]

     if {[file isfile $file]} {
        puts $file
        break
     }
  }
}

set optionDefinitions {
}

processProgramArguments optionValues $optionDefinitions positionalArguments "\{config\}"

if {![nextElement positionalArguments action]} {
  syntaxError "action not specified"
}

switch -exact "$action" {
  config {
    noMorePositionalArguments $positionalArguments
    putLibraryDirectory
  }

  default {
    syntaxError "unknown action: $action"
  }
}

exit 0
