mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Added missing #includes Added LUA scripting and console Changed the way tracers are visualized, so they work more like real tracers instead of a light fountain Fixed signedness of many grid variables used in GetMouseMapPos calls Fixed enemy weapon choosing: Sometimes a mortar is chosen but later rejected, but the grenade class was not reset. Caused assertion failure Added checks so enemies don't try to chuck RPG grenades with their hands Now possible to shoot a someone in the head if he's in water Fixed InitSightArrays to also clear soldier interrupt duel points. This was causing an assertion failure elsewhere in the code because the interrupt list still had soldiers on it sometimes when this function was called. Soldiers are much less willing to forfeit their turn over an attempt to use more APs than they have Removed early setting of muzzle flash. This would allow enemies to get an interrupt before you even fired. Fixed item dropping by AI. If AI tried to drop something while standing it would cause deadlock Change to greatly speed up closing the sector inventory window in an unloaded sector Added conditional compile flag to always give robot weapon ready advantage, even for 360 degree sighting Check builddefines.h for the conditional flags. Of greatest interest might be LUA_CONSOLE. This will cause the game to bring up a command console when run. However this console is severely lacking in many areas. If anybody knows of an open-source terminal/console that could be used instead, it would be appreciated. The existing console does bad things when you try to close it, and since it counts as a separate app, it pauses the game while it has focus. LUA scripting is very limited, basically just proof of concept. There is one global variable, the Soldiers array. An array index gives you the soldier in that slot in the currently loaded sector. The soldier has a few things that can be accessed: name (short name); fullname (long name); grid (current grid #, can be changed); walkto(grid) (function to walk to another grid); runto(grid) (function to run to another grid) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@924 3b4a5df2-a311-0410-b5c6-a8a6f20db521
1836 lines
45 KiB
C++
1836 lines
45 KiB
C++
#ifdef PRECOMPILEDHEADERS
|
|
#include "Laptop All.h"
|
|
#else
|
|
#include "builddefines.h"
|
|
#include <stdio.h>
|
|
#include "laptop.h"
|
|
#include "files.h"
|
|
#include "Game clock.h"
|
|
#include "Utilities.h"
|
|
#include "WCheck.h"
|
|
#include "Debug.h"
|
|
#include "WordWrap.h"
|
|
#include "Render Dirty.h"
|
|
#include "Encrypted File.h"
|
|
#include "cursors.h"
|
|
#include "email.h"
|
|
#include "text.h"
|
|
#endif
|
|
|
|
#define TOP_X LAPTOP_SCREEN_UL_X
|
|
#define TOP_Y LAPTOP_SCREEN_UL_Y
|
|
#define BLOCK_FILE_HEIGHT 10
|
|
#define BOX_HEIGHT 14
|
|
#define TITLE_X iScreenWidthOffset + 140
|
|
#define TITLE_Y iScreenHeightOffset + 33
|
|
#define TEXT_X iScreenWidthOffset + 140
|
|
#define PAGE_SIZE 22
|
|
#define FILES_TITLE_FONT FONT14ARIAL
|
|
#define FILES_TEXT_FONT FONT10ARIAL
|
|
#define BLOCK_HEIGHT 10
|
|
#define FILES_SENDER_TEXT_X TOP_X + 15
|
|
#define MAX_FILES_LIST_LENGTH 28
|
|
#define NUMBER_OF_FILES_IN_FILE_MANAGER 20
|
|
#define FILE_VIEWER_X iScreenWidthOffset + 236
|
|
#define FILE_VIEWER_Y iScreenHeightOffset + 85
|
|
#define FILE_VIEWER_WIDTH 598 - 240
|
|
#define FILE_GAP 2
|
|
#define FILE_TEXT_COLOR FONT_BLACK
|
|
#define FILE_STRING_SIZE 400
|
|
#define MAX_FILES_PAGE MAX_FILES_LIST_LENGTH
|
|
#define FILES_LIST_X FILES_SENDER_TEXT_X
|
|
#define FILES_LIST_Y ( 9 * BLOCK_HEIGHT )
|
|
#define FILES_LIST_WIDTH 100
|
|
#define LENGTH_OF_ENRICO_FILE 68
|
|
#define MAX_FILE_MESSAGE_PAGE_SIZE 325
|
|
#define VIEWER_MESSAGE_BODY_START_Y FILES_LIST_Y
|
|
#define PREVIOUS_FILE_PAGE_BUTTON_X iScreenWidthOffset + 553
|
|
#define PREVIOUS_FILE_PAGE_BUTTON_Y iScreenHeightOffset + 53
|
|
#define NEXT_FILE_PAGE_BUTTON_X iScreenWidthOffset + 577
|
|
#define NEXT_FILE_PAGE_BUTTON_Y PREVIOUS_FILE_PAGE_BUTTON_Y
|
|
|
|
#define FILES_COUNTER_1_WIDTH 7
|
|
#define FILES_COUNTER_2_WIDTH 43
|
|
#define FILES_COUNTER_3_WIDTH 45
|
|
|
|
|
|
// the highlighted line
|
|
INT32 iHighLightFileLine=-1;
|
|
|
|
|
|
// the files record list
|
|
FilesUnitPtr pFilesListHead=NULL;
|
|
|
|
FileStringPtr pFileStringList = NULL;
|
|
|
|
// are we in files mode
|
|
BOOLEAN fInFilesMode=FALSE;
|
|
BOOLEAN fOnLastFilesPageFlag = FALSE;
|
|
|
|
|
|
//. did we enter due to new file icon?
|
|
BOOLEAN fEnteredFileViewerFromNewFileIcon = FALSE;
|
|
BOOLEAN fWaitAFrame = FALSE;
|
|
|
|
// are there any new files
|
|
BOOLEAN fNewFilesInFileViewer = FALSE;
|
|
|
|
// graphics handles
|
|
extern UINT32 guiTITLE; // symbol already defined in laptop.cpp (jonathanl)
|
|
UINT32 guiFileBack;
|
|
extern UINT32 guiTOP; // symbol already defined in finances.cpp (jonathanl)
|
|
UINT32 guiHIGHLIGHT;
|
|
|
|
|
|
// currewnt page of multipage files we are on
|
|
INT32 giFilesPage = 0;
|
|
// strings
|
|
|
|
#define SLAY_LENGTH 12
|
|
#define ENRICO_LENGTH 0
|
|
|
|
|
|
UINT8 ubFileRecordsLength[]={
|
|
ENRICO_LENGTH,
|
|
SLAY_LENGTH,
|
|
SLAY_LENGTH,
|
|
SLAY_LENGTH,
|
|
SLAY_LENGTH,
|
|
SLAY_LENGTH,
|
|
SLAY_LENGTH,
|
|
};
|
|
|
|
UINT16 ubFileOffsets[]={
|
|
0,
|
|
ENRICO_LENGTH,
|
|
SLAY_LENGTH + ENRICO_LENGTH,
|
|
2 * SLAY_LENGTH + ENRICO_LENGTH,
|
|
3 * SLAY_LENGTH + ENRICO_LENGTH,
|
|
4 * SLAY_LENGTH + ENRICO_LENGTH,
|
|
5 * SLAY_LENGTH + ENRICO_LENGTH,
|
|
};
|
|
|
|
|
|
UINT16 usProfileIdsForTerroristFiles[]={
|
|
0, // no body
|
|
112, // elgin
|
|
64, // slay
|
|
82, // mom
|
|
83, // imposter
|
|
110, // tiff
|
|
111, // t-rex
|
|
112, // elgin
|
|
};
|
|
// buttons for next and previous pages
|
|
UINT32 giFilesPageButtons[ 2 ];
|
|
UINT32 giFilesPageButtonsImage[ 2 ];
|
|
|
|
|
|
// the previous and next pages buttons
|
|
|
|
enum{
|
|
PREVIOUS_FILES_PAGE_BUTTON=0,
|
|
NEXT_FILES_PAGE_BUTTON,
|
|
};
|
|
// mouse regions
|
|
MOUSE_REGION pFilesRegions[MAX_FILES_PAGE];
|
|
|
|
|
|
|
|
// function definitions
|
|
void RenderFilesBackGround( void );
|
|
BOOLEAN LoadFiles( void );
|
|
void RemoveFiles( void );
|
|
UINT32 ProcessAndEnterAFilesRecord( UINT8 ubCode, UINT32 uiDate, UINT8 ubFormat,STR8 pFirstPicFile, STR8 pSecondPicFile, BOOLEAN fRead );
|
|
void OpenAndReadFilesFile( void );
|
|
BOOLEAN OpenAndWriteFilesFile( void );
|
|
void ClearFilesList( void );
|
|
void DrawFilesTitleText( void );
|
|
void DrawFilesListBackGround( void );
|
|
void DisplayFilesList( void );
|
|
BOOLEAN OpenAndWriteFilesFile( void );
|
|
void DisplayFileMessage( void );
|
|
void InitializeFilesMouseRegions( void );
|
|
void RemoveFilesMouseRegions( void );
|
|
BOOLEAN DisplayFormattedText( void );
|
|
|
|
|
|
// buttons
|
|
void CreateButtonsForFilesPage( void );
|
|
void DeleteButtonsForFilesPage( void );
|
|
void HandleFileViewerButtonStates( void );
|
|
|
|
|
|
// open new files for viewing
|
|
void OpenFirstUnreadFile( void );
|
|
void CheckForUnreadFiles( void );
|
|
|
|
|
|
|
|
// file string structure manipulations
|
|
void ClearFileStringList( void );
|
|
void AddStringToFilesList( STR16 pString );
|
|
BOOLEAN HandleSpecialFiles( UINT8 ubFormat );
|
|
BOOLEAN HandleSpecialTerroristFile( INT32 iFileNumber, STR sPictureName );
|
|
|
|
|
|
// callbacks
|
|
void FilesBtnCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
void BtnPreviousFilePageCallback(GUI_BUTTON *btn,INT32 reason);
|
|
void BtnNextFilePageCallback(GUI_BUTTON *btn,INT32 reason);
|
|
|
|
// file width manipulation
|
|
void ClearOutWidthRecordsList( FileRecordWidthPtr pFileRecordWidthList );
|
|
FileRecordWidthPtr CreateWidthRecordsForAruloIntelFile( void );
|
|
FileRecordWidthPtr CreateWidthRecordsForTerroristFile( void );
|
|
FileRecordWidthPtr CreateRecordWidth( INT32 iRecordNumber, INT32 iRecordWidth, INT32 iRecordHeightAdjustment, UINT8 ubFlags );
|
|
|
|
|
|
UINT32 AddFilesToPlayersLog(UINT8 ubCode, UINT32 uiDate, UINT8 ubFormat, STR8 pFirstPicFile, STR8 pSecondPicFile )
|
|
{
|
|
// adds Files item to player's log(Files List), returns unique id number of it
|
|
// outside of the Files system(the code in this .c file), this is the only function you'll ever need
|
|
UINT32 uiId=0;
|
|
|
|
// if not in Files mode, read in from file
|
|
if(!fInFilesMode)
|
|
OpenAndReadFilesFile( );
|
|
|
|
// process the actual data
|
|
uiId = ProcessAndEnterAFilesRecord(ubCode, uiDate, ubFormat ,pFirstPicFile, pSecondPicFile, FALSE );
|
|
|
|
// set unread flag, if nessacary
|
|
CheckForUnreadFiles( );
|
|
|
|
// write out to file if not in Files mode
|
|
if(!fInFilesMode)
|
|
OpenAndWriteFilesFile( );
|
|
|
|
// return unique id of this transaction
|
|
return uiId;
|
|
}
|
|
void GameInitFiles( )
|
|
{
|
|
|
|
if ( (FileExists( FILES_DAT_FILE ) == TRUE ) )
|
|
{
|
|
FileClearAttributes( FILES_DAT_FILE );
|
|
FileDelete( FILES_DAT_FILE );
|
|
}
|
|
|
|
ClearFilesList( );
|
|
|
|
// add background check by RIS
|
|
AddFilesToPlayersLog( ENRICO_BACKGROUND, 0,255, NULL, NULL );
|
|
|
|
}
|
|
|
|
void EnterFiles()
|
|
{
|
|
|
|
// load grpahics for files system
|
|
LoadFiles( );
|
|
|
|
//AddFilesToPlayersLog(1, 0, 0,"LAPTOP\\portrait.sti", "LAPTOP\\portrait.sti");
|
|
//AddFilesToPlayersLog(0, 0, 3,"LAPTOP\\portrait.sti", "LAPTOP\\portrait.sti");
|
|
//AddFilesToPlayersLog(2, 0, 1,"LAPTOP\\portrait.sti", "LAPTOP\\portrait.sti");
|
|
// in files mode now, set the fact
|
|
fInFilesMode=TRUE;
|
|
|
|
// initialize mouse regions
|
|
InitializeFilesMouseRegions( );
|
|
|
|
// create buttons
|
|
CreateButtonsForFilesPage( );
|
|
|
|
// now set start states
|
|
HandleFileViewerButtonStates( );
|
|
|
|
// build files list
|
|
OpenAndReadFilesFile( );
|
|
|
|
// render files system
|
|
RenderFiles( );
|
|
|
|
// entered due to icon
|
|
if( fEnteredFileViewerFromNewFileIcon == TRUE )
|
|
{
|
|
OpenFirstUnreadFile( );
|
|
fEnteredFileViewerFromNewFileIcon = FALSE;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void ExitFiles()
|
|
{
|
|
|
|
// write files list out to disk
|
|
OpenAndWriteFilesFile( );
|
|
|
|
// remove mouse regions
|
|
RemoveFilesMouseRegions( );
|
|
|
|
// delete buttons
|
|
DeleteButtonsForFilesPage( );
|
|
|
|
fInFilesMode = FALSE;
|
|
|
|
// remove files
|
|
RemoveFiles( );
|
|
}
|
|
|
|
void HandleFiles()
|
|
{
|
|
CheckForUnreadFiles( );
|
|
}
|
|
|
|
void RenderFiles()
|
|
{
|
|
HVOBJECT hHandle;
|
|
|
|
|
|
// render the background
|
|
RenderFilesBackGround( );
|
|
|
|
// draw the title bars text
|
|
DrawFilesTitleText( );
|
|
|
|
// the columns
|
|
DrawFilesListBackGround( );
|
|
|
|
// display the list of senders
|
|
DisplayFilesList( );
|
|
|
|
// draw the highlighted file
|
|
DisplayFileMessage( );
|
|
|
|
// title bar icon
|
|
BlitTitleBarIcons( );
|
|
|
|
|
|
// display border
|
|
GetVideoObject(&hHandle, guiLaptopBACKGROUND);
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0,iScreenWidthOffset + 108, iScreenHeightOffset + 23, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
}
|
|
|
|
|
|
void RenderFilesBackGround( void )
|
|
{
|
|
// render generic background for file system
|
|
HVOBJECT hHandle;
|
|
INT32 iCounter=0;
|
|
|
|
// get title bar object
|
|
GetVideoObject(&hHandle, guiTITLE);
|
|
|
|
// blt title bar to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0,TOP_X, TOP_Y - 2, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
// get and blt the top part of the screen, video object and blt to screen
|
|
GetVideoObject( &hHandle, guiTOP );
|
|
BltVideoObject( FRAME_BUFFER, hHandle, 0,TOP_X, TOP_Y + 22, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
void DrawFilesTitleText( void )
|
|
{
|
|
// setup the font stuff
|
|
SetFont(FILES_TITLE_FONT);
|
|
SetFontForeground(FONT_WHITE);
|
|
SetFontBackground(FONT_BLACK);
|
|
// reset shadow
|
|
SetFontShadow(DEFAULT_SHADOW);
|
|
|
|
// draw the pages title
|
|
mprintf(TITLE_X,TITLE_Y,pFilesTitle[0]);
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
BOOLEAN LoadFiles( void )
|
|
{
|
|
VOBJECT_DESC VObjectDesc;
|
|
// load files video objects into memory
|
|
|
|
// title bar
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\programtitlebar.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiTITLE));
|
|
|
|
// top portion of the screen background
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\fileviewer.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiTOP));
|
|
|
|
|
|
// the highlight
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\highlight.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiHIGHLIGHT));
|
|
|
|
// top portion of the screen background
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\fileviewerwhite.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiFileBack));
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
void RemoveFiles( void )
|
|
{
|
|
|
|
// delete files video objects from memory
|
|
|
|
|
|
DeleteVideoObjectFromIndex(guiTOP);
|
|
DeleteVideoObjectFromIndex(guiTITLE);
|
|
DeleteVideoObjectFromIndex(guiHIGHLIGHT);
|
|
DeleteVideoObjectFromIndex(guiFileBack);
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
UINT32 ProcessAndEnterAFilesRecord( UINT8 ubCode, UINT32 uiDate, UINT8 ubFormat ,STR8 pFirstPicFile, STR8 pSecondPicFile, BOOLEAN fRead )
|
|
{
|
|
UINT32 uiId=0;
|
|
FilesUnitPtr pFiles=pFilesListHead;
|
|
|
|
// add to Files list
|
|
if(pFiles)
|
|
{
|
|
while(pFiles)
|
|
{
|
|
// check to see if the file is already there
|
|
if(pFiles->ubCode==ubCode)
|
|
{
|
|
// if so, return it's id number
|
|
return ( pFiles->uiIdNumber );
|
|
}
|
|
|
|
// next in the list
|
|
pFiles = pFiles->Next;
|
|
}
|
|
|
|
// reset pointer
|
|
pFiles=pFilesListHead;
|
|
|
|
// go to end of list
|
|
while(pFiles->Next)
|
|
{
|
|
pFiles = pFiles->Next;
|
|
}
|
|
// alloc space
|
|
pFiles->Next = (files *) MemAlloc(sizeof(FilesUnit));
|
|
|
|
// increment id number
|
|
uiId = pFiles->uiIdNumber + 1;
|
|
|
|
// set up information passed
|
|
pFiles = pFiles->Next;
|
|
pFiles->Next = NULL;
|
|
pFiles->ubCode = ubCode;
|
|
pFiles->uiDate = uiDate;
|
|
pFiles->uiIdNumber = uiId;
|
|
pFiles->ubFormat = ubFormat;
|
|
pFiles->fRead = fRead;
|
|
}
|
|
else
|
|
{
|
|
// alloc space
|
|
pFiles = (FilesUnitPtr) MemAlloc(sizeof(FilesUnit));
|
|
|
|
// setup info passed
|
|
pFiles->Next = NULL;
|
|
pFiles->ubCode = ubCode;
|
|
pFiles->uiDate = uiDate;
|
|
pFiles->uiIdNumber = uiId;
|
|
pFilesListHead = pFiles;
|
|
pFiles->ubFormat=ubFormat;
|
|
pFiles -> fRead = fRead;
|
|
}
|
|
|
|
// null out ptr's to picture file names
|
|
pFiles -> pPicFileNameList[0] = NULL;
|
|
pFiles -> pPicFileNameList[1] = NULL;
|
|
|
|
// copy file name strings
|
|
|
|
// first file
|
|
if(pFirstPicFile)
|
|
{
|
|
if((pFirstPicFile[0]) != 0)
|
|
{
|
|
pFiles -> pPicFileNameList[0] = (STR8) MemAlloc(strlen(pFirstPicFile) + 1 );
|
|
strcpy( pFiles -> pPicFileNameList[0], pFirstPicFile);
|
|
pFiles -> pPicFileNameList[0][strlen(pFirstPicFile)] = 0;
|
|
}
|
|
}
|
|
|
|
// second file
|
|
|
|
if(pSecondPicFile)
|
|
{
|
|
if((pSecondPicFile[0]) != 0)
|
|
{
|
|
pFiles->pPicFileNameList[1] = (STR8) MemAlloc(strlen(pSecondPicFile) + 1 );
|
|
strcpy( pFiles->pPicFileNameList[1], pSecondPicFile);
|
|
pFiles->pPicFileNameList[1][ strlen( pSecondPicFile ) ] = 0;
|
|
}
|
|
}
|
|
|
|
// return unique id
|
|
return uiId;
|
|
}
|
|
|
|
void OpenAndReadFilesFile( void )
|
|
{
|
|
// this procedure will open and read in data to the finance list
|
|
HWFILE hFileHandle;
|
|
UINT8 ubCode;
|
|
UINT32 uiDate;
|
|
INT32 iBytesRead=0;
|
|
UINT32 uiByteCount=0;
|
|
CHAR8 pFirstFilePath[128];
|
|
CHAR8 pSecondFilePath[128];
|
|
UINT8 ubFormat;
|
|
BOOLEAN fRead;
|
|
|
|
// clear out the old list
|
|
ClearFilesList( );
|
|
|
|
// no file, return
|
|
if ( ! (FileExists( FILES_DAT_FILE ) ) )
|
|
return;
|
|
|
|
// open file
|
|
hFileHandle=FileOpen( FILES_DAT_FILE,( FILE_OPEN_EXISTING | FILE_ACCESS_READ ), FALSE );
|
|
|
|
// failed to get file, return
|
|
if(!hFileHandle)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// make sure file is more than 0 length
|
|
if ( FileGetSize( hFileHandle ) == 0 )
|
|
{
|
|
FileClose( hFileHandle );
|
|
return;
|
|
}
|
|
|
|
// file exists, read in data, continue until file end
|
|
while( FileGetSize( hFileHandle ) > uiByteCount)
|
|
{
|
|
|
|
// read in data
|
|
FileRead( hFileHandle, &ubCode, sizeof(UINT8), (UINT32 *)&iBytesRead );
|
|
|
|
FileRead( hFileHandle, &uiDate, sizeof(UINT32), (UINT32 *)&iBytesRead );
|
|
|
|
FileRead( hFileHandle, &pFirstFilePath, 128, (UINT32 *)&iBytesRead );
|
|
|
|
FileRead( hFileHandle, &pSecondFilePath, 128, (UINT32 *)&iBytesRead );
|
|
|
|
FileRead( hFileHandle, &ubFormat, sizeof(UINT8), (UINT32 *)&iBytesRead );
|
|
|
|
FileRead( hFileHandle, &fRead, sizeof(UINT8), (UINT32 *)&iBytesRead );
|
|
// add transaction
|
|
ProcessAndEnterAFilesRecord(ubCode, uiDate, ubFormat,pFirstFilePath, pSecondFilePath, fRead);
|
|
|
|
// increment byte counter
|
|
uiByteCount += sizeof( UINT32 ) + sizeof( UINT8 )+ 128 + 128 + sizeof(UINT8) + sizeof( BOOLEAN );
|
|
}
|
|
|
|
// close file
|
|
FileClose( hFileHandle );
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
BOOLEAN OpenAndWriteFilesFile( void )
|
|
{
|
|
// this procedure will open and write out data from the finance list
|
|
HWFILE hFileHandle;
|
|
INT32 iBytesWritten=0;
|
|
FilesUnitPtr pFilesList=pFilesListHead;
|
|
CHAR8 pFirstFilePath[128];
|
|
CHAR8 pSecondFilePath[128];
|
|
|
|
memset(&pFirstFilePath, 0, sizeof( pFirstFilePath ) );
|
|
memset(&pSecondFilePath, 0, sizeof( pSecondFilePath ) );
|
|
|
|
if( pFilesList != NULL )
|
|
{
|
|
if(pFilesList->pPicFileNameList[0])
|
|
{
|
|
strcpy(pFirstFilePath, pFilesList->pPicFileNameList[0]);
|
|
}
|
|
if(pFilesList->pPicFileNameList[1])
|
|
{
|
|
strcpy(pSecondFilePath, pFilesList->pPicFileNameList[1]);
|
|
}
|
|
}
|
|
|
|
// open file
|
|
hFileHandle=FileOpen( FILES_DAT_FILE, FILE_ACCESS_WRITE|FILE_CREATE_ALWAYS, FALSE);
|
|
|
|
// if no file exits, do nothing
|
|
if(!hFileHandle)
|
|
{
|
|
return ( FALSE );
|
|
}
|
|
// write info, while there are elements left in the list
|
|
while(pFilesList)
|
|
{
|
|
// now write date and amount, and code
|
|
FileWrite( hFileHandle, &(pFilesList->ubCode), sizeof ( UINT8 ), NULL );
|
|
FileWrite( hFileHandle, &(pFilesList->uiDate), sizeof ( UINT32 ), NULL );
|
|
FileWrite( hFileHandle, &(pFirstFilePath), 128, NULL );
|
|
FileWrite( hFileHandle, &(pSecondFilePath), 128, NULL );
|
|
FileWrite( hFileHandle, &(pFilesList->ubFormat), sizeof(UINT8), NULL );
|
|
FileWrite( hFileHandle, &(pFilesList->fRead), sizeof(UINT8), NULL );
|
|
|
|
// next element in list
|
|
pFilesList = pFilesList->Next;
|
|
|
|
}
|
|
|
|
// close file
|
|
FileClose( hFileHandle );
|
|
// clear out the old list
|
|
ClearFilesList( );
|
|
|
|
return ( TRUE );
|
|
}
|
|
|
|
void ClearFilesList( void )
|
|
{
|
|
// remove each element from list of transactions
|
|
FilesUnitPtr pFilesList=pFilesListHead;
|
|
FilesUnitPtr pFilesNode=pFilesList;
|
|
|
|
// while there are elements in the list left, delete them
|
|
while( pFilesList )
|
|
{
|
|
// set node to list head
|
|
pFilesNode=pFilesList;
|
|
|
|
// set list head to next node
|
|
pFilesList=pFilesList->Next;
|
|
|
|
// if present, dealloc string
|
|
if(pFilesNode->pPicFileNameList[0])
|
|
{
|
|
MemFree(pFilesNode->pPicFileNameList[0]);
|
|
}
|
|
|
|
if(pFilesNode->pPicFileNameList[1])
|
|
{
|
|
MemFree(pFilesNode->pPicFileNameList[1]);
|
|
}
|
|
// delete current node
|
|
MemFree(pFilesNode);
|
|
}
|
|
pFilesListHead=NULL;
|
|
return;
|
|
}
|
|
|
|
void DrawFilesListBackGround( void )
|
|
{
|
|
// proceudre will draw the background for the list of files
|
|
INT32 iCounter=7;
|
|
// HVOBJECT hHandle;
|
|
|
|
// now the columns
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
void DisplayFilesList( void )
|
|
{
|
|
// this function will run through the list of files of files and display the 'sender'
|
|
FilesUnitPtr pFilesList=pFilesListHead;
|
|
INT32 iCounter=0;
|
|
HVOBJECT hHandle;
|
|
|
|
|
|
// font stuff
|
|
SetFont(FILES_TEXT_FONT);
|
|
SetFontForeground(FONT_BLACK);
|
|
SetFontBackground(FONT_BLACK);
|
|
SetFontShadow(NO_SHADOW);
|
|
|
|
// runt hrough list displaying 'sender'
|
|
while((pFilesList))//&&(iCounter < MAX_FILES_LIST_LENGTH))
|
|
{
|
|
if (iCounter==iHighLightFileLine)
|
|
{
|
|
// render highlight
|
|
GetVideoObject(&hHandle, guiHIGHLIGHT);
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0, FILES_SENDER_TEXT_X - 5, iScreenHeightOffset + ( ( iCounter + 9 ) * BLOCK_HEIGHT) + ( iCounter * 2 ) - 4 , VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
}
|
|
|
|
mprintf(FILES_SENDER_TEXT_X, iScreenHeightOffset + (( iCounter + 9 ) * BLOCK_HEIGHT) + ( iCounter * 2 ) - 2 ,pFilesSenderList[pFilesList->ubCode]);
|
|
iCounter++;
|
|
pFilesList=pFilesList->Next;
|
|
}
|
|
|
|
// reset shadow
|
|
SetFontShadow(DEFAULT_SHADOW);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DisplayFileMessage( void )
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
// get the currently selected message
|
|
if(iHighLightFileLine!=-1)
|
|
{
|
|
// display text
|
|
DisplayFormattedText( );
|
|
}
|
|
else
|
|
{
|
|
HandleFileViewerButtonStates( );
|
|
}
|
|
|
|
// reset shadow
|
|
SetFontShadow(DEFAULT_SHADOW);
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
void InitializeFilesMouseRegions( void )
|
|
{
|
|
INT32 iCounter=0;
|
|
// init mouseregions
|
|
for(iCounter=0; iCounter <MAX_FILES_PAGE; iCounter++)
|
|
{
|
|
MSYS_DefineRegion(&pFilesRegions[iCounter],FILES_LIST_X ,(INT16)iScreenHeightOffset + (FILES_LIST_Y + iCounter * ( BLOCK_HEIGHT + 2 ) ), FILES_LIST_X + FILES_LIST_WIDTH ,(INT16)iScreenHeightOffset + (FILES_LIST_Y + ( iCounter + 1 ) * ( BLOCK_HEIGHT + 2 ) ),
|
|
MSYS_PRIORITY_NORMAL+2,MSYS_NO_CURSOR, MSYS_NO_CALLBACK, FilesBtnCallBack );
|
|
MSYS_AddRegion(&pFilesRegions[iCounter]);
|
|
MSYS_SetRegionUserData(&pFilesRegions[iCounter],0,iCounter);
|
|
}
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
void RemoveFilesMouseRegions( void )
|
|
{
|
|
INT32 iCounter=0;
|
|
for(iCounter=0; iCounter <MAX_FILES_PAGE; iCounter++)
|
|
{
|
|
MSYS_RemoveRegion( &pFilesRegions[iCounter]);
|
|
}
|
|
}
|
|
|
|
void FilesBtnCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
INT32 iFileId = -1;
|
|
INT32 iCounter = 0;
|
|
FilesUnitPtr pFilesList=pFilesListHead;
|
|
|
|
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
if(iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
|
|
// left button
|
|
iFileId = MSYS_GetRegionUserData(pRegion, 0);
|
|
|
|
// reset iHighLightListLine
|
|
iHighLightFileLine = -1;
|
|
|
|
if( iHighLightFileLine == iFileId )
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
// make sure is a valid
|
|
while( pFilesList )
|
|
{
|
|
|
|
// if iCounter = iFileId, is a valid file
|
|
if( iCounter == iFileId )
|
|
{
|
|
giFilesPage = 0;
|
|
iHighLightFileLine = iFileId;
|
|
}
|
|
|
|
// next element in list
|
|
pFilesList = pFilesList->Next;
|
|
|
|
// increment counter
|
|
iCounter++;
|
|
}
|
|
|
|
fReDrawScreenFlag=TRUE;
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
BOOLEAN DisplayFormattedText( void )
|
|
{
|
|
FilesUnitPtr pFilesList=pFilesListHead;
|
|
|
|
UINT16 usFirstWidth = 0;
|
|
UINT16 usFirstHeight = 0;
|
|
UINT16 usSecondWidth;
|
|
UINT16 usSecondHeight;
|
|
INT16 sTextWidth = 0;
|
|
INT32 iCounter=0;
|
|
INT32 iLength=0;
|
|
INT32 iHeight=0;
|
|
INT32 iOffSet=0;
|
|
INT32 iMessageCode;
|
|
CHAR16 sString[2048];
|
|
HVOBJECT hHandle;
|
|
UINT32 uiFirstTempPicture;
|
|
UINT32 uiSecondTempPicture;
|
|
VOBJECT_DESC VObjectDesc;
|
|
INT16 usFreeSpace = 0;
|
|
static INT32 iOldMessageCode = 0;
|
|
|
|
fWaitAFrame = FALSE;
|
|
|
|
// get the file that was highlighted
|
|
while(iCounter < iHighLightFileLine)
|
|
{
|
|
iCounter++;
|
|
pFilesList=pFilesList->Next;
|
|
}
|
|
|
|
// message code found, reset counter
|
|
iMessageCode = pFilesList->ubCode;
|
|
iCounter=0;
|
|
|
|
// set file as read
|
|
pFilesList->fRead = TRUE;
|
|
|
|
// clear the file string structure list
|
|
// get file background object
|
|
GetVideoObject(&hHandle, guiFileBack);
|
|
|
|
// blt background to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0, FILE_VIEWER_X, FILE_VIEWER_Y - 4, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
// get the offset in the file
|
|
while( iCounter < iMessageCode)
|
|
{
|
|
// increment increment offset
|
|
iOffSet+=ubFileRecordsLength[iCounter];
|
|
|
|
// increment counter
|
|
iCounter++;
|
|
}
|
|
|
|
iLength = ubFileRecordsLength[pFilesList->ubCode];
|
|
|
|
if( pFilesList->ubFormat < ENRICO_BACKGROUND )
|
|
{
|
|
|
|
LoadEncryptedDataFromFile("BINARYDATA\\Files.edt", sString, FILE_STRING_SIZE * (iOffSet) * 2, FILE_STRING_SIZE * iLength * 2);
|
|
}
|
|
|
|
// reset counter
|
|
iCounter=0;
|
|
|
|
// no shadow
|
|
SetFontShadow(NO_SHADOW);
|
|
|
|
switch( pFilesList->ubFormat )
|
|
{
|
|
case 0:
|
|
|
|
// no format, all text
|
|
|
|
while(iLength > iCounter)
|
|
{
|
|
// read one record from file manager file
|
|
LoadEncryptedDataFromFile( "BINARYDATA\\Files.edt", sString, FILE_STRING_SIZE * ( iOffSet + iCounter ) * 2, FILE_STRING_SIZE * 2 );
|
|
|
|
// display string and get height
|
|
iHeight += IanDisplayWrappedString(FILE_VIEWER_X + 4, ( UINT16 )( FILE_VIEWER_Y + iHeight ), FILE_VIEWER_WIDTH, FILE_GAP, FILES_TEXT_FONT, FILE_TEXT_COLOR, sString,0,FALSE,0);
|
|
|
|
// increment file record counter
|
|
iCounter++;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
|
|
// second format, one picture, all text below
|
|
|
|
// load graphic
|
|
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP( pFilesList->pPicFileNameList[ 0 ], VObjectDesc.ImageFile );
|
|
CHECKF(AddVideoObject( &VObjectDesc, &uiFirstTempPicture ) );
|
|
|
|
GetVideoObjectETRLESubregionProperties( uiFirstTempPicture, 0, &usFirstWidth, &usFirstHeight );
|
|
|
|
|
|
// get file background object
|
|
GetVideoObject(&hHandle, uiFirstTempPicture);
|
|
|
|
// blt background to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0, FILE_VIEWER_X + 4 + ( FILE_VIEWER_WIDTH - usFirstWidth ) / 2, FILE_VIEWER_Y + 10, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
iHeight = usFirstHeight + 20;
|
|
|
|
|
|
while(iLength > iCounter)
|
|
{
|
|
|
|
// read one record from file manager file
|
|
LoadEncryptedDataFromFile( "BINARYDATA\\Files.edt", sString, FILE_STRING_SIZE * ( iOffSet + iCounter ) * 2, FILE_STRING_SIZE * 2 );
|
|
|
|
// display string and get height
|
|
iHeight += IanDisplayWrappedString(FILE_VIEWER_X + 4, ( UINT16 )( FILE_VIEWER_Y + iHeight ), FILE_VIEWER_WIDTH, FILE_GAP, FILES_TEXT_FONT, FILE_TEXT_COLOR, sString,0,FALSE,0);
|
|
|
|
// increment file record counter
|
|
iCounter++;
|
|
}
|
|
|
|
// delete video object
|
|
DeleteVideoObjectFromIndex( uiFirstTempPicture );
|
|
|
|
break;
|
|
case 2:
|
|
|
|
// third format, two pictures, side by side with all text below
|
|
|
|
// load first graphic
|
|
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP( pFilesList->pPicFileNameList[ 0 ], VObjectDesc.ImageFile );
|
|
CHECKF(AddVideoObject( &VObjectDesc, &uiFirstTempPicture));
|
|
|
|
// load second graphic
|
|
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP( pFilesList->pPicFileNameList[ 1 ] , VObjectDesc.ImageFile );
|
|
CHECKF(AddVideoObject( &VObjectDesc, &uiSecondTempPicture ) );
|
|
|
|
GetVideoObjectETRLESubregionProperties( uiFirstTempPicture, 0, &usFirstWidth, &usFirstHeight );
|
|
GetVideoObjectETRLESubregionProperties( uiSecondTempPicture, 0, &usSecondWidth, &usSecondHeight );
|
|
|
|
// get free space;
|
|
usFreeSpace = FILE_VIEWER_WIDTH - usFirstWidth - usSecondWidth;
|
|
|
|
usFreeSpace /= 3;
|
|
// get file background object
|
|
GetVideoObject(&hHandle, uiFirstTempPicture);
|
|
|
|
|
|
// blt background to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0, FILE_VIEWER_X + usFreeSpace, FILE_VIEWER_Y + 10, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
// get file background object
|
|
GetVideoObject(&hHandle, uiSecondTempPicture);
|
|
|
|
// get position for second picture
|
|
usFreeSpace *= 2;
|
|
usFreeSpace += usFirstWidth;
|
|
|
|
// blt background to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0, FILE_VIEWER_X + usFreeSpace, FILE_VIEWER_Y + 10, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
|
|
|
|
// delete video object
|
|
DeleteVideoObjectFromIndex(uiFirstTempPicture);
|
|
DeleteVideoObjectFromIndex(uiSecondTempPicture);
|
|
|
|
// put in text
|
|
iHeight = usFirstHeight + 20;
|
|
|
|
|
|
while(iLength > iCounter)
|
|
{
|
|
|
|
// read one record from file manager file
|
|
LoadEncryptedDataFromFile( "BINARYDATA\\Files.edt", sString, FILE_STRING_SIZE * ( iOffSet + iCounter ) * 2, FILE_STRING_SIZE * 2 );
|
|
|
|
// display string and get height
|
|
iHeight += IanDisplayWrappedString(FILE_VIEWER_X + 4, ( UINT16 )( FILE_VIEWER_Y + iHeight ), FILE_VIEWER_WIDTH, FILE_GAP, FILES_TEXT_FONT, FILE_TEXT_COLOR, sString,0,FALSE,0);
|
|
|
|
// increment file record counter
|
|
iCounter++;
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
case 3:
|
|
// picture on the left, with text on right and below
|
|
// load first graphic
|
|
HandleSpecialTerroristFile( pFilesList->ubCode, pFilesList->pPicFileNameList[ 0 ] );
|
|
break;
|
|
default:
|
|
HandleSpecialFiles( pFilesList -> ubFormat );
|
|
break;
|
|
|
|
}
|
|
|
|
HandleFileViewerButtonStates( );
|
|
SetFontShadow(DEFAULT_SHADOW);
|
|
|
|
return ( TRUE );
|
|
}
|
|
|
|
|
|
BOOLEAN HandleSpecialFiles( UINT8 ubFormat )
|
|
{
|
|
INT32 iCounter = 0;
|
|
CHAR16 sString[2048];
|
|
FileStringPtr pTempString = NULL ;
|
|
FileStringPtr pLocatorString = NULL;
|
|
INT32 iTotalYPosition = 0;
|
|
INT32 iYPositionOnPage = 0;
|
|
INT32 iFileLineWidth = 0;
|
|
INT32 iFileStartX = 0;
|
|
UINT32 uiFlags = 0;
|
|
UINT32 uiFont = 0;
|
|
BOOLEAN fGoingOffCurrentPage = FALSE;
|
|
FileRecordWidthPtr WidthList = NULL;
|
|
|
|
|
|
UINT32 uiPicture;
|
|
HVOBJECT hHandle;
|
|
VOBJECT_DESC VObjectDesc;
|
|
|
|
|
|
ClearFileStringList( );
|
|
|
|
switch( ubFormat )
|
|
{
|
|
case( 255 ):
|
|
// load data
|
|
// read one record from file manager file
|
|
|
|
WidthList = CreateWidthRecordsForAruloIntelFile( );
|
|
while( iCounter < LENGTH_OF_ENRICO_FILE )
|
|
{
|
|
LoadEncryptedDataFromFile( "BINARYDATA\\RIS.EDT", sString, FILE_STRING_SIZE * ( iCounter ) * 2, FILE_STRING_SIZE * 2 );
|
|
AddStringToFilesList( sString );
|
|
iCounter++;
|
|
}
|
|
|
|
pTempString = pFileStringList;
|
|
|
|
|
|
iYPositionOnPage = 0;
|
|
iCounter = 0;
|
|
pLocatorString = pTempString;
|
|
|
|
pTempString = GetFirstStringOnThisPage( pFileStringList,FILES_TEXT_FONT, 350, FILE_GAP, giFilesPage, MAX_FILE_MESSAGE_PAGE_SIZE, WidthList);
|
|
|
|
// find out where this string is
|
|
while( pLocatorString != pTempString )
|
|
{
|
|
iCounter++;
|
|
pLocatorString = pLocatorString->Next;
|
|
}
|
|
|
|
|
|
// move through list and display
|
|
while( pTempString )
|
|
{
|
|
uiFlags = IAN_WRAP_NO_SHADOW;
|
|
// copy over string
|
|
wcscpy( sString, pTempString->pString );
|
|
|
|
if( sString[ 0 ] == 0 )
|
|
{
|
|
// on last page
|
|
fOnLastFilesPageFlag = TRUE;
|
|
}
|
|
|
|
|
|
// set up font
|
|
uiFont = FILES_TEXT_FONT;
|
|
if( giFilesPage == 0 )
|
|
{
|
|
switch( iCounter )
|
|
{
|
|
case( 0 ):
|
|
uiFont = FILES_TITLE_FONT;
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
// reset width
|
|
iFileLineWidth = 350;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 10 );
|
|
|
|
// based on the record we are at, selected X start position and the width to wrap the line, to fit around pictures
|
|
|
|
if( iCounter == 0 )
|
|
{
|
|
// title
|
|
iFileLineWidth = 350;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 10 );
|
|
|
|
}
|
|
else if( iCounter == 1 )
|
|
{
|
|
// opening on first page
|
|
iFileLineWidth = 350;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 10 );
|
|
|
|
}
|
|
else if( ( iCounter > 1) &&( iCounter < FILES_COUNTER_1_WIDTH ) )
|
|
{
|
|
iFileLineWidth = 350;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 10 );
|
|
|
|
}
|
|
else if( iCounter == FILES_COUNTER_1_WIDTH )
|
|
{
|
|
if( giFilesPage == 0 )
|
|
{
|
|
iYPositionOnPage += ( MAX_FILE_MESSAGE_PAGE_SIZE - iYPositionOnPage );
|
|
}
|
|
iFileLineWidth = 350;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 10 );
|
|
}
|
|
|
|
else if( iCounter == FILES_COUNTER_2_WIDTH )
|
|
{
|
|
iFileLineWidth = 200;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 150 );
|
|
}
|
|
else if( iCounter == FILES_COUNTER_3_WIDTH )
|
|
{
|
|
iFileLineWidth = 200;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 150 );
|
|
}
|
|
|
|
else
|
|
{
|
|
iFileLineWidth = 350;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 10 );
|
|
}
|
|
// not far enough, advance
|
|
|
|
if( ( iYPositionOnPage + IanWrappedStringHeight(0, 0, ( UINT16 )iFileLineWidth, FILE_GAP,
|
|
uiFont, 0, sString,
|
|
0, 0, 0 ) ) < MAX_FILE_MESSAGE_PAGE_SIZE )
|
|
{
|
|
// now print it
|
|
iYPositionOnPage += ( INT32 )IanDisplayWrappedString((UINT16) ( iFileStartX ), ( UINT16 )( FILE_VIEWER_Y + iYPositionOnPage), ( INT16 )iFileLineWidth, FILE_GAP, uiFont, FILE_TEXT_COLOR, sString,0,FALSE, uiFlags );
|
|
|
|
fGoingOffCurrentPage = FALSE;
|
|
}
|
|
else
|
|
{
|
|
// gonna get cut off...end now
|
|
fGoingOffCurrentPage = TRUE;
|
|
}
|
|
|
|
pTempString = pTempString ->Next;
|
|
|
|
if( pTempString == NULL )
|
|
{
|
|
// on last page
|
|
fOnLastFilesPageFlag = TRUE;
|
|
}
|
|
else
|
|
{
|
|
fOnLastFilesPageFlag = FALSE;
|
|
}
|
|
|
|
// going over the edge, stop now
|
|
if( fGoingOffCurrentPage == TRUE )
|
|
{
|
|
pTempString = NULL;
|
|
}
|
|
iCounter++;
|
|
}
|
|
ClearOutWidthRecordsList( WidthList );
|
|
ClearFileStringList( );
|
|
break;
|
|
}
|
|
|
|
// place pictures
|
|
// page 1 picture of country
|
|
if( giFilesPage == 0 )
|
|
{
|
|
// title bar
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\ArucoFilesMap.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &uiPicture));
|
|
|
|
// get title bar object
|
|
GetVideoObject(&hHandle, uiPicture);
|
|
|
|
// blt title bar to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0,iScreenWidthOffset + 300, iScreenHeightOffset + 270, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
DeleteVideoObjectFromIndex( uiPicture );
|
|
|
|
}
|
|
else if( giFilesPage == 4 )
|
|
{
|
|
// kid pic
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\Enrico_Y.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &uiPicture));
|
|
|
|
// get title bar object
|
|
GetVideoObject(&hHandle, uiPicture);
|
|
|
|
// blt title bar to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0,iScreenWidthOffset + 260, iScreenHeightOffset + 225, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
DeleteVideoObjectFromIndex( uiPicture );
|
|
|
|
}
|
|
else if( giFilesPage == 5 )
|
|
{
|
|
|
|
|
|
// wedding pic
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\Enrico_W.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &uiPicture));
|
|
|
|
// get title bar object
|
|
GetVideoObject(&hHandle, uiPicture);
|
|
|
|
// blt title bar to screen
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0,iScreenWidthOffset + 260, iScreenHeightOffset + 85, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
DeleteVideoObjectFromIndex( uiPicture );
|
|
}
|
|
|
|
return ( TRUE );
|
|
}
|
|
|
|
|
|
void AddStringToFilesList( STR16 pString )
|
|
{
|
|
|
|
FileStringPtr pFileString;
|
|
FileStringPtr pTempString = pFileStringList;
|
|
|
|
// create string structure
|
|
pFileString = (FileStringPtr) MemAlloc( sizeof( FileString ) );
|
|
|
|
|
|
// alloc string and copy
|
|
pFileString-> pString = (STR16) MemAlloc( ( wcslen( pString ) * sizeof(CHAR16) ) + 2 );
|
|
wcscpy( pFileString->pString, pString );
|
|
pFileString->pString[ wcslen( pString ) ] = 0;
|
|
|
|
// set Next to NULL
|
|
|
|
pFileString -> Next = NULL;
|
|
if( pFileStringList == NULL )
|
|
{
|
|
pFileStringList = pFileString;
|
|
}
|
|
else
|
|
{
|
|
while( pTempString -> Next )
|
|
{
|
|
pTempString = pTempString -> Next;
|
|
}
|
|
pTempString->Next = pFileString;
|
|
}
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
void ClearFileStringList( void )
|
|
{
|
|
FileStringPtr pFileString;
|
|
FileStringPtr pDeleteFileString;
|
|
|
|
pFileString = pFileStringList;
|
|
|
|
if( pFileString == NULL )
|
|
{
|
|
return;
|
|
}
|
|
while( pFileString -> Next)
|
|
{
|
|
pDeleteFileString = pFileString;
|
|
pFileString = pFileString -> Next;
|
|
MemFree( pDeleteFileString );
|
|
}
|
|
|
|
// last one
|
|
MemFree( pFileString );
|
|
|
|
pFileStringList = NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
void CreateButtonsForFilesPage( void )
|
|
{
|
|
// will create buttons for the files page
|
|
giFilesPageButtonsImage[0]= LoadButtonImage( "LAPTOP\\arrows.sti" ,-1,0,-1,1,-1 );
|
|
giFilesPageButtons[0] = QuickCreateButton( giFilesPageButtonsImage[0], PREVIOUS_FILE_PAGE_BUTTON_X, PREVIOUS_FILE_PAGE_BUTTON_Y,
|
|
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
|
|
(GUI_CALLBACK)BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnPreviousFilePageCallback );
|
|
|
|
giFilesPageButtonsImage[ 1 ]= LoadButtonImage( "LAPTOP\\arrows.sti" ,-1,6,-1,7,-1 );
|
|
giFilesPageButtons[ 1 ] = QuickCreateButton( giFilesPageButtonsImage[ 1 ], NEXT_FILE_PAGE_BUTTON_X, NEXT_FILE_PAGE_BUTTON_Y ,
|
|
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
|
|
(GUI_CALLBACK)BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnNextFilePageCallback );
|
|
|
|
SetButtonCursor(giFilesPageButtons[ 0 ], CURSOR_LAPTOP_SCREEN);
|
|
SetButtonCursor(giFilesPageButtons[ 1 ], CURSOR_LAPTOP_SCREEN);
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
void DeleteButtonsForFilesPage( void )
|
|
{
|
|
|
|
// destroy buttons for the files page
|
|
|
|
RemoveButton(giFilesPageButtons[ 0 ] );
|
|
UnloadButtonImage( giFilesPageButtonsImage[ 0 ] );
|
|
|
|
RemoveButton(giFilesPageButtons[ 1 ] );
|
|
UnloadButtonImage( giFilesPageButtonsImage[ 1 ] );
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
// callbacks
|
|
void BtnPreviousFilePageCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if (!(btn->uiFlags & BUTTON_ENABLED))
|
|
return;
|
|
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
|
|
if( fWaitAFrame == TRUE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!(btn->uiFlags & BUTTON_CLICKED_ON))
|
|
{
|
|
btn->uiFlags|=(BUTTON_CLICKED_ON);
|
|
}
|
|
|
|
}
|
|
else if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
|
|
if( fWaitAFrame == TRUE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if((btn->uiFlags & BUTTON_CLICKED_ON))
|
|
{
|
|
|
|
if( giFilesPage > 0 )
|
|
{
|
|
giFilesPage--;
|
|
fWaitAFrame = TRUE;
|
|
}
|
|
|
|
fReDrawScreenFlag = TRUE;
|
|
btn->uiFlags&=~(BUTTON_CLICKED_ON);
|
|
MarkButtonsDirty( );
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
void BtnNextFilePageCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if (!(btn->uiFlags & BUTTON_ENABLED))
|
|
return;
|
|
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
if( fWaitAFrame == TRUE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!(btn->uiFlags & BUTTON_CLICKED_ON))
|
|
{
|
|
btn->uiFlags|=(BUTTON_CLICKED_ON);
|
|
}
|
|
|
|
}
|
|
else if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
if( fWaitAFrame == TRUE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if((btn->uiFlags & BUTTON_CLICKED_ON))
|
|
{
|
|
|
|
if( ( fOnLastFilesPageFlag ) == FALSE )
|
|
{
|
|
fWaitAFrame = TRUE;
|
|
giFilesPage++;
|
|
}
|
|
|
|
fReDrawScreenFlag = TRUE;
|
|
btn->uiFlags&=~(BUTTON_CLICKED_ON);
|
|
MarkButtonsDirty( );
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
void HandleFileViewerButtonStates( void )
|
|
{
|
|
// handle state of email viewer buttons
|
|
|
|
if( iHighLightFileLine == -1 )
|
|
{
|
|
// not displaying message, leave
|
|
DisableButton( giFilesPageButtons[ 0 ] );
|
|
DisableButton( giFilesPageButtons[ 1 ] );
|
|
ButtonList[ giFilesPageButtons[ 0 ] ]->uiFlags &= ~( BUTTON_CLICKED_ON );
|
|
ButtonList[ giFilesPageButtons[ 1 ] ]->uiFlags &= ~( BUTTON_CLICKED_ON );
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
// turn off previous page button
|
|
if( giFilesPage == 0 )
|
|
{
|
|
DisableButton( giFilesPageButtons[ 0 ] );
|
|
ButtonList[ giFilesPageButtons[ 0 ] ]->uiFlags &= ~( BUTTON_CLICKED_ON );
|
|
|
|
}
|
|
else
|
|
{
|
|
EnableButton( giFilesPageButtons[ 0 ] );
|
|
}
|
|
|
|
|
|
// turn off next page button
|
|
if( fOnLastFilesPageFlag == TRUE )
|
|
{
|
|
DisableButton( giFilesPageButtons[ 1 ] );
|
|
ButtonList[ giFilesPageButtons[ 1 ] ]->uiFlags &= ~( BUTTON_CLICKED_ON );
|
|
}
|
|
else
|
|
{
|
|
EnableButton( giFilesPageButtons[ 1 ] );
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
FileRecordWidthPtr CreateRecordWidth( INT32 iRecordNumber, INT32 iRecordWidth, INT32 iRecordHeightAdjustment, UINT8 ubFlags)
|
|
{
|
|
FileRecordWidthPtr pTempRecord = NULL;
|
|
|
|
// allocs and inits a width info record for the multipage file viewer...this will tell the procedure that does inital computation on which record is the start of the current page
|
|
// how wide special records are ( ones that share space with pictures )
|
|
pTempRecord = (FileRecordWidthPtr) MemAlloc( sizeof( FileRecordWidth ) );
|
|
|
|
pTempRecord -> Next = NULL;
|
|
pTempRecord -> iRecordNumber = iRecordNumber;
|
|
pTempRecord -> iRecordWidth = iRecordWidth;
|
|
pTempRecord -> iRecordHeightAdjustment = iRecordHeightAdjustment;
|
|
pTempRecord -> ubFlags = ubFlags;
|
|
|
|
return ( pTempRecord );
|
|
}
|
|
|
|
FileRecordWidthPtr CreateWidthRecordsForAruloIntelFile( void )
|
|
{
|
|
// this fucntion will create the width list for the Arulco intelligence file
|
|
FileRecordWidthPtr pTempRecord = NULL;
|
|
FileRecordWidthPtr pRecordListHead = NULL;
|
|
|
|
|
|
// first record width
|
|
// pTempRecord = CreateRecordWidth( 7, 350, 200,0 );
|
|
pTempRecord = CreateRecordWidth( FILES_COUNTER_1_WIDTH, 350, MAX_FILE_MESSAGE_PAGE_SIZE,0 );
|
|
|
|
// set up head of list now
|
|
pRecordListHead = pTempRecord;
|
|
|
|
// next record
|
|
// pTempRecord -> Next = CreateRecordWidth( 43, 200,0, 0 );
|
|
pTempRecord -> Next = CreateRecordWidth( FILES_COUNTER_2_WIDTH, 200,0, 0 );
|
|
pTempRecord = pTempRecord->Next;
|
|
|
|
// and the next..
|
|
// pTempRecord -> Next = CreateRecordWidth( 45, 200,0, 0 );
|
|
pTempRecord -> Next = CreateRecordWidth( FILES_COUNTER_3_WIDTH, 200,0, 0 );
|
|
pTempRecord = pTempRecord->Next;
|
|
|
|
return( pRecordListHead );
|
|
|
|
}
|
|
|
|
FileRecordWidthPtr CreateWidthRecordsForTerroristFile( void )
|
|
{
|
|
// this fucntion will create the width list for the Arulco intelligence file
|
|
FileRecordWidthPtr pTempRecord = NULL;
|
|
FileRecordWidthPtr pRecordListHead = NULL;
|
|
|
|
|
|
// first record width
|
|
pTempRecord = CreateRecordWidth( 4, 170, 0,0 );
|
|
|
|
// set up head of list now
|
|
pRecordListHead = pTempRecord;
|
|
|
|
// next record
|
|
pTempRecord -> Next = CreateRecordWidth( 5, 170,0, 0 );
|
|
pTempRecord = pTempRecord->Next;
|
|
|
|
pTempRecord -> Next = CreateRecordWidth( 6, 170,0, 0 );
|
|
pTempRecord = pTempRecord->Next;
|
|
|
|
|
|
return( pRecordListHead );
|
|
|
|
}
|
|
|
|
|
|
void ClearOutWidthRecordsList( FileRecordWidthPtr pFileRecordWidthList )
|
|
{
|
|
FileRecordWidthPtr pTempRecord = NULL;
|
|
FileRecordWidthPtr pDeleteRecord = NULL;
|
|
|
|
// set up to head of the list
|
|
pTempRecord = pDeleteRecord = pFileRecordWidthList;
|
|
|
|
// error check
|
|
if( pFileRecordWidthList == NULL )
|
|
{
|
|
return;
|
|
}
|
|
|
|
while( pTempRecord -> Next )
|
|
{
|
|
// set up delete record
|
|
pDeleteRecord = pTempRecord;
|
|
|
|
// move to next record
|
|
pTempRecord = pTempRecord -> Next;
|
|
|
|
MemFree( pDeleteRecord );
|
|
}
|
|
|
|
// now get the last element
|
|
MemFree( pTempRecord );
|
|
|
|
// null out passed ptr
|
|
pFileRecordWidthList = NULL;
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
void OpenFirstUnreadFile( void )
|
|
{
|
|
// open the first unread file in the list
|
|
INT32 iCounter = 0;
|
|
FilesUnitPtr pFilesList=pFilesListHead;
|
|
|
|
// make sure is a valid
|
|
while( pFilesList )
|
|
{
|
|
|
|
// if iCounter = iFileId, is a valid file
|
|
if( pFilesList -> fRead == FALSE )
|
|
{
|
|
iHighLightFileLine = iCounter;
|
|
}
|
|
|
|
// next element in list
|
|
pFilesList = pFilesList->Next;
|
|
|
|
// increment counter
|
|
iCounter++;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
void CheckForUnreadFiles( void )
|
|
{
|
|
BOOLEAN fStatusOfNewFileFlag = fNewFilesInFileViewer;
|
|
|
|
// willc heck for any unread files and set flag if any
|
|
FilesUnitPtr pFilesList=pFilesListHead;
|
|
|
|
fNewFilesInFileViewer = FALSE;
|
|
|
|
|
|
while( pFilesList )
|
|
{
|
|
// unread?...if so, set flag
|
|
if( pFilesList -> fRead == FALSE )
|
|
{
|
|
fNewFilesInFileViewer = TRUE;
|
|
}
|
|
// next element in list
|
|
pFilesList = pFilesList->Next;
|
|
}
|
|
|
|
//if the old flag and the new flag arent the same, either create or destory the fast help region
|
|
if( fNewFilesInFileViewer != fStatusOfNewFileFlag )
|
|
{
|
|
CreateFileAndNewEmailIconFastHelpText( LAPTOP_BN_HLP_TXT_YOU_HAVE_NEW_FILE, (BOOLEAN)!fNewFilesInFileViewer );
|
|
}
|
|
}
|
|
|
|
BOOLEAN HandleSpecialTerroristFile( INT32 iFileNumber, STR sPictureName )
|
|
{
|
|
|
|
INT32 iCounter = 0;
|
|
CHAR16 sString[2048];
|
|
FileStringPtr pTempString = NULL ;
|
|
FileStringPtr pLocatorString = NULL;
|
|
INT32 iTotalYPosition = 0;
|
|
INT32 iYPositionOnPage = 0;
|
|
INT32 iFileLineWidth = 0;
|
|
INT32 iFileStartX = 0;
|
|
UINT32 uiFlags = 0;
|
|
UINT32 uiFont = 0;
|
|
BOOLEAN fGoingOffCurrentPage = FALSE;
|
|
FileRecordWidthPtr WidthList = NULL;
|
|
INT32 iOffset = 0;
|
|
UINT32 uiPicture;
|
|
HVOBJECT hHandle;
|
|
VOBJECT_DESC VObjectDesc;
|
|
CHAR sTemp[ 128 ];
|
|
|
|
iOffset = ubFileOffsets[ iFileNumber ] ;
|
|
|
|
// grab width list
|
|
WidthList = CreateWidthRecordsForTerroristFile( );
|
|
|
|
|
|
while( iCounter < ubFileRecordsLength[ iFileNumber ] )
|
|
{
|
|
LoadEncryptedDataFromFile( "BINARYDATA\\files.EDT", sString, FILE_STRING_SIZE * ( iOffset + iCounter ) * 2, FILE_STRING_SIZE * 2 );
|
|
AddStringToFilesList( sString );
|
|
iCounter++;
|
|
}
|
|
|
|
pTempString = pFileStringList;
|
|
|
|
|
|
iYPositionOnPage = 0;
|
|
iCounter = 0;
|
|
pLocatorString = pTempString;
|
|
|
|
pTempString = GetFirstStringOnThisPage( pFileStringList,FILES_TEXT_FONT, 350, FILE_GAP, giFilesPage, MAX_FILE_MESSAGE_PAGE_SIZE, WidthList);
|
|
|
|
// find out where this string is
|
|
while( pLocatorString != pTempString )
|
|
{
|
|
iCounter++;
|
|
pLocatorString = pLocatorString -> Next;
|
|
}
|
|
|
|
|
|
// move through list and display
|
|
while( pTempString )
|
|
{
|
|
uiFlags = IAN_WRAP_NO_SHADOW;
|
|
// copy over string
|
|
wcscpy( sString, pTempString -> pString );
|
|
|
|
if( sString[ 0 ] == 0 )
|
|
{
|
|
// on last page
|
|
fOnLastFilesPageFlag = TRUE;
|
|
}
|
|
|
|
|
|
// set up font
|
|
uiFont = FILES_TEXT_FONT;
|
|
if( giFilesPage == 0 )
|
|
{
|
|
switch( iCounter )
|
|
{
|
|
case( 0 ):
|
|
uiFont = FILES_TITLE_FONT;
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
if( ( iCounter > 3 ) && ( iCounter < 7 ) )
|
|
{
|
|
iFileLineWidth = 170;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 180 );
|
|
}
|
|
else
|
|
{
|
|
// reset width
|
|
iFileLineWidth = 350;
|
|
iFileStartX = (UINT16) ( FILE_VIEWER_X + 10 );
|
|
}
|
|
|
|
// based on the record we are at, selected X start position and the width to wrap the line, to fit around pictures
|
|
if( ( iYPositionOnPage + IanWrappedStringHeight(0, 0, ( UINT16 )iFileLineWidth, FILE_GAP,
|
|
uiFont, 0, sString,
|
|
0, 0, 0 ) ) < MAX_FILE_MESSAGE_PAGE_SIZE )
|
|
{
|
|
// now print it
|
|
iYPositionOnPage += ( INT32 )IanDisplayWrappedString((UINT16) ( iFileStartX ), ( UINT16 )( FILE_VIEWER_Y + iYPositionOnPage), ( INT16 )iFileLineWidth, FILE_GAP, uiFont, FILE_TEXT_COLOR, sString,0,FALSE, uiFlags );
|
|
|
|
fGoingOffCurrentPage = FALSE;
|
|
}
|
|
else
|
|
{
|
|
// gonna get cut off...end now
|
|
fGoingOffCurrentPage = TRUE;
|
|
}
|
|
|
|
pTempString = pTempString ->Next;
|
|
|
|
if( ( pTempString == NULL ) && ( fGoingOffCurrentPage == FALSE ) )
|
|
{
|
|
// on last page
|
|
fOnLastFilesPageFlag = TRUE;
|
|
}
|
|
else
|
|
{
|
|
fOnLastFilesPageFlag = FALSE;
|
|
}
|
|
|
|
// going over the edge, stop now
|
|
if( fGoingOffCurrentPage == TRUE )
|
|
{
|
|
pTempString = NULL;
|
|
}
|
|
|
|
// show picture
|
|
if( ( giFilesPage == 0 ) && ( iCounter == 5 ) )
|
|
{
|
|
if( usProfileIdsForTerroristFiles[ iFileNumber + 1 ] < 100 )
|
|
{
|
|
sprintf(sTemp, "%s%02d.sti", "FACES\\BIGFACES\\", usProfileIdsForTerroristFiles[ iFileNumber + 1 ]);
|
|
}
|
|
else
|
|
{
|
|
sprintf(sTemp, "%s%03d.sti", "FACES\\BIGFACES\\", usProfileIdsForTerroristFiles[ iFileNumber + 1 ]);
|
|
}
|
|
|
|
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP(sTemp, VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &uiPicture));
|
|
|
|
//Blt face to screen to
|
|
GetVideoObject(&hHandle, uiPicture);
|
|
|
|
//def: 3/24/99
|
|
// BltVideoObject(FRAME_BUFFER, hHandle, 0,( INT16 ) ( FILE_VIEWER_X + 30 ), ( INT16 ) ( iYPositionOnPage + 5), VO_BLT_SRCTRANSPARENCY,NULL);
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0,( INT16 ) ( FILE_VIEWER_X + 30 ), ( INT16 ) ( iScreenHeightOffset + iYPositionOnPage + 21), VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
DeleteVideoObjectFromIndex( uiPicture );
|
|
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\InterceptBorder.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &uiPicture));
|
|
|
|
//Blt face to screen to
|
|
GetVideoObject(&hHandle, uiPicture);
|
|
|
|
BltVideoObject(FRAME_BUFFER, hHandle, 0,( INT16 ) ( FILE_VIEWER_X + 25 ), ( INT16 ) ( iScreenHeightOffset + iYPositionOnPage + 16 ), VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
DeleteVideoObjectFromIndex( uiPicture );
|
|
}
|
|
|
|
iCounter++;
|
|
}
|
|
|
|
|
|
|
|
ClearOutWidthRecordsList( WidthList );
|
|
ClearFileStringList( );
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
// add a file about this terrorist
|
|
BOOLEAN AddFileAboutTerrorist( INT32 iProfileId )
|
|
{
|
|
INT32 iCounter = 0;
|
|
|
|
for( iCounter = 1; iCounter < 7; iCounter++ )
|
|
{
|
|
if( usProfileIdsForTerroristFiles[ iCounter ] == iProfileId )
|
|
{
|
|
// checked, and this file is there
|
|
AddFilesToPlayersLog( ( UINT8 )iCounter, 0, 3, NULL, NULL );
|
|
return( TRUE );
|
|
}
|
|
}
|
|
|
|
return( FALSE );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|