/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: main.h,v $ * $Revision: 1.11 $ * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org 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 Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef _SAL_MAIN_H_ #define _SAL_MAIN_H_ #include #ifdef __cplusplus extern "C" { #endif void SAL_CALL sal_detail_initialize(int argc, char ** argv); void SAL_CALL sal_detail_deinitialize(); #define SAL_MAIN_WITH_ARGS_IMPL \ int SAL_CALL main(int argc, char ** argv) \ { \ int ret; \ sal_detail_initialize(argc, argv); \ ret = sal_main_with_args(argc, argv); \ sal_detail_deinitialize(); \ return ret; \ } #define SAL_MAIN_IMPL \ int SAL_CALL main(int argc, char ** argv) \ { \ int ret; \ sal_detail_initialize(argc, argv); \ ret = sal_main(); \ sal_detail_deinitialize(); \ return ret; \ } /* Definition macros for CRT entries */ #ifdef SAL_W32 #ifndef INCLUDED_STDLIB_H #include #define INCLUDED_STDLIB_H #endif /* Sorry but this is neccessary cause HINSTANCE is a typedef that differs (C++ causes an error) */ #if 0 #ifndef _WINDOWS_ #include #endif #else /* Simulated what windows.h does */ #ifndef WINAPI # define WINAPI __stdcall #endif #if !defined(DECLARE_HANDLE) # ifdef STRICT typedef void *HANDLE; # define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name # else typedef void *PVOID; typedef PVOID HANDLE; # define DECLARE_HANDLE(name) typedef HANDLE name # endif DECLARE_HANDLE(HINSTANCE); #endif #endif #define SAL_WIN_WinMain \ int WINAPI WinMain( HINSTANCE _hinst, HINSTANCE _dummy, char* _cmdline, int _nshow ) \ { \ int argc = __argc; char ** argv = __argv; \ (void) _hinst; (void) _dummy; (void) _cmdline; (void) _nshow; /* unused */ \ return main(argc, argv); \ } #else /* ! SAL_W32 */ # define SAL_WIN_WinMain #endif /* ! SAL_W32 */ /* Implementation macro */ #define SAL_IMPLEMENT_MAIN_WITH_ARGS(_argc_, _argv_) \ static int SAL_CALL sal_main_with_args (int _argc_, char ** _argv_); \ SAL_MAIN_WITH_ARGS_IMPL \ SAL_WIN_WinMain \ static int SAL_CALL sal_main_with_args(int _argc_, char ** _argv_) #define SAL_IMPLEMENT_MAIN() \ static int SAL_CALL sal_main(void); \ SAL_MAIN_IMPL \ SAL_WIN_WinMain \ static int SAL_CALL sal_main(void) /* "How to use" Examples: #include SAL_IMPLEMENT_MAIN() { DoSomething(); return 0; } SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) { DoSomethingWithArgs(argc, argv); return 0; } */ #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _SAL_MAIN_H_ */