CnC_Red_Alert/WWFLAT32/EXAMPLE/STARTUP.CPP

195 lines
8.2 KiB
C++

/*
** Command & Conquer Red Alert(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/***************************************************************************
** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
***************************************************************************
* *
* Project Name : Library startup routine. *
* *
* File Name : STARTUP.CPP *
* *
* Programmer : Scott K. Bowen *
* *
* Start Date : July 14, 1994 *
* *
* Last Update : August 1, 1994 [SKB] *
* *
*-------------------------------------------------------------------------*
* Functions: *
* Prog_End -- Called to shutdown Westood's library. *
* main -- Programs main entry point. *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#include "function.h"
#include <stdio.h>
#include <stdlib.h>
#define GRAPHICS TRUE
void *ShapeBuffer = NULL;
/***************************************************************************
* MAIN -- Programs main entry point. *
* *
* *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 08/01/1994 SKB : Created. *
*=========================================================================*/
#pragma argsused
WORD main(WORD argc, BYTE *argv[])
{
void *fontptr;
/*======================================================================*/
/* Install page fault handle in case of fatal crash. */
/*======================================================================*/
Install_Page_Fault_Handle ();
/*======================================================================*/
/* Setup the monochrome monitor for testing. */
/*======================================================================*/
MonoEnabled = (Find_Argv("-MONO") ? TRUE : FALSE);
Mono_Clear_Screen();
/*======================================================================*/
/* Initialize the file data table. */
/*======================================================================*/
WWDOS_Init(200, NULL, NULL);
/*======================================================================*/
/* Initialize the system font. */
/*======================================================================*/
#if GRAPHICS
fontptr = Load_Font("STD6P.FNT");
if (!fontptr) {
printf("Unable to load font.");
exit(1);
}
Set_Font(fontptr);
#endif
/*======================================================================*/
/* Setup the timer system. */
/*======================================================================*/
if (Find_Argv("-NOTIME")) {
NoTimer = TRUE;
} else {
Init_Timer_System(USER_TIMER_FREQ);
NoTimer = FALSE;
}
/*======================================================================*/
/* Get the initial graphic mode. */
/*======================================================================*/
#if GRAPHICS
if ( Set_Video_Mode(MCGA_MODE) == FALSE )
{
printf("Unable to Set Graphic Mode\n");
exit ( 0 ) ;
}
#endif
/*======================================================================*/
/* Now we get a keyboard handler. */
/*======================================================================*/
if (Find_Argv("-NOKEY")) {
NoKeyBoard = TRUE;
} else {
NoKeyBoard = FALSE;
Install_Keyboard_Interrupt( Get_RM_Keyboard_Address(), Get_RM_Keyboard_Size());
ShapeBuffer = Alloc(5000, MEM_NORMAL);
Set_Shape_Buffer(ShapeBuffer, 5000);
Install_Mouse(20, 20, 320, 200);
}
/*======================================================================*/
/* Give the game some variance. */
/*======================================================================*/
randomize();
/*======================================================================*/
/* Call the user main program. */
/*======================================================================*/
Main_Program(argc, argv);
/*======================================================================*/
/* Exit gracefully. */
/*======================================================================*/
Prog_End();
return(0);
}
/***************************************************************************
* PROG_END -- Called to shutdown Westood's library. *
* *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: exit() should not be called until this has been called *
* *
* HISTORY: *
* 08/01/1994 SKB : Created. *
*=========================================================================*/
VOID Prog_End(VOID)
{
/*======================================================================*/
/* Get rid of the keyboard handler. */
/*======================================================================*/
if (!NoKeyBoard) {
Remove_Mouse();
Free(ShapeBuffer);
Remove_Keyboard_Interrupt();
}
/*======================================================================*/
/* Get rid of the timer system. */
/*======================================================================*/
if (!NoTimer) {
Remove_Timer_System();
}
/*======================================================================*/
/* Restore the Video mode. */
/*======================================================================*/
#if GRAPHICS
Set_Video_Mode(RESET_MODE);
#endif
/*======================================================================*/
/* Close down the file system. */
/*======================================================================*/
WWDOS_Shutdown();
}