{ SPX Library Version 2.0 Copyright 1993 Scott D. Ramsay } SPX_ES allows a simplified method to load sprites in expanded memory. Turbo Vision's Objects unit is required. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Before one would load sprites into main memory by doing the following: var sprites : array[1..MaxSprites] or pointer; begin loadVSP('myspr.vsp',sprites); { load the sprites } fput(100,100,sprites[1]^,false); { display the 1st sprite on screen } end; This unit's method is very similar except first you have to create a global expanded memory area to contain all the sprite data for the program. const maxSize = 200000; { about 200k of sprites need to be loaded } var emsGlobalmem : PEmsStack; emsGlobalmem := CreateEmsStack(maxSize); The function CreateEmsStack allocates expanded memory and returns a pointer type for that area. If the area could not be allocated, then the function returns NIL. Once the memory area is created, you just load the sprites just like before except the sprite array must be of type PEmsDyData. var sprites : array[1..MaxSprites] or PEmsDyData; begin StackLoadVSP('myspr.vsp',sprites,emsGlobalmem,false); fput(100,100,vp(sprites[1])^,false); { display the 1st sprite on screen } end; StackLoadVSP takes two new arguments compared to LoadVSP. You pass in the pointer to the expanded memory area and a boolean value. If the boolean value is set to TRUE it forces StackLoadVSP to load the sprites in regular heap space. This way you can automate the load: StackLoadVSP('myspr.vsp',sprites,emsGlobalmem,(emsGlobalmem=nil)); If emsGlobalmem could not be allocated, then the sprites are loaded to regular memory. Notice in the fput procedure we call the function VP. The function Vp accesses the expanded memory and returns an ACTUAL pointer to the sprite data. This pointer can point to the temporary buffer created by the unit. By default the unit allocates 16k of memory as a temporary buffer. If you want to change the buffer size, call the procedure ChangeTempBuffer. The temporary buffer should be the same size or larger than the largest sprite loaded. At the end of your program you must call the DeleteEmsStack procedure to deallocate your ems global memory. Since exiting a program does not free expanded memory. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ function CreateEmsStack(size:longint):PEmsStack; Allocates ems global memory. SIZE: Size of the memory to allocate Returns: A pointer that describes the allocated memory area or NIL if it could not allocate the memory ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ procedure DeleteEmsStack(var p:PEmsStack); Deallocate ems global memory. P: A pointer to the ems memory structure At the end of your program you must call this procedure to deallocate your ems global memory. Since exiting a program does not free expanded memory. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ function AddEmsStack(var p:PemsStack;var data;size:word):boolean; Adds custom data to the ems memory area. P: A pointer to the ems memory structure DATA: Data to copy to ems memory SIZE: Size of the data to copy Returns TRUE if successful, else returns FALSE if memory area is full or other error Note: The actual position of the data can be found by following: ok := AddEmsStack(emsMem,data,dataSize); if ok then dataposition := emsMem^.flocator-dataSize; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ function ReadEmsStack(var p:PemsStack;position:longint;var data;size:word):boolean; Retreives data from ems memory area. P: A pointer to the ems memory structure POSITION: Offset to start reading DATA: Data array to get the ems memory SIZE: Size of the data to copy Returns TRUE if successful ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ procedure ChangeTempBuffer(size:word); Changes the temporary buffer SIZE: Size to change temporary buffer ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ procedure StackLoadVSP(fn:string;var buff;var p:PEmsStack;loadlow:boolean); Loads sprites to main memory or expanded memory FN: VSP file name BUFF: a PEmsDyData structure. Can be a single pointer or an array of PEmsDyData. P: A pointer to the ems memory structure to place the sprites LOADLOW: Set to TRUE to force to load in main memory Sets the variable vspcnt to the number of sprites loaded. Note: When the allocated ems memory becomes full or can not be reached, the rest of the sprites are loaded to main memory. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ function vp(var p:PEmsDyData):pointer; Returns a pointer to the data specfied by the PEmsDyData structure. P: A pointer to the ems memory structure ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ