17dc86dfdSMatthias Ringwald /********************************************************************* 2*779af47bSMatthias Ringwald * SEGGER Microcontroller GmbH * 37dc86dfdSMatthias Ringwald * Solutions for real time microcontroller applications * 47dc86dfdSMatthias Ringwald ********************************************************************** 57dc86dfdSMatthias Ringwald * * 6*779af47bSMatthias Ringwald * (c) 1995 - 2018 SEGGER Microcontroller GmbH * 77dc86dfdSMatthias Ringwald * * 87dc86dfdSMatthias Ringwald * www.segger.com Support: [email protected] * 97dc86dfdSMatthias Ringwald * * 107dc86dfdSMatthias Ringwald ********************************************************************** 117dc86dfdSMatthias Ringwald * * 127dc86dfdSMatthias Ringwald * SEGGER RTT * Real Time Transfer for embedded targets * 137dc86dfdSMatthias Ringwald * * 147dc86dfdSMatthias Ringwald ********************************************************************** 157dc86dfdSMatthias Ringwald * * 167dc86dfdSMatthias Ringwald * All rights reserved. * 177dc86dfdSMatthias Ringwald * * 187dc86dfdSMatthias Ringwald * SEGGER strongly recommends to not make any changes * 197dc86dfdSMatthias Ringwald * to or modify the source code of this software in order to stay * 207dc86dfdSMatthias Ringwald * compatible with the RTT protocol and J-Link. * 217dc86dfdSMatthias Ringwald * * 227dc86dfdSMatthias Ringwald * Redistribution and use in source and binary forms, with or * 237dc86dfdSMatthias Ringwald * without modification, are permitted provided that the following * 247dc86dfdSMatthias Ringwald * conditions are met: * 257dc86dfdSMatthias Ringwald * * 267dc86dfdSMatthias Ringwald * o Redistributions of source code must retain the above copyright * 277dc86dfdSMatthias Ringwald * notice, this list of conditions and the following disclaimer. * 287dc86dfdSMatthias Ringwald * * 297dc86dfdSMatthias Ringwald * o Redistributions in binary form must reproduce the above * 307dc86dfdSMatthias Ringwald * copyright notice, this list of conditions and the following * 317dc86dfdSMatthias Ringwald * disclaimer in the documentation and/or other materials provided * 327dc86dfdSMatthias Ringwald * with the distribution. * 337dc86dfdSMatthias Ringwald * * 34*779af47bSMatthias Ringwald * o Neither the name of SEGGER Microcontroller GmbH * 357dc86dfdSMatthias Ringwald * nor the names of its contributors may be used to endorse or * 367dc86dfdSMatthias Ringwald * promote products derived from this software without specific * 377dc86dfdSMatthias Ringwald * prior written permission. * 387dc86dfdSMatthias Ringwald * * 397dc86dfdSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * 407dc86dfdSMatthias Ringwald * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * 417dc86dfdSMatthias Ringwald * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * 427dc86dfdSMatthias Ringwald * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * 437dc86dfdSMatthias Ringwald * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * 447dc86dfdSMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * 457dc86dfdSMatthias Ringwald * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * 467dc86dfdSMatthias Ringwald * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * 477dc86dfdSMatthias Ringwald * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * 487dc86dfdSMatthias Ringwald * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 497dc86dfdSMatthias Ringwald * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * 507dc86dfdSMatthias Ringwald * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * 517dc86dfdSMatthias Ringwald * DAMAGE. * 527dc86dfdSMatthias Ringwald * * 537dc86dfdSMatthias Ringwald ********************************************************************** 547dc86dfdSMatthias Ringwald ---------------------------END-OF-HEADER------------------------------ 557dc86dfdSMatthias Ringwald File : RTT_Syscalls_KEIL.c 567dc86dfdSMatthias Ringwald Purpose : Retargeting module for KEIL MDK-CM3. 577dc86dfdSMatthias Ringwald Low-level functions for using printf() via RTT 58*779af47bSMatthias Ringwald Revision: $Rev: 16265 $ 597dc86dfdSMatthias Ringwald ---------------------------------------------------------------------- 607dc86dfdSMatthias Ringwald */ 617dc86dfdSMatthias Ringwald #ifdef __CC_ARM 627dc86dfdSMatthias Ringwald 637dc86dfdSMatthias Ringwald #include <stdio.h> 647dc86dfdSMatthias Ringwald #include <stdlib.h> 657dc86dfdSMatthias Ringwald #include <string.h> 667dc86dfdSMatthias Ringwald #include <rt_sys.h> 677dc86dfdSMatthias Ringwald #include <rt_misc.h> 687dc86dfdSMatthias Ringwald 697dc86dfdSMatthias Ringwald #include "SEGGER_RTT.h" 707dc86dfdSMatthias Ringwald /********************************************************************* 717dc86dfdSMatthias Ringwald * 727dc86dfdSMatthias Ringwald * #pragmas 737dc86dfdSMatthias Ringwald * 747dc86dfdSMatthias Ringwald ********************************************************************** 757dc86dfdSMatthias Ringwald */ 767dc86dfdSMatthias Ringwald #pragma import(__use_no_semihosting) 777dc86dfdSMatthias Ringwald 787dc86dfdSMatthias Ringwald #ifdef _MICROLIB 797dc86dfdSMatthias Ringwald #pragma import(__use_full_stdio) 807dc86dfdSMatthias Ringwald #endif 817dc86dfdSMatthias Ringwald 827dc86dfdSMatthias Ringwald /********************************************************************* 837dc86dfdSMatthias Ringwald * 847dc86dfdSMatthias Ringwald * Defines non-configurable 857dc86dfdSMatthias Ringwald * 867dc86dfdSMatthias Ringwald ********************************************************************** 877dc86dfdSMatthias Ringwald */ 887dc86dfdSMatthias Ringwald 897dc86dfdSMatthias Ringwald /* Standard IO device handles - arbitrary, but any real file system handles must be 907dc86dfdSMatthias Ringwald less than 0x8000. */ 917dc86dfdSMatthias Ringwald #define STDIN 0x8001 // Standard Input Stream 927dc86dfdSMatthias Ringwald #define STDOUT 0x8002 // Standard Output Stream 937dc86dfdSMatthias Ringwald #define STDERR 0x8003 // Standard Error Stream 947dc86dfdSMatthias Ringwald 957dc86dfdSMatthias Ringwald /********************************************************************* 967dc86dfdSMatthias Ringwald * 977dc86dfdSMatthias Ringwald * Public const 987dc86dfdSMatthias Ringwald * 997dc86dfdSMatthias Ringwald ********************************************************************** 1007dc86dfdSMatthias Ringwald */ 1017dc86dfdSMatthias Ringwald //const char __stdin_name[] = "STDIN"; 1027dc86dfdSMatthias Ringwald const char __stdout_name[] = "STDOUT"; 1037dc86dfdSMatthias Ringwald const char __stderr_name[] = "STDERR"; 1047dc86dfdSMatthias Ringwald 1057dc86dfdSMatthias Ringwald /********************************************************************* 1067dc86dfdSMatthias Ringwald * 1077dc86dfdSMatthias Ringwald * Public code 1087dc86dfdSMatthias Ringwald * 1097dc86dfdSMatthias Ringwald ********************************************************************** 1107dc86dfdSMatthias Ringwald */ 1117dc86dfdSMatthias Ringwald 1127dc86dfdSMatthias Ringwald /********************************************************************* 1137dc86dfdSMatthias Ringwald * 1147dc86dfdSMatthias Ringwald * _ttywrch 1157dc86dfdSMatthias Ringwald * 1167dc86dfdSMatthias Ringwald * Function description: 1177dc86dfdSMatthias Ringwald * Outputs a character to the console 1187dc86dfdSMatthias Ringwald * 1197dc86dfdSMatthias Ringwald * Parameters: 1207dc86dfdSMatthias Ringwald * c - character to output 1217dc86dfdSMatthias Ringwald * 1227dc86dfdSMatthias Ringwald */ 1237dc86dfdSMatthias Ringwald void _ttywrch(int c) { 1247dc86dfdSMatthias Ringwald fputc(c, stdout); // stdout 1257dc86dfdSMatthias Ringwald fflush(stdout); 1267dc86dfdSMatthias Ringwald } 1277dc86dfdSMatthias Ringwald 1287dc86dfdSMatthias Ringwald /********************************************************************* 1297dc86dfdSMatthias Ringwald * 1307dc86dfdSMatthias Ringwald * _sys_open 1317dc86dfdSMatthias Ringwald * 1327dc86dfdSMatthias Ringwald * Function description: 1337dc86dfdSMatthias Ringwald * Opens the device/file in order to do read/write operations 1347dc86dfdSMatthias Ringwald * 1357dc86dfdSMatthias Ringwald * Parameters: 1367dc86dfdSMatthias Ringwald * sName - sName of the device/file to open 1377dc86dfdSMatthias Ringwald * OpenMode - This parameter is currently ignored 1387dc86dfdSMatthias Ringwald * 1397dc86dfdSMatthias Ringwald * Return value: 1407dc86dfdSMatthias Ringwald * != 0 - Handle to the object to open, otherwise 1417dc86dfdSMatthias Ringwald * == 0 -"device" is not handled by this module 1427dc86dfdSMatthias Ringwald * 1437dc86dfdSMatthias Ringwald */ 1447dc86dfdSMatthias Ringwald FILEHANDLE _sys_open(const char * sName, int OpenMode) { 1457dc86dfdSMatthias Ringwald (void)OpenMode; 1467dc86dfdSMatthias Ringwald // Register standard Input Output devices. 1477dc86dfdSMatthias Ringwald if (strcmp(sName, __stdout_name) == 0) { 1487dc86dfdSMatthias Ringwald return (STDOUT); 1497dc86dfdSMatthias Ringwald } else if (strcmp(sName, __stderr_name) == 0) { 1507dc86dfdSMatthias Ringwald return (STDERR); 1517dc86dfdSMatthias Ringwald } else 1527dc86dfdSMatthias Ringwald return (0); // Not implemented 1537dc86dfdSMatthias Ringwald } 1547dc86dfdSMatthias Ringwald 1557dc86dfdSMatthias Ringwald /********************************************************************* 1567dc86dfdSMatthias Ringwald * 1577dc86dfdSMatthias Ringwald * _sys_close 1587dc86dfdSMatthias Ringwald * 1597dc86dfdSMatthias Ringwald * Function description: 1607dc86dfdSMatthias Ringwald * Closes the handle to the open device/file 1617dc86dfdSMatthias Ringwald * 1627dc86dfdSMatthias Ringwald * Parameters: 1637dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open 1647dc86dfdSMatthias Ringwald * 1657dc86dfdSMatthias Ringwald * Return value: 1667dc86dfdSMatthias Ringwald * 0 - device/file closed 1677dc86dfdSMatthias Ringwald * 1687dc86dfdSMatthias Ringwald */ 1697dc86dfdSMatthias Ringwald int _sys_close(FILEHANDLE hFile) { 1707dc86dfdSMatthias Ringwald (void)hFile; 1717dc86dfdSMatthias Ringwald return 0; // Not implemented 1727dc86dfdSMatthias Ringwald } 1737dc86dfdSMatthias Ringwald 1747dc86dfdSMatthias Ringwald /********************************************************************* 1757dc86dfdSMatthias Ringwald * 1767dc86dfdSMatthias Ringwald * _sys_write 1777dc86dfdSMatthias Ringwald * 1787dc86dfdSMatthias Ringwald * Function description: 1797dc86dfdSMatthias Ringwald * Writes the data to an open handle. 1807dc86dfdSMatthias Ringwald * Currently this function only outputs data to the console 1817dc86dfdSMatthias Ringwald * 1827dc86dfdSMatthias Ringwald * Parameters: 1837dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open 1847dc86dfdSMatthias Ringwald * pBuffer - Pointer to the data that shall be written 1857dc86dfdSMatthias Ringwald * NumBytes - Number of bytes to write 1867dc86dfdSMatthias Ringwald * Mode - The Mode that shall be used 1877dc86dfdSMatthias Ringwald * 1887dc86dfdSMatthias Ringwald * Return value: 1897dc86dfdSMatthias Ringwald * Number of bytes *not* written to the file/device 1907dc86dfdSMatthias Ringwald * 1917dc86dfdSMatthias Ringwald */ 1927dc86dfdSMatthias Ringwald int _sys_write(FILEHANDLE hFile, const unsigned char * pBuffer, unsigned NumBytes, int Mode) { 1937dc86dfdSMatthias Ringwald int r = 0; 1947dc86dfdSMatthias Ringwald 1957dc86dfdSMatthias Ringwald (void)Mode; 1967dc86dfdSMatthias Ringwald if (hFile == STDOUT) { 1977dc86dfdSMatthias Ringwald return NumBytes - SEGGER_RTT_Write(0, (const char*)pBuffer, NumBytes); 1987dc86dfdSMatthias Ringwald } 1997dc86dfdSMatthias Ringwald return r; 2007dc86dfdSMatthias Ringwald } 2017dc86dfdSMatthias Ringwald 2027dc86dfdSMatthias Ringwald /********************************************************************* 2037dc86dfdSMatthias Ringwald * 2047dc86dfdSMatthias Ringwald * _sys_read 2057dc86dfdSMatthias Ringwald * 2067dc86dfdSMatthias Ringwald * Function description: 2077dc86dfdSMatthias Ringwald * Reads data from an open handle. 2087dc86dfdSMatthias Ringwald * Currently this modules does nothing. 2097dc86dfdSMatthias Ringwald * 2107dc86dfdSMatthias Ringwald * Parameters: 2117dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open 2127dc86dfdSMatthias Ringwald * pBuffer - Pointer to buffer to store the read data 2137dc86dfdSMatthias Ringwald * NumBytes - Number of bytes to read 2147dc86dfdSMatthias Ringwald * Mode - The Mode that shall be used 2157dc86dfdSMatthias Ringwald * 2167dc86dfdSMatthias Ringwald * Return value: 2177dc86dfdSMatthias Ringwald * Number of bytes read from the file/device 2187dc86dfdSMatthias Ringwald * 2197dc86dfdSMatthias Ringwald */ 2207dc86dfdSMatthias Ringwald int _sys_read(FILEHANDLE hFile, unsigned char * pBuffer, unsigned NumBytes, int Mode) { 2217dc86dfdSMatthias Ringwald (void)hFile; 2227dc86dfdSMatthias Ringwald (void)pBuffer; 2237dc86dfdSMatthias Ringwald (void)NumBytes; 2247dc86dfdSMatthias Ringwald (void)Mode; 2257dc86dfdSMatthias Ringwald return (0); // Not implemented 2267dc86dfdSMatthias Ringwald } 2277dc86dfdSMatthias Ringwald 2287dc86dfdSMatthias Ringwald /********************************************************************* 2297dc86dfdSMatthias Ringwald * 2307dc86dfdSMatthias Ringwald * _sys_istty 2317dc86dfdSMatthias Ringwald * 2327dc86dfdSMatthias Ringwald * Function description: 2337dc86dfdSMatthias Ringwald * This function shall return whether the opened file 2347dc86dfdSMatthias Ringwald * is a console device or not. 2357dc86dfdSMatthias Ringwald * 2367dc86dfdSMatthias Ringwald * Parameters: 2377dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open 2387dc86dfdSMatthias Ringwald * 2397dc86dfdSMatthias Ringwald * Return value: 2407dc86dfdSMatthias Ringwald * 1 - Device is a console 2417dc86dfdSMatthias Ringwald * 0 - Device is not a console 2427dc86dfdSMatthias Ringwald * 2437dc86dfdSMatthias Ringwald */ 2447dc86dfdSMatthias Ringwald int _sys_istty(FILEHANDLE hFile) { 2457dc86dfdSMatthias Ringwald if (hFile > 0x8000) { 2467dc86dfdSMatthias Ringwald return (1); 2477dc86dfdSMatthias Ringwald } 2487dc86dfdSMatthias Ringwald return (0); // Not implemented 2497dc86dfdSMatthias Ringwald } 2507dc86dfdSMatthias Ringwald 2517dc86dfdSMatthias Ringwald /********************************************************************* 2527dc86dfdSMatthias Ringwald * 2537dc86dfdSMatthias Ringwald * _sys_seek 2547dc86dfdSMatthias Ringwald * 2557dc86dfdSMatthias Ringwald * Function description: 2567dc86dfdSMatthias Ringwald * Seeks via the file to a specific position 2577dc86dfdSMatthias Ringwald * 2587dc86dfdSMatthias Ringwald * Parameters: 2597dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open 2607dc86dfdSMatthias Ringwald * Pos - 2617dc86dfdSMatthias Ringwald * 2627dc86dfdSMatthias Ringwald * Return value: 2637dc86dfdSMatthias Ringwald * int - 2647dc86dfdSMatthias Ringwald * 2657dc86dfdSMatthias Ringwald */ 2667dc86dfdSMatthias Ringwald int _sys_seek(FILEHANDLE hFile, long Pos) { 2677dc86dfdSMatthias Ringwald (void)hFile; 2687dc86dfdSMatthias Ringwald (void)Pos; 2697dc86dfdSMatthias Ringwald return (0); // Not implemented 2707dc86dfdSMatthias Ringwald } 2717dc86dfdSMatthias Ringwald 2727dc86dfdSMatthias Ringwald /********************************************************************* 2737dc86dfdSMatthias Ringwald * 2747dc86dfdSMatthias Ringwald * _sys_ensure 2757dc86dfdSMatthias Ringwald * 2767dc86dfdSMatthias Ringwald * Function description: 2777dc86dfdSMatthias Ringwald * 2787dc86dfdSMatthias Ringwald * 2797dc86dfdSMatthias Ringwald * Parameters: 2807dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open 2817dc86dfdSMatthias Ringwald * 2827dc86dfdSMatthias Ringwald * Return value: 2837dc86dfdSMatthias Ringwald * int - 2847dc86dfdSMatthias Ringwald * 2857dc86dfdSMatthias Ringwald */ 2867dc86dfdSMatthias Ringwald int _sys_ensure(FILEHANDLE hFile) { 2877dc86dfdSMatthias Ringwald (void)hFile; 2887dc86dfdSMatthias Ringwald return (-1); // Not implemented 2897dc86dfdSMatthias Ringwald } 2907dc86dfdSMatthias Ringwald 2917dc86dfdSMatthias Ringwald /********************************************************************* 2927dc86dfdSMatthias Ringwald * 2937dc86dfdSMatthias Ringwald * _sys_flen 2947dc86dfdSMatthias Ringwald * 2957dc86dfdSMatthias Ringwald * Function description: 2967dc86dfdSMatthias Ringwald * Returns the length of the opened file handle 2977dc86dfdSMatthias Ringwald * 2987dc86dfdSMatthias Ringwald * Parameters: 2997dc86dfdSMatthias Ringwald * hFile - Handle to a file opened via _sys_open 3007dc86dfdSMatthias Ringwald * 3017dc86dfdSMatthias Ringwald * Return value: 3027dc86dfdSMatthias Ringwald * Length of the file 3037dc86dfdSMatthias Ringwald * 3047dc86dfdSMatthias Ringwald */ 3057dc86dfdSMatthias Ringwald long _sys_flen(FILEHANDLE hFile) { 3067dc86dfdSMatthias Ringwald (void)hFile; 3077dc86dfdSMatthias Ringwald return (0); // Not implemented 3087dc86dfdSMatthias Ringwald } 3097dc86dfdSMatthias Ringwald 3107dc86dfdSMatthias Ringwald /********************************************************************* 3117dc86dfdSMatthias Ringwald * 3127dc86dfdSMatthias Ringwald * _sys_tmpnam 3137dc86dfdSMatthias Ringwald * 3147dc86dfdSMatthias Ringwald * Function description: 3157dc86dfdSMatthias Ringwald * This function converts the file number fileno for a temporary 3167dc86dfdSMatthias Ringwald * file to a unique filename, for example, tmp0001. 3177dc86dfdSMatthias Ringwald * 3187dc86dfdSMatthias Ringwald * Parameters: 3197dc86dfdSMatthias Ringwald * pBuffer - Pointer to a buffer to store the name 3207dc86dfdSMatthias Ringwald * FileNum - file number to convert 3217dc86dfdSMatthias Ringwald * MaxLen - Size of the buffer 3227dc86dfdSMatthias Ringwald * 3237dc86dfdSMatthias Ringwald * Return value: 3247dc86dfdSMatthias Ringwald * 1 - Error 3257dc86dfdSMatthias Ringwald * 0 - Success 3267dc86dfdSMatthias Ringwald * 3277dc86dfdSMatthias Ringwald */ 3287dc86dfdSMatthias Ringwald int _sys_tmpnam(char * pBuffer, int FileNum, unsigned MaxLen) { 3297dc86dfdSMatthias Ringwald (void)pBuffer; 3307dc86dfdSMatthias Ringwald (void)FileNum; 3317dc86dfdSMatthias Ringwald (void)MaxLen; 3327dc86dfdSMatthias Ringwald return (1); // Not implemented 3337dc86dfdSMatthias Ringwald } 3347dc86dfdSMatthias Ringwald 3357dc86dfdSMatthias Ringwald /********************************************************************* 3367dc86dfdSMatthias Ringwald * 3377dc86dfdSMatthias Ringwald * _sys_command_string 3387dc86dfdSMatthias Ringwald * 3397dc86dfdSMatthias Ringwald * Function description: 3407dc86dfdSMatthias Ringwald * This function shall execute a system command. 3417dc86dfdSMatthias Ringwald * 3427dc86dfdSMatthias Ringwald * Parameters: 3437dc86dfdSMatthias Ringwald * cmd - Pointer to the command string 3447dc86dfdSMatthias Ringwald * len - Length of the string 3457dc86dfdSMatthias Ringwald * 3467dc86dfdSMatthias Ringwald * Return value: 3477dc86dfdSMatthias Ringwald * == NULL - Command was not successfully executed 3487dc86dfdSMatthias Ringwald * == sCmd - Command was passed successfully 3497dc86dfdSMatthias Ringwald * 3507dc86dfdSMatthias Ringwald */ 3517dc86dfdSMatthias Ringwald char * _sys_command_string(char * cmd, int len) { 3527dc86dfdSMatthias Ringwald (void)len; 3537dc86dfdSMatthias Ringwald return cmd; // Not implemented 3547dc86dfdSMatthias Ringwald } 3557dc86dfdSMatthias Ringwald 3567dc86dfdSMatthias Ringwald /********************************************************************* 3577dc86dfdSMatthias Ringwald * 3587dc86dfdSMatthias Ringwald * _sys_exit 3597dc86dfdSMatthias Ringwald * 3607dc86dfdSMatthias Ringwald * Function description: 3617dc86dfdSMatthias Ringwald * This function is called when the application returns from main 3627dc86dfdSMatthias Ringwald * 3637dc86dfdSMatthias Ringwald * Parameters: 3647dc86dfdSMatthias Ringwald * ReturnCode - Return code from the main function 3657dc86dfdSMatthias Ringwald * 3667dc86dfdSMatthias Ringwald * 3677dc86dfdSMatthias Ringwald */ 3687dc86dfdSMatthias Ringwald void _sys_exit(int ReturnCode) { 3697dc86dfdSMatthias Ringwald (void)ReturnCode; 3707dc86dfdSMatthias Ringwald while (1); // Not implemented 3717dc86dfdSMatthias Ringwald } 3727dc86dfdSMatthias Ringwald 3737dc86dfdSMatthias Ringwald #endif 3747dc86dfdSMatthias Ringwald /*************************** End of file ****************************/ 375