#include    <exec/types.h>
#include    <devices/load.h>
#include    "execdef.h"
#include    "windowinfo.h"
#include    "loadrecord.h"

#include    "NewLoadRecord.proto"

#include    <exec/proto.h>

extern loadrequest *loadRequest;
extern long maxTicks;
extern long maxChip;
extern long maxFast;
extern long maxMem;

LoadRecord *
NewLoadRecord(window_info, type, data_pen_num, ref_pen_num)
    register WindowInfo *window_info;
    unsigned char type;
    unsigned char data_pen_num, ref_pen_num;
{
    LoadRecord *record;

    if (!(record = (LoadRecord *)AllocMem(sizeof(LoadRecord), 0)))
	return NULL;
    if (!(record->start_data = (LoadDataValue *)AllocMem(window_info->width * sizeof(LoadDataValue), 0)))
    {
	FreeMem((char *)record, sizeof(LoadRecord));
	return NULL;
    }
    record->end_data = record->start_data + window_info->width;
    record->next_data = record->start_data;
    record->max_data = record->start_data;
    switch(type)
    {
    case CPU:
	record->scale = 1;
	record->scaled_ticks = maxTicks;
	break;
    case BLITTER:
	record->scale = 0;
	record->scaled_ticks = maxTicks;
	break;
    case CHIPMEM:
	record->scale = 0;
	record->scaled_ticks = maxChip;
	break;
    case FASTMEM:
	record->scale = 0;
	record->scaled_ticks = maxFast;
	break;
    case ALLMEM:
	record->scale = 0;
	record->scaled_ticks = maxMem;
	break;
    }
    record->deltay = window_info->height;
    record->moduloy = 0;
    record->type = type;
    record->data_pen_num = data_pen_num;
    record->ref_pen_num = ref_pen_num;
    AddHead(&window_info->loadrecords, &record->node);
    return record;
}
