#!/bin/env tclsh #*** # [manpage_begin main_thread tclircc 0.0.1] # [titledesc {Thread main}] # [description] set path [file dirname [dict get [info frame 0] file]] set version v0.0.1 proc src {file} { global path uplevel [list source [file join $path $file]] } package require Thread thread::id; # avoid use-after-free package require logger set log [logger::init tclircc::main] package require sqlite3 ${log}::info "tclircc $version <https://amehut.dev/~aleteoryx/tclircc>" ${log}::info "running from $path" src threads.tcl proc on_threads_update {} { puts "threads updated!" t::debug } proc start_thread {name} { global path global version global log ${log}::debug "starting $name thread..." set thread [thread::create -preserved] threads::manage $thread tclircc::$name thread::send $thread [list variable path $path version $version] if {[thread::send $thread \ [list source [file join $path $name main.tcl] ] result] == 1} { ${log}::critical "couldn't start $name thread: $result" exit -1 } ${log}::debug "started $name thread." } start_thread db thread::send [t::ns tclircc::db] {path_to_core} core_db_path sqlite3 core_db $core_db_path -create true -fullmutex true src migrate_core.tcl src plugins.tcl start_thread irc start_thread ui plugins::load [file join $path .. testplugin] ${log}::debug "opening initial window..." t::exec tclircc::ui { mk_toplevel name expr {$name} } { ${log}::debug "initial window opened: $result" } ${log}::info "entering event loop" vwait nil #*** # [manpage_end]