#![feature(unix_socket_ancillary_data)] #![feature(str_from_utf16_endian)] #![feature(try_blocks)] #![allow(dead_code, unused_variables)] mod assets; mod terminal; mod background; mod toggle; mod overlay; mod input; mod ffi; mod texture_server; use teleia::*; use clap::{command, Command, Arg}; use std::io::Write as _; pub fn main() -> Erm<()> { let matches = command!() .propagate_version(true) .subcommand_required(true) .arg_required_else_help(true) .subcommand( Command::new("overlay") .about("Run the full-screen transparent overlay") ) .subcommand( Command::new("model-terminal") .about("Run the LCOLONQ model renderer in a terminal") ) .subcommand( Command::new("validate-card") .arg(Arg::new("path")) .about("Validate the TCG card at the given path.") ) .subcommand( Command::new("repair-card") .arg(Arg::new("path")) .about("Repair the TCG card at the given path.") ) .get_matches(); match matches.subcommand() { Some(("overlay", _cm)) => { teleia::run("LCOLONQ", 1920, 1080, teleia::Options::OVERLAY, |ctx| { overlay::Overlays::new(ctx, vec![ Box::new(overlay::automata::Overlay::new(ctx)), Box::new(overlay::shader::Overlay::new(ctx)), Box::new(overlay::tcg::Overlay::new(ctx)), Box::new(overlay::clippy::Overlay::new(ctx)), Box::new(overlay::combo::Overlay::new(ctx)), Box::new(overlay::drawing::Overlay::new(ctx)), // Box::new(overlay::model::Overlay::new(ctx)), // Box::new(overlay::loopback::Overlay::new(ctx)), ]) })?; }, Some(("model-terminal", _cm)) => { teleia::run("LCOLONQ", 1920, 1080, teleia::Options::HIDDEN, overlay::model::Terminal::new)?; }, Some(("validate-card", cm)) => { if let Some(path) = cm.get_one::("path") { if overlay::tcg::validate_card(&std::fs::read(path)?)? { println!("signatures match!"); std::process::exit(0); } else { println!("signatures do not match"); std::process::exit(1); } } else { eprintln!("no path specified"); } }, Some(("repair-card", cm)) => { if let Some(path) = cm.get_one::("path") { let res = overlay::tcg::repair_card(&std::fs::read(path)?)?; std::io::stdout().write_all(&res)?; } else { eprintln!("no path specified"); } }, _ => unreachable!("no subcommand"), } Ok(()) }