#[macro_use] extern crate log; use crsn::asm::error::CrsnError; use crsn::asm::instr::op::OpKind; use crsn::asm::parse::arg_parser::TokenParser; use crsn::module::{CrsnExtension, ParseRes}; use crsn::sexp::SourcePosition; use crsn::asm::data::literal::Value; use crate::exec::{OPT_AUTO_BLIT, OPT_FRAME_RATE, OPT_UPSCALE}; mod defs; mod parse; mod exec; #[derive(Debug, Clone)] pub struct ScreenOps; impl ScreenOps { pub fn new() -> Box { Box::new(Self) } } impl CrsnExtension for ScreenOps { fn name(&self) -> &'static str { "screen" } fn parse_op<'a>(&self, pos: &SourcePosition, keyword: &str, args: TokenParser<'a>) -> Result, CrsnError> { parse::parse(pos, keyword, args) } /// Get value of an extension-provided constant. /// This constant may be an object handle, or a constant value used as argument in some other instruction. fn get_constant_value<'a>(&self, name: &str) -> Option { match name { "SCREEN_AUTO_BLIT" => Some(OPT_AUTO_BLIT), "SCREEN_FPS" => Some(OPT_FRAME_RATE), "SCREEN_UPSCALE" => Some(OPT_UPSCALE), _ => None } } }