XercesSampleStartupFragment.c
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:5k
源码类别:

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Id: XercesSampleStartupFragment.c,v 1.3 2002/06/24 20:48:09 jberry Exp $
  58.  */
  59. /*
  60. The code in this file should be compiled into your Metrowerks Runtime PPC code.
  61. The net result will be that you can build generic unix-style C code without
  62. Macintosh modifications to setup argc/argv. The Xerces sample projects expect
  63. this modification.
  64. To use:
  65. - Add the code below to your Metrowerks Startup.c file (in runtime libraries)
  66. - Rebuild the various targets of project MSL All.mcp.
  67. - In the PPC Linker section of your project, set the start code to be
  68.   __start_ccommand instead of the typical __start. This will cause ccommand
  69.   to be invoked before main() is started.
  70.   
  71. This code has been submitted as a suggestion to Metrowerks: hopefully they'll
  72. add it to the startup code so this modification won't always be necessary.
  73. !!!NOTE!!!
  74. If the above seems too odious for your needs, you may also modify the "main" file
  75. of each sample by adding a line such as the following near the start of the main()
  76. function:
  77. argc = ccommand(&argv);
  78. This will invoke the command line dialog manually.
  79. - 8/3/00 James Berry <jberry@criticalpath.com>
  80. */
  81. // External declaration
  82. int ccommand(char ***arg);
  83. // Forward declaration
  84. pascal void __start_ccommand(void);
  85. /*
  86.  * __start_ccommand - Optional special startup routine for Metrowerks C++ (PowerPC)
  87.  *
  88.  * This routine should be specified as the PEF main routine in the container
  89.  * for any monolithic application that requires arguments via argc/argv.
  90.  *  The program startup/termination sequence is:
  91.  *
  92.  * 1. Register the exception-handling info for the application
  93.  * 2. Call all static initializers
  94.  * 3. Call ccommand to set up default values for 'argc' and 'argv' and call main()
  95.  * 4. Call exit() to perform required cleanup and termination, including
  96.  * destroying all static objects, closing open files, closing console window, etc.
  97.  *
  98.  * We defer all details of proper program termination to the ANSI exit() routine.
  99.  *
  100.  */
  101. pascal void __start_ccommand(void)
  102. {
  103. int argc;
  104. char **argv;
  105. // set the stack frame back-link to 0 to improve debugger stack display
  106. clear_stackframe_backlink();
  107. // register this code fragment with the Exception Handling mechanism
  108. fragmentID = __register_fragment(__code_start__, __code_end__,
  109. __data_start__, __data_end__,
  110. __exception_table_start__, __exception_table_end__,
  111. __RTOC());
  112. __init_critical_regions();
  113. // call all static initializers
  114. __sinit();
  115. argc = ccommand(&argv);
  116. // call main(argc, argv)
  117. main(argc, argv);
  118. // call exit() to terminate the program properly--will not return
  119. exit(0);
  120. // unregister this code fragment with the Exception Handling mechanism
  121. // __unregister_fragment(fragmentID);
  122. }