|
From: Tim R. <row...@us...> - 2003-01-14 03:41:12
|
Update of /cvsroot/squeak/squeak/platforms/RiscOS/vm
In directory sc8-pr-cvs1:/tmp/cvs-serv31826/platforms/RiscOS/vm
Modified Files:
sqArgument.c sqPlatformSpecific.h sqRPCEvents.c
sqRPCExternalPrims.c sqRPCWindows.c
Log Message:
Bring the above file up to date with latest Acorn port work.
a) clean ups
b) global variable structure
c) global reg var to point to said struct -> 30% speedup !!
Index: sqArgument.c
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqArgument.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** sqArgument.c 5 Apr 2002 00:42:25 -0000 1.3
--- sqArgument.c 14 Jan 2003 03:41:09 -0000 1.4
***************
*** 6,10 ****
#include "sqArguments.h"
! static opt = 0;
static int numOptions;
static char** optionArray;
--- 6,10 ----
#include "sqArguments.h"
! static int opt = 0;
static int numOptions;
static char** optionArray;
***************
*** 22,25 ****
--- 22,26 ----
int magic;
int byteSwapped(int);
+ extern int readableFormat(int imageVersion);
fp = fopen(name,"rb");
Index: sqPlatformSpecific.h
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqPlatformSpecific.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** sqPlatformSpecific.h 23 Apr 2002 22:08:47 -0000 1.4
--- sqPlatformSpecific.h 14 Jan 2003 03:41:09 -0000 1.5
***************
*** 9,18 ****
*/
!
#ifdef ACORN
#include "oslib/os.h"
/* acorn memory allocation */
#undef sqAllocateMemory
#define sqAllocateMemory(minHeapSize, desiredHeapSize) platAllocateMemory(desiredHeapSize)
--- 9,25 ----
*/
! /* This odd looking declaration is to allow the global variable foo to be
! * kept in a register all the time. This produces an approx 30% speedup */
#ifdef ACORN
+ #pragma -r1
+ extern struct foo * foo;
+ #pragma -r0
+
#include "oslib/os.h"
+
/* acorn memory allocation */
#undef sqAllocateMemory
+ int platAllocateMemory(int amount);
#define sqAllocateMemory(minHeapSize, desiredHeapSize) platAllocateMemory(desiredHeapSize)
***************
*** 20,23 ****
--- 27,32 ----
extern void sqFilenameFromString(char*fileName, int sqString, int sqSize);
#define sqFilenameFromString(dst, src, num) sqFilenameFromString(dst, src, num)
+
+ int sqCopyFilesizetosize(char *srcName, int srcNameSize, char *dstName, int dstNameSize);
#define squeakFileOffsetType int
Index: sqRPCEvents.c
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqRPCEvents.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** sqRPCEvents.c 23 Apr 2002 22:08:47 -0000 1.2
--- sqRPCEvents.c 14 Jan 2003 03:41:09 -0000 1.3
***************
*** 60,74 ****
#define KEYBUF_SIZE 64
! int keyBuf[KEYBUF_SIZE]; /* circular buffer */
! int keyBufGet = 0; /* ndex of next item of keyBuf to read */
! int keyBufPut = 0; /* ndex of next item of keyBuf to write */
! int keyBufOverflows = 0; /* number of characters dropped */
! int buttonState = 0; /* mouse button and modifier state */
! os_coord savedMousePosition; /* mouse position; not modified when window is inactive */
! int mouseButtonDown; /* keep track of curent mouse button state - for drags outside window */
! extern int interruptKeycode;
! extern int interruptPending;
! extern int interruptCheckCounter;
int scanLine, startX, xLen, startY, stopY, pixelsPerWord, pixelsPerWordShift;
--- 60,74 ----
#define KEYBUF_SIZE 64
! int keyBuf[KEYBUF_SIZE]; /* circular buffer */
! int keyBufGet = 0; /* ndex of next item of keyBuf to read */
! int keyBufPut = 0; /* ndex of next item of keyBuf to write */
! int keyBufOverflows = 0; /* number of characters dropped */
! int buttonState = 0; /* mouse button and modifier state */
! os_coord savedMousePosition; /* mouse position; not modified when window is inactive */
! int mouseButtonDown; /* keep track of curent mouse button state - for drags outside window */
! extern int getInterruptKeycode(void);
! extern int setInterruptPending(int value);
! extern int setInterruptCheckCounter(int value);
int scanLine, startX, xLen, startY, stopY, pixelsPerWord, pixelsPerWordShift;
***************
*** 526,530 ****
extern osspriteop_header *displaySprite;
extern osspriteop_trans_tab * pixelTranslationTable;
! bool more;
wimp_draw wblock;
os_error * e;
--- 526,531 ----
extern osspriteop_header *displaySprite;
extern osspriteop_trans_tab * pixelTranslationTable;
! //bool more;
! int more;
wimp_draw wblock;
os_error * e;
***************
*** 560,564 ****
extern osspriteop_trans_tab * pixelTranslationTable;
extern os_coord squeakDisplaySize;
! bool more;
wimp_draw wblock;
os_error * e;
--- 561,566 ----
extern osspriteop_trans_tab * pixelTranslationTable;
extern os_coord squeakDisplaySize;
! //bool more;
! int more;
wimp_draw wblock;
os_error * e;
***************
*** 651,660 ****
keystate = wblock->c;
! if (keystate == interruptKeycode || ( (keystate == wimp_KEY_PRINT)/* && (buttonState & CmdKey ) */) ) {
// The image tends to set the interruptKeycode to suit the Mac cmd-. nonsense
! // this is decidedly not Acorn compatible, so check for right-ctl-printscrn as well
! // interrupt is a meta-event; do not report it as a keypress
! interruptPending = true;
! interruptCheckCounter = 0;
return;
}
--- 653,662 ----
keystate = wblock->c;
! if (keystate == getInterruptKeycode() || ( (keystate == wimp_KEY_PRINT)) ) {
// The image tends to set the interruptKeycode to suit the Mac cmd-. nonsense
! // this is decidedly not Acorn compatible, so check for printscrn/SysRq as well
! // interrupt is a meta-event; do not report it as a keypress
! setInterruptPending(true);
! setInterruptCheckCounter(0);
return;
}
***************
*** 694,703 ****
void eventBufAppendEvent(int type, int mouseX, int mouseY, int buttons, int key) {
! /* append an event to the queue. DO NOT siganl the input semaphore here since the
* HandleEvents() routine is called from place where that causes segfaults!!
* Leave the signalling to the ioEventsCount() routine.
*/
- /* first check there is room on the queue */
int peek;
peek = (eventBufPut + 1) % EVENTQ_SIZE;
if ( peek == eventBufGet) {/* no room, drop the whole thing */
--- 696,705 ----
void eventBufAppendEvent(int type, int mouseX, int mouseY, int buttons, int key) {
! /* append an event to the queue. DO NOT signal the input semaphore here since the
* HandleEvents() routine is called from place where that causes segfaults!!
* Leave the signalling to the ioEventsCount() routine.
*/
int peek;
+ /* first check there is room on the queue */
peek = (eventBufPut + 1) % EVENTQ_SIZE;
if ( peek == eventBufGet) {/* no room, drop the whole thing */
***************
*** 710,714 ****
int prevEvent;
prevEvent = eventBufPut -1;
! if ( prevEvent == -1) prevEvent = EVENTQ_SIZE -1 ; /* wrap around */
if ( eventBuf[prevEvent].type == SQ_MOUSE_MOVE ) {
/* overwrite previous event data */
--- 712,717 ----
int prevEvent;
prevEvent = eventBufPut -1;
! if ( prevEvent == -1)
! prevEvent = EVENTQ_SIZE -1 ; /* wrap around */
if ( eventBuf[prevEvent].type == SQ_MOUSE_MOVE ) {
/* overwrite previous event data */
***************
*** 838,841 ****
void DoNothing(void) {
! /* do nothing at all, but make sure to do it quickly. primarily a breakpoint option */
}
--- 841,844 ----
void DoNothing(void) {
! /* do nothing at all, but make sure to do it quickly. Primarily a breakpoint option */
}
Index: sqRPCExternalPrims.c
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqRPCExternalPrims.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** sqRPCExternalPrims.c 23 Apr 2002 22:08:47 -0000 1.2
--- sqRPCExternalPrims.c 14 Jan 2003 03:41:09 -0000 1.3
***************
*** 1,7 ****
! /*
! sqRPCExternalPrims.c
! Find the function address of a named function by searching the C code segment. All sorts
! of possible failures here - compiling with function names removed is just the most egregious
! */
#include "oslib/os.h"
#include "sq.h"
--- 1,10 ----
! /**************************************************************************/
! /* A Squeak VM for Acorn RiscOS machines by Tim Rowledge */
! /* ti...@su... & http://sumeru.stanford.edu/tim */
! /* Known to work on RiscOS 3.7 for StrongARM RPCs, other machines */
! /* not yet tested. */
! /* sqRPCExternalPrims.c */
! /* hook up to RiscOS external code modules using 'rink' */
! /**************************************************************************/
#include "oslib/os.h"
#include "sq.h"
Index: sqRPCWindows.c
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/RiscOS/vm/sqRPCWindows.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** sqRPCWindows.c 23 Apr 2002 22:08:47 -0000 1.2
--- sqRPCWindows.c 14 Jan 2003 03:41:09 -0000 1.3
***************
*** 24,48 ****
#define longAt(i) (*((int *) (i)))
-
-
- /*** Compilation Options:
- *
- * define LITTLE_ENDIAN to compile code for the little endian bitblt needed by ARMs
- *
- ***/
-
/*** Variables -- Imported from Virtual Machine ***/
! extern unsigned char *memory;
! extern int interruptPending;
! extern int interruptCheckCounter;
! extern int savedWindowSize; /* set from header when image file is loaded */
/*** Variables -- image and path names ***/
#define IMAGE_NAME_SIZE 300
! char imageName[IMAGE_NAME_SIZE + 1]; /* full path to image */
#define VMPATH_SIZE 300
! char vmPath[VMPATH_SIZE + 1]; /* full path to interpreter's directory */
#ifndef MIN
--- 24,40 ----
#define longAt(i) (*((int *) (i)))
/*** Variables -- Imported from Virtual Machine ***/
! extern unsigned char *memory;
+ /* set from header when image file is loaded */
+ extern int getSavedWindowSize(void);
+ extern int setSavedWindowSize(int value);
/*** Variables -- image and path names ***/
#define IMAGE_NAME_SIZE 300
! char imageName[IMAGE_NAME_SIZE + 1]; /* full path to image */
#define VMPATH_SIZE 300
! char vmPath[VMPATH_SIZE + 1]; /* full path to interpreter's directory */
#ifndef MIN
***************
*** 52,100 ****
/*** Variables -- RPC Related ***/
! wimp_w sqWindowHandle = null;
! char sqTaskName[] = "Squeak!";
! wimp_t Task_Handle;
! os_dynamic_area_no SqueakObjectSpaceDA, SqueakDisplayDA;
! char * clipboardBuffer = null;
! int clipboardByteSize = 0;
! extern int windowActive;
! extern int sqHasClipboard;
! int pointerBuffer[16] =
! {0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999};
! os_coord pointerOffset;
! wimp_icon_create sqIconBarIcon;
wimp_MESSAGE_LIST(4) importantWimpMessages;
! int osLevelOver350;
! wimp_version_no actualOSLevel;
! os_error privateErr;
! char VMVersion[] = "2.30 of "__DATE__;
! // temp for coping with filename handling transition period. Set to 1 if new image is run, and use to test for translate for filenames
! int newImageVersion = 0;
/* argument handling stuff -- see c.sqArgument */
! int numOptionsVM;
! char *(vmOptions[MAX_OPTIONS]);
! int numOptionsImage;
! char *(imageOptions[MAX_OPTIONS]);
! int headlessFlag = 0;
! int helpMe = 0;
! int versionMe = 0;
! int objectHeadroom = 4*1024*1024;
vmArg args[] = {
--- 44,89 ----
/*** Variables -- RPC Related ***/
! wimp_w sqWindowHandle = null;
! char sqTaskName[] = "Squeak!";
! wimp_t Task_Handle;
! os_dynamic_area_no SqueakObjectSpaceDA, SqueakDisplayDA;
! char * clipboardBuffer = null;
! int clipboardByteSize = 0;
! extern int windowActive;
! extern int sqHasClipboard;
! int pointerBuffer[16] =
! {0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999,
! 0x99999999};
! os_coord pointerOffset;
! wimp_icon_create sqIconBarIcon;
wimp_MESSAGE_LIST(4) importantWimpMessages;
! wimp_version_no actualOSLevel;
! os_error privateErr;
! char VMVersion[] = "3.2 of "__DATE__;
/* argument handling stuff -- see c.sqArgument */
! int numOptionsVM;
! char *(vmOptions[MAX_OPTIONS]);
! int numOptionsImage;
! char *(imageOptions[MAX_OPTIONS]);
! int headlessFlag = 0;
! int helpMe = 0;
! int versionMe = 0;
! int objectHeadroom = 4*1024*1024;
vmArg args[] = {
***************
*** 107,154 ****
/* screen description. Needs updating when screenmode changes */
! os_coord squeakDisplaySize,
! screenSize,
! scalingFactor,
! scrollOffset,
! visibleArea;
! int BitsPerPixel, squeakDisplayDepth;
/* display bitmap info */
! osspriteop_area * spriteAreaPtr = NULL;
! osspriteop_header * displaySprite = NULL;
osspriteop_trans_tab * pixelTranslationTable = NULL;
! os_PALETTE (256) paletteTable;
! extern int displayBits;
!
!
! /*** Variables -- Event Recording -- see c.sqRPCEvent ***/
! extern int keyBuf[];
! extern int keyBufGet;
! extern int keyBufPut;
/*** Functions ***/
! void SetColorEntry(int index, int red, int green, int blue);
! void getDisplayParameters(void);
! void displayModeChanged(void);
! extern int HandleEvents(int);
! int InitRiscOS(void);
! void MouseButtons( wimp_pointer * wblock);
! void SetUpWindow(void);
! void SetInitialWindowSize(void);
! int SetupPixmap(int w, int h, int d);
! void SetupPixelTranslationTable(void);
! void SetupPaletteTable(void);
! int createSpriteArea( int size);
! int platAllocateMemory( int amount);
! void platReportFatalError( os_error * e);
! void platReportError( os_error * e);
! void setDefaultPointer(void);
! extern void claimClipboard(void);
! extern void fetchClipboard(void);
/*** RPC-related Functions ***/
void platReportError( os_error * e) {
/* Use the RiscOS Error dialogue to notify users of some problem */
! wimp_report_error( e, wimp_ERROR_BOX_CANCEL_ICON | wimp_ERROR_BOX_HIGHLIGHT_CANCEL |wimp_ERROR_BOX_SHORT_TITLE , sqTaskName);
}
--- 96,141 ----
/* screen description. Needs updating when screenmode changes */
! os_coord squeakDisplaySize,
! screenSize,
! scalingFactor,
! scrollOffset,
! visibleArea;
! int screenBitPerPixel, squeakDisplayDepth;
/* display bitmap info */
! osspriteop_area * spriteAreaPtr = NULL;
! osspriteop_header * displaySprite = NULL;
osspriteop_trans_tab * pixelTranslationTable = NULL;
! os_PALETTE (256) paletteTable;
! extern int displayBits;
/*** Functions ***/
! void SetColorEntry(int index, int red, int green, int blue);
! void getDisplayParameters(void);
! void displayModeChanged(void);
! extern int HandleEvents(int);
! int InitRiscOS(void);
! void MouseButtons( wimp_pointer * wblock);
! void SetUpWindow(void);
! void SetInitialWindowSize(void);
! int SetupPixmap(int w, int h, int d);
! void SetupPixelTranslationTable(void);
! void SetupPaletteTable(void);
! int createSpriteArea( int size);
! int platAllocateMemory( int amount);
! void platReportFatalError( os_error * e);
! void platReportError( os_error * e);
! void setDefaultPointer(void);
! extern void claimClipboard(void);
! extern void fetchClipboard(void);
! extern void setFPStatus(int stat);
/*** RPC-related Functions ***/
void platReportError( os_error * e) {
/* Use the RiscOS Error dialogue to notify users of some problem */
! wimp_report_error( e, wimp_ERROR_BOX_CANCEL_ICON |
! wimp_ERROR_BOX_HIGHLIGHT_CANCEL |
! wimp_ERROR_BOX_SHORT_TITLE ,
! sqTaskName);
}
***************
*** 190,196 ****
}
! int platFree(int chunk) {
! free( (void *)chunk);
! }
int InitRiscOS(void) {
--- 177,183 ----
}
! // int platFree(int chunk) {
! // free( (void *)chunk);
! // }
int InitRiscOS(void) {
***************
*** 208,216 ****
return false;
}
- if (actualOSLevel >= wimp_VERSION_RO35) {
- osLevelOver350 = true;
- } else {
- osLevelOver350 = false;
- }
SqueakDisplayDA =SqueakObjectSpaceDA = (os_dynamic_area_no)NULL;
--- 195,198 ----
***************
*** 229,233 ****
setFPStatus(0);
!
return true;
}
--- 211,215 ----
setFPStatus(0);
!
return true;
}
***************
*** 267,271 ****
}
-
wblock.visible.x1 = (wblock.visible.x0)+width;
wblock.visible.y0 = (wblock.visible.y1) - height;
--- 249,252 ----
***************
*** 300,314 ****
int bpp;
bits junk;
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE, (os_mode_var)os_MODEVAR_XWIND_LIMIT, &screenSize.x, &junk);
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE, (os_mode_var)os_MODEVAR_YWIND_LIMIT, &screenSize.y, &junk);
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE, (os_mode_var)os_MODEVAR_LOG2_BPP, &bpp, &junk);
/* this gets us log2 of actual bpp, so convert back */
! BitsPerPixel = 1<<bpp;
! /* now find the OSunit to pixel scaling factors */
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE, (os_mode_var)os_MODEVAR_XEIG_FACTOR, &scalingFactor.x, &junk);
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE, (os_mode_var)os_MODEVAR_YEIG_FACTOR, &scalingFactor.y, &junk);
}
void displayModeChanged(void){
getDisplayParameters();
SetupPixelTranslationTable();
--- 281,303 ----
int bpp;
bits junk;
! /* get the screen size x & y */
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE,
! (os_mode_var)os_MODEVAR_XWIND_LIMIT, &screenSize.x, &junk);
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE,
! (os_mode_var)os_MODEVAR_YWIND_LIMIT, &screenSize.y, &junk);
! /* find the screen depth */
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE,
! (os_mode_var)os_MODEVAR_LOG2_BPP, &bpp, &junk);
/* this gets us log2 of actual bpp, so convert back */
! screenBitPerPixel = 1<<bpp;
! /* find the OSunit to pixel scaling factors */
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE,
! (os_mode_var)os_MODEVAR_XEIG_FACTOR, &scalingFactor.x, &junk);
! xos_read_mode_variable( (os_mode)os_CURRENT_MODE,
! (os_mode_var)os_MODEVAR_YEIG_FACTOR, &scalingFactor.y, &junk);
}
void displayModeChanged(void){
+ /* the display mode has been changed so we need to refetch all the details */
getDisplayParameters();
SetupPixelTranslationTable();
***************
*** 379,386 ****
for( i = 0; i<256; i++) {
xcolourtrans_return_colour_number_for_mode((os_colour)(paletteTable.entries[i]), colourtrans_CURRENT_MODE, (os_palette*)colourtrans_CURRENT_PALETTE, &val);
! if ( BitsPerPixel <= 8) {
pixelTranslationTable->c[i] = (byte)(val & 0xFF);
} else {
! if ( BitsPerPixel == 16) {
pixelTranslationTable->c[i<<1] = (byte)(val & 0xFF);
pixelTranslationTable->c[(i<<1)+1] = (byte)((val>>8) & 0xFF);
--- 368,375 ----
for( i = 0; i<256; i++) {
xcolourtrans_return_colour_number_for_mode((os_colour)(paletteTable.entries[i]), colourtrans_CURRENT_MODE, (os_palette*)colourtrans_CURRENT_PALETTE, &val);
! if ( screenBitPerPixel <= 8) {
pixelTranslationTable->c[i] = (byte)(val & 0xFF);
} else {
! if ( screenBitPerPixel == 16) {
pixelTranslationTable->c[i<<1] = (byte)(val & 0xFF);
pixelTranslationTable->c[(i<<1)+1] = (byte)((val>>8) & 0xFF);
***************
*** 496,520 ****
int sprMode;
! /* derive the sprite mode from the depth requested. Needs to work with new
! spritemode stuff and support 16/32 bits etc */
! if ( osLevelOver350) {
#define SPR_MODE_WORD(arg) ((arg<<osspriteop_TYPE_SHIFT) | (180<<osspriteop_YRES_SHIFT) | (180<<osspriteop_XRES_SHIFT) | 1 )
! switch (d) {
! case 1: sprMode = SPR_MODE_WORD(osspriteop_TYPE1BPP); break;
! case 2: sprMode = SPR_MODE_WORD(osspriteop_TYPE2BPP); break;
! case 4: sprMode = SPR_MODE_WORD(osspriteop_TYPE4BPP); break;
! case 8: sprMode = SPR_MODE_WORD(osspriteop_TYPE8BPP); break;
! case 16: sprMode = SPR_MODE_WORD(osspriteop_TYPE16BPP); break;
! case 32: sprMode = SPR_MODE_WORD(osspriteop_TYPE32BPP); break;
! }
! } else {
! switch (d) {
! case 1: sprMode = 18; break;
! case 2: sprMode = 19; break;
! case 4: sprMode = 20; break;
! case 8: sprMode = 21; break;
! default: sprMode = 21;
! }
}
/* now clear the sprite area and create a sprite in it */
if ( (e = xosspriteop_clear_sprites( osspriteop_USER_AREA, spriteAreaPtr)) != NULL) {
--- 485,501 ----
int sprMode;
! /* derive the sprite mode from the depth requested.
! * Needs to work with new spritemode stuff and support 16/32 bits etc
! */
#define SPR_MODE_WORD(arg) ((arg<<osspriteop_TYPE_SHIFT) | (180<<osspriteop_YRES_SHIFT) | (180<<osspriteop_XRES_SHIFT) | 1 )
! switch (d) {
! case 1: sprMode = SPR_MODE_WORD(osspriteop_TYPE1BPP); break;
! case 2: sprMode = SPR_MODE_WORD(osspriteop_TYPE2BPP); break;
! case 4: sprMode = SPR_MODE_WORD(osspriteop_TYPE4BPP); break;
! case 8: sprMode = SPR_MODE_WORD(osspriteop_TYPE8BPP); break;
! case 16: sprMode = SPR_MODE_WORD(osspriteop_TYPE16BPP); break;
! case 32: sprMode = SPR_MODE_WORD(osspriteop_TYPE32BPP); break;
}
+
/* now clear the sprite area and create a sprite in it */
if ( (e = xosspriteop_clear_sprites( osspriteop_USER_AREA, spriteAreaPtr)) != NULL) {
***************
*** 624,628 ****
getDisplayParameters();
! if (savedWindowSize != 0) {
} else {
/* set h & w to half screen */
--- 605,609 ----
getDisplayParameters();
! if (getSavedWindowSize() != 0) {
} else {
/* set h & w to half screen */
***************
*** 651,655 ****
--- 632,647 ----
int dispBits, sizeHdr, classHdr, basicHdr, hdrSize, byteSize;
int displayObj, w, h, d;
+ extern int splObj(int index);
+ extern int isPointers(int oop);
+ extern int lengthOf(int oop);
+ extern int fetchPointerofObject(int fieldIndex, int oop);
+ extern int extraHeaderBytes(int oopOrChunk);
+ extern int storePointerofObjectwithValue(int fieldIndex, int oop, int valuePointer);
+
/* if there is no stWindow yet, open the main window */
+ if (0) { privateErr.errnum = (bits)0;
+ sprintf(privateErr.errmess, "SetDisplayBitmap, dBI = %x\n", dispBitsIndex);
+ platReportError((os_error *)&privateErr);
+ }
if (sqWindowHandle == null) SetUpWindow();
***************
*** 751,755 ****
int ioGetKeystroke(void) {
extern int nextKeyPressOrNil(void);
-
ioProcessEvents(); /* process all pending events */
return nextKeyPressOrNil();
--- 743,746 ----
***************
*** 814,818 ****
}
-
int ioEventHandle(void) {
/* do all the vm event stuff */
--- 805,808 ----
***************
*** 821,825 ****
}
-
int ioRelinquishProcessorForMicroseconds(int microSeconds) {
/* This operation is platform dependent. On the Mac, it simply calls
--- 811,814 ----
***************
*** 846,851 ****
don't make too big a window later */
getDisplayParameters();
! w = (unsigned) savedWindowSize >> 16 ;
! h = savedWindowSize & 0xFFFF;
/* maximum size is screen size (minus a little) */
maxWidth = (int)screenSize.x ;
--- 835,840 ----
don't make too big a window later */
getDisplayParameters();
! w = (unsigned) getSavedWindowSize() >> 16 ;
! h = getSavedWindowSize() & 0xFFFF;
/* maximum size is screen size (minus a little) */
maxWidth = (int)screenSize.x ;
***************
*** 915,919 ****
int ioSetFullScreen(int fullScreen) {
static os_coord prevOrigin = {0,0};
! int width, height, maxWidth, maxHeight;
int oldWidth, oldHeight;
wimp_window_info wblock;
--- 904,908 ----
int ioSetFullScreen(int fullScreen) {
static os_coord prevOrigin = {0,0};
! int width, height;
int oldWidth, oldHeight;
wimp_window_info wblock;
***************
*** 928,932 ****
if ((oldWidth < width) || (oldHeight < height)) {
/* save old size if it wasn't already full-screen */
! savedWindowSize = (oldWidth << 16) + (oldHeight & 0xFFFF);
squeakDisplaySize.x = width;
squeakDisplaySize.y = height;
--- 917,921 ----
if ((oldWidth < width) || (oldHeight < height)) {
/* save old size if it wasn't already full-screen */
! setSavedWindowSize( (oldWidth << 16) + (oldHeight & 0xFFFF));
squeakDisplaySize.x = width;
squeakDisplaySize.y = height;
***************
*** 942,947 ****
setWindowParameters(&screenTopLeft);
} else {
! squeakDisplaySize.x = (unsigned) savedWindowSize >> 16 ;
! squeakDisplaySize.y = savedWindowSize & 0xFFFF;
setWindowParameters( &prevOrigin);
}
--- 931,936 ----
setWindowParameters(&screenTopLeft);
} else {
! squeakDisplaySize.x = (unsigned) getSavedWindowSize() >> 16 ;
! squeakDisplaySize.y = getSavedWindowSize() & 0xFFFF;
setWindowParameters( &prevOrigin);
}
***************
*** 984,988 ****
int ioScreenDepth(void) {
// what is the bpp setting of the screen right now?
! return BitsPerPixel;
}
--- 973,977 ----
int ioScreenDepth(void) {
// what is the bpp setting of the screen right now?
! return screenBitPerPixel;
}
***************
*** 1031,1035 ****
temp[i] = 0;
if ((e = xosfscontrol_canonicalise_path (temp, fileName, (char const *) NULL, (char const *)NULL, 1000, &junk)) != null) {
! platReportError(e);
}
}
--- 1020,1031 ----
temp[i] = 0;
if ((e = xosfscontrol_canonicalise_path (temp, fileName, (char const *) NULL, (char const *)NULL, 1000, &junk)) != null) {
! // when canonicalizing filenames we can get errors like
! // no disc
! // bad use of ^
! // bad name
! // etc
! // just copy the ugly string to the destination for now
! strcpy(fileName, temp);
! // debugging-> platReportError(e);
}
}
***************
*** 1055,1059 ****
int imageNamePutLength(int sqImageNameIndex, int length) {
- char *sqImageName = (char *) sqImageNameIndex;
int count;
// should update the window struct details for title bar; length, address etc
--- 1051,1054 ----
***************
*** 1073,1077 ****
int vmPathGetLength(int sqVMPathIndex, int length) {
- char *stVMPath = (char *) sqVMPathIndex;
int count;
--- 1068,1071 ----
***************
*** 1188,1196 ****
switch (id) {
case 0: return vmPath; break;
! case 1: if(newImageVersion) return imageName;
! else return "" /* imageName*/;
! break;
! case 1001: newImageVersion = 1; return "RiscOS"; break; // this will only be called by a newer image that expects the filenames to be translated. I hope!
! case 1002: return "RiscOS 3.70"; break;
case 1003: return "ARM"; break;
case 1004: return (char *)interpreterVersion; break;
--- 1182,1188 ----
switch (id) {
case 0: return vmPath; break;
! case 1: return imageName; break;
! case 1001: return "RiscOS"; break;
! case 1002: return "RiscOS 4"; break;
case 1003: return "ARM"; break;
case 1004: return (char *)interpreterVersion; break;
***************
*** 1207,1211 ****
tmp = imageOptions[id-1];
if (*tmp) return tmp;
! }
}
--- 1199,1204 ----
tmp = imageOptions[id-1];
if (*tmp) return tmp;
! }
! return "";
}
***************
*** 1272,1275 ****
--- 1265,1269 ----
int main(int argc, char *argv[]) {
FILE *f;
+ extern void initGlobalStructure(void);
parseArguments( argv, argc, args);
***************
*** 1280,1283 ****
--- 1274,1278 ----
InitRiscOS();
+ initGlobalStructure();
/* quick wimp_poll to allow icon to appear */
***************
*** 1300,1304 ****
readImageFromFileHeapSize(f, objectHeadroom);
fclose(f);
-
/* run Squeak */
--- 1295,1298 ----
|