#!/usr/bin/perl # eg/braktif/script/braktif.pl - automatically generated from eg/braktif/src/braktif.alp by: # alpaca.pl v0.93 # http://catseye.webhop.net/projects/alpaca/ ###################################################### use Alpaca qw(true false guess adjacent_state adjacent_class load_playfield display_playfield process_playfield); sub SpaceStateRules { return 'SkipBack' if (($Playfield->[$x][$y-1] eq 'WakeMark' and $Playfield->[$x+1][$y-1] eq 'WendCmd') or ($Playfield->[$x+1][$y] eq 'SkipBack')); return 'SkipStart' if ($Playfield->[$x-1][$y-1] eq 'SkipReply' and $Playfield->[$x][$y-1] eq 'InstrMark'); return 'SkipFore' if ($Playfield->[$x-1][$y+1] eq 'SkipStart' or $Playfield->[$x-1][$y] eq 'SkipFore'); return 'Space' }; sub BusStateRules { return $Playfield->[$x+1][$y] if (SignalClassMember($Playfield->[$x+1][$y])); return $Playfield->[$x+1][$y-1] if (SignalClassMember($Playfield->[$x+1][$y-1])); return $Playfield->[$x+1][$y+1] if (SignalClassMember($Playfield->[$x+1][$y+1])); return $Playfield->[$x-1][$y] if (ReplyClassMember($Playfield->[$x-1][$y])); return $Playfield->[$x-1][$y-1] if (ReplyClassMember($Playfield->[$x-1][$y-1])); return $Playfield->[$x-1][$y+1] if (ReplyClassMember($Playfield->[$x-1][$y+1])); return 'ContTool' if ($Playfield->[$x+1][$y] eq 'LeftTool' or $Playfield->[$x-1][$y] eq 'RightTool'); return 'ContReply' if ($Playfield->[$x-1][$y] eq 'ContTool'); return 'SkipReply' if ($Playfield->[$x-1][$y] eq 'SkipTool'); return 'LeftSig' if ($Playfield->[$x+1][$y] eq 'InstrPtr' and $Playfield->[$x+1][$y-1] eq 'LeftCmd'); return 'RightSig' if ($Playfield->[$x+1][$y] eq 'InstrPtr' and $Playfield->[$x+1][$y-1] eq 'RightCmd'); return 'FlipSig' if ($Playfield->[$x+1][$y] eq 'InstrPtr' and $Playfield->[$x+1][$y-1] eq 'FlipCmd'); return 'QuerySig' if ($Playfield->[$x+1][$y] eq 'InstrPtr' and $Playfield->[$x+1][$y-1] eq 'WhileCmd'); return 'InstrPtr' if ($Playfield->[$x-1][$y] eq 'WakeMark' or $Playfield->[$x-1][$y+1] eq 'WakeMark' or $Playfield->[$x-1][$y-1] eq 'Wakemark'); return 'InstrPtr' if ($Playfield->[$x-1][$y] eq 'InstrPtr' and $Playfield->[$x-1][$y-1] eq 'Space'); return 'InstrPtr' if ($Playfield->[$x+1][$y] eq 'SkipBack'); return 'SkipStop' if ($Playfield->[$x-1][$y] eq 'SkipFore'); return 'InstrPtr' if ($Playfield->[$x-1][$y] eq 'SkipStop'); return 'Bus' }; sub SignalClassRules { return 'Bus' if (1); return 0 }; sub ReplyClassRules { return 'Bus' if (1); return 0 }; sub LeftSigStateRules { return SignalClassRules() || 'LeftSig' }; sub RightSigStateRules { return SignalClassRules() || 'RightSig' }; sub FlipSigStateRules { return SignalClassRules() || 'FlipSig' }; sub QuerySigStateRules { return SignalClassRules() || 'QuerySig' }; sub ContReplyStateRules { return ReplyClassRules() || 'ContReply' }; sub SkipReplyStateRules { return ReplyClassRules() || 'SkipReply' }; sub DataPtrStateRules { return 'FlipTool' if ($Playfield->[$x+1][$y] eq 'FlipSig'); return 'LeftTool' if ($Playfield->[$x+1][$y] eq 'LeftSig'); return 'RightTool' if ($Playfield->[$x+1][$y] eq 'RightSig'); return 'SkipTool' if ($Playfield->[$x+1][$y] eq 'QuerySig' and $Playfield->[$x][$y-1] eq 'OffBit'); return 'ContTool' if ($Playfield->[$x+1][$y] eq 'QuerySig' and $Playfield->[$x][$y-1] eq 'OnBit'); return 'DataPtr' }; sub FlipToolStateRules { return 'ContTool' if (1); return 'FlipTool' }; sub LeftToolStateRules { return 'Bus' if (1); return 'LeftTool' }; sub RightToolStateRules { return 'Bus' if (1); return 'RightTool' }; sub ContToolStateRules { return 'DataPtr' if (1); return 'ContTool' }; sub SkipToolStateRules { return 'DataPtr' if (1); return 'SkipTool' }; sub OnBitStateRules { return 'OffBit' if ($Playfield->[$x][$y+1] eq 'FlipTool'); return 'OnBit' }; sub OffBitStateRules { return 'OnBit' if ($Playfield->[$x][$y+1] eq 'FlipTool'); return 'OffBit' }; sub InstrPtrStateRules { return 'Bus' if ($Playfield->[$x][$y-1] eq 'Space'); return 'InstrMark' if (1); return 'InstrPtr' }; sub InstrMarkStateRules { return 'WakeMark' if ($Playfield->[$x-1][$y] eq 'ContReply'); return 'Bus' if ($Playfield->[$x-1][$y] eq 'SkipReply'); return 'InstrMark' }; sub WakeMarkStateRules { return 'Bus' if (1); return 'WakeMark' }; sub SkipStartStateRules { return 'Space' if (1); return 'SkipStart' }; sub SkipStopStateRules { return 'Bus' if (1); return 'SkipStop' }; sub SkipForeStateRules { return 'Space' if (1); return 'SkipFore' }; sub SkipBackStateRules { return 'Space' if (1); return 'SkipBack' }; sub FlipCmdStateRules { return 'FlipCmd' }; sub LeftCmdStateRules { return 'LeftCmd' }; sub RightCmdStateRules { return 'RightCmd' }; sub WhileCmdStateRules { return 'WhileCmd' }; sub WendCmdStateRules { return 'WendCmd' }; sub ReplyClassMember { return $_[0] eq 'ContReply' || $_[0] eq 'SkipReply' || 0 }; sub SignalClassMember { return $_[0] eq 'LeftSig' || $_[0] eq 'RightSig' || $_[0] eq 'FlipSig' || $_[0] eq 'QuerySig' || 0 }; $Appearance = { 'Bus' => '-', 'ContReply' => 'C', 'ContTool' => 'c', 'DataPtr' => 'd', 'FlipCmd' => '*', 'FlipSig' => 'F', 'FlipTool' => 'f', 'InstrMark' => 'I', 'InstrPtr' => 'i', 'LeftCmd' => '<', 'LeftSig' => 'L', 'LeftTool' => 'l', 'OffBit' => '0', 'OnBit' => '1', 'QuerySig' => 'Q', 'RightCmd' => '>', 'RightSig' => 'R', 'RightTool' => 'r', 'SkipBack' => '{', 'SkipFore' => '}', 'SkipReply' => 'S', 'SkipStart' => '!', 'SkipStop' => '%', 'SkipTool' => 's', 'Space' => ' ', 'WakeMark' => 'W', 'WendCmd' => ']', 'WhileCmd' => '[', }; $InputCodec = { '-' => 'Bus', 'C' => 'ContReply', 'c' => 'ContTool', 'd' => 'DataPtr', '*' => 'FlipCmd', 'F' => 'FlipSig', 'f' => 'FlipTool', 'I' => 'InstrMark', 'i' => 'InstrPtr', '<' => 'LeftCmd', 'L' => 'LeftSig', 'l' => 'LeftTool', '0' => 'OffBit', '1' => 'OnBit', 'Q' => 'QuerySig', '>' => 'RightCmd', 'R' => 'RightSig', 'r' => 'RightTool', '{' => 'SkipBack', '}' => 'SkipFore', 'S' => 'SkipReply', '!' => 'SkipStart', '%' => 'SkipStop', 's' => 'SkipTool', ' ' => 'Space', 'W' => 'WakeMark', ']' => 'WendCmd', '[' => 'WhileCmd', }; $StateRule = { 'Bus' => \&main::BusStateRules, 'ContReply' => \&main::ContReplyStateRules, 'ContTool' => \&main::ContToolStateRules, 'DataPtr' => \&main::DataPtrStateRules, 'FlipCmd' => \&main::FlipCmdStateRules, 'FlipSig' => \&main::FlipSigStateRules, 'FlipTool' => \&main::FlipToolStateRules, 'InstrMark' => \&main::InstrMarkStateRules, 'InstrPtr' => \&main::InstrPtrStateRules, 'LeftCmd' => \&main::LeftCmdStateRules, 'LeftSig' => \&main::LeftSigStateRules, 'LeftTool' => \&main::LeftToolStateRules, 'OffBit' => \&main::OffBitStateRules, 'OnBit' => \&main::OnBitStateRules, 'QuerySig' => \&main::QuerySigStateRules, 'RightCmd' => \&main::RightCmdStateRules, 'RightSig' => \&main::RightSigStateRules, 'RightTool' => \&main::RightToolStateRules, 'SkipBack' => \&main::SkipBackStateRules, 'SkipFore' => \&main::SkipForeStateRules, 'SkipReply' => \&main::SkipReplyStateRules, 'SkipStart' => \&main::SkipStartStateRules, 'SkipStop' => \&main::SkipStopStateRules, 'SkipTool' => \&main::SkipToolStateRules, 'Space' => \&main::SpaceStateRules, 'WakeMark' => \&main::WakeMarkStateRules, 'WendCmd' => \&main::WendCmdStateRules, 'WhileCmd' => \&main::WhileCmdStateRules, }; load_playfield($ARGV[0]); display_playfield(); while (!$done) { process_playfield(); display_playfield(); } exit(0); ### END ###