#include <stdio.h>
#include <string.h>

#include <oslib/wimp.h>

#include "options.h"
#include "ztypes.h"
#include "riscoswimp.h"
#include "osdepend.h"
#include "debug.h"

#ifdef INFIX

void infix_initialise(void)
{
    wimp_message message;
    wimp_message_infix_session *tblock=(wimp_message_infix_session *)&message.data;

    tblock->game_size=h_file_size<<size_shift;
    tblock->dynamic_size=h_static_offset;
    strcpy(tblock->filename, StoryName);

    message.size=(char *)&tblock->filename - (char *)&message + (strlen(StoryName)+4)&~3;
    message.your_ref=0;
    message.action=message_INFIX_SESSION;

    wimp_send_message(wimp_USER_MESSAGE, &message, wimp_BROADCAST);
}

int debug_transfer(wimp_message *message, void *handle)
{
    wimp_message_infix_transfer *tblock=(wimp_message_infix_transfer *)&message->data;
    byte *start;
    int length;

    NOT_USED(handle);

    switch (tblock->type)
    {
        case 1:
            start=(byte *) datap;
            length=h_file_size << story_shift;
            break;
        case 2:
            start=(byte *) datap;
            length=h_static_offset;
            break;
        default:
            return 0;
    }

    if (length > tblock->size)
    	warning_lookup("DbgBufTooSmall");
    else
    {
    	wimp_transfer_block(our_task, start, message->sender, tblock->buffer, length);

    	message->data.ram_xfer.addr=tblock->buffer;
    	message->data.ram_xfer.size=length;
    	message->your_ref=message->my_ref;
    	message->action=message_RAM_TRANSMIT;
    	wimp_send_message(wimp_USER_MESSAGE, message, message->sender);
    }

    return 1;
}

#endif
