/* NetHack 3.6	winkey.c	$NHDT-Date: 1432512794 2015/05/25 00:13:14 $  $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
/* Copyright (c) Gregg Wonderly, Naperville, Illinois,  1991,1992,1993. */
/* NetHack may be freely redistributed.  See license for details. */

#ifndef CROSS_TO_AMIGA
#include "NH:sys/amiga/windefs.h"
#include "NH:sys/amiga/winext.h"
#include "NH:sys/amiga/winproto.h"
#else
#include "windefs.h"
#include "winext.h"
#include "winproto.h"
#endif

int
amii_nh_poskey(coordxy *x, coordxy *y, int *mod)
{
    struct amii_WinDesc *cw;
    WETYPE type;
    struct RastPort *rp;
    struct Window *w;
    /* No entry log for nh_poskey -- too noisy (called constantly) */

    if (cw = amii_wins[WIN_MESSAGE]) {
        cw->wflags &= ~FLMAP_SKIP;
        if (scrollmsg)
            cw->wflags |= FLMSG_FIRST;
        cw->disprows = 0;
    }

    if (WIN_MAP != WIN_ERR && (cw = amii_wins[WIN_MAP]) && (w = cw->win)) {
        cursor_on(WIN_MAP);
    } else
        panic("no MAP window opened for nh_poskey\n");

    rp = w->RPort;

    while (1) {
        type = WindowGetevent();
        if (type == WEMOUSE) {
            *mod = CLICK_1;
            if (lastevent.un.mouse.qual)
                *mod = 0;

            /* X coordinates are 1 based, Y are 1 based. */
            *x = ((lastevent.un.mouse.x - w->BorderLeft) / mxsize) + 1;
            *y = ((lastevent.un.mouse.y - w->BorderTop - MAPFTBASELN)
                  / mysize) + 1;
#ifdef CLIPPING
            if (clipping) {
                *x += clipx;
                *y += clipy;
            }
#endif
            return (0);
        } else if (type == WEKEY) {
            lastevent.type = WEUNK;
            return (lastevent.un.key);
        }
    }
}

int
amii_nhgetch(void)
{
    int ch;
    struct amii_WinDesc *cw = amii_wins[WIN_MESSAGE];
    /* No entry log for nhgetch -- too noisy (called constantly) */

    if (WIN_MAP != WIN_ERR && amii_wins[WIN_MAP]) {
        cursor_on(WIN_MAP);
    }
    if (cw)
        cw->wflags &= ~FLMAP_SKIP;

    ch = WindowGetchar();
    return (ch);
}

void
amii_get_nh_event(void)
{
    /* nothing now - later I have no idea.  Is this just a Mac hook? */
}

void
amii_getret(void)
{
    int c;

    raw_print("");
    raw_print("Press Return...");

    c = 0;

    while (c != '\n' && c != '\r') {
        if (HackPort)
            c = WindowGetchar();
        else
            c = getchar();
    }
    return;
}
