use crsn::asm::data::Rd; use crsn::asm::error::CrsnError; use crsn::asm::instr::op::OpKind; use crsn::asm::parse::arg_parser::TokenParser; use crsn::module::ParseRes; use crate::defs::ScreenOp; pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result, CrsnError> { Ok(ParseRes::ext(match keyword { "sc-init" => { ScreenOp::ScreenInit { width: args.next_rd()?, height: args.next_rd()?, } } "sc-px" => { ScreenOp::SetPixel { x: args.next_rd()?, y: args.next_rd()?, color: args.next_rd()?, } } "sc-opt" => { ScreenOp::SetOpt { opt: args.next_rd()?, val: args.next_rd()?, } } "sc-blit" => { ScreenOp::Blit { force: if args.have_more() { args.next_rd()? } else { Rd::immediate(1) }, } } _other => { return Ok(ParseRes::Unknown(args)); } })) }