195 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			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();
 | |
| }
 | 
