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 ---- |