/* * PuzzleApplet.java: NestedVM applet for the puzzle collection */ import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.util.*; import javax.swing.*; import javax.swing.border.BevelBorder; import javax.swing.Timer; import java.util.List; import org.ibex.nestedvm.Runtime; public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB { private static final long serialVersionUID = 1L; private static final int CFG_SETTINGS = 0, CFG_SEED = 1, CFG_DESC = 2, LEFT_BUTTON = 0x0200, MIDDLE_BUTTON = 0x201, RIGHT_BUTTON = 0x202, LEFT_DRAG = 0x203, MIDDLE_DRAG = 0x204, RIGHT_DRAG = 0x205, LEFT_RELEASE = 0x206, CURSOR_UP = 0x209, CURSOR_DOWN = 0x20a, CURSOR_LEFT = 0x20b, CURSOR_RIGHT = 0x20c, MOD_CTRL = 0x1000, MOD_SHFT = 0x2000, MOD_NUM_KEYPAD = 0x4000, ALIGN_VCENTRE = 0x100, ALIGN_HCENTRE = 0x001, ALIGN_HRIGHT = 0x002, C_STRING = 0, C_CHOICES = 1, C_BOOLEAN = 2; private JFrame mainWindow; private JMenu typeMenu; private JMenuItem solveCommand; private Color[] colors; private JLabel statusBar; private PuzzlePanel pp; private Runtime runtime; private String[] puzzle_args; private Graphics2D gg; private Timer timer; private int xarg1, xarg2, xarg3; private int[] xPoints, yPoints; private BufferedImage[] blitters = new BufferedImage[512]; private ConfigDialog dlg; static { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) { ex.printStackTrace(); } } public void init() { try { Container cp = getContentPane(); cp.setLayout(new BorderLayout()); runtime = (Runtime) Class.forName("PuzzleEngine").newInstance(); runtime.setCallJavaCB(this); JMenuBar menubar = new JMenuBar(); JMenu jm; menubar.add(jm = new JMenu("Game")); addMenuItemWithKey(jm, "New", 'n'); addMenuItemCallback(jm, "Restart", "jcallback_restart_event"); addMenuItemCallback(jm, "Specific...", "jcallback_config_event", CFG_DESC); addMenuItemCallback(jm, "Random Seed...", "jcallback_config_event", CFG_SEED); jm.addSeparator(); addMenuItemWithKey(jm, "Undo", 'u'); addMenuItemWithKey(jm, "Redo", 'r'); jm.addSeparator(); solveCommand = addMenuItemCallback(jm, "Solve", "jcallback_solve_event"); solveCommand.setEnabled(false); if (mainWindow != null) { jm.addSeparator(); addMenuItemWithKey(jm, "Exit", 'q'); } menubar.add(typeMenu = new JMenu("Type")); typeMenu.setVisible(false); menubar.add(jm = new JMenu("Help")); addMenuItemCallback(jm, "About", "jcallback_about_event"); setJMenuBar(menubar); cp.add(pp = new PuzzlePanel(), BorderLayout.CENTER); pp.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int key = -1; int shift = e.isShiftDown() ? MOD_SHFT : 0; int ctrl = e.isControlDown() ? MOD_CTRL : 0; switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: case KeyEvent.VK_KP_LEFT: key = shift | ctrl | CURSOR_LEFT; break; case KeyEvent.VK_RIGHT: case KeyEvent.VK_KP_RIGHT: key = shift | ctrl | CURSOR_RIGHT; break; case KeyEvent.VK_UP: case KeyEvent.VK_KP_UP: key = shift | ctrl | CURSOR_UP; break; case KeyEvent.VK_DOWN: case KeyEvent.VK_KP_DOWN: key = shift | ctrl | CURSOR_DOWN; break; case KeyEvent.VK_PAGE_UP: /* ** $Id$ ** String table (keep all strings handled by Lua) ** See Copyright Notice in lua.h */ #ifndef lstring_h #define lstring_h #include "lgc.h" #include "lobject.h" #include "lstate.h" #define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char)) #define sizeudata(u) (sizeof(union Udata)+(u)->len) #define luaS_new(L, s) (luaS_newlstr(L, s, strlen(s))) #define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ (sizeof(s)/sizeof(char))-1)) #define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT) LUAI_FUNC void luaS_resize (lua_State *L, int newsize); LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e); LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); #endif