Home » Archimedes archive » Acorn User » AU 1996-12 B.adf » Features » PCA/TBoxLibs/c/sprite
PCA/TBoxLibs/c/sprite
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Archimedes archive » Acorn User » AU 1996-12 B.adf » Features |
| Filename: | PCA/TBoxLibs/c/sprite |
| Read OK: | ✔ |
| File size: | 5D4D bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
/************************************************************************/
/* � Acorn Computers Ltd, 1992. */
/* */
/* This file forms part of an unsupported source release of RISC_OSLib. */
/* */
/* It may be freely used to create executable images for saleable */
/* products but cannot be sold in source form or as an object library */
/* without the prior written consent of Acorn Computers Ltd. */
/* */
/* If this file is re-distributed (even if modified) it should retain */
/* this copyright notice. */
/* */
/************************************************************************/
/*
* Title : c.sprite
* Purpose: provide access to RISC OS sprite facilities
* History: IDJ: 07-Feb-92: prepared for source release
*
*/
#include <stddef.h>
#include <stdlib.h>
/* #include "h.os" */
#include "kernel.h"
#include "h.sprite"
#include "swis.h"
/* Basic primitive used by sprite_xxx calls */
#ifndef OS_SpriteOp
#define OS_SpriteOp 0x2E
#endif
#define ScreenSave 2
#define ScreenLoad 3
#define ReadAreaCB 8 /* *SInfo */
#define ClearSprites 9 /* *SNew */
#define LoadSpriteFile 10 /* *SLoad <filename> */
#define MergeSpriteFile 11 /* *SMerge <filename> */
#define SaveSpriteFile 12 /* *SSave <filename> */
#define ReturnName 13
#define GetSprite 14 /* *SGet <n> */
#define CreateSprite 15
#define GetSpriteUserCoords 16
#define SelectSprite 24 /* *SChoose <n> [<m>] */
#define DeleteSprite 25 /* *SDelete <n> */
#define RenameSprite 26 /* *SRename */
#define CopySprite 27
#define PutSprite 28
#define CreateMask 29
#define RemoveMask 30
#define InsertRow 31
#define DeleteRow 32
#define FlipAboutXAxis 33
#define PutSpriteUserCoords 34
#define AppendSprite 35
#define SetPointerShape 36
#define ReadSpriteSize 40
#define ReadPixelColour 41
#define WritePixelColour 42
#define ReadPixelMask 43
#define WritePixelMask 44
#define InsertCol 45
#define DeleteCol 46
#define FlipAboutYAxis 47
#define PlotMask 48
#define PlotMaskUserCoords 49
#define PlotMaskScaled 50
#define PaintCharScaled 51
#define PutSpriteScaled 52
#define PutSpriteGreyScaled 53
#define RemoveLeftHandWastage 54
#define PlotMaskTransformed 55
#define PutSpriteTransformed 56
#define InsertDeleteRows 57
#define InsertDeleteColumns 58
#define SwitchOutputToSprite 60
#define SwitchOutputToMask 61
#define ReadSaveAreaSize 62
#define BadReasonCode 63
#pragma no_check_stack
static _kernel_oserror * sprite__op(_kernel_swi_regs *r)
{
return _kernel_swi(OS_SpriteOp, r,r);
}
/******** Simple operations, use no sprite area, no name/sprite pointer ***/
_kernel_oserror * sprite_screensave(const char *filename, sprite_palflag palflag)
{
_kernel_swi_regs r;
_kernel_oserror *result;
r.r[0] = 2;
/*r.r[1] unused */
r.r[2] = (int) filename;
r.r[3] = palflag;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_screenload(const char *filename)
{
_kernel_swi_regs r;
_kernel_oserror *result;
r.r[0] = 3;
/*r.r[1] unused */
r.r[2] = (int) filename;
result = sprite__op(&r);
return result;
}
/****** Operations on either system/user area, no name/sprite pointer *****/
static void setfromarea(int op, sprite_area *area, _kernel_swi_regs *r)
{
if (area == sprite_mainarea)
{
r->r[0] = op;
/* r->r[1] unused */
}
else
{
r->r[0] = op + 256;
r->r[1] = (int) area;
}
}
void sprite_area_initialise(sprite_area *area, int length)
{
area->size = length; /* No SpriteOp to do this ! */
area->number = 0;
area->sproff = 16;
area->freeoff = 16;
}
_kernel_oserror * sprite_area_readinfo(sprite_area *area, sprite_area *resultarea)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(8, area, &r);
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
resultarea->size = r.r[2];
resultarea->number = r.r[3];
resultarea->sproff = r.r[4];
resultarea->freeoff = r.r[5];
}
return result;
}
_kernel_oserror * sprite_area_reinit(sprite_area *area)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(9, area, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_area_save(sprite_area *area, const char *filename)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(12, area, &r);
r.r[2] = (int) filename;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_area_load(sprite_area *area, const char *filename)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(10, area, &r);
r.r[2] = (int) filename;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_area_merge(sprite_area *area, const char *filename)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(11, area, &r);
r.r[2] = (int) filename;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_getname(sprite_area *area, void *buffer,
int *length, int index)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(13, area, &r);
r.r[2] = (int) buffer;
r.r[3] = *length;
r.r[4] = index;
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
*length = r.r[3];
}
return result;
}
_kernel_oserror * sprite_get(sprite_area *area, char *name, sprite_palflag palflag)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(14, area, &r);
r.r[2] = (int) name;
r.r[3] = palflag;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_get_rp(sprite_area *area, char *name, sprite_palflag palflag,
sprite_ptr *resultaddress)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(14, area, &r);
r.r[2] = (int) name;
r.r[3] = palflag;
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
*resultaddress = (void *) r.r[2];
}
return result;
}
_kernel_oserror * sprite_get_given(sprite_area *area, char *name,
sprite_palflag palflag,
int x0, int y0, int x1, int y1)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(16, area, &r);
r.r[2] = (int) name;
r.r[3] = palflag;
r.r[4] = x0;
r.r[5] = y0;
r.r[6] = x1;
r.r[7] = y1;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_get_given_rp(sprite_area *area, char *name,
sprite_palflag palflag, int x0, int y0,
int x1, int y1, sprite_ptr *resultaddress)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(16, area, &r);
r.r[2] = (int) name;
r.r[3] = palflag;
r.r[4] = x0;
r.r[5] = y0;
r.r[6] = x1;
r.r[7] = y1;
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
*resultaddress = (void *) r.r[2];
}
return result;
}
_kernel_oserror * sprite_create(sprite_area *area, char *name, sprite_palflag palflag,
int width, int height, int mode)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(15, area, &r); /* NB. Not all done in numeric order !! */
r.r[2] = (int) name;
r.r[3] = palflag;
r.r[4] = width;
r.r[5] = height;
r.r[6] = mode;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_create_rp(sprite_area *area, char *name,
sprite_palflag palflag,
int width, int height, int mode,
sprite_ptr *resultaddress)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromarea(15, area, &r); /* NB. Not all done in numeric order !! */
r.r[2] = (int) name;
r.r[3] = palflag;
r.r[4] = width;
r.r[5] = height;
r.r[6] = mode;
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
/* spriteop 15 doesn't return pointer to sprite in r2, so....*/
/* select the sprite just created (gets its address in r2) */
setfromarea(24, area, &r);
r.r[2] = (int)name;
result = sprite__op(&r);
if (result == NULL)
*resultaddress = (void *) r.r[2];
}
return result;
}
/*********** Operations on system/user area, name/sprite pointer **********/
/* Modify op if using sprite address is address, not name */
/* But only if using own sprite area */
static void setfromtag(int op, sprite_area *area, sprite_id *spr, _kernel_swi_regs *r)
{
if (area == sprite_mainarea)
{
r->r[0] = op;
/* r->r[1] unused */
}
else
{
r->r[1] = (int) area;
if ((spr->tag) == sprite_id_addr)
{
r->r[0] = 512 + op;
r->r[2] = (int) (spr->s.addr);
}
else
{
r->r[0] = 256 + op;
r->r[2] = (int) (spr->s.name);
}
}
}
_kernel_oserror * sprite_readinfo(sprite_area *area, sprite_id *spr,
sprite_info *resultinfo)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(40, area, spr, &r);
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
resultinfo->width = r.r[3];
resultinfo->height = r.r[4];
resultinfo->mask = r.r[5];
resultinfo->mode = r.r[6];
}
return result;
}
_kernel_oserror * sprite_select(sprite_area *area, sprite_id *spr)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(24, area, spr, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_select_rp(sprite_area *area, sprite_id *spr,
sprite_ptr *resultaddress)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(24, area, spr, &r);
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
*resultaddress = (void *) r.r[2];
}
return result;
}
_kernel_oserror * sprite_delete(sprite_area *area, sprite_id *spr)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(25, area, spr, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_rename(sprite_area *area, sprite_id *spr, char *newname)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(26, area, spr, &r);
r.r[3] = (int) newname;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_copy(sprite_area *area, sprite_id *spr, char *copyname)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(27, area, spr, &r);
r.r[3] = (int) copyname;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put(sprite_area *area, sprite_id *spr, int gcol_action)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(28, area, spr, &r);
r.r[5] = gcol_action;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put_given(sprite_area *area, sprite_id *spr, int gcol_action,
int x, int y)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(34, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
r.r[5] = gcol_action;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put_scaled(sprite_area *area, sprite_id *spr,
int gcol_action,
int x, int y,
sprite_factors *factors,
sprite_pixtrans *pixtrans)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(52, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
r.r[5] = gcol_action;
r.r[6] = (int) factors;
r.r[7] = (int) pixtrans;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put_in_current(sprite_area *area, sprite_id *spr,
int gcol_action,
int x, int y)
{
_kernel_swi_regs r;
_kernel_oserror *result;
sprite_factors factors;
sprite_pixtrans *pixtrans;
r.r[0]=(int)area;
if (spr->tag== sprite_id_addr)
{
r.r[1]=(int) (spr->s.name);
r.r[5]=0x03;
}
else
{
r.r[1]=(int) (spr->s.addr);
r.r[5]=0x02;
}
r.r[2]=-1;
r.r[3]=-1;
r.r[4]=0;
r.r[6]=0;
r.r[7]=0;
_kernel_swi(ColourTrans_SelectTable,&r,&r);
pixtrans=malloc(r.r[4]);
if (!pixtrans) return(NULL);
r.r[4]=(int)pixtrans;
_kernel_swi(ColourTrans_SelectTable,&r,&r);
setfromtag(52, area, spr, &r);
r.r[6]=(int)&factors;
r.r[7]=0;
_kernel_swi(Wimp_ReadPixTrans,&r,&r);
setfromtag(52, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
r.r[5] = gcol_action;
r.r[6] = (int) &factors;
r.r[7] = (int) pixtrans;
result = sprite__op(&r);
free(pixtrans);
return result;
}
_kernel_oserror * sprite_put_greyscaled(sprite_area *area, sprite_id *spr,
int x, int y,
sprite_factors *factors,
sprite_pixtrans *pixtrans)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(53, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
r.r[5] = 0; /* doesn't support mask or gcol action */
r.r[6] = (int) factors;
r.r[7] = (int) pixtrans;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put_mask(sprite_area *area, sprite_id *spr)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(48, area, spr, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put_mask_given(sprite_area *area, sprite_id *spr,
int x, int y)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(49, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put_mask_scaled(sprite_area *area, sprite_id *spr,
int x, int y,
sprite_factors *factors)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(50, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
r.r[6] = (int) factors;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_put_char_scaled(char ch,
int x, int y,
sprite_factors *factors)
{
_kernel_swi_regs r;
_kernel_oserror *result;
r.r[0] = 51;
r.r[1] = ch;
r.r[3] = x;
r.r[4] = y;
r.r[6] = (int) factors;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_create_mask(sprite_area *area, sprite_id *spr)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(29, area, spr, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_remove_mask(sprite_area *area, sprite_id *spr)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(30, area, spr, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_insert_row(sprite_area *area, sprite_id *spr, int row)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(31, area, spr, &r);
r.r[3] = row;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_delete_row(sprite_area *area, sprite_id *spr, int row)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(32, area, spr, &r);
r.r[3] = row;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_insert_column(sprite_area *area, sprite_id *spr, int column)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(45, area, spr, &r);
r.r[3] = column;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_delete_column(sprite_area *area, sprite_id *spr, int column)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(46, area, spr, &r);
r.r[3] = column;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_flip_x(sprite_area *area, sprite_id *spr)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(33, area, spr, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_flip_y(sprite_area *area, sprite_id *spr)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(47, area, spr, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_readsize(sprite_area *area, sprite_id *spr,
sprite_info *resultinfo)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(40, area, spr, &r);
result = sprite__op(&r);
/* now copy returned data */
resultinfo->width = r.r[3] ;
resultinfo->height = r.r[4] ;
resultinfo->mask = r.r[5] ;
resultinfo->mode = r.r[6] ;
return result;
}
_kernel_oserror * sprite_readpixel(sprite_area *area, sprite_id *spr, int x, int y,
sprite_colour *resultcolour)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(41, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
resultcolour->colour = r.r[5];
resultcolour->tint = r.r[6];
}
return result;
}
_kernel_oserror * sprite_writepixel(sprite_area *area, sprite_id *spr, int x, int y,
sprite_colour *colour)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(42, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
r.r[5] = colour->colour;
r.r[6] = colour->tint;
result = sprite__op(&r);
return result;
}
_kernel_oserror * sprite_readmask(sprite_area *area, sprite_id *spr, int x, int y,
sprite_maskstate *resultmaskstate)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(43, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
result = sprite__op(&r);
if (result == NULL) /* Only return result if no error */
{
*resultmaskstate = r.r[5];
}
return result;
}
_kernel_oserror * sprite_writemask(sprite_area *area, sprite_id *spr, int x, int y,
sprite_maskstate *maskstate)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(44, area, spr, &r);
r.r[3] = x;
r.r[4] = y;
r.r[5] = (int) (*maskstate); /* Use pointer here for consistent interface */
result = sprite__op(&r);
return result;
}
_kernel_oserror *sprite_restorestate(sprite_state state)
{
_kernel_swi_regs r;
_kernel_oserror *result;
r.r[0] = state.r[0];
r.r[1] = state.r[1];
r.r[2] = state.r[2];
r.r[3] = state.r[3];
result = sprite__op(&r);
return result;
}
_kernel_oserror *sprite_outputtosprite(sprite_area *area, sprite_id *id,
int *save_area, sprite_state *state)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(0x3c, area, id, &r);
r.r[3] = (int) save_area;
result = sprite__op(&r);
if (result == NULL)
{
state->r[0] = r.r[0];
state->r[1] = r.r[1];
state->r[2] = r.r[2];
state->r[3] = r.r[3];
}
return result;
}
_kernel_oserror *sprite_outputtomask(sprite_area *area, sprite_id *id,
int *save_area, sprite_state *state)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(0x3d, area, id, &r);
r.r[3] = (int) save_area;
result = sprite__op(&r);
if (result == NULL)
{
state->r[0] = r.r[0];
state->r[1] = r.r[1];
state->r[2] = r.r[2];
state->r[3] = r.r[3];
}
return result;
}
_kernel_oserror *sprite_outputtoscreen(int *save_area, sprite_state *state)
{
_kernel_swi_regs r;
_kernel_oserror *result;
r.r[0] = 0x3c;
r.r[2] = 0;
r.r[3] = (int)save_area;
result = sprite__op(&r);
if (result == NULL)
{
state->r[0] = r.r[0];
state->r[1] = r.r[1];
state->r[2] = r.r[2];
state->r[3] = r.r[3];
}
return result;
}
_kernel_oserror *sprite_sizeof_spritecontext(sprite_area *area, sprite_id *id,
int *size)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(0x3e, area, id, &r);
result = sprite__op(&r);
if (result == NULL)
*size = r.r[3];
return result;
}
_kernel_oserror *sprite_sizeof_screencontext(int *size)
{
_kernel_swi_regs r;
_kernel_oserror *result;
r.r[0] = 0x3e;
r.r[2] = 0;
result = sprite__op(&r);
if (result == NULL)
*size = r.r[3];
return result;
}
_kernel_oserror *sprite_removewastage(sprite_area *area, sprite_id *id)
{
_kernel_swi_regs r;
_kernel_oserror *result;
setfromtag(0x36, area, id, &r);
result = sprite__op(&r);
return result;
}
_kernel_oserror *sprite_change_size (sprite_area *area,
sprite_id *id,
BOOL rows,
int at,
int number)
{
_kernel_swi_regs reg_set;
setfromtag (rows? InsertDeleteRows: InsertDeleteColumns, area, id, ®_set);
reg_set.r [3] = at;
reg_set.r [4] = number;
return sprite__op (®_set);
}
_kernel_oserror *sprite_put_mask_trans (sprite_area *area,
sprite_id *id,
sprite_box *box,
sprite_transmat *trans_mat)
{
_kernel_swi_regs reg_set;
setfromtag (PlotMaskTransformed, area, id, ®_set);
reg_set.r [3] = box == NULL? 0: 1 << 1;
reg_set.r [4] = (int) box;
reg_set.r [6] = (int) trans_mat;
return sprite__op (®_set);
}
_kernel_oserror *sprite_put_mask_pgm (sprite_area *area,
sprite_id *id,
sprite_box *box,
sprite_pgm *pgm)
{
_kernel_swi_regs reg_set;
setfromtag (PlotMaskTransformed, area, id, ®_set);
reg_set.r [3] = (box == NULL? 0: 1 << 1) | (1 << 0);
reg_set.r [4] = (int) box;
reg_set.r [6] = (int) pgm;
return sprite__op (®_set);
}
_kernel_oserror *sprite_put_trans (sprite_area *area,
sprite_id *id,
int gcol_action,
sprite_box *box,
sprite_transmat *trans_mat,
sprite_pixtrans *pix_trans)
{
_kernel_swi_regs reg_set;
setfromtag (PutSpriteTransformed, area, id, ®_set);
reg_set.r [3] = box == NULL? 0: 1 << 1;
reg_set.r [4] = (int) box;
reg_set.r [5] = gcol_action;
reg_set.r [6] = (int) trans_mat;
reg_set.r [7] = (int) pix_trans;
return sprite__op (®_set);
}
_kernel_oserror *sprite_put_pgm (sprite_area *area,
sprite_id *id,
int gcol_action,
sprite_box *box,
sprite_pgm *pgm,
sprite_pixtrans *pix_trans)
{
_kernel_swi_regs reg_set;
setfromtag (PutSpriteTransformed, area, id, ®_set);
reg_set.r [3] = (box == NULL? 0: 1 << 1) | (1 << 0);
reg_set.r [4] = (int) box;
reg_set.r [5] = gcol_action;
reg_set.r [6] = (int) pgm;
reg_set.r [7] = (int) pix_trans;
return sprite__op (®_set);
}
#pragma check_stack
/* end of c.sprite */
00000000 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |/***************|
00000010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************|
*
00000040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 2f 2a 20 a9 20 |*********/./* . |
00000050 41 63 6f 72 6e 20 43 6f 6d 70 75 74 65 72 73 20 |Acorn Computers |
00000060 4c 74 64 2c 20 31 39 39 32 2e 20 20 20 20 20 20 |Ltd, 1992. |
00000070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00000090 20 20 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 | */./* |
000000a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
000000d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f | */|
000000e0 0a 2f 2a 20 54 68 69 73 20 66 69 6c 65 20 66 6f |./* This file fo|
000000f0 72 6d 73 20 70 61 72 74 20 6f 66 20 61 6e 20 75 |rms part of an u|
00000100 6e 73 75 70 70 6f 72 74 65 64 20 73 6f 75 72 63 |nsupported sourc|
00000110 65 20 72 65 6c 65 61 73 65 20 6f 66 20 52 49 53 |e release of RIS|
00000120 43 5f 4f 53 4c 69 62 2e 20 2a 2f 0a 2f 2a 20 20 |C_OSLib. */./* |
00000130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00000170 20 20 20 20 2a 2f 0a 2f 2a 20 49 74 20 6d 61 79 | */./* It may|
00000180 20 62 65 20 66 72 65 65 6c 79 20 75 73 65 64 20 | be freely used |
00000190 74 6f 20 63 72 65 61 74 65 20 65 78 65 63 75 74 |to create execut|
000001a0 61 62 6c 65 20 69 6d 61 67 65 73 20 66 6f 72 20 |able images for |
000001b0 73 61 6c 65 61 62 6c 65 20 20 20 20 20 20 20 2a |saleable *|
000001c0 2f 0a 2f 2a 20 70 72 6f 64 75 63 74 73 20 62 75 |/./* products bu|
000001d0 74 20 63 61 6e 6e 6f 74 20 62 65 20 73 6f 6c 64 |t cannot be sold|
000001e0 20 69 6e 20 73 6f 75 72 63 65 20 66 6f 72 6d 20 | in source form |
000001f0 6f 72 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 |or as an object |
00000200 6c 69 62 72 61 72 79 20 20 20 2a 2f 0a 2f 2a 20 |library */./* |
00000210 77 69 74 68 6f 75 74 20 74 68 65 20 70 72 69 6f |without the prio|
00000220 72 20 77 72 69 74 74 65 6e 20 63 6f 6e 73 65 6e |r written consen|
00000230 74 20 6f 66 20 41 63 6f 72 6e 20 43 6f 6d 70 75 |t of Acorn Compu|
00000240 74 65 72 73 20 4c 74 64 2e 20 20 20 20 20 20 20 |ters Ltd. |
00000250 20 20 20 20 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 | */./* |
00000260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
000002a0 2a 2f 0a 2f 2a 20 49 66 20 74 68 69 73 20 66 69 |*/./* If this fi|
000002b0 6c 65 20 69 73 20 72 65 2d 64 69 73 74 72 69 62 |le is re-distrib|
000002c0 75 74 65 64 20 28 65 76 65 6e 20 69 66 20 6d 6f |uted (even if mo|
000002d0 64 69 66 69 65 64 29 20 69 74 20 73 68 6f 75 6c |dified) it shoul|
000002e0 64 20 72 65 74 61 69 6e 20 20 20 2a 2f 0a 2f 2a |d retain */./*|
000002f0 20 74 68 69 73 20 63 6f 70 79 72 69 67 68 74 20 | this copyright |
00000300 6e 6f 74 69 63 65 2e 20 20 20 20 20 20 20 20 20 |notice. |
00000310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00000330 20 20 20 20 20 20 2a 2f 0a 2f 2a 20 20 20 20 20 | */./* |
00000340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00000380 20 2a 2f 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a | */./***********|
00000390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************|
*
000003c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a |*************/..|
000003d0 2f 2a 0a 20 2a 20 54 69 74 6c 65 20 20 3a 20 63 |/*. * Title : c|
000003e0 2e 73 70 72 69 74 65 0a 20 2a 20 50 75 72 70 6f |.sprite. * Purpo|
000003f0 73 65 3a 20 70 72 6f 76 69 64 65 20 61 63 63 65 |se: provide acce|
00000400 73 73 20 74 6f 20 52 49 53 43 20 4f 53 20 73 70 |ss to RISC OS sp|
00000410 72 69 74 65 20 66 61 63 69 6c 69 74 69 65 73 0a |rite facilities.|
00000420 20 2a 20 48 69 73 74 6f 72 79 3a 20 49 44 4a 3a | * History: IDJ:|
00000430 20 30 37 2d 46 65 62 2d 39 32 3a 20 70 72 65 70 | 07-Feb-92: prep|
00000440 61 72 65 64 20 66 6f 72 20 73 6f 75 72 63 65 20 |ared for source |
00000450 72 65 6c 65 61 73 65 0a 20 2a 0a 20 2a 2f 0a 0a |release. *. */..|
00000460 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 |.#include <stdde|
00000470 66 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 |f.h>.#include <s|
00000480 74 64 6c 69 62 2e 68 3e 0a 0a 2f 2a 20 23 69 6e |tdlib.h>../* #in|
00000490 63 6c 75 64 65 20 22 68 2e 6f 73 22 20 2a 2f 0a |clude "h.os" */.|
000004a0 23 69 6e 63 6c 75 64 65 20 22 6b 65 72 6e 65 6c |#include "kernel|
000004b0 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 68 2e |.h".#include "h.|
000004c0 73 70 72 69 74 65 22 0a 23 69 6e 63 6c 75 64 65 |sprite".#include|
000004d0 20 22 73 77 69 73 2e 68 22 0a 0a 0a 2f 2a 20 42 | "swis.h".../* B|
000004e0 61 73 69 63 20 70 72 69 6d 69 74 69 76 65 20 75 |asic primitive u|
000004f0 73 65 64 20 62 79 20 73 70 72 69 74 65 5f 78 78 |sed by sprite_xx|
00000500 78 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 6e 64 |x calls */.#ifnd|
00000510 65 66 20 4f 53 5f 53 70 72 69 74 65 4f 70 0a 23 |ef OS_SpriteOp.#|
00000520 64 65 66 69 6e 65 20 4f 53 5f 53 70 72 69 74 65 |define OS_Sprite|
00000530 4f 70 20 30 78 32 45 0a 23 65 6e 64 69 66 0a 0a |Op 0x2E.#endif..|
00000540 0a 23 64 65 66 69 6e 65 20 53 63 72 65 65 6e 53 |.#define ScreenS|
00000550 61 76 65 20 20 20 20 20 20 20 20 20 20 20 20 32 |ave 2|
00000560 0a 23 64 65 66 69 6e 65 20 53 63 72 65 65 6e 4c |.#define ScreenL|
00000570 6f 61 64 20 20 20 20 20 20 20 20 20 20 20 20 33 |oad 3|
00000580 0a 0a 23 64 65 66 69 6e 65 20 52 65 61 64 41 72 |..#define ReadAr|
00000590 65 61 43 42 20 20 20 20 20 20 20 20 20 20 20 20 |eaCB |
000005a0 38 20 20 2f 2a 20 2a 53 49 6e 66 6f 20 2a 2f 0a |8 /* *SInfo */.|
000005b0 23 64 65 66 69 6e 65 20 43 6c 65 61 72 53 70 72 |#define ClearSpr|
000005c0 69 74 65 73 20 20 20 20 20 20 20 20 20 20 39 20 |ites 9 |
000005d0 20 2f 2a 20 2a 53 4e 65 77 20 2a 2f 0a 23 64 65 | /* *SNew */.#de|
000005e0 66 69 6e 65 20 4c 6f 61 64 53 70 72 69 74 65 46 |fine LoadSpriteF|
000005f0 69 6c 65 20 20 20 20 20 20 20 20 31 30 20 2f 2a |ile 10 /*|
00000600 20 2a 53 4c 6f 61 64 20 3c 66 69 6c 65 6e 61 6d | *SLoad <filenam|
00000610 65 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 65 |e> */.#define Me|
00000620 72 67 65 53 70 72 69 74 65 46 69 6c 65 20 20 20 |rgeSpriteFile |
00000630 20 20 20 20 31 31 20 2f 2a 20 2a 53 4d 65 72 67 | 11 /* *SMerg|
00000640 65 20 3c 66 69 6c 65 6e 61 6d 65 3e 20 2a 2f 0a |e <filename> */.|
00000650 23 64 65 66 69 6e 65 20 53 61 76 65 53 70 72 69 |#define SaveSpri|
00000660 74 65 46 69 6c 65 20 20 20 20 20 20 20 20 31 32 |teFile 12|
00000670 20 2f 2a 20 2a 53 53 61 76 65 20 3c 66 69 6c 65 | /* *SSave <file|
00000680 6e 61 6d 65 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 |name> */.#define|
00000690 20 52 65 74 75 72 6e 4e 61 6d 65 20 20 20 20 20 | ReturnName |
000006a0 20 20 20 20 20 20 20 31 33 0a 23 64 65 66 69 6e | 13.#defin|
000006b0 65 20 47 65 74 53 70 72 69 74 65 20 20 20 20 20 |e GetSprite |
000006c0 20 20 20 20 20 20 20 20 31 34 20 2f 2a 20 2a 53 | 14 /* *S|
000006d0 47 65 74 20 3c 6e 3e 20 2a 2f 0a 23 64 65 66 69 |Get <n> */.#defi|
000006e0 6e 65 20 43 72 65 61 74 65 53 70 72 69 74 65 20 |ne CreateSprite |
000006f0 20 20 20 20 20 20 20 20 20 31 35 0a 23 64 65 66 | 15.#def|
00000700 69 6e 65 20 47 65 74 53 70 72 69 74 65 55 73 65 |ine GetSpriteUse|
00000710 72 43 6f 6f 72 64 73 20 20 20 31 36 0a 0a 23 64 |rCoords 16..#d|
00000720 65 66 69 6e 65 20 53 65 6c 65 63 74 53 70 72 69 |efine SelectSpri|
00000730 74 65 20 20 20 20 20 20 20 20 20 20 32 34 20 2f |te 24 /|
00000740 2a 20 2a 53 43 68 6f 6f 73 65 20 3c 6e 3e 20 5b |* *SChoose <n> [|
00000750 3c 6d 3e 5d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 |<m>] */.#define |
00000760 44 65 6c 65 74 65 53 70 72 69 74 65 20 20 20 20 |DeleteSprite |
00000770 20 20 20 20 20 20 32 35 20 2f 2a 20 2a 53 44 65 | 25 /* *SDe|
00000780 6c 65 74 65 20 3c 6e 3e 20 2a 2f 0a 23 64 65 66 |lete <n> */.#def|
00000790 69 6e 65 20 52 65 6e 61 6d 65 53 70 72 69 74 65 |ine RenameSprite|
000007a0 20 20 20 20 20 20 20 20 20 20 32 36 20 2f 2a 20 | 26 /* |
000007b0 2a 53 52 65 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 |*SRename */.#def|
000007c0 69 6e 65 20 43 6f 70 79 53 70 72 69 74 65 20 20 |ine CopySprite |
000007d0 20 20 20 20 20 20 20 20 20 20 32 37 0a 23 64 65 | 27.#de|
000007e0 66 69 6e 65 20 50 75 74 53 70 72 69 74 65 20 20 |fine PutSprite |
000007f0 20 20 20 20 20 20 20 20 20 20 20 32 38 0a 23 64 | 28.#d|
00000800 65 66 69 6e 65 20 43 72 65 61 74 65 4d 61 73 6b |efine CreateMask|
00000810 20 20 20 20 20 20 20 20 20 20 20 20 32 39 0a 23 | 29.#|
00000820 64 65 66 69 6e 65 20 52 65 6d 6f 76 65 4d 61 73 |define RemoveMas|
00000830 6b 20 20 20 20 20 20 20 20 20 20 20 20 33 30 0a |k 30.|
00000840 23 64 65 66 69 6e 65 20 49 6e 73 65 72 74 52 6f |#define InsertRo|
00000850 77 20 20 20 20 20 20 20 20 20 20 20 20 20 33 31 |w 31|
00000860 0a 23 64 65 66 69 6e 65 20 44 65 6c 65 74 65 52 |.#define DeleteR|
00000870 6f 77 20 20 20 20 20 20 20 20 20 20 20 20 20 33 |ow 3|
00000880 32 0a 23 64 65 66 69 6e 65 20 46 6c 69 70 41 62 |2.#define FlipAb|
00000890 6f 75 74 58 41 78 69 73 20 20 20 20 20 20 20 20 |outXAxis |
000008a0 33 33 0a 23 64 65 66 69 6e 65 20 50 75 74 53 70 |33.#define PutSp|
000008b0 72 69 74 65 55 73 65 72 43 6f 6f 72 64 73 20 20 |riteUserCoords |
000008c0 20 33 34 0a 23 64 65 66 69 6e 65 20 41 70 70 65 | 34.#define Appe|
000008d0 6e 64 53 70 72 69 74 65 20 20 20 20 20 20 20 20 |ndSprite |
000008e0 20 20 33 35 0a 23 64 65 66 69 6e 65 20 53 65 74 | 35.#define Set|
000008f0 50 6f 69 6e 74 65 72 53 68 61 70 65 20 20 20 20 |PointerShape |
00000900 20 20 20 33 36 0a 0a 23 64 65 66 69 6e 65 20 52 | 36..#define R|
00000910 65 61 64 53 70 72 69 74 65 53 69 7a 65 20 20 20 |eadSpriteSize |
00000920 20 20 20 20 20 34 30 0a 23 64 65 66 69 6e 65 20 | 40.#define |
00000930 52 65 61 64 50 69 78 65 6c 43 6f 6c 6f 75 72 20 |ReadPixelColour |
00000940 20 20 20 20 20 20 34 31 0a 23 64 65 66 69 6e 65 | 41.#define|
00000950 20 57 72 69 74 65 50 69 78 65 6c 43 6f 6c 6f 75 | WritePixelColou|
00000960 72 20 20 20 20 20 20 34 32 0a 23 64 65 66 69 6e |r 42.#defin|
00000970 65 20 52 65 61 64 50 69 78 65 6c 4d 61 73 6b 20 |e ReadPixelMask |
00000980 20 20 20 20 20 20 20 20 34 33 0a 23 64 65 66 69 | 43.#defi|
00000990 6e 65 20 57 72 69 74 65 50 69 78 65 6c 4d 61 73 |ne WritePixelMas|
000009a0 6b 20 20 20 20 20 20 20 20 34 34 0a 23 64 65 66 |k 44.#def|
000009b0 69 6e 65 20 49 6e 73 65 72 74 43 6f 6c 20 20 20 |ine InsertCol |
000009c0 20 20 20 20 20 20 20 20 20 20 34 35 0a 23 64 65 | 45.#de|
000009d0 66 69 6e 65 20 44 65 6c 65 74 65 43 6f 6c 20 20 |fine DeleteCol |
000009e0 20 20 20 20 20 20 20 20 20 20 20 34 36 0a 23 64 | 46.#d|
000009f0 65 66 69 6e 65 20 46 6c 69 70 41 62 6f 75 74 59 |efine FlipAboutY|
00000a00 41 78 69 73 20 20 20 20 20 20 20 20 34 37 0a 23 |Axis 47.#|
00000a10 64 65 66 69 6e 65 20 50 6c 6f 74 4d 61 73 6b 20 |define PlotMask |
00000a20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 38 0a | 48.|
00000a30 23 64 65 66 69 6e 65 20 50 6c 6f 74 4d 61 73 6b |#define PlotMask|
00000a40 55 73 65 72 43 6f 6f 72 64 73 20 20 20 20 34 39 |UserCoords 49|
00000a50 0a 0a 23 64 65 66 69 6e 65 20 50 6c 6f 74 4d 61 |..#define PlotMa|
00000a60 73 6b 53 63 61 6c 65 64 20 20 20 20 20 20 20 20 |skScaled |
00000a70 35 30 0a 23 64 65 66 69 6e 65 20 50 61 69 6e 74 |50.#define Paint|
00000a80 43 68 61 72 53 63 61 6c 65 64 20 20 20 20 20 20 |CharScaled |
00000a90 20 35 31 0a 23 64 65 66 69 6e 65 20 50 75 74 53 | 51.#define PutS|
00000aa0 70 72 69 74 65 53 63 61 6c 65 64 20 20 20 20 20 |priteScaled |
00000ab0 20 20 35 32 0a 23 64 65 66 69 6e 65 20 50 75 74 | 52.#define Put|
00000ac0 53 70 72 69 74 65 47 72 65 79 53 63 61 6c 65 64 |SpriteGreyScaled|
00000ad0 20 20 20 35 33 0a 23 64 65 66 69 6e 65 20 52 65 | 53.#define Re|
00000ae0 6d 6f 76 65 4c 65 66 74 48 61 6e 64 57 61 73 74 |moveLeftHandWast|
00000af0 61 67 65 20 35 34 0a 23 64 65 66 69 6e 65 20 50 |age 54.#define P|
00000b00 6c 6f 74 4d 61 73 6b 54 72 61 6e 73 66 6f 72 6d |lotMaskTransform|
00000b10 65 64 20 20 20 35 35 0a 23 64 65 66 69 6e 65 20 |ed 55.#define |
00000b20 50 75 74 53 70 72 69 74 65 54 72 61 6e 73 66 6f |PutSpriteTransfo|
00000b30 72 6d 65 64 20 20 35 36 0a 23 64 65 66 69 6e 65 |rmed 56.#define|
00000b40 20 49 6e 73 65 72 74 44 65 6c 65 74 65 52 6f 77 | InsertDeleteRow|
00000b50 73 20 20 20 20 20 20 35 37 0a 23 64 65 66 69 6e |s 57.#defin|
00000b60 65 20 49 6e 73 65 72 74 44 65 6c 65 74 65 43 6f |e InsertDeleteCo|
00000b70 6c 75 6d 6e 73 20 20 20 35 38 0a 0a 23 64 65 66 |lumns 58..#def|
00000b80 69 6e 65 20 53 77 69 74 63 68 4f 75 74 70 75 74 |ine SwitchOutput|
00000b90 54 6f 53 70 72 69 74 65 20 20 36 30 0a 23 64 65 |ToSprite 60.#de|
00000ba0 66 69 6e 65 20 53 77 69 74 63 68 4f 75 74 70 75 |fine SwitchOutpu|
00000bb0 74 54 6f 4d 61 73 6b 20 20 20 20 36 31 0a 23 64 |tToMask 61.#d|
00000bc0 65 66 69 6e 65 20 52 65 61 64 53 61 76 65 41 72 |efine ReadSaveAr|
00000bd0 65 61 53 69 7a 65 20 20 20 20 20 20 36 32 0a 0a |eaSize 62..|
00000be0 23 64 65 66 69 6e 65 20 42 61 64 52 65 61 73 6f |#define BadReaso|
00000bf0 6e 43 6f 64 65 20 20 20 20 20 20 20 20 20 36 33 |nCode 63|
00000c00 0a 0a 23 70 72 61 67 6d 61 20 6e 6f 5f 63 68 65 |..#pragma no_che|
00000c10 63 6b 5f 73 74 61 63 6b 0a 0a 73 74 61 74 69 63 |ck_stack..static|
00000c20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 | _kernel_oserror|
00000c30 20 2a 20 73 70 72 69 74 65 5f 5f 6f 70 28 5f 6b | * sprite__op(_k|
00000c40 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 2a |ernel_swi_regs *|
00000c50 72 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 5f 6b |r).{. return _k|
00000c60 65 72 6e 65 6c 5f 73 77 69 28 4f 53 5f 53 70 72 |ernel_swi(OS_Spr|
00000c70 69 74 65 4f 70 2c 20 72 2c 72 29 3b 0a 7d 0a 0a |iteOp, r,r);.}..|
00000c80 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 20 53 69 6d 70 6c |./******** Simpl|
00000c90 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 75 73 |e operations, us|
00000ca0 65 20 6e 6f 20 73 70 72 69 74 65 20 61 72 65 61 |e no sprite area|
00000cb0 2c 20 6e 6f 20 6e 61 6d 65 2f 73 70 72 69 74 65 |, no name/sprite|
00000cc0 20 70 6f 69 6e 74 65 72 20 2a 2a 2a 2f 0a 0a 0a | pointer ***/...|
00000cd0 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
00000ce0 2a 20 73 70 72 69 74 65 5f 73 63 72 65 65 6e 73 |* sprite_screens|
00000cf0 61 76 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a |ave(const char *|
00000d00 66 69 6c 65 6e 61 6d 65 2c 20 73 70 72 69 74 65 |filename, sprite|
00000d10 5f 70 61 6c 66 6c 61 67 20 70 61 6c 66 6c 61 67 |_palflag palflag|
00000d20 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 |).{. _kernel_s|
00000d30 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b |wi_regs r;. _k|
00000d40 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 |ernel_oserror *r|
00000d50 65 73 75 6c 74 3b 0a 20 20 20 72 2e 72 5b 30 5d |esult;. r.r[0]|
00000d60 20 3d 20 32 3b 0a 20 2f 2a 72 2e 72 5b 31 5d 20 | = 2;. /*r.r[1] |
00000d70 75 6e 75 73 65 64 20 2a 2f 20 20 0a 20 20 20 72 |unused */ . r|
00000d80 2e 72 5b 32 5d 20 3d 20 28 69 6e 74 29 20 66 69 |.r[2] = (int) fi|
00000d90 6c 65 6e 61 6d 65 3b 0a 20 20 20 72 2e 72 5b 33 |lename;. r.r[3|
00000da0 5d 20 3d 20 70 61 6c 66 6c 61 67 3b 0a 20 20 20 |] = palflag;. |
00000db0 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f |result = sprite_|
00000dc0 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 |_op(&r);. retu|
00000dd0 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f |rn result;.}..._|
00000de0 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a |kernel_oserror *|
00000df0 20 73 70 72 69 74 65 5f 73 63 72 65 65 6e 6c 6f | sprite_screenlo|
00000e00 61 64 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 |ad(const char *f|
00000e10 69 6c 65 6e 61 6d 65 29 0a 7b 0a 20 20 20 5f 6b |ilename).{. _k|
00000e20 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 |ernel_swi_regs r|
00000e30 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 |;. _kernel_ose|
00000e40 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 |rror *result;. |
00000e50 20 72 2e 72 5b 30 5d 20 3d 20 33 3b 0a 20 2f 2a | r.r[0] = 3;. /*|
00000e60 72 2e 72 5b 31 5d 20 75 6e 75 73 65 64 20 2a 2f |r.r[1] unused */|
00000e70 20 20 0a 20 20 20 72 2e 72 5b 32 5d 20 3d 20 28 | . r.r[2] = (|
00000e80 69 6e 74 29 20 66 69 6c 65 6e 61 6d 65 3b 0a 20 |int) filename;. |
00000e90 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 | result = sprit|
00000ea0 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 |e__op(&r);. re|
00000eb0 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a |turn result;.}..|
00000ec0 0a 2f 2a 2a 2a 2a 2a 2a 20 4f 70 65 72 61 74 69 |./****** Operati|
00000ed0 6f 6e 73 20 6f 6e 20 65 69 74 68 65 72 20 73 79 |ons on either sy|
00000ee0 73 74 65 6d 2f 75 73 65 72 20 61 72 65 61 2c 20 |stem/user area, |
00000ef0 6e 6f 20 6e 61 6d 65 2f 73 70 72 69 74 65 20 70 |no name/sprite p|
00000f00 6f 69 6e 74 65 72 20 2a 2a 2a 2a 2a 2f 0a 0a 73 |ointer *****/..s|
00000f10 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 66 72 |tatic void setfr|
00000f20 6f 6d 61 72 65 61 28 69 6e 74 20 6f 70 2c 20 73 |omarea(int op, s|
00000f30 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 61 |prite_area *area|
00000f40 2c 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 |, _kernel_swi_re|
00000f50 67 73 20 2a 72 29 0a 7b 0a 20 20 20 69 66 20 28 |gs *r).{. if (|
00000f60 61 72 65 61 20 3d 3d 20 73 70 72 69 74 65 5f 6d |area == sprite_m|
00000f70 61 69 6e 61 72 65 61 29 0a 20 20 20 7b 0a 20 20 |ainarea). {. |
00000f80 20 20 20 20 72 2d 3e 72 5b 30 5d 20 3d 20 6f 70 | r->r[0] = op|
00000f90 3b 0a 20 2f 2a 20 20 20 72 2d 3e 72 5b 31 5d 20 |;. /* r->r[1] |
00000fa0 75 6e 75 73 65 64 20 2a 2f 0a 20 20 20 7d 0a 20 |unused */. }. |
00000fb0 20 20 65 6c 73 65 0a 20 20 20 7b 0a 20 20 20 20 | else. {. |
00000fc0 20 20 72 2d 3e 72 5b 30 5d 20 3d 20 6f 70 20 2b | r->r[0] = op +|
00000fd0 20 32 35 36 3b 0a 20 20 20 20 20 20 72 2d 3e 72 | 256;. r->r|
00000fe0 5b 31 5d 20 3d 20 28 69 6e 74 29 20 61 72 65 61 |[1] = (int) area|
00000ff0 3b 0a 20 20 20 7d 0a 7d 0a 0a 0a 76 6f 69 64 20 |;. }.}...void |
00001000 73 70 72 69 74 65 5f 61 72 65 61 5f 69 6e 69 74 |sprite_area_init|
00001010 69 61 6c 69 73 65 28 73 70 72 69 74 65 5f 61 72 |ialise(sprite_ar|
00001020 65 61 20 2a 61 72 65 61 2c 20 69 6e 74 20 6c 65 |ea *area, int le|
00001030 6e 67 74 68 29 0a 7b 0a 20 20 20 61 72 65 61 2d |ngth).{. area-|
00001040 3e 73 69 7a 65 20 20 20 20 3d 20 6c 65 6e 67 74 |>size = lengt|
00001050 68 3b 20 2f 2a 20 4e 6f 20 53 70 72 69 74 65 4f |h; /* No SpriteO|
00001060 70 20 74 6f 20 64 6f 20 74 68 69 73 20 21 20 2a |p to do this ! *|
00001070 2f 0a 20 20 20 61 72 65 61 2d 3e 6e 75 6d 62 65 |/. area->numbe|
00001080 72 20 20 3d 20 30 3b 0a 20 20 20 61 72 65 61 2d |r = 0;. area-|
00001090 3e 73 70 72 6f 66 66 20 20 3d 20 31 36 3b 0a 20 |>sproff = 16;. |
000010a0 20 20 61 72 65 61 2d 3e 66 72 65 65 6f 66 66 20 | area->freeoff |
000010b0 3d 20 31 36 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 |= 16;.}..._kerne|
000010c0 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 69 |l_oserror * spri|
000010d0 74 65 5f 61 72 65 61 5f 72 65 61 64 69 6e 66 6f |te_area_readinfo|
000010e0 28 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 |(sprite_area *ar|
000010f0 65 61 2c 20 73 70 72 69 74 65 5f 61 72 65 61 20 |ea, sprite_area |
00001100 2a 72 65 73 75 6c 74 61 72 65 61 29 0a 7b 0a 20 |*resultarea).{. |
00001110 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 | _kernel_swi_re|
00001120 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c |gs r;. _kernel|
00001130 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 |_oserror *result|
00001140 3b 0a 20 20 20 73 65 74 66 72 6f 6d 61 72 65 61 |;. setfromarea|
00001150 28 38 2c 20 61 72 65 61 2c 20 26 72 29 3b 0a 20 |(8, area, &r);. |
00001160 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 | result = sprit|
00001170 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 69 66 |e__op(&r);. if|
00001180 20 28 72 65 73 75 6c 74 20 3d 3d 20 4e 55 4c 4c | (result == NULL|
00001190 29 20 2f 2a 20 4f 6e 6c 79 20 72 65 74 75 72 6e |) /* Only return|
000011a0 20 72 65 73 75 6c 74 20 69 66 20 6e 6f 20 65 72 | result if no er|
000011b0 72 6f 72 20 2a 2f 0a 20 20 20 7b 0a 20 20 20 20 |ror */. {. |
000011c0 20 20 72 65 73 75 6c 74 61 72 65 61 2d 3e 73 69 | resultarea->si|
000011d0 7a 65 20 20 20 20 3d 20 72 2e 72 5b 32 5d 3b 0a |ze = r.r[2];.|
000011e0 20 20 20 20 20 20 72 65 73 75 6c 74 61 72 65 61 | resultarea|
000011f0 2d 3e 6e 75 6d 62 65 72 20 20 3d 20 72 2e 72 5b |->number = r.r[|
00001200 33 5d 3b 0a 20 20 20 20 20 20 72 65 73 75 6c 74 |3];. result|
00001210 61 72 65 61 2d 3e 73 70 72 6f 66 66 20 20 3d 20 |area->sproff = |
00001220 72 2e 72 5b 34 5d 3b 0a 20 20 20 20 20 20 72 65 |r.r[4];. re|
00001230 73 75 6c 74 61 72 65 61 2d 3e 66 72 65 65 6f 66 |sultarea->freeof|
00001240 66 20 3d 20 72 2e 72 5b 35 5d 3b 0a 20 20 20 7d |f = r.r[5];. }|
00001250 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c |. return resul|
00001260 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f |t;.}..._kernel_o|
00001270 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f |serror * sprite_|
00001280 61 72 65 61 5f 72 65 69 6e 69 74 28 73 70 72 69 |area_reinit(spri|
00001290 74 65 5f 61 72 65 61 20 2a 61 72 65 61 29 0a 7b |te_area *area).{|
000012a0 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f |. _kernel_swi_|
000012b0 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e |regs r;. _kern|
000012c0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 |el_oserror *resu|
000012d0 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 61 72 |lt;. setfromar|
000012e0 65 61 28 39 2c 20 61 72 65 61 2c 20 26 72 29 3b |ea(9, area, &r);|
000012f0 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 |. result = spr|
00001300 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 |ite__op(&r);. |
00001310 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d |return result;.}|
00001320 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 |..._kernel_oserr|
00001330 6f 72 20 2a 20 73 70 72 69 74 65 5f 61 72 65 61 |or * sprite_area|
00001340 5f 73 61 76 65 28 73 70 72 69 74 65 5f 61 72 65 |_save(sprite_are|
00001350 61 20 2a 61 72 65 61 2c 20 63 6f 6e 73 74 20 63 |a *area, const c|
00001360 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 29 0a 7b |har *filename).{|
00001370 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f |. _kernel_swi_|
00001380 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e |regs r;. _kern|
00001390 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 |el_oserror *resu|
000013a0 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 61 72 |lt;. setfromar|
000013b0 65 61 28 31 32 2c 20 61 72 65 61 2c 20 26 72 29 |ea(12, area, &r)|
000013c0 3b 0a 20 20 20 72 2e 72 5b 32 5d 20 3d 20 28 69 |;. r.r[2] = (i|
000013d0 6e 74 29 20 66 69 6c 65 6e 61 6d 65 3b 0a 20 20 |nt) filename;. |
000013e0 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 65 | result = sprite|
000013f0 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 74 |__op(&r);. ret|
00001400 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a |urn result;.}...|
00001410 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
00001420 2a 20 73 70 72 69 74 65 5f 61 72 65 61 5f 6c 6f |* sprite_area_lo|
00001430 61 64 28 73 70 72 69 74 65 5f 61 72 65 61 20 2a |ad(sprite_area *|
00001440 61 72 65 61 2c 20 63 6f 6e 73 74 20 63 68 61 72 |area, const char|
00001450 20 2a 66 69 6c 65 6e 61 6d 65 29 0a 7b 0a 20 20 | *filename).{. |
00001460 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 | _kernel_swi_reg|
00001470 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f |s r;. _kernel_|
00001480 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b |oserror *result;|
00001490 0a 20 20 20 73 65 74 66 72 6f 6d 61 72 65 61 28 |. setfromarea(|
000014a0 31 30 2c 20 61 72 65 61 2c 20 26 72 29 3b 0a 20 |10, area, &r);. |
000014b0 20 20 72 2e 72 5b 32 5d 20 3d 20 28 69 6e 74 29 | r.r[2] = (int)|
000014c0 20 66 69 6c 65 6e 61 6d 65 3b 0a 20 20 20 72 65 | filename;. re|
000014d0 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f |sult = sprite__o|
000014e0 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 6e |p(&r);. return|
000014f0 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 | result;.}..._ke|
00001500 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 |rnel_oserror * s|
00001510 70 72 69 74 65 5f 61 72 65 61 5f 6d 65 72 67 65 |prite_area_merge|
00001520 28 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 |(sprite_area *ar|
00001530 65 61 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a |ea, const char *|
00001540 66 69 6c 65 6e 61 6d 65 29 0a 7b 0a 20 20 20 5f |filename).{. _|
00001550 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 |kernel_swi_regs |
00001560 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 |r;. _kernel_os|
00001570 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 |error *result;. |
00001580 20 20 73 65 74 66 72 6f 6d 61 72 65 61 28 31 31 | setfromarea(11|
00001590 2c 20 61 72 65 61 2c 20 26 72 29 3b 0a 20 20 20 |, area, &r);. |
000015a0 72 2e 72 5b 32 5d 20 3d 20 28 69 6e 74 29 20 66 |r.r[2] = (int) f|
000015b0 69 6c 65 6e 61 6d 65 3b 0a 20 20 20 72 65 73 75 |ilename;. resu|
000015c0 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 |lt = sprite__op(|
000015d0 26 72 29 3b 0a 20 20 20 72 65 74 75 72 6e 20 72 |&r);. return r|
000015e0 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e |esult;.}..._kern|
000015f0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 |el_oserror * spr|
00001600 69 74 65 5f 67 65 74 6e 61 6d 65 28 73 70 72 69 |ite_getname(spri|
00001610 74 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 76 |te_area *area, v|
00001620 6f 69 64 20 2a 62 75 66 66 65 72 2c 0a 20 20 20 |oid *buffer,. |
00001630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001640 20 20 20 20 20 20 20 69 6e 74 20 2a 6c 65 6e 67 | int *leng|
00001650 74 68 2c 20 69 6e 74 20 69 6e 64 65 78 29 0a 7b |th, int index).{|
00001660 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f |. _kernel_swi_|
00001670 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e |regs r;. _kern|
00001680 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 |el_oserror *resu|
00001690 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 61 72 |lt;. setfromar|
000016a0 65 61 28 31 33 2c 20 61 72 65 61 2c 20 26 72 29 |ea(13, area, &r)|
000016b0 3b 0a 20 20 20 72 2e 72 5b 32 5d 20 3d 20 28 69 |;. r.r[2] = (i|
000016c0 6e 74 29 20 62 75 66 66 65 72 3b 0a 20 20 20 72 |nt) buffer;. r|
000016d0 2e 72 5b 33 5d 20 3d 20 2a 6c 65 6e 67 74 68 3b |.r[3] = *length;|
000016e0 0a 20 20 20 72 2e 72 5b 34 5d 20 3d 20 69 6e 64 |. r.r[4] = ind|
000016f0 65 78 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 |ex;. result = |
00001700 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a |sprite__op(&r);.|
00001710 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d | if (result ==|
00001720 20 4e 55 4c 4c 29 20 2f 2a 20 4f 6e 6c 79 20 72 | NULL) /* Only r|
00001730 65 74 75 72 6e 20 72 65 73 75 6c 74 20 69 66 20 |eturn result if |
00001740 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 7b |no error */. {|
00001750 0a 20 20 20 20 20 20 2a 6c 65 6e 67 74 68 20 3d |. *length =|
00001760 20 72 2e 72 5b 33 5d 3b 0a 20 20 20 7d 0a 20 20 | r.r[3];. }. |
00001770 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a | return result;.|
00001780 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 |}..._kernel_oser|
00001790 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 67 65 74 |ror * sprite_get|
000017a0 28 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 |(sprite_area *ar|
000017b0 65 61 2c 20 63 68 61 72 20 2a 6e 61 6d 65 2c 20 |ea, char *name, |
000017c0 73 70 72 69 74 65 5f 70 61 6c 66 6c 61 67 20 70 |sprite_palflag p|
000017d0 61 6c 66 6c 61 67 29 0a 7b 0a 20 20 20 5f 6b 65 |alflag).{. _ke|
000017e0 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b |rnel_swi_regs r;|
000017f0 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 |. _kernel_oser|
00001800 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 |ror *result;. |
00001810 73 65 74 66 72 6f 6d 61 72 65 61 28 31 34 2c 20 |setfromarea(14, |
00001820 61 72 65 61 2c 20 26 72 29 3b 0a 20 20 20 72 2e |area, &r);. r.|
00001830 72 5b 32 5d 20 3d 20 28 69 6e 74 29 20 6e 61 6d |r[2] = (int) nam|
00001840 65 3b 0a 20 20 20 72 2e 72 5b 33 5d 20 3d 20 70 |e;. r.r[3] = p|
00001850 61 6c 66 6c 61 67 3b 0a 20 20 20 72 65 73 75 6c |alflag;. resul|
00001860 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 |t = sprite__op(&|
00001870 72 29 3b 0a 20 20 20 72 65 74 75 72 6e 20 72 65 |r);. return re|
00001880 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 |sult;.}..._kerne|
00001890 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 69 |l_oserror * spri|
000018a0 74 65 5f 67 65 74 5f 72 70 28 73 70 72 69 74 65 |te_get_rp(sprite|
000018b0 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 63 68 61 |_area *area, cha|
000018c0 72 20 2a 6e 61 6d 65 2c 20 73 70 72 69 74 65 5f |r *name, sprite_|
000018d0 70 61 6c 66 6c 61 67 20 70 61 6c 66 6c 61 67 2c |palflag palflag,|
000018e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
000018f0 20 20 20 20 20 20 20 20 20 20 73 70 72 69 74 65 | sprite|
00001900 5f 70 74 72 20 2a 72 65 73 75 6c 74 61 64 64 72 |_ptr *resultaddr|
00001910 65 73 73 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 |ess).{. _kerne|
00001920 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 |l_swi_regs r;. |
00001930 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 | _kernel_oserror|
00001940 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 | *result;. set|
00001950 66 72 6f 6d 61 72 65 61 28 31 34 2c 20 61 72 65 |fromarea(14, are|
00001960 61 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 5b 32 |a, &r);. r.r[2|
00001970 5d 20 3d 20 28 69 6e 74 29 20 6e 61 6d 65 3b 0a |] = (int) name;.|
00001980 20 20 20 72 2e 72 5b 33 5d 20 3d 20 70 61 6c 66 | r.r[3] = palf|
00001990 6c 61 67 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d |lag;. result =|
000019a0 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b | sprite__op(&r);|
000019b0 0a 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d |. if (result =|
000019c0 3d 20 4e 55 4c 4c 29 20 2f 2a 20 4f 6e 6c 79 20 |= NULL) /* Only |
000019d0 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20 69 66 |return result if|
000019e0 20 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 | no error */. |
000019f0 7b 0a 20 20 20 20 20 20 2a 72 65 73 75 6c 74 61 |{. *resulta|
00001a00 64 64 72 65 73 73 20 3d 20 28 76 6f 69 64 20 2a |ddress = (void *|
00001a10 29 20 72 2e 72 5b 32 5d 3b 0a 20 20 20 7d 0a 20 |) r.r[2];. }. |
00001a20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b | return result;|
00001a30 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 |.}..._kernel_ose|
00001a40 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 67 65 |rror * sprite_ge|
00001a50 74 5f 67 69 76 65 6e 28 73 70 72 69 74 65 5f 61 |t_given(sprite_a|
00001a60 72 65 61 20 2a 61 72 65 61 2c 20 63 68 61 72 20 |rea *area, char |
00001a70 2a 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 |*name,. |
00001a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001a90 20 20 20 73 70 72 69 74 65 5f 70 61 6c 66 6c 61 | sprite_palfla|
00001aa0 67 20 70 61 6c 66 6c 61 67 2c 0a 20 20 20 20 20 |g palflag,. |
00001ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001ac0 20 20 20 20 20 20 20 69 6e 74 20 78 30 2c 20 69 | int x0, i|
00001ad0 6e 74 20 79 30 2c 20 69 6e 74 20 78 31 2c 20 69 |nt y0, int x1, i|
00001ae0 6e 74 20 79 31 29 0a 7b 0a 20 20 20 5f 6b 65 72 |nt y1).{. _ker|
00001af0 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a |nel_swi_regs r;.|
00001b00 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 | _kernel_oserr|
00001b10 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 |or *result;. s|
00001b20 65 74 66 72 6f 6d 61 72 65 61 28 31 36 2c 20 61 |etfromarea(16, a|
00001b30 72 65 61 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 |rea, &r);. r.r|
00001b40 5b 32 5d 20 3d 20 28 69 6e 74 29 20 6e 61 6d 65 |[2] = (int) name|
00001b50 3b 0a 20 20 20 72 2e 72 5b 33 5d 20 3d 20 70 61 |;. r.r[3] = pa|
00001b60 6c 66 6c 61 67 3b 0a 20 20 20 72 2e 72 5b 34 5d |lflag;. r.r[4]|
00001b70 20 3d 20 78 30 3b 0a 20 20 20 72 2e 72 5b 35 5d | = x0;. r.r[5]|
00001b80 20 3d 20 79 30 3b 0a 20 20 20 72 2e 72 5b 36 5d | = y0;. r.r[6]|
00001b90 20 3d 20 78 31 3b 0a 20 20 20 72 2e 72 5b 37 5d | = x1;. r.r[7]|
00001ba0 20 3d 20 79 31 3b 0a 20 20 20 72 65 73 75 6c 74 | = y1;. result|
00001bb0 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 | = sprite__op(&r|
00001bc0 29 3b 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 |);. return res|
00001bd0 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c |ult;.}..._kernel|
00001be0 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 |_oserror * sprit|
00001bf0 65 5f 67 65 74 5f 67 69 76 65 6e 5f 72 70 28 73 |e_get_given_rp(s|
00001c00 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 61 |prite_area *area|
00001c10 2c 20 63 68 61 72 20 2a 6e 61 6d 65 2c 0a 20 20 |, char *name,. |
00001c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001c30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 70 72 | spr|
00001c40 69 74 65 5f 70 61 6c 66 6c 61 67 20 70 61 6c 66 |ite_palflag palf|
00001c50 6c 61 67 2c 20 69 6e 74 20 78 30 2c 20 69 6e 74 |lag, int x0, int|
00001c60 20 79 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 | y0,. |
00001c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001c80 20 20 20 20 69 6e 74 20 78 31 2c 20 69 6e 74 20 | int x1, int |
00001c90 79 31 2c 20 73 70 72 69 74 65 5f 70 74 72 20 2a |y1, sprite_ptr *|
00001ca0 72 65 73 75 6c 74 61 64 64 72 65 73 73 29 0a 7b |resultaddress).{|
00001cb0 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f |. _kernel_swi_|
00001cc0 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e |regs r;. _kern|
00001cd0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 |el_oserror *resu|
00001ce0 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 61 72 |lt;. setfromar|
00001cf0 65 61 28 31 36 2c 20 61 72 65 61 2c 20 26 72 29 |ea(16, area, &r)|
00001d00 3b 0a 20 20 20 72 2e 72 5b 32 5d 20 3d 20 28 69 |;. r.r[2] = (i|
00001d10 6e 74 29 20 6e 61 6d 65 3b 0a 20 20 20 72 2e 72 |nt) name;. r.r|
00001d20 5b 33 5d 20 3d 20 70 61 6c 66 6c 61 67 3b 0a 20 |[3] = palflag;. |
00001d30 20 20 72 2e 72 5b 34 5d 20 3d 20 78 30 3b 0a 20 | r.r[4] = x0;. |
00001d40 20 20 72 2e 72 5b 35 5d 20 3d 20 79 30 3b 0a 20 | r.r[5] = y0;. |
00001d50 20 20 72 2e 72 5b 36 5d 20 3d 20 78 31 3b 0a 20 | r.r[6] = x1;. |
00001d60 20 20 72 2e 72 5b 37 5d 20 3d 20 79 31 3b 0a 20 | r.r[7] = y1;. |
00001d70 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 | result = sprit|
00001d80 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 69 66 |e__op(&r);. if|
00001d90 20 28 72 65 73 75 6c 74 20 3d 3d 20 4e 55 4c 4c | (result == NULL|
00001da0 29 20 2f 2a 20 4f 6e 6c 79 20 72 65 74 75 72 6e |) /* Only return|
00001db0 20 72 65 73 75 6c 74 20 69 66 20 6e 6f 20 65 72 | result if no er|
00001dc0 72 6f 72 20 2a 2f 0a 20 20 20 7b 0a 20 20 20 20 |ror */. {. |
00001dd0 20 20 2a 72 65 73 75 6c 74 61 64 64 72 65 73 73 | *resultaddress|
00001de0 20 3d 20 28 76 6f 69 64 20 2a 29 20 72 2e 72 5b | = (void *) r.r[|
00001df0 32 5d 3b 0a 20 20 20 7d 0a 20 20 20 72 65 74 75 |2];. }. retu|
00001e00 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f |rn result;.}..._|
00001e10 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a |kernel_oserror *|
00001e20 20 73 70 72 69 74 65 5f 63 72 65 61 74 65 28 73 | sprite_create(s|
00001e30 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 61 |prite_area *area|
00001e40 2c 20 63 68 61 72 20 2a 6e 61 6d 65 2c 20 73 70 |, char *name, sp|
00001e50 72 69 74 65 5f 70 61 6c 66 6c 61 67 20 70 61 6c |rite_palflag pal|
00001e60 66 6c 61 67 2c 0a 20 20 20 20 20 20 20 20 20 20 |flag,. |
00001e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 | i|
00001e80 6e 74 20 77 69 64 74 68 2c 20 69 6e 74 20 68 65 |nt width, int he|
00001e90 69 67 68 74 2c 20 69 6e 74 20 6d 6f 64 65 29 0a |ight, int mode).|
00001ea0 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 |{. _kernel_swi|
00001eb0 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 |_regs r;. _ker|
00001ec0 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 |nel_oserror *res|
00001ed0 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 61 |ult;. setfroma|
00001ee0 72 65 61 28 31 35 2c 20 61 72 65 61 2c 20 26 72 |rea(15, area, &r|
00001ef0 29 3b 20 2f 2a 20 4e 42 2e 20 4e 6f 74 20 61 6c |); /* NB. Not al|
00001f00 6c 20 64 6f 6e 65 20 69 6e 20 6e 75 6d 65 72 69 |l done in numeri|
00001f10 63 20 6f 72 64 65 72 20 21 21 20 2a 2f 0a 20 20 |c order !! */. |
00001f20 20 72 2e 72 5b 32 5d 20 3d 20 28 69 6e 74 29 20 | r.r[2] = (int) |
00001f30 6e 61 6d 65 3b 0a 20 20 20 72 2e 72 5b 33 5d 20 |name;. r.r[3] |
00001f40 3d 20 70 61 6c 66 6c 61 67 3b 0a 20 20 20 72 2e |= palflag;. r.|
00001f50 72 5b 34 5d 20 3d 20 77 69 64 74 68 3b 0a 20 20 |r[4] = width;. |
00001f60 20 72 2e 72 5b 35 5d 20 3d 20 68 65 69 67 68 74 | r.r[5] = height|
00001f70 3b 0a 20 20 20 72 2e 72 5b 36 5d 20 3d 20 6d 6f |;. r.r[6] = mo|
00001f80 64 65 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 |de;. result = |
00001f90 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a |sprite__op(&r);.|
00001fa0 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 | return result|
00001fb0 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 |;.}..._kernel_os|
00001fc0 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 63 |error * sprite_c|
00001fd0 72 65 61 74 65 5f 72 70 28 73 70 72 69 74 65 5f |reate_rp(sprite_|
00001fe0 61 72 65 61 20 2a 61 72 65 61 2c 20 63 68 61 72 |area *area, char|
00001ff0 20 2a 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 | *name,. |
00002000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002010 20 20 20 20 73 70 72 69 74 65 5f 70 61 6c 66 6c | sprite_palfl|
00002020 61 67 20 70 61 6c 66 6c 61 67 2c 0a 20 20 20 20 |ag palflag,. |
00002030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002040 20 20 20 20 20 20 20 20 69 6e 74 20 77 69 64 74 | int widt|
00002050 68 2c 20 69 6e 74 20 68 65 69 67 68 74 2c 20 69 |h, int height, i|
00002060 6e 74 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 |nt mode,. |
00002070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002080 20 20 20 20 20 73 70 72 69 74 65 5f 70 74 72 20 | sprite_ptr |
00002090 2a 72 65 73 75 6c 74 61 64 64 72 65 73 73 29 0a |*resultaddress).|
000020a0 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 |{. _kernel_swi|
000020b0 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 |_regs r;. _ker|
000020c0 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 |nel_oserror *res|
000020d0 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 61 |ult;. setfroma|
000020e0 72 65 61 28 31 35 2c 20 61 72 65 61 2c 20 26 72 |rea(15, area, &r|
000020f0 29 3b 20 2f 2a 20 4e 42 2e 20 4e 6f 74 20 61 6c |); /* NB. Not al|
00002100 6c 20 64 6f 6e 65 20 69 6e 20 6e 75 6d 65 72 69 |l done in numeri|
00002110 63 20 6f 72 64 65 72 20 21 21 20 2a 2f 0a 20 20 |c order !! */. |
00002120 20 72 2e 72 5b 32 5d 20 3d 20 28 69 6e 74 29 20 | r.r[2] = (int) |
00002130 6e 61 6d 65 3b 0a 20 20 20 72 2e 72 5b 33 5d 20 |name;. r.r[3] |
00002140 3d 20 70 61 6c 66 6c 61 67 3b 0a 20 20 20 72 2e |= palflag;. r.|
00002150 72 5b 34 5d 20 3d 20 77 69 64 74 68 3b 0a 20 20 |r[4] = width;. |
00002160 20 72 2e 72 5b 35 5d 20 3d 20 68 65 69 67 68 74 | r.r[5] = height|
00002170 3b 0a 20 20 20 72 2e 72 5b 36 5d 20 3d 20 6d 6f |;. r.r[6] = mo|
00002180 64 65 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 |de;. result = |
00002190 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a |sprite__op(&r);.|
000021a0 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d | if (result ==|
000021b0 20 4e 55 4c 4c 29 20 2f 2a 20 4f 6e 6c 79 20 72 | NULL) /* Only r|
000021c0 65 74 75 72 6e 20 72 65 73 75 6c 74 20 69 66 20 |eturn result if |
000021d0 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 7b |no error */. {|
000021e0 0a 20 20 20 20 20 20 2f 2a 20 73 70 72 69 74 65 |. /* sprite|
000021f0 6f 70 20 31 35 20 64 6f 65 73 6e 27 74 20 72 65 |op 15 doesn't re|
00002200 74 75 72 6e 20 70 6f 69 6e 74 65 72 20 74 6f 20 |turn pointer to |
00002210 73 70 72 69 74 65 20 69 6e 20 72 32 2c 20 73 6f |sprite in r2, so|
00002220 2e 2e 2e 2e 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 |....*/. /* |
00002230 73 65 6c 65 63 74 20 74 68 65 20 73 70 72 69 74 |select the sprit|
00002240 65 20 6a 75 73 74 20 63 72 65 61 74 65 64 20 28 |e just created (|
00002250 67 65 74 73 20 69 74 73 20 61 64 64 72 65 73 73 |gets its address|
00002260 20 69 6e 20 72 32 29 20 2a 2f 0a 20 20 20 20 20 | in r2) */. |
00002270 20 73 65 74 66 72 6f 6d 61 72 65 61 28 32 34 2c | setfromarea(24,|
00002280 20 61 72 65 61 2c 20 26 72 29 3b 0a 20 20 20 20 | area, &r);. |
00002290 20 20 72 2e 72 5b 32 5d 20 3d 20 28 69 6e 74 29 | r.r[2] = (int)|
000022a0 6e 61 6d 65 3b 0a 20 20 20 20 20 20 72 65 73 75 |name;. resu|
000022b0 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 |lt = sprite__op(|
000022c0 26 72 29 3b 0a 20 20 20 20 20 20 69 66 20 28 72 |&r);. if (r|
000022d0 65 73 75 6c 74 20 3d 3d 20 4e 55 4c 4c 29 0a 20 |esult == NULL). |
000022e0 20 20 20 20 20 20 20 20 2a 72 65 73 75 6c 74 61 | *resulta|
000022f0 64 64 72 65 73 73 20 3d 20 28 76 6f 69 64 20 2a |ddress = (void *|
00002300 29 20 72 2e 72 5b 32 5d 3b 0a 20 20 20 7d 0a 20 |) r.r[2];. }. |
00002310 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b | return result;|
00002320 0a 7d 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |.}.../**********|
00002330 2a 20 4f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 |* Operations on |
00002340 73 79 73 74 65 6d 2f 75 73 65 72 20 61 72 65 61 |system/user area|
00002350 2c 20 6e 61 6d 65 2f 73 70 72 69 74 65 20 70 6f |, name/sprite po|
00002360 69 6e 74 65 72 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |inter **********|
00002370 2f 0a 0a 2f 2a 20 4d 6f 64 69 66 79 20 6f 70 20 |/../* Modify op |
00002380 69 66 20 75 73 69 6e 67 20 73 70 72 69 74 65 20 |if using sprite |
00002390 61 64 64 72 65 73 73 20 69 73 20 61 64 64 72 65 |address is addre|
000023a0 73 73 2c 20 6e 6f 74 20 6e 61 6d 65 20 2a 2f 0a |ss, not name */.|
000023b0 2f 2a 20 42 75 74 20 6f 6e 6c 79 20 69 66 20 75 |/* But only if u|
000023c0 73 69 6e 67 20 6f 77 6e 20 73 70 72 69 74 65 20 |sing own sprite |
000023d0 61 72 65 61 20 2a 2f 0a 0a 73 74 61 74 69 63 20 |area */..static |
000023e0 76 6f 69 64 20 73 65 74 66 72 6f 6d 74 61 67 28 |void setfromtag(|
000023f0 69 6e 74 20 6f 70 2c 20 73 70 72 69 74 65 5f 61 |int op, sprite_a|
00002400 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 74 |rea *area, sprit|
00002410 65 5f 69 64 20 2a 73 70 72 2c 20 5f 6b 65 72 6e |e_id *spr, _kern|
00002420 65 6c 5f 73 77 69 5f 72 65 67 73 20 2a 72 29 0a |el_swi_regs *r).|
00002430 7b 0a 20 20 20 69 66 20 28 61 72 65 61 20 3d 3d |{. if (area ==|
00002440 20 73 70 72 69 74 65 5f 6d 61 69 6e 61 72 65 61 | sprite_mainarea|
00002450 29 0a 20 20 20 7b 0a 20 20 20 20 20 20 72 2d 3e |). {. r->|
00002460 72 5b 30 5d 20 3d 20 6f 70 3b 0a 20 20 20 2f 2a |r[0] = op;. /*|
00002470 20 72 2d 3e 72 5b 31 5d 20 75 6e 75 73 65 64 20 | r->r[1] unused |
00002480 2a 2f 0a 20 20 20 7d 0a 20 20 20 65 6c 73 65 0a |*/. }. else.|
00002490 20 20 20 7b 0a 20 20 20 20 20 20 72 2d 3e 72 5b | {. r->r[|
000024a0 31 5d 20 3d 20 28 69 6e 74 29 20 61 72 65 61 3b |1] = (int) area;|
000024b0 0a 20 20 20 20 20 20 69 66 20 28 28 73 70 72 2d |. if ((spr-|
000024c0 3e 74 61 67 29 20 3d 3d 20 73 70 72 69 74 65 5f |>tag) == sprite_|
000024d0 69 64 5f 61 64 64 72 29 0a 20 20 20 20 20 20 7b |id_addr). {|
000024e0 0a 20 20 20 20 20 20 20 20 20 72 2d 3e 72 5b 30 |. r->r[0|
000024f0 5d 20 3d 20 35 31 32 20 2b 20 6f 70 3b 0a 20 20 |] = 512 + op;. |
00002500 20 20 20 20 20 20 20 72 2d 3e 72 5b 32 5d 20 3d | r->r[2] =|
00002510 20 28 69 6e 74 29 20 28 73 70 72 2d 3e 73 2e 61 | (int) (spr->s.a|
00002520 64 64 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 |ddr);. }. |
00002530 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 7b | else. {|
00002540 0a 20 20 20 20 20 20 20 20 20 72 2d 3e 72 5b 30 |. r->r[0|
00002550 5d 20 3d 20 32 35 36 20 2b 20 6f 70 3b 0a 20 20 |] = 256 + op;. |
00002560 20 20 20 20 20 20 20 72 2d 3e 72 5b 32 5d 20 3d | r->r[2] =|
00002570 20 28 69 6e 74 29 20 28 73 70 72 2d 3e 73 2e 6e | (int) (spr->s.n|
00002580 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 |ame);. }. |
00002590 20 7d 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f | }.}..._kernel_o|
000025a0 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f |serror * sprite_|
000025b0 72 65 61 64 69 6e 66 6f 28 73 70 72 69 74 65 5f |readinfo(sprite_|
000025c0 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 |area *area, spri|
000025d0 74 65 5f 69 64 20 2a 73 70 72 2c 0a 20 20 20 20 |te_id *spr,. |
000025e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000025f0 20 20 20 20 20 20 20 73 70 72 69 74 65 5f 69 6e | sprite_in|
00002600 66 6f 20 2a 72 65 73 75 6c 74 69 6e 66 6f 29 0a |fo *resultinfo).|
00002610 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 |{. _kernel_swi|
00002620 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 |_regs r;. _ker|
00002630 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 |nel_oserror *res|
00002640 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 |ult;. setfromt|
00002650 61 67 28 34 30 2c 20 61 72 65 61 2c 20 73 70 72 |ag(40, area, spr|
00002660 2c 20 26 72 29 3b 0a 20 20 20 72 65 73 75 6c 74 |, &r);. result|
00002670 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 | = sprite__op(&r|
00002680 29 3b 0a 20 20 20 69 66 20 28 72 65 73 75 6c 74 |);. if (result|
00002690 20 3d 3d 20 4e 55 4c 4c 29 20 2f 2a 20 4f 6e 6c | == NULL) /* Onl|
000026a0 79 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20 |y return result |
000026b0 69 66 20 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 |if no error */. |
000026c0 20 20 7b 0a 20 20 20 20 20 20 72 65 73 75 6c 74 | {. result|
000026d0 69 6e 66 6f 2d 3e 77 69 64 74 68 20 20 3d 20 72 |info->width = r|
000026e0 2e 72 5b 33 5d 3b 0a 20 20 20 20 20 20 72 65 73 |.r[3];. res|
000026f0 75 6c 74 69 6e 66 6f 2d 3e 68 65 69 67 68 74 20 |ultinfo->height |
00002700 3d 20 72 2e 72 5b 34 5d 3b 0a 20 20 20 20 20 20 |= r.r[4];. |
00002710 72 65 73 75 6c 74 69 6e 66 6f 2d 3e 6d 61 73 6b |resultinfo->mask|
00002720 20 20 20 3d 20 72 2e 72 5b 35 5d 3b 0a 20 20 20 | = r.r[5];. |
00002730 20 20 20 72 65 73 75 6c 74 69 6e 66 6f 2d 3e 6d | resultinfo->m|
00002740 6f 64 65 20 20 20 3d 20 72 2e 72 5b 36 5d 3b 0a |ode = r.r[6];.|
00002750 20 20 20 7d 0a 20 20 20 72 65 74 75 72 6e 20 72 | }. return r|
00002760 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e |esult;.}..._kern|
00002770 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 |el_oserror * spr|
00002780 69 74 65 5f 73 65 6c 65 63 74 28 73 70 72 69 74 |ite_select(sprit|
00002790 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 |e_area *area, sp|
000027a0 72 69 74 65 5f 69 64 20 2a 73 70 72 29 0a 7b 0a |rite_id *spr).{.|
000027b0 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 | _kernel_swi_r|
000027c0 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 |egs r;. _kerne|
000027d0 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c |l_oserror *resul|
000027e0 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 67 |t;. setfromtag|
000027f0 28 32 34 2c 20 61 72 65 61 2c 20 73 70 72 2c 20 |(24, area, spr, |
00002800 26 72 29 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d |&r);. result =|
00002810 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b | sprite__op(&r);|
00002820 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c |. return resul|
00002830 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f |t;.}..._kernel_o|
00002840 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f |serror * sprite_|
00002850 73 65 6c 65 63 74 5f 72 70 28 73 70 72 69 74 65 |select_rp(sprite|
00002860 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 |_area *area, spr|
00002870 69 74 65 5f 69 64 20 2a 73 70 72 2c 0a 20 20 20 |ite_id *spr,. |
00002880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002890 20 20 20 20 20 20 20 20 20 73 70 72 69 74 65 5f | sprite_|
000028a0 70 74 72 20 2a 72 65 73 75 6c 74 61 64 64 72 65 |ptr *resultaddre|
000028b0 73 73 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c |ss).{. _kernel|
000028c0 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 |_swi_regs r;. |
000028d0 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
000028e0 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 66 |*result;. setf|
000028f0 72 6f 6d 74 61 67 28 32 34 2c 20 61 72 65 61 2c |romtag(24, area,|
00002900 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 65 | spr, &r);. re|
00002910 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f |sult = sprite__o|
00002920 70 28 26 72 29 3b 0a 20 20 20 69 66 20 28 72 65 |p(&r);. if (re|
00002930 73 75 6c 74 20 3d 3d 20 4e 55 4c 4c 29 20 2f 2a |sult == NULL) /*|
00002940 20 4f 6e 6c 79 20 72 65 74 75 72 6e 20 72 65 73 | Only return res|
00002950 75 6c 74 20 69 66 20 6e 6f 20 65 72 72 6f 72 20 |ult if no error |
00002960 2a 2f 0a 20 20 20 7b 0a 20 20 20 20 20 20 2a 72 |*/. {. *r|
00002970 65 73 75 6c 74 61 64 64 72 65 73 73 20 3d 20 28 |esultaddress = (|
00002980 76 6f 69 64 20 2a 29 20 72 2e 72 5b 32 5d 3b 0a |void *) r.r[2];.|
00002990 20 20 20 7d 0a 20 20 20 72 65 74 75 72 6e 20 72 | }. return r|
000029a0 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e |esult;.}..._kern|
000029b0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 |el_oserror * spr|
000029c0 69 74 65 5f 64 65 6c 65 74 65 28 73 70 72 69 74 |ite_delete(sprit|
000029d0 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 |e_area *area, sp|
000029e0 72 69 74 65 5f 69 64 20 2a 73 70 72 29 0a 7b 0a |rite_id *spr).{.|
000029f0 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 | _kernel_swi_r|
00002a00 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 |egs r;. _kerne|
00002a10 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c |l_oserror *resul|
00002a20 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 67 |t;. setfromtag|
00002a30 28 32 35 2c 20 61 72 65 61 2c 20 73 70 72 2c 20 |(25, area, spr, |
00002a40 26 72 29 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d |&r);. result =|
00002a50 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b | sprite__op(&r);|
00002a60 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c |. return resul|
00002a70 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f |t;.}..._kernel_o|
00002a80 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f |serror * sprite_|
00002a90 72 65 6e 61 6d 65 28 73 70 72 69 74 65 5f 61 72 |rename(sprite_ar|
00002aa0 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 74 65 |ea *area, sprite|
00002ab0 5f 69 64 20 2a 73 70 72 2c 20 63 68 61 72 20 2a |_id *spr, char *|
00002ac0 6e 65 77 6e 61 6d 65 29 0a 7b 0a 20 20 20 5f 6b |newname).{. _k|
00002ad0 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 |ernel_swi_regs r|
00002ae0 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 |;. _kernel_ose|
00002af0 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 |rror *result;. |
00002b00 20 73 65 74 66 72 6f 6d 74 61 67 28 32 36 2c 20 | setfromtag(26, |
00002b10 61 72 65 61 2c 20 73 70 72 2c 20 26 72 29 3b 0a |area, spr, &r);.|
00002b20 20 20 20 72 2e 72 5b 33 5d 20 3d 20 28 69 6e 74 | r.r[3] = (int|
00002b30 29 20 6e 65 77 6e 61 6d 65 3b 0a 20 20 20 72 65 |) newname;. re|
00002b40 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f |sult = sprite__o|
00002b50 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 6e |p(&r);. return|
00002b60 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 | result;.}..._ke|
00002b70 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 |rnel_oserror * s|
00002b80 70 72 69 74 65 5f 63 6f 70 79 28 73 70 72 69 74 |prite_copy(sprit|
00002b90 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 |e_area *area, sp|
00002ba0 72 69 74 65 5f 69 64 20 2a 73 70 72 2c 20 63 68 |rite_id *spr, ch|
00002bb0 61 72 20 2a 63 6f 70 79 6e 61 6d 65 29 0a 7b 0a |ar *copyname).{.|
00002bc0 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 | _kernel_swi_r|
00002bd0 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 |egs r;. _kerne|
00002be0 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c |l_oserror *resul|
00002bf0 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 67 |t;. setfromtag|
00002c00 28 32 37 2c 20 61 72 65 61 2c 20 73 70 72 2c 20 |(27, area, spr, |
00002c10 26 72 29 3b 0a 20 20 20 72 2e 72 5b 33 5d 20 3d |&r);. r.r[3] =|
00002c20 20 28 69 6e 74 29 20 63 6f 70 79 6e 61 6d 65 3b | (int) copyname;|
00002c30 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 |. result = spr|
00002c40 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 |ite__op(&r);. |
00002c50 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d |return result;.}|
00002c60 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 |..._kernel_oserr|
00002c70 6f 72 20 2a 20 73 70 72 69 74 65 5f 70 75 74 28 |or * sprite_put(|
00002c80 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 |sprite_area *are|
00002c90 61 2c 20 73 70 72 69 74 65 5f 69 64 20 2a 73 70 |a, sprite_id *sp|
00002ca0 72 2c 20 69 6e 74 20 67 63 6f 6c 5f 61 63 74 69 |r, int gcol_acti|
00002cb0 6f 6e 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c |on).{. _kernel|
00002cc0 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 |_swi_regs r;. |
00002cd0 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
00002ce0 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 66 |*result;. setf|
00002cf0 72 6f 6d 74 61 67 28 32 38 2c 20 61 72 65 61 2c |romtag(28, area,|
00002d00 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 2e | spr, &r);. r.|
00002d10 72 5b 35 5d 20 3d 20 67 63 6f 6c 5f 61 63 74 69 |r[5] = gcol_acti|
00002d20 6f 6e 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 |on;. result = |
00002d30 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a |sprite__op(&r);.|
00002d40 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 | return result|
00002d50 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 |;.}..._kernel_os|
00002d60 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 70 |error * sprite_p|
00002d70 75 74 5f 67 69 76 65 6e 28 73 70 72 69 74 65 5f |ut_given(sprite_|
00002d80 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 |area *area, spri|
00002d90 74 65 5f 69 64 20 2a 73 70 72 2c 20 69 6e 74 20 |te_id *spr, int |
00002da0 67 63 6f 6c 5f 61 63 74 69 6f 6e 2c 0a 20 20 20 |gcol_action,. |
00002db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002dc0 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 2c 20 | int x, |
00002dd0 69 6e 74 20 79 29 0a 7b 0a 20 20 20 5f 6b 65 72 |int y).{. _ker|
00002de0 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a |nel_swi_regs r;.|
00002df0 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 | _kernel_oserr|
00002e00 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 |or *result;. s|
00002e10 65 74 66 72 6f 6d 74 61 67 28 33 34 2c 20 61 72 |etfromtag(34, ar|
00002e20 65 61 2c 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 |ea, spr, &r);. |
00002e30 20 72 2e 72 5b 33 5d 20 3d 20 78 3b 0a 20 20 20 | r.r[3] = x;. |
00002e40 72 2e 72 5b 34 5d 20 3d 20 79 3b 0a 20 20 20 72 |r.r[4] = y;. r|
00002e50 2e 72 5b 35 5d 20 3d 20 67 63 6f 6c 5f 61 63 74 |.r[5] = gcol_act|
00002e60 69 6f 6e 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d |ion;. result =|
00002e70 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b | sprite__op(&r);|
00002e80 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c |. return resul|
00002e90 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f |t;.}..._kernel_o|
00002ea0 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f |serror * sprite_|
00002eb0 70 75 74 5f 73 63 61 6c 65 64 28 73 70 72 69 74 |put_scaled(sprit|
00002ec0 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 |e_area *area, sp|
00002ed0 72 69 74 65 5f 69 64 20 2a 73 70 72 2c 0a 20 20 |rite_id *spr,. |
00002ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002ef0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 67 | int g|
00002f00 63 6f 6c 5f 61 63 74 69 6f 6e 2c 0a 20 20 20 20 |col_action,. |
00002f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002f20 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 2c 20 | int x, |
00002f30 69 6e 74 20 79 2c 0a 20 20 20 20 20 20 20 20 20 |int y,. |
00002f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002f50 20 20 20 20 73 70 72 69 74 65 5f 66 61 63 74 6f | sprite_facto|
00002f60 72 73 20 2a 66 61 63 74 6f 72 73 2c 0a 20 20 20 |rs *factors,. |
00002f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002f80 20 20 20 20 20 20 20 20 20 20 73 70 72 69 74 65 | sprite|
00002f90 5f 70 69 78 74 72 61 6e 73 20 2a 70 69 78 74 72 |_pixtrans *pixtr|
00002fa0 61 6e 73 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 |ans).{. _kerne|
00002fb0 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 |l_swi_regs r;. |
00002fc0 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 | _kernel_oserror|
00002fd0 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 | *result;. set|
00002fe0 66 72 6f 6d 74 61 67 28 35 32 2c 20 61 72 65 61 |fromtag(52, area|
00002ff0 2c 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 |, spr, &r);. r|
00003000 2e 72 5b 33 5d 20 3d 20 78 3b 0a 20 20 20 72 2e |.r[3] = x;. r.|
00003010 72 5b 34 5d 20 3d 20 79 3b 0a 20 20 20 72 2e 72 |r[4] = y;. r.r|
00003020 5b 35 5d 20 3d 20 67 63 6f 6c 5f 61 63 74 69 6f |[5] = gcol_actio|
00003030 6e 3b 0a 20 20 20 72 2e 72 5b 36 5d 20 3d 20 28 |n;. r.r[6] = (|
00003040 69 6e 74 29 20 66 61 63 74 6f 72 73 3b 0a 20 20 |int) factors;. |
00003050 20 72 2e 72 5b 37 5d 20 3d 20 28 69 6e 74 29 20 | r.r[7] = (int) |
00003060 70 69 78 74 72 61 6e 73 3b 0a 20 20 20 72 65 73 |pixtrans;. res|
00003070 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 |ult = sprite__op|
00003080 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 6e 20 |(&r);. return |
00003090 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 |result;.}..._ker|
000030a0 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 |nel_oserror * sp|
000030b0 72 69 74 65 5f 70 75 74 5f 69 6e 5f 63 75 72 72 |rite_put_in_curr|
000030c0 65 6e 74 28 73 70 72 69 74 65 5f 61 72 65 61 20 |ent(sprite_area |
000030d0 2a 61 72 65 61 2c 20 73 70 72 69 74 65 5f 69 64 |*area, sprite_id|
000030e0 20 2a 73 70 72 2c 0a 20 20 20 20 20 20 20 20 20 | *spr,. |
000030f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00003100 20 20 20 20 69 6e 74 20 67 63 6f 6c 5f 61 63 74 | int gcol_act|
00003110 69 6f 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 |ion,. |
00003120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00003130 20 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 29 0a | int x, int y).|
00003140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00003150 20 20 20 20 20 20 20 20 20 20 20 20 0a 7b 0a 20 | .{. |
00003160 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 | _kernel_swi_reg|
00003170 73 20 72 3b 0a 20 20 5f 6b 65 72 6e 65 6c 5f 6f |s r;. _kernel_o|
00003180 73 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a |serror *result;.|
00003190 20 20 73 70 72 69 74 65 5f 66 61 63 74 6f 72 73 | sprite_factors|
000031a0 20 66 61 63 74 6f 72 73 3b 0a 20 20 73 70 72 69 | factors;. spri|
000031b0 74 65 5f 70 69 78 74 72 61 6e 73 20 2a 70 69 78 |te_pixtrans *pix|
000031c0 74 72 61 6e 73 3b 0a 0a 0a 0a 0a 0a 72 2e 72 5b |trans;......r.r[|
000031d0 30 5d 3d 28 69 6e 74 29 61 72 65 61 3b 0a 69 66 |0]=(int)area;.if|
000031e0 20 28 73 70 72 2d 3e 74 61 67 3d 3d 20 73 70 72 | (spr->tag== spr|
000031f0 69 74 65 5f 69 64 5f 61 64 64 72 29 0a 7b 0a 20 |ite_id_addr).{. |
00003200 72 2e 72 5b 31 5d 3d 28 69 6e 74 29 20 28 73 70 |r.r[1]=(int) (sp|
00003210 72 2d 3e 73 2e 6e 61 6d 65 29 3b 0a 20 72 2e 72 |r->s.name);. r.r|
00003220 5b 35 5d 3d 30 78 30 33 3b 0a 0a 7d 0a 65 6c 73 |[5]=0x03;..}.els|
00003230 65 0a 7b 0a 20 72 2e 72 5b 31 5d 3d 28 69 6e 74 |e.{. r.r[1]=(int|
00003240 29 20 28 73 70 72 2d 3e 73 2e 61 64 64 72 29 3b |) (spr->s.addr);|
00003250 0a 20 72 2e 72 5b 35 5d 3d 30 78 30 32 3b 0a 0a |. r.r[5]=0x02;..|
00003260 7d 0a 72 2e 72 5b 32 5d 3d 2d 31 3b 0a 72 2e 72 |}.r.r[2]=-1;.r.r|
00003270 5b 33 5d 3d 2d 31 3b 0a 72 2e 72 5b 34 5d 3d 30 |[3]=-1;.r.r[4]=0|
00003280 3b 0a 72 2e 72 5b 36 5d 3d 30 3b 0a 72 2e 72 5b |;.r.r[6]=0;.r.r[|
00003290 37 5d 3d 30 3b 0a 5f 6b 65 72 6e 65 6c 5f 73 77 |7]=0;._kernel_sw|
000032a0 69 28 43 6f 6c 6f 75 72 54 72 61 6e 73 5f 53 65 |i(ColourTrans_Se|
000032b0 6c 65 63 74 54 61 62 6c 65 2c 26 72 2c 26 72 29 |lectTable,&r,&r)|
000032c0 3b 0a 20 20 70 69 78 74 72 61 6e 73 3d 6d 61 6c |;. pixtrans=mal|
000032d0 6c 6f 63 28 72 2e 72 5b 34 5d 29 3b 0a 20 20 69 |loc(r.r[4]);. i|
000032e0 66 20 28 21 70 69 78 74 72 61 6e 73 29 20 72 65 |f (!pixtrans) re|
000032f0 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 72 2e 72 5b |turn(NULL);.r.r[|
00003300 34 5d 3d 28 69 6e 74 29 70 69 78 74 72 61 6e 73 |4]=(int)pixtrans|
00003310 3b 20 0a 5f 6b 65 72 6e 65 6c 5f 73 77 69 28 43 |; ._kernel_swi(C|
00003320 6f 6c 6f 75 72 54 72 61 6e 73 5f 53 65 6c 65 63 |olourTrans_Selec|
00003330 74 54 61 62 6c 65 2c 26 72 2c 26 72 29 3b 0a 0a |tTable,&r,&r);..|
00003340 20 20 73 65 74 66 72 6f 6d 74 61 67 28 35 32 2c | setfromtag(52,|
00003350 20 61 72 65 61 2c 20 73 70 72 2c 20 26 72 29 3b | area, spr, &r);|
00003360 0a 0a 20 20 72 2e 72 5b 36 5d 3d 28 69 6e 74 29 |.. r.r[6]=(int)|
00003370 26 66 61 63 74 6f 72 73 3b 0a 20 20 72 2e 72 5b |&factors;. r.r[|
00003380 37 5d 3d 30 3b 0a 20 20 5f 6b 65 72 6e 65 6c 5f |7]=0;. _kernel_|
00003390 73 77 69 28 57 69 6d 70 5f 52 65 61 64 50 69 78 |swi(Wimp_ReadPix|
000033a0 54 72 61 6e 73 2c 26 72 2c 26 72 29 3b 0a 0a 20 |Trans,&r,&r);.. |
000033b0 20 20 73 65 74 66 72 6f 6d 74 61 67 28 35 32 2c | setfromtag(52,|
000033c0 20 61 72 65 61 2c 20 73 70 72 2c 20 26 72 29 3b | area, spr, &r);|
000033d0 0a 20 20 20 72 2e 72 5b 33 5d 20 3d 20 78 3b 0a |. r.r[3] = x;.|
000033e0 20 20 20 72 2e 72 5b 34 5d 20 3d 20 79 3b 0a 20 | r.r[4] = y;. |
000033f0 20 20 72 2e 72 5b 35 5d 20 3d 20 67 63 6f 6c 5f | r.r[5] = gcol_|
00003400 61 63 74 69 6f 6e 3b 0a 20 20 20 72 2e 72 5b 36 |action;. r.r[6|
00003410 5d 20 3d 20 28 69 6e 74 29 20 26 66 61 63 74 6f |] = (int) &facto|
00003420 72 73 3b 0a 20 20 20 72 2e 72 5b 37 5d 20 3d 20 |rs;. r.r[7] = |
00003430 28 69 6e 74 29 20 70 69 78 74 72 61 6e 73 3b 0a |(int) pixtrans;.|
00003440 20 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 | result = spri|
00003450 74 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 66 |te__op(&r);. f|
00003460 72 65 65 28 70 69 78 74 72 61 6e 73 29 3b 0a 20 |ree(pixtrans);. |
00003470 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b | return result;|
00003480 0a 7d 0a 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 |.}...._kernel_os|
00003490 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 70 |error * sprite_p|
000034a0 75 74 5f 67 72 65 79 73 63 61 6c 65 64 28 73 70 |ut_greyscaled(sp|
000034b0 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 61 2c |rite_area *area,|
000034c0 20 73 70 72 69 74 65 5f 69 64 20 2a 73 70 72 2c | sprite_id *spr,|
000034d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
000034e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000034f0 20 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c 0a | int x, int y,.|
00003500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00003520 20 73 70 72 69 74 65 5f 66 61 63 74 6f 72 73 20 | sprite_factors |
00003530 2a 66 61 63 74 6f 72 73 2c 0a 20 20 20 20 20 20 |*factors,. |
00003540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00003550 20 20 20 20 20 20 20 20 20 20 20 73 70 72 69 74 | sprit|
00003560 65 5f 70 69 78 74 72 61 6e 73 20 2a 70 69 78 74 |e_pixtrans *pixt|
00003570 72 61 6e 73 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e |rans).{. _kern|
00003580 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 |el_swi_regs r;. |
00003590 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f | _kernel_oserro|
000035a0 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 |r *result;. se|
000035b0 74 66 72 6f 6d 74 61 67 28 35 33 2c 20 61 72 65 |tfromtag(53, are|
000035c0 61 2c 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 |a, spr, &r);. |
000035d0 72 2e 72 5b 33 5d 20 3d 20 78 3b 0a 20 20 20 72 |r.r[3] = x;. r|
000035e0 2e 72 5b 34 5d 20 3d 20 79 3b 0a 20 20 20 72 2e |.r[4] = y;. r.|
000035f0 72 5b 35 5d 20 3d 20 30 3b 20 20 20 20 20 20 20 |r[5] = 0; |
00003600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 64 | /* d|
00003610 6f 65 73 6e 27 74 20 73 75 70 70 6f 72 74 20 6d |oesn't support m|
00003620 61 73 6b 20 6f 72 20 67 63 6f 6c 20 61 63 74 69 |ask or gcol acti|
00003630 6f 6e 20 2a 2f 0a 20 20 20 72 2e 72 5b 36 5d 20 |on */. r.r[6] |
00003640 3d 20 28 69 6e 74 29 20 66 61 63 74 6f 72 73 3b |= (int) factors;|
00003650 0a 20 20 20 72 2e 72 5b 37 5d 20 3d 20 28 69 6e |. r.r[7] = (in|
00003660 74 29 20 70 69 78 74 72 61 6e 73 3b 0a 20 20 20 |t) pixtrans;. |
00003670 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f |result = sprite_|
00003680 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 |_op(&r);. retu|
00003690 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f |rn result;.}..._|
000036a0 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a |kernel_oserror *|
000036b0 20 73 70 72 69 74 65 5f 70 75 74 5f 6d 61 73 6b | sprite_put_mask|
000036c0 28 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 |(sprite_area *ar|
000036d0 65 61 2c 20 73 70 72 69 74 65 5f 69 64 20 2a 73 |ea, sprite_id *s|
000036e0 70 72 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c |pr).{. _kernel|
000036f0 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 |_swi_regs r;. |
00003700 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
00003710 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 66 |*result;. setf|
00003720 72 6f 6d 74 61 67 28 34 38 2c 20 61 72 65 61 2c |romtag(48, area,|
00003730 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 65 | spr, &r);. re|
00003740 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f |sult = sprite__o|
00003750 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 6e |p(&r);. return|
00003760 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 | result;.}..._ke|
00003770 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 |rnel_oserror * s|
00003780 70 72 69 74 65 5f 70 75 74 5f 6d 61 73 6b 5f 67 |prite_put_mask_g|
00003790 69 76 65 6e 28 73 70 72 69 74 65 5f 61 72 65 61 |iven(sprite_area|
000037a0 20 2a 61 72 65 61 2c 20 73 70 72 69 74 65 5f 69 | *area, sprite_i|
000037b0 64 20 2a 73 70 72 2c 0a 20 20 20 20 20 20 20 20 |d *spr,. |
000037c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000037d0 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 2c 20 | int x, |
000037e0 69 6e 74 20 79 29 0a 7b 0a 20 20 20 5f 6b 65 72 |int y).{. _ker|
000037f0 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a |nel_swi_regs r;.|
00003800 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 | _kernel_oserr|
00003810 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 |or *result;. s|
00003820 65 74 66 72 6f 6d 74 61 67 28 34 39 2c 20 61 72 |etfromtag(49, ar|
00003830 65 61 2c 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 |ea, spr, &r);. |
00003840 20 72 2e 72 5b 33 5d 20 3d 20 78 3b 0a 20 20 20 | r.r[3] = x;. |
00003850 72 2e 72 5b 34 5d 20 3d 20 79 3b 0a 20 20 20 72 |r.r[4] = y;. r|
00003860 65 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f |esult = sprite__|
00003870 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 |op(&r);. retur|
00003880 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b |n result;.}..._k|
00003890 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 |ernel_oserror * |
000038a0 73 70 72 69 74 65 5f 70 75 74 5f 6d 61 73 6b 5f |sprite_put_mask_|
000038b0 73 63 61 6c 65 64 28 73 70 72 69 74 65 5f 61 72 |scaled(sprite_ar|
000038c0 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 74 65 |ea *area, sprite|
000038d0 5f 69 64 20 2a 73 70 72 2c 0a 20 20 20 20 20 20 |_id *spr,. |
000038e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000038f0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 | int |
00003900 78 2c 20 69 6e 74 20 79 2c 0a 20 20 20 20 20 20 |x, int y,. |
00003910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00003920 20 20 20 20 20 20 20 20 20 20 20 20 73 70 72 69 | spri|
00003930 74 65 5f 66 61 63 74 6f 72 73 20 2a 66 61 63 74 |te_factors *fact|
00003940 6f 72 73 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 |ors).{. _kerne|
00003950 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 |l_swi_regs r;. |
00003960 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 | _kernel_oserror|
00003970 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 | *result;. set|
00003980 66 72 6f 6d 74 61 67 28 35 30 2c 20 61 72 65 61 |fromtag(50, area|
00003990 2c 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 |, spr, &r);. r|
000039a0 2e 72 5b 33 5d 20 3d 20 78 3b 0a 20 20 20 72 2e |.r[3] = x;. r.|
000039b0 72 5b 34 5d 20 3d 20 79 3b 0a 20 20 20 72 2e 72 |r[4] = y;. r.r|
000039c0 5b 36 5d 20 3d 20 28 69 6e 74 29 20 66 61 63 74 |[6] = (int) fact|
000039d0 6f 72 73 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d |ors;. result =|
000039e0 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b | sprite__op(&r);|
000039f0 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c |. return resul|
00003a00 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f |t;.}..._kernel_o|
00003a10 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f |serror * sprite_|
00003a20 70 75 74 5f 63 68 61 72 5f 73 63 61 6c 65 64 28 |put_char_scaled(|
00003a30 63 68 61 72 20 63 68 2c 0a 20 20 20 20 20 20 20 |char ch,. |
00003a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00003a50 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 | int x|
00003a60 2c 20 69 6e 74 20 79 2c 0a 20 20 20 20 20 20 20 |, int y,. |
00003a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00003a80 20 20 20 20 20 20 20 20 20 20 20 73 70 72 69 74 | sprit|
00003a90 65 5f 66 61 63 74 6f 72 73 20 2a 66 61 63 74 6f |e_factors *facto|
00003aa0 72 73 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c |rs).{. _kernel|
00003ab0 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 |_swi_regs r;. |
00003ac0 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
00003ad0 2a 72 65 73 75 6c 74 3b 0a 20 20 20 72 2e 72 5b |*result;. r.r[|
00003ae0 30 5d 20 3d 20 35 31 3b 0a 20 20 20 72 2e 72 5b |0] = 51;. r.r[|
00003af0 31 5d 20 3d 20 63 68 3b 0a 20 20 20 72 2e 72 5b |1] = ch;. r.r[|
00003b00 33 5d 20 3d 20 78 3b 0a 20 20 20 72 2e 72 5b 34 |3] = x;. r.r[4|
00003b10 5d 20 3d 20 79 3b 0a 20 20 20 72 2e 72 5b 36 5d |] = y;. r.r[6]|
00003b20 20 3d 20 28 69 6e 74 29 20 66 61 63 74 6f 72 73 | = (int) factors|
00003b30 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 73 70 |;. result = sp|
00003b40 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 |rite__op(&r);. |
00003b50 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a | return result;.|
00003b60 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 |}..._kernel_oser|
00003b70 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 63 72 65 |ror * sprite_cre|
00003b80 61 74 65 5f 6d 61 73 6b 28 73 70 72 69 74 65 5f |ate_mask(sprite_|
00003b90 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 |area *area, spri|
00003ba0 74 65 5f 69 64 20 2a 73 70 72 29 0a 7b 0a 20 20 |te_id *spr).{. |
00003bb0 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 | _kernel_swi_reg|
00003bc0 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f |s r;. _kernel_|
00003bd0 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b |oserror *result;|
00003be0 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 67 28 32 |. setfromtag(2|
00003bf0 39 2c 20 61 72 65 61 2c 20 73 70 72 2c 20 26 72 |9, area, spr, &r|
00003c00 29 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 73 |);. result = s|
00003c10 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 |prite__op(&r);. |
00003c20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b | return result;|
00003c30 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 |.}..._kernel_ose|
00003c40 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 72 65 |rror * sprite_re|
00003c50 6d 6f 76 65 5f 6d 61 73 6b 28 73 70 72 69 74 65 |move_mask(sprite|
00003c60 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 |_area *area, spr|
00003c70 69 74 65 5f 69 64 20 2a 73 70 72 29 0a 7b 0a 20 |ite_id *spr).{. |
00003c80 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 | _kernel_swi_re|
00003c90 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c |gs r;. _kernel|
00003ca0 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 |_oserror *result|
00003cb0 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 67 28 |;. setfromtag(|
00003cc0 33 30 2c 20 61 72 65 61 2c 20 73 70 72 2c 20 26 |30, area, spr, &|
00003cd0 72 29 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 |r);. result = |
00003ce0 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a |sprite__op(&r);.|
00003cf0 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 | return result|
00003d00 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 |;.}..._kernel_os|
00003d10 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 69 |error * sprite_i|
00003d20 6e 73 65 72 74 5f 72 6f 77 28 73 70 72 69 74 65 |nsert_row(sprite|
00003d30 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 |_area *area, spr|
00003d40 69 74 65 5f 69 64 20 2a 73 70 72 2c 20 69 6e 74 |ite_id *spr, int|
00003d50 20 72 6f 77 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e | row).{. _kern|
00003d60 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 |el_swi_regs r;. |
00003d70 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f | _kernel_oserro|
00003d80 72 20 2a 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 |r *result;. se|
00003d90 74 66 72 6f 6d 74 61 67 28 33 31 2c 20 61 72 65 |tfromtag(31, are|
00003da0 61 2c 20 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 |a, spr, &r);. |
00003db0 72 2e 72 5b 33 5d 20 3d 20 72 6f 77 3b 0a 20 20 |r.r[3] = row;. |
00003dc0 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 65 | result = sprite|
00003dd0 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 74 |__op(&r);. ret|
00003de0 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a |urn result;.}...|
00003df0 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
00003e00 2a 20 73 70 72 69 74 65 5f 64 65 6c 65 74 65 5f |* sprite_delete_|
00003e10 72 6f 77 28 73 70 72 69 74 65 5f 61 72 65 61 20 |row(sprite_area |
00003e20 2a 61 72 65 61 2c 20 73 70 72 69 74 65 5f 69 64 |*area, sprite_id|
00003e30 20 2a 73 70 72 2c 20 69 6e 74 20 72 6f 77 29 0a | *spr, int row).|
00003e40 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 |{. _kernel_swi|
00003e50 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 |_regs r;. _ker|
00003e60 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 |nel_oserror *res|
00003e70 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 |ult;. setfromt|
00003e80 61 67 28 33 32 2c 20 61 72 65 61 2c 20 73 70 72 |ag(32, area, spr|
00003e90 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 5b 33 5d |, &r);. r.r[3]|
00003ea0 20 3d 20 72 6f 77 3b 0a 20 20 20 72 65 73 75 6c | = row;. resul|
00003eb0 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 |t = sprite__op(&|
00003ec0 72 29 3b 0a 20 20 20 72 65 74 75 72 6e 20 72 65 |r);. return re|
00003ed0 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 |sult;.}..._kerne|
00003ee0 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 69 |l_oserror * spri|
00003ef0 74 65 5f 69 6e 73 65 72 74 5f 63 6f 6c 75 6d 6e |te_insert_column|
00003f00 28 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 |(sprite_area *ar|
00003f10 65 61 2c 20 73 70 72 69 74 65 5f 69 64 20 2a 73 |ea, sprite_id *s|
00003f20 70 72 2c 20 69 6e 74 20 63 6f 6c 75 6d 6e 29 0a |pr, int column).|
00003f30 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 |{. _kernel_swi|
00003f40 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 |_regs r;. _ker|
00003f50 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 |nel_oserror *res|
00003f60 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 |ult;. setfromt|
00003f70 61 67 28 34 35 2c 20 61 72 65 61 2c 20 73 70 72 |ag(45, area, spr|
00003f80 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 5b 33 5d |, &r);. r.r[3]|
00003f90 20 3d 20 63 6f 6c 75 6d 6e 3b 0a 20 20 20 72 65 | = column;. re|
00003fa0 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f |sult = sprite__o|
00003fb0 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 6e |p(&r);. return|
00003fc0 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 | result;.}..._ke|
00003fd0 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 |rnel_oserror * s|
00003fe0 70 72 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c |prite_delete_col|
00003ff0 75 6d 6e 28 73 70 72 69 74 65 5f 61 72 65 61 20 |umn(sprite_area |
00004000 2a 61 72 65 61 2c 20 73 70 72 69 74 65 5f 69 64 |*area, sprite_id|
00004010 20 2a 73 70 72 2c 20 69 6e 74 20 63 6f 6c 75 6d | *spr, int colum|
00004020 6e 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f |n).{. _kernel_|
00004030 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f |swi_regs r;. _|
00004040 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a |kernel_oserror *|
00004050 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 |result;. setfr|
00004060 6f 6d 74 61 67 28 34 36 2c 20 61 72 65 61 2c 20 |omtag(46, area, |
00004070 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 |spr, &r);. r.r|
00004080 5b 33 5d 20 3d 20 63 6f 6c 75 6d 6e 3b 0a 20 20 |[3] = column;. |
00004090 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 65 | result = sprite|
000040a0 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 74 |__op(&r);. ret|
000040b0 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a |urn result;.}...|
000040c0 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
000040d0 2a 20 73 70 72 69 74 65 5f 66 6c 69 70 5f 78 28 |* sprite_flip_x(|
000040e0 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 |sprite_area *are|
000040f0 61 2c 20 73 70 72 69 74 65 5f 69 64 20 2a 73 70 |a, sprite_id *sp|
00004100 72 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f |r).{. _kernel_|
00004110 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f |swi_regs r;. _|
00004120 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a |kernel_oserror *|
00004130 72 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 |result;. setfr|
00004140 6f 6d 74 61 67 28 33 33 2c 20 61 72 65 61 2c 20 |omtag(33, area, |
00004150 73 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 65 73 |spr, &r);. res|
00004160 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 |ult = sprite__op|
00004170 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 6e 20 |(&r);. return |
00004180 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 |result;.}..._ker|
00004190 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 |nel_oserror * sp|
000041a0 72 69 74 65 5f 66 6c 69 70 5f 79 28 73 70 72 69 |rite_flip_y(spri|
000041b0 74 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 73 |te_area *area, s|
000041c0 70 72 69 74 65 5f 69 64 20 2a 73 70 72 29 0a 7b |prite_id *spr).{|
000041d0 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f |. _kernel_swi_|
000041e0 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e |regs r;. _kern|
000041f0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 |el_oserror *resu|
00004200 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 |lt;. setfromta|
00004210 67 28 34 37 2c 20 61 72 65 61 2c 20 73 70 72 2c |g(47, area, spr,|
00004220 20 26 72 29 3b 0a 20 20 20 72 65 73 75 6c 74 20 | &r);. result |
00004230 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 |= sprite__op(&r)|
00004240 3b 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 |;. return resu|
00004250 6c 74 3b 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f |lt;.}.._kernel_o|
00004260 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f |serror * sprite_|
00004270 72 65 61 64 73 69 7a 65 28 73 70 72 69 74 65 5f |readsize(sprite_|
00004280 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 |area *area, spri|
00004290 74 65 5f 69 64 20 2a 73 70 72 2c 0a 20 20 20 20 |te_id *spr,. |
000042a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000042b0 20 20 20 20 20 20 20 73 70 72 69 74 65 5f 69 6e | sprite_in|
000042c0 66 6f 20 2a 72 65 73 75 6c 74 69 6e 66 6f 29 0a |fo *resultinfo).|
000042d0 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 |{. _kernel_swi|
000042e0 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 |_regs r;. _ker|
000042f0 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 |nel_oserror *res|
00004300 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 |ult;. setfromt|
00004310 61 67 28 34 30 2c 20 61 72 65 61 2c 20 73 70 72 |ag(40, area, spr|
00004320 2c 20 26 72 29 3b 0a 20 20 20 72 65 73 75 6c 74 |, &r);. result|
00004330 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 | = sprite__op(&r|
00004340 29 3b 0a 20 2f 2a 20 6e 6f 77 20 63 6f 70 79 20 |);. /* now copy |
00004350 72 65 74 75 72 6e 65 64 20 64 61 74 61 20 2a 2f |returned data */|
00004360 0a 20 20 20 72 65 73 75 6c 74 69 6e 66 6f 2d 3e |. resultinfo->|
00004370 77 69 64 74 68 20 3d 20 72 2e 72 5b 33 5d 20 3b |width = r.r[3] ;|
00004380 0a 20 20 20 72 65 73 75 6c 74 69 6e 66 6f 2d 3e |. resultinfo->|
00004390 68 65 69 67 68 74 20 3d 20 72 2e 72 5b 34 5d 20 |height = r.r[4] |
000043a0 3b 0a 20 20 20 72 65 73 75 6c 74 69 6e 66 6f 2d |;. resultinfo-|
000043b0 3e 6d 61 73 6b 20 3d 20 72 2e 72 5b 35 5d 20 3b |>mask = r.r[5] ;|
000043c0 0a 20 20 20 72 65 73 75 6c 74 69 6e 66 6f 2d 3e |. resultinfo->|
000043d0 6d 6f 64 65 20 3d 20 72 2e 72 5b 36 5d 20 3b 0a |mode = r.r[6] ;.|
000043e0 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 | return result|
000043f0 3b 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 |;.}.._kernel_ose|
00004400 72 72 6f 72 20 2a 20 73 70 72 69 74 65 5f 72 65 |rror * sprite_re|
00004410 61 64 70 69 78 65 6c 28 73 70 72 69 74 65 5f 61 |adpixel(sprite_a|
00004420 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 74 |rea *area, sprit|
00004430 65 5f 69 64 20 2a 73 70 72 2c 20 69 6e 74 20 78 |e_id *spr, int x|
00004440 2c 20 69 6e 74 20 79 2c 0a 20 20 20 20 20 20 20 |, int y,. |
00004450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00004460 20 20 20 20 20 73 70 72 69 74 65 5f 63 6f 6c 6f | sprite_colo|
00004470 75 72 20 2a 72 65 73 75 6c 74 63 6f 6c 6f 75 72 |ur *resultcolour|
00004480 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 |).{. _kernel_s|
00004490 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b |wi_regs r;. _k|
000044a0 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 |ernel_oserror *r|
000044b0 65 73 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f |esult;. setfro|
000044c0 6d 74 61 67 28 34 31 2c 20 61 72 65 61 2c 20 73 |mtag(41, area, s|
000044d0 70 72 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 5b |pr, &r);. r.r[|
000044e0 33 5d 20 3d 20 78 3b 0a 20 20 20 72 2e 72 5b 34 |3] = x;. r.r[4|
000044f0 5d 20 3d 20 79 3b 0a 20 20 20 72 65 73 75 6c 74 |] = y;. result|
00004500 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 | = sprite__op(&r|
00004510 29 3b 0a 20 20 20 69 66 20 28 72 65 73 75 6c 74 |);. if (result|
00004520 20 3d 3d 20 4e 55 4c 4c 29 20 2f 2a 20 4f 6e 6c | == NULL) /* Onl|
00004530 79 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20 |y return result |
00004540 69 66 20 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 |if no error */. |
00004550 20 20 7b 0a 20 20 20 20 20 20 72 65 73 75 6c 74 | {. result|
00004560 63 6f 6c 6f 75 72 2d 3e 63 6f 6c 6f 75 72 20 3d |colour->colour =|
00004570 20 72 2e 72 5b 35 5d 3b 0a 20 20 20 20 20 20 72 | r.r[5];. r|
00004580 65 73 75 6c 74 63 6f 6c 6f 75 72 2d 3e 74 69 6e |esultcolour->tin|
00004590 74 20 20 20 3d 20 72 2e 72 5b 36 5d 3b 0a 20 20 |t = r.r[6];. |
000045a0 20 7d 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 | }. return res|
000045b0 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 72 6e 65 6c |ult;.}..._kernel|
000045c0 5f 6f 73 65 72 72 6f 72 20 2a 20 73 70 72 69 74 |_oserror * sprit|
000045d0 65 5f 77 72 69 74 65 70 69 78 65 6c 28 73 70 72 |e_writepixel(spr|
000045e0 69 74 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 |ite_area *area, |
000045f0 73 70 72 69 74 65 5f 69 64 20 2a 73 70 72 2c 20 |sprite_id *spr, |
00004600 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c 0a 20 20 |int x, int y,. |
00004610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00004620 20 20 20 20 20 20 20 20 20 20 73 70 72 69 74 65 | sprite|
00004630 5f 63 6f 6c 6f 75 72 20 2a 63 6f 6c 6f 75 72 29 |_colour *colour)|
00004640 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 |.{. _kernel_sw|
00004650 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 |i_regs r;. _ke|
00004660 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 |rnel_oserror *re|
00004670 73 75 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d |sult;. setfrom|
00004680 74 61 67 28 34 32 2c 20 61 72 65 61 2c 20 73 70 |tag(42, area, sp|
00004690 72 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 5b 33 |r, &r);. r.r[3|
000046a0 5d 20 3d 20 78 3b 0a 20 20 20 72 2e 72 5b 34 5d |] = x;. r.r[4]|
000046b0 20 3d 20 79 3b 0a 20 20 20 72 2e 72 5b 35 5d 20 | = y;. r.r[5] |
000046c0 3d 20 63 6f 6c 6f 75 72 2d 3e 63 6f 6c 6f 75 72 |= colour->colour|
000046d0 3b 0a 20 20 20 72 2e 72 5b 36 5d 20 3d 20 63 6f |;. r.r[6] = co|
000046e0 6c 6f 75 72 2d 3e 74 69 6e 74 3b 0a 20 20 20 72 |lour->tint;. r|
000046f0 65 73 75 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f |esult = sprite__|
00004700 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 74 75 72 |op(&r);. retur|
00004710 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b |n result;.}..._k|
00004720 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 |ernel_oserror * |
00004730 73 70 72 69 74 65 5f 72 65 61 64 6d 61 73 6b 28 |sprite_readmask(|
00004740 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 |sprite_area *are|
00004750 61 2c 20 73 70 72 69 74 65 5f 69 64 20 2a 73 70 |a, sprite_id *sp|
00004760 72 2c 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c |r, int x, int y,|
00004770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00004780 20 20 20 20 20 20 20 20 20 20 20 20 73 70 72 69 | spri|
00004790 74 65 5f 6d 61 73 6b 73 74 61 74 65 20 2a 72 65 |te_maskstate *re|
000047a0 73 75 6c 74 6d 61 73 6b 73 74 61 74 65 29 0a 7b |sultmaskstate).{|
000047b0 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f |. _kernel_swi_|
000047c0 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e |regs r;. _kern|
000047d0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 |el_oserror *resu|
000047e0 6c 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 |lt;. setfromta|
000047f0 67 28 34 33 2c 20 61 72 65 61 2c 20 73 70 72 2c |g(43, area, spr,|
00004800 20 26 72 29 3b 0a 20 20 20 72 2e 72 5b 33 5d 20 | &r);. r.r[3] |
00004810 3d 20 78 3b 0a 20 20 20 72 2e 72 5b 34 5d 20 3d |= x;. r.r[4] =|
00004820 20 79 3b 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 | y;. result = |
00004830 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a |sprite__op(&r);.|
00004840 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d | if (result ==|
00004850 20 4e 55 4c 4c 29 20 2f 2a 20 4f 6e 6c 79 20 72 | NULL) /* Only r|
00004860 65 74 75 72 6e 20 72 65 73 75 6c 74 20 69 66 20 |eturn result if |
00004870 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 7b |no error */. {|
00004880 0a 20 20 20 20 20 20 2a 72 65 73 75 6c 74 6d 61 |. *resultma|
00004890 73 6b 73 74 61 74 65 20 3d 20 72 2e 72 5b 35 5d |skstate = r.r[5]|
000048a0 3b 0a 20 20 20 7d 0a 20 20 20 72 65 74 75 72 6e |;. }. return|
000048b0 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 0a 5f 6b 65 | result;.}..._ke|
000048c0 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 20 73 |rnel_oserror * s|
000048d0 70 72 69 74 65 5f 77 72 69 74 65 6d 61 73 6b 28 |prite_writemask(|
000048e0 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 |sprite_area *are|
000048f0 61 2c 20 73 70 72 69 74 65 5f 69 64 20 2a 73 70 |a, sprite_id *sp|
00004900 72 2c 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c |r, int x, int y,|
00004910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00004920 20 20 20 20 20 20 20 20 20 20 20 20 20 73 70 72 | spr|
00004930 69 74 65 5f 6d 61 73 6b 73 74 61 74 65 20 2a 6d |ite_maskstate *m|
00004940 61 73 6b 73 74 61 74 65 29 0a 7b 0a 20 20 20 5f |askstate).{. _|
00004950 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 |kernel_swi_regs |
00004960 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 |r;. _kernel_os|
00004970 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 20 |error *result;. |
00004980 20 20 73 65 74 66 72 6f 6d 74 61 67 28 34 34 2c | setfromtag(44,|
00004990 20 61 72 65 61 2c 20 73 70 72 2c 20 26 72 29 3b | area, spr, &r);|
000049a0 0a 20 20 20 72 2e 72 5b 33 5d 20 3d 20 78 3b 0a |. r.r[3] = x;.|
000049b0 20 20 20 72 2e 72 5b 34 5d 20 3d 20 79 3b 0a 20 | r.r[4] = y;. |
000049c0 20 20 72 2e 72 5b 35 5d 20 3d 20 28 69 6e 74 29 | r.r[5] = (int)|
000049d0 20 28 2a 6d 61 73 6b 73 74 61 74 65 29 3b 20 2f | (*maskstate); /|
000049e0 2a 20 55 73 65 20 70 6f 69 6e 74 65 72 20 68 65 |* Use pointer he|
000049f0 72 65 20 66 6f 72 20 63 6f 6e 73 69 73 74 65 6e |re for consisten|
00004a00 74 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 |t interface */. |
00004a10 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 74 | result = sprit|
00004a20 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 65 |e__op(&r);. re|
00004a30 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a |turn result;.}..|
00004a40 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 |_kernel_oserror |
00004a50 2a 73 70 72 69 74 65 5f 72 65 73 74 6f 72 65 73 |*sprite_restores|
00004a60 74 61 74 65 28 73 70 72 69 74 65 5f 73 74 61 74 |tate(sprite_stat|
00004a70 65 20 73 74 61 74 65 29 0a 7b 0a 20 20 20 5f 6b |e state).{. _k|
00004a80 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 |ernel_swi_regs r|
00004a90 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 |;. _kernel_ose|
00004aa0 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 0a 20 |rror *result;.. |
00004ab0 20 20 72 2e 72 5b 30 5d 20 3d 20 73 74 61 74 65 | r.r[0] = state|
00004ac0 2e 72 5b 30 5d 3b 0a 20 20 20 72 2e 72 5b 31 5d |.r[0];. r.r[1]|
00004ad0 20 3d 20 73 74 61 74 65 2e 72 5b 31 5d 3b 0a 20 | = state.r[1];. |
00004ae0 20 20 72 2e 72 5b 32 5d 20 3d 20 73 74 61 74 65 | r.r[2] = state|
00004af0 2e 72 5b 32 5d 3b 0a 20 20 20 72 2e 72 5b 33 5d |.r[2];. r.r[3]|
00004b00 20 3d 20 73 74 61 74 65 2e 72 5b 33 5d 3b 0a 0a | = state.r[3];..|
00004b10 20 20 20 72 65 73 75 6c 74 20 3d 20 73 70 72 69 | result = spri|
00004b20 74 65 5f 5f 6f 70 28 26 72 29 3b 0a 20 20 20 72 |te__op(&r);. r|
00004b30 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a |eturn result;.}.|
00004b40 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 |._kernel_oserror|
00004b50 20 2a 73 70 72 69 74 65 5f 6f 75 74 70 75 74 74 | *sprite_outputt|
00004b60 6f 73 70 72 69 74 65 28 73 70 72 69 74 65 5f 61 |osprite(sprite_a|
00004b70 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 74 |rea *area, sprit|
00004b80 65 5f 69 64 20 2a 69 64 2c 0a 20 20 20 20 20 20 |e_id *id,. |
00004b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00004ba0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 2a 73 | int *s|
00004bb0 61 76 65 5f 61 72 65 61 2c 20 73 70 72 69 74 65 |ave_area, sprite|
00004bc0 5f 73 74 61 74 65 20 2a 73 74 61 74 65 29 0a 7b |_state *state).{|
00004bd0 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f |. _kernel_swi_|
00004be0 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e |regs r;. _kern|
00004bf0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 |el_oserror *resu|
00004c00 6c 74 3b 0a 0a 20 20 20 73 65 74 66 72 6f 6d 74 |lt;.. setfromt|
00004c10 61 67 28 30 78 33 63 2c 20 61 72 65 61 2c 20 69 |ag(0x3c, area, i|
00004c20 64 2c 20 26 72 29 3b 0a 20 20 20 72 2e 72 5b 33 |d, &r);. r.r[3|
00004c30 5d 20 3d 20 28 69 6e 74 29 20 73 61 76 65 5f 61 |] = (int) save_a|
00004c40 72 65 61 3b 0a 0a 20 20 20 72 65 73 75 6c 74 20 |rea;.. result |
00004c50 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 |= sprite__op(&r)|
00004c60 3b 0a 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 |;. if (result |
00004c70 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 7b 0a 20 20 |== NULL). {. |
00004c80 20 20 20 20 73 74 61 74 65 2d 3e 72 5b 30 5d 20 | state->r[0] |
00004c90 3d 20 72 2e 72 5b 30 5d 3b 0a 20 20 20 20 20 20 |= r.r[0];. |
00004ca0 73 74 61 74 65 2d 3e 72 5b 31 5d 20 3d 20 72 2e |state->r[1] = r.|
00004cb0 72 5b 31 5d 3b 0a 20 20 20 20 20 20 73 74 61 74 |r[1];. stat|
00004cc0 65 2d 3e 72 5b 32 5d 20 3d 20 72 2e 72 5b 32 5d |e->r[2] = r.r[2]|
00004cd0 3b 0a 20 20 20 20 20 20 73 74 61 74 65 2d 3e 72 |;. state->r|
00004ce0 5b 33 5d 20 3d 20 72 2e 72 5b 33 5d 3b 0a 20 20 |[3] = r.r[3];. |
00004cf0 20 7d 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 | }. return res|
00004d00 75 6c 74 3b 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f |ult;.}.._kernel_|
00004d10 6f 73 65 72 72 6f 72 20 2a 73 70 72 69 74 65 5f |oserror *sprite_|
00004d20 6f 75 74 70 75 74 74 6f 6d 61 73 6b 28 73 70 72 |outputtomask(spr|
00004d30 69 74 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 |ite_area *area, |
00004d40 73 70 72 69 74 65 5f 69 64 20 2a 69 64 2c 0a 20 |sprite_id *id,. |
00004d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00004d60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 | int|
00004d70 20 2a 73 61 76 65 5f 61 72 65 61 2c 20 73 70 72 | *save_area, spr|
00004d80 69 74 65 5f 73 74 61 74 65 20 2a 73 74 61 74 65 |ite_state *state|
00004d90 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 |).{. _kernel_s|
00004da0 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f 6b |wi_regs r;. _k|
00004db0 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 72 |ernel_oserror *r|
00004dc0 65 73 75 6c 74 3b 0a 0a 20 20 20 73 65 74 66 72 |esult;.. setfr|
00004dd0 6f 6d 74 61 67 28 30 78 33 64 2c 20 61 72 65 61 |omtag(0x3d, area|
00004de0 2c 20 69 64 2c 20 26 72 29 3b 0a 20 20 20 72 2e |, id, &r);. r.|
00004df0 72 5b 33 5d 20 3d 20 28 69 6e 74 29 20 73 61 76 |r[3] = (int) sav|
00004e00 65 5f 61 72 65 61 3b 0a 0a 20 20 20 72 65 73 75 |e_area;.. resu|
00004e10 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 |lt = sprite__op(|
00004e20 26 72 29 3b 0a 20 20 20 69 66 20 28 72 65 73 75 |&r);. if (resu|
00004e30 6c 74 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 7b |lt == NULL). {|
00004e40 0a 20 20 20 20 20 73 74 61 74 65 2d 3e 72 5b 30 |. state->r[0|
00004e50 5d 20 3d 20 72 2e 72 5b 30 5d 3b 0a 20 20 20 20 |] = r.r[0];. |
00004e60 20 73 74 61 74 65 2d 3e 72 5b 31 5d 20 3d 20 72 | state->r[1] = r|
00004e70 2e 72 5b 31 5d 3b 0a 20 20 20 20 20 73 74 61 74 |.r[1];. stat|
00004e80 65 2d 3e 72 5b 32 5d 20 3d 20 72 2e 72 5b 32 5d |e->r[2] = r.r[2]|
00004e90 3b 0a 20 20 20 20 20 73 74 61 74 65 2d 3e 72 5b |;. state->r[|
00004ea0 33 5d 20 3d 20 72 2e 72 5b 33 5d 3b 0a 20 20 20 |3] = r.r[3];. |
00004eb0 7d 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 |}. return resu|
00004ec0 6c 74 3b 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f |lt;.}.._kernel_o|
00004ed0 73 65 72 72 6f 72 20 2a 73 70 72 69 74 65 5f 6f |serror *sprite_o|
00004ee0 75 74 70 75 74 74 6f 73 63 72 65 65 6e 28 69 6e |utputtoscreen(in|
00004ef0 74 20 2a 73 61 76 65 5f 61 72 65 61 2c 20 73 70 |t *save_area, sp|
00004f00 72 69 74 65 5f 73 74 61 74 65 20 2a 73 74 61 74 |rite_state *stat|
00004f10 65 29 0a 7b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f |e).{. _kernel_|
00004f20 73 77 69 5f 72 65 67 73 20 72 3b 0a 20 20 20 5f |swi_regs r;. _|
00004f30 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 6f 72 20 2a |kernel_oserror *|
00004f40 72 65 73 75 6c 74 3b 0a 0a 20 20 20 72 2e 72 5b |result;.. r.r[|
00004f50 30 5d 20 3d 20 30 78 33 63 3b 0a 20 20 20 72 2e |0] = 0x3c;. r.|
00004f60 72 5b 32 5d 20 3d 20 30 3b 0a 20 20 20 72 2e 72 |r[2] = 0;. r.r|
00004f70 5b 33 5d 20 3d 20 28 69 6e 74 29 73 61 76 65 5f |[3] = (int)save_|
00004f80 61 72 65 61 3b 0a 20 20 0a 20 20 20 72 65 73 75 |area;. . resu|
00004f90 6c 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 |lt = sprite__op(|
00004fa0 26 72 29 3b 0a 20 20 20 69 66 20 28 72 65 73 75 |&r);. if (resu|
00004fb0 6c 74 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 7b |lt == NULL). {|
00004fc0 0a 20 20 20 20 20 73 74 61 74 65 2d 3e 72 5b 30 |. state->r[0|
00004fd0 5d 20 3d 20 72 2e 72 5b 30 5d 3b 0a 20 20 20 20 |] = r.r[0];. |
00004fe0 20 73 74 61 74 65 2d 3e 72 5b 31 5d 20 3d 20 72 | state->r[1] = r|
00004ff0 2e 72 5b 31 5d 3b 0a 20 20 20 20 20 73 74 61 74 |.r[1];. stat|
00005000 65 2d 3e 72 5b 32 5d 20 3d 20 72 2e 72 5b 32 5d |e->r[2] = r.r[2]|
00005010 3b 0a 20 20 20 20 20 73 74 61 74 65 2d 3e 72 5b |;. state->r[|
00005020 33 5d 20 3d 20 72 2e 72 5b 33 5d 3b 0a 20 20 20 |3] = r.r[3];. |
00005030 7d 0a 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 |}. return resu|
00005040 6c 74 3b 0a 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f |lt;..}.._kernel_|
00005050 6f 73 65 72 72 6f 72 20 2a 73 70 72 69 74 65 5f |oserror *sprite_|
00005060 73 69 7a 65 6f 66 5f 73 70 72 69 74 65 63 6f 6e |sizeof_spritecon|
00005070 74 65 78 74 28 73 70 72 69 74 65 5f 61 72 65 61 |text(sprite_area|
00005080 20 2a 61 72 65 61 2c 20 73 70 72 69 74 65 5f 69 | *area, sprite_i|
00005090 64 20 2a 69 64 2c 0a 20 20 20 20 20 20 20 20 20 |d *id,. |
000050a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000050b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 | int|
000050c0 20 2a 73 69 7a 65 29 0a 7b 0a 20 20 20 5f 6b 65 | *size).{. _ke|
000050d0 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 3b |rnel_swi_regs r;|
000050e0 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 |. _kernel_oser|
000050f0 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a 0a 20 20 |ror *result;.. |
00005100 20 73 65 74 66 72 6f 6d 74 61 67 28 30 78 33 65 | setfromtag(0x3e|
00005110 2c 20 61 72 65 61 2c 20 69 64 2c 20 26 72 29 3b |, area, id, &r);|
00005120 0a 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 73 70 |.. result = sp|
00005130 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a 0a 20 |rite__op(&r);.. |
00005140 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 | if (result == |
00005150 4e 55 4c 4c 29 0a 20 20 20 20 20 2a 73 69 7a 65 |NULL). *size|
00005160 20 3d 20 72 2e 72 5b 33 5d 3b 0a 0a 20 20 20 72 | = r.r[3];.. r|
00005170 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a |eturn result;.}.|
00005180 20 20 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 | .._kernel_oser|
00005190 72 6f 72 20 2a 73 70 72 69 74 65 5f 73 69 7a 65 |ror *sprite_size|
000051a0 6f 66 5f 73 63 72 65 65 6e 63 6f 6e 74 65 78 74 |of_screencontext|
000051b0 28 69 6e 74 20 2a 73 69 7a 65 29 0a 7b 0a 20 20 |(int *size).{. |
000051c0 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 | _kernel_swi_reg|
000051d0 73 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f |s r;. _kernel_|
000051e0 6f 73 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b |oserror *result;|
000051f0 0a 0a 20 20 20 72 2e 72 5b 30 5d 20 3d 20 30 78 |.. r.r[0] = 0x|
00005200 33 65 3b 0a 20 20 20 72 2e 72 5b 32 5d 20 3d 20 |3e;. r.r[2] = |
00005210 30 3b 0a 0a 20 20 20 72 65 73 75 6c 74 20 3d 20 |0;.. result = |
00005220 73 70 72 69 74 65 5f 5f 6f 70 28 26 72 29 3b 0a |sprite__op(&r);.|
00005230 0a 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d |. if (result =|
00005240 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 20 2a 73 69 |= NULL). *si|
00005250 7a 65 20 3d 20 72 2e 72 5b 33 5d 3b 0a 0a 20 20 |ze = r.r[3];.. |
00005260 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a | return result;.|
00005270 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 72 |}.._kernel_oserr|
00005280 6f 72 20 2a 73 70 72 69 74 65 5f 72 65 6d 6f 76 |or *sprite_remov|
00005290 65 77 61 73 74 61 67 65 28 73 70 72 69 74 65 5f |ewastage(sprite_|
000052a0 61 72 65 61 20 2a 61 72 65 61 2c 20 73 70 72 69 |area *area, spri|
000052b0 74 65 5f 69 64 20 2a 69 64 29 0a 7b 0a 20 20 20 |te_id *id).{. |
000052c0 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 67 73 |_kernel_swi_regs|
000052d0 20 72 3b 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 6f | r;. _kernel_o|
000052e0 73 65 72 72 6f 72 20 2a 72 65 73 75 6c 74 3b 0a |serror *result;.|
000052f0 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 67 28 30 |. setfromtag(0|
00005300 78 33 36 2c 20 61 72 65 61 2c 20 69 64 2c 20 26 |x36, area, id, &|
00005310 72 29 3b 0a 20 20 20 0a 20 20 20 72 65 73 75 6c |r);. . resul|
00005320 74 20 3d 20 73 70 72 69 74 65 5f 5f 6f 70 28 26 |t = sprite__op(&|
00005330 72 29 3b 0a 0a 20 20 20 72 65 74 75 72 6e 20 72 |r);.. return r|
00005340 65 73 75 6c 74 3b 0a 7d 0a 0a 5f 6b 65 72 6e 65 |esult;.}.._kerne|
00005350 6c 5f 6f 73 65 72 72 6f 72 20 2a 73 70 72 69 74 |l_oserror *sprit|
00005360 65 5f 63 68 61 6e 67 65 5f 73 69 7a 65 20 28 73 |e_change_size (s|
00005370 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 65 61 |prite_area *area|
00005380 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |, . |
00005390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000053a0 20 73 70 72 69 74 65 5f 69 64 20 2a 69 64 2c 20 | sprite_id *id, |
000053b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
000053c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 | B|
000053d0 4f 4f 4c 20 72 6f 77 73 2c 20 0a 20 20 20 20 20 |OOL rows, . |
000053e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000053f0 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 74 2c | int at,|
00005400 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | . |
00005410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005420 69 6e 74 20 6e 75 6d 62 65 72 29 0a 7b 20 0a 20 |int number).{ . |
00005430 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 | _kernel_swi_re|
00005440 67 73 20 72 65 67 5f 73 65 74 3b 0a 20 20 20 73 |gs reg_set;. s|
00005450 65 74 66 72 6f 6d 74 61 67 20 28 72 6f 77 73 3f |etfromtag (rows?|
00005460 20 49 6e 73 65 72 74 44 65 6c 65 74 65 52 6f 77 | InsertDeleteRow|
00005470 73 3a 20 49 6e 73 65 72 74 44 65 6c 65 74 65 43 |s: InsertDeleteC|
00005480 6f 6c 75 6d 6e 73 2c 20 61 72 65 61 2c 20 69 64 |olumns, area, id|
00005490 2c 20 26 72 65 67 5f 73 65 74 29 3b 0a 20 20 20 |, ®_set);. |
000054a0 72 65 67 5f 73 65 74 2e 72 20 5b 33 5d 20 3d 20 |reg_set.r [3] = |
000054b0 61 74 3b 20 0a 20 20 20 72 65 67 5f 73 65 74 2e |at; . reg_set.|
000054c0 72 20 5b 34 5d 20 3d 20 6e 75 6d 62 65 72 3b 0a |r [4] = number;.|
000054d0 20 20 20 72 65 74 75 72 6e 20 73 70 72 69 74 65 | return sprite|
000054e0 5f 5f 6f 70 20 28 26 72 65 67 5f 73 65 74 29 3b |__op (®_set);|
000054f0 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 |.}.._kernel_oser|
00005500 72 6f 72 20 2a 73 70 72 69 74 65 5f 70 75 74 5f |ror *sprite_put_|
00005510 6d 61 73 6b 5f 74 72 61 6e 73 20 28 73 70 72 69 |mask_trans (spri|
00005520 74 65 5f 61 72 65 61 20 2a 61 72 65 61 2c 20 0a |te_area *area, .|
00005530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00005550 20 73 70 72 69 74 65 5f 69 64 20 2a 69 64 2c 20 | sprite_id *id, |
00005560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00005570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005580 20 20 73 70 72 69 74 65 5f 62 6f 78 20 2a 62 6f | sprite_box *bo|
00005590 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 |x, . |
000055a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000055b0 20 20 20 20 20 73 70 72 69 74 65 5f 74 72 61 6e | sprite_tran|
000055c0 73 6d 61 74 20 2a 74 72 61 6e 73 5f 6d 61 74 29 |smat *trans_mat)|
000055d0 0a 7b 20 0a 20 20 20 5f 6b 65 72 6e 65 6c 5f 73 |.{ . _kernel_s|
000055e0 77 69 5f 72 65 67 73 20 72 65 67 5f 73 65 74 3b |wi_regs reg_set;|
000055f0 0a 20 20 20 73 65 74 66 72 6f 6d 74 61 67 20 28 |. setfromtag (|
00005600 50 6c 6f 74 4d 61 73 6b 54 72 61 6e 73 66 6f 72 |PlotMaskTransfor|
00005610 6d 65 64 2c 20 61 72 65 61 2c 20 69 64 2c 20 26 |med, area, id, &|
00005620 72 65 67 5f 73 65 74 29 3b 0a 20 20 20 72 65 67 |reg_set);. reg|
00005630 5f 73 65 74 2e 72 20 5b 33 5d 20 3d 20 62 6f 78 |_set.r [3] = box|
00005640 20 3d 3d 20 4e 55 4c 4c 3f 20 30 3a 20 31 20 3c | == NULL? 0: 1 <|
00005650 3c 20 31 3b 0a 20 20 20 72 65 67 5f 73 65 74 2e |< 1;. reg_set.|
00005660 72 20 5b 34 5d 20 3d 20 28 69 6e 74 29 20 62 6f |r [4] = (int) bo|
00005670 78 3b 0a 20 20 20 72 65 67 5f 73 65 74 2e 72 20 |x;. reg_set.r |
00005680 5b 36 5d 20 3d 20 28 69 6e 74 29 20 74 72 61 6e |[6] = (int) tran|
00005690 73 5f 6d 61 74 3b 0a 20 20 20 72 65 74 75 72 6e |s_mat;. return|
000056a0 20 73 70 72 69 74 65 5f 5f 6f 70 20 28 26 72 65 | sprite__op (&re|
000056b0 67 5f 73 65 74 29 3b 0a 7d 0a 0a 5f 6b 65 72 6e |g_set);.}.._kern|
000056c0 65 6c 5f 6f 73 65 72 72 6f 72 20 2a 73 70 72 69 |el_oserror *spri|
000056d0 74 65 5f 70 75 74 5f 6d 61 73 6b 5f 70 67 6d 20 |te_put_mask_pgm |
000056e0 28 73 70 72 69 74 65 5f 61 72 65 61 20 2a 61 72 |(sprite_area *ar|
000056f0 65 61 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 |ea, . |
00005700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005710 20 20 20 20 73 70 72 69 74 65 5f 69 64 20 2a 69 | sprite_id *i|
00005720 64 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 |d, . |
00005730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005740 20 20 20 73 70 72 69 74 65 5f 62 6f 78 20 2a 62 | sprite_box *b|
00005750 6f 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 |ox, . |
00005760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005770 20 20 20 20 73 70 72 69 74 65 5f 70 67 6d 20 2a | sprite_pgm *|
00005780 70 67 6d 29 0a 7b 20 0a 20 20 20 5f 6b 65 72 6e |pgm).{ . _kern|
00005790 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 65 67 5f |el_swi_regs reg_|
000057a0 73 65 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 |set;. setfromt|
000057b0 61 67 20 28 50 6c 6f 74 4d 61 73 6b 54 72 61 6e |ag (PlotMaskTran|
000057c0 73 66 6f 72 6d 65 64 2c 20 61 72 65 61 2c 20 69 |sformed, area, i|
000057d0 64 2c 20 26 72 65 67 5f 73 65 74 29 3b 0a 20 20 |d, ®_set);. |
000057e0 20 72 65 67 5f 73 65 74 2e 72 20 5b 33 5d 20 3d | reg_set.r [3] =|
000057f0 20 28 62 6f 78 20 3d 3d 20 4e 55 4c 4c 3f 20 30 | (box == NULL? 0|
00005800 3a 20 31 20 3c 3c 20 31 29 20 7c 20 28 31 20 3c |: 1 << 1) | (1 <|
00005810 3c 20 30 29 3b 0a 20 20 20 72 65 67 5f 73 65 74 |< 0);. reg_set|
00005820 2e 72 20 5b 34 5d 20 3d 20 28 69 6e 74 29 20 62 |.r [4] = (int) b|
00005830 6f 78 3b 0a 20 20 20 72 65 67 5f 73 65 74 2e 72 |ox;. reg_set.r|
00005840 20 5b 36 5d 20 3d 20 28 69 6e 74 29 20 70 67 6d | [6] = (int) pgm|
00005850 3b 0a 20 20 20 72 65 74 75 72 6e 20 73 70 72 69 |;. return spri|
00005860 74 65 5f 5f 6f 70 20 28 26 72 65 67 5f 73 65 74 |te__op (®_set|
00005870 29 3b 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 |);.}.._kernel_os|
00005880 65 72 72 6f 72 20 2a 73 70 72 69 74 65 5f 70 75 |error *sprite_pu|
00005890 74 5f 74 72 61 6e 73 20 28 73 70 72 69 74 65 5f |t_trans (sprite_|
000058a0 61 72 65 61 20 2a 61 72 65 61 2c 20 0a 20 20 20 |area *area, . |
000058b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000058c0 20 20 20 20 20 20 20 20 20 73 70 72 69 74 65 5f | sprite_|
000058d0 69 64 20 2a 69 64 2c 20 0a 20 20 20 20 20 20 20 |id *id, . |
000058e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000058f0 20 20 20 20 20 69 6e 74 20 67 63 6f 6c 5f 61 63 | int gcol_ac|
00005900 74 69 6f 6e 2c 20 0a 20 20 20 20 20 20 20 20 20 |tion, . |
00005910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005920 20 20 20 73 70 72 69 74 65 5f 62 6f 78 20 2a 62 | sprite_box *b|
00005930 6f 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 |ox,. |
00005940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005950 73 70 72 69 74 65 5f 74 72 61 6e 73 6d 61 74 20 |sprite_transmat |
00005960 2a 74 72 61 6e 73 5f 6d 61 74 2c 20 0a 20 20 20 |*trans_mat, . |
00005970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005980 20 20 20 20 20 20 20 20 20 73 70 72 69 74 65 5f | sprite_|
00005990 70 69 78 74 72 61 6e 73 20 2a 70 69 78 5f 74 72 |pixtrans *pix_tr|
000059a0 61 6e 73 29 0a 7b 20 0a 20 20 20 5f 6b 65 72 6e |ans).{ . _kern|
000059b0 65 6c 5f 73 77 69 5f 72 65 67 73 20 72 65 67 5f |el_swi_regs reg_|
000059c0 73 65 74 3b 0a 20 20 20 73 65 74 66 72 6f 6d 74 |set;. setfromt|
000059d0 61 67 20 28 50 75 74 53 70 72 69 74 65 54 72 61 |ag (PutSpriteTra|
000059e0 6e 73 66 6f 72 6d 65 64 2c 20 61 72 65 61 2c 20 |nsformed, area, |
000059f0 69 64 2c 20 26 72 65 67 5f 73 65 74 29 3b 0a 20 |id, ®_set);. |
00005a00 20 20 72 65 67 5f 73 65 74 2e 72 20 5b 33 5d 20 | reg_set.r [3] |
00005a10 3d 20 62 6f 78 20 3d 3d 20 4e 55 4c 4c 3f 20 30 |= box == NULL? 0|
00005a20 3a 20 31 20 3c 3c 20 31 3b 0a 20 20 20 72 65 67 |: 1 << 1;. reg|
00005a30 5f 73 65 74 2e 72 20 5b 34 5d 20 3d 20 28 69 6e |_set.r [4] = (in|
00005a40 74 29 20 62 6f 78 3b 0a 20 20 20 72 65 67 5f 73 |t) box;. reg_s|
00005a50 65 74 2e 72 20 5b 35 5d 20 3d 20 67 63 6f 6c 5f |et.r [5] = gcol_|
00005a60 61 63 74 69 6f 6e 3b 0a 20 20 20 72 65 67 5f 73 |action;. reg_s|
00005a70 65 74 2e 72 20 5b 36 5d 20 3d 20 28 69 6e 74 29 |et.r [6] = (int)|
00005a80 20 74 72 61 6e 73 5f 6d 61 74 3b 0a 20 20 20 72 | trans_mat;. r|
00005a90 65 67 5f 73 65 74 2e 72 20 5b 37 5d 20 3d 20 28 |eg_set.r [7] = (|
00005aa0 69 6e 74 29 20 70 69 78 5f 74 72 61 6e 73 3b 0a |int) pix_trans;.|
00005ab0 20 20 20 72 65 74 75 72 6e 20 73 70 72 69 74 65 | return sprite|
00005ac0 5f 5f 6f 70 20 28 26 72 65 67 5f 73 65 74 29 3b |__op (®_set);|
00005ad0 0a 7d 0a 0a 5f 6b 65 72 6e 65 6c 5f 6f 73 65 72 |.}.._kernel_oser|
00005ae0 72 6f 72 20 2a 73 70 72 69 74 65 5f 70 75 74 5f |ror *sprite_put_|
00005af0 70 67 6d 20 28 73 70 72 69 74 65 5f 61 72 65 61 |pgm (sprite_area|
00005b00 20 2a 61 72 65 61 2c 20 0a 20 20 20 20 20 20 20 | *area, . |
00005b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005b20 20 20 20 73 70 72 69 74 65 5f 69 64 20 2a 69 64 | sprite_id *id|
00005b30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |, . |
00005b40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 | int|
00005b50 20 67 63 6f 6c 5f 61 63 74 69 6f 6e 2c 20 0a 20 | gcol_action, . |
00005b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005b70 20 20 20 20 20 20 20 20 20 73 70 72 69 74 65 5f | sprite_|
00005b80 62 6f 78 20 2a 62 6f 78 2c 0a 20 20 20 20 20 20 |box *box,. |
00005b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005ba0 20 20 20 20 73 70 72 69 74 65 5f 70 67 6d 20 2a | sprite_pgm *|
00005bb0 70 67 6d 2c 20 0a 20 20 20 20 20 20 20 20 20 20 |pgm, . |
00005bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00005bd0 73 70 72 69 74 65 5f 70 69 78 74 72 61 6e 73 20 |sprite_pixtrans |
00005be0 2a 70 69 78 5f 74 72 61 6e 73 29 0a 7b 20 0a 20 |*pix_trans).{ . |
00005bf0 20 20 5f 6b 65 72 6e 65 6c 5f 73 77 69 5f 72 65 | _kernel_swi_re|
00005c00 67 73 20 72 65 67 5f 73 65 74 3b 0a 20 20 20 73 |gs reg_set;. s|
00005c10 65 74 66 72 6f 6d 74 61 67 20 28 50 75 74 53 70 |etfromtag (PutSp|
00005c20 72 69 74 65 54 72 61 6e 73 66 6f 72 6d 65 64 2c |riteTransformed,|
00005c30 20 61 72 65 61 2c 20 69 64 2c 20 26 72 65 67 5f | area, id, ®_|
00005c40 73 65 74 29 3b 0a 20 20 20 72 65 67 5f 73 65 74 |set);. reg_set|
00005c50 2e 72 20 5b 33 5d 20 3d 20 28 62 6f 78 20 3d 3d |.r [3] = (box ==|
00005c60 20 4e 55 4c 4c 3f 20 30 3a 20 31 20 3c 3c 20 31 | NULL? 0: 1 << 1|
00005c70 29 20 7c 20 28 31 20 3c 3c 20 30 29 3b 0a 20 20 |) | (1 << 0);. |
00005c80 20 72 65 67 5f 73 65 74 2e 72 20 5b 34 5d 20 3d | reg_set.r [4] =|
00005c90 20 28 69 6e 74 29 20 62 6f 78 3b 0a 20 20 20 72 | (int) box;. r|
00005ca0 65 67 5f 73 65 74 2e 72 20 5b 35 5d 20 3d 20 67 |eg_set.r [5] = g|
00005cb0 63 6f 6c 5f 61 63 74 69 6f 6e 3b 0a 20 20 20 72 |col_action;. r|
00005cc0 65 67 5f 73 65 74 2e 72 20 5b 36 5d 20 3d 20 28 |eg_set.r [6] = (|
00005cd0 69 6e 74 29 20 70 67 6d 3b 0a 20 20 20 72 65 67 |int) pgm;. reg|
00005ce0 5f 73 65 74 2e 72 20 5b 37 5d 20 3d 20 28 69 6e |_set.r [7] = (in|
00005cf0 74 29 20 70 69 78 5f 74 72 61 6e 73 3b 0a 20 20 |t) pix_trans;. |
00005d00 20 72 65 74 75 72 6e 20 73 70 72 69 74 65 5f 5f | return sprite__|
00005d10 6f 70 20 28 26 72 65 67 5f 73 65 74 29 3b 0a 7d |op (®_set);.}|
00005d20 0a 0a 23 70 72 61 67 6d 61 20 63 68 65 63 6b 5f |..#pragma check_|
00005d30 73 74 61 63 6b 0a 0a 2f 2a 20 65 6e 64 20 6f 66 |stack../* end of|
00005d40 20 63 2e 73 70 72 69 74 65 20 2a 2f 0a | c.sprite */.|
00005d4d
.