package struct;

public interface I_Cursor {
    // directions - this model will be changed for ASK, eventually; maybe use TURN_LEFT, etc.?
    public static final int
	NEXT = 0,
	PREV = 1,
	IN = 2,
	OUT = 3,
	HALF_NEXT = 4, /* these two 'half' directions change from insert mode to item mode or vice-versa */
	HALF_PREV = 5;

    // flags (you can || them)
    // could split these into access and topology flags?
    public static final int
	WRAP = 1,
	CAN_READ = 2,
	CAN_INSERT = 4,
	CAN_MODIFY = 8,
	CAN_DELETE = 16;

    // canMove return values
    public static final int
	NO = 0,
	YES = 1,
	WAIT = 2;

    public void move(int direction);
    public int canMove(int direction);
    public int getFlags();
    public int getFlagMask();
    public void setFlags(int flags);
    public boolean isItemMode();
    public Object takeItem(); /* only in item mode */
    public void giveItem(Object o);

    public void putItem(Object o); /* If in insert mode, changes to item mode after inserting,
				      with the new item selected.  If in item mode, replaces
				      the current item */

    public void deleteItem(); /* must be in item mode */
}
