1//===-- Platform.cpp --------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// this file is only relevant for Visual C++ 11#if defined( _MSC_VER ) 12 13#include <process.h> 14#include <assert.h> 15 16#include "Platform.h" 17 18// index one of the variable arguments 19// presuming "(EditLine *el, ..." is first in the argument list 20#define GETARG( Y, X ) ( (void* ) *( ( (int**) &(Y) ) + (X) ) ) 21 22// the control handler or SIGINT handler 23static sighandler_t _ctrlHandler = NULL; 24 25// the default console control handler 26BOOL 27WINAPI CtrlHandler (DWORD ctrlType) 28{ 29 if ( _ctrlHandler != NULL ) 30 { 31 _ctrlHandler( 0 ); 32 return TRUE; 33 } 34 return FALSE; 35} 36 37int 38ioctl (int d, int request, ...) 39{ 40 switch ( request ) 41 { 42 // request the console windows size 43 case ( TIOCGWINSZ ): 44 { 45 // locate the window size structure on stack 46 winsize *ws = (winsize*) GETARG( d, 2 ); 47 // get screen buffer information 48 CONSOLE_SCREEN_BUFFER_INFO info; 49 GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &info ); 50 // fill in the columns 51 ws->ws_col = info.dwMaximumWindowSize.X; 52 // 53 return 0; 54 } 55 break; 56 default: 57 assert( !"Not implemented!" ); 58 } 59 return -1; 60} 61 62int 63kill (pid_t pid, int sig) 64{ 65 // is the app trying to kill itself 66 if ( pid == getpid( ) ) 67 exit( sig ); 68 // 69 assert( !"Not implemented!" ); 70 return -1; 71} 72 73int 74tcsetattr (int fd, int optional_actions, const struct termios *termios_p) 75{ 76 assert( !"Not implemented!" ); 77 return -1; 78} 79 80int 81tcgetattr (int fildes, struct termios *termios_p) 82{ 83// assert( !"Not implemented!" ); 84 // error return value (0=success) 85 return -1; 86} 87 88sighandler_t 89signal (int sig, sighandler_t sigFunc) 90{ 91 switch ( sig ) 92 { 93 case ( SIGINT ): 94 { 95 _ctrlHandler = sigFunc; 96 SetConsoleCtrlHandler( CtrlHandler, TRUE ); 97 } 98 break; 99 case ( SIGPIPE ): 100 case ( SIGWINCH ): 101 case ( SIGTSTP ): 102 case ( SIGCONT ): 103 // ignore these for now 104 break; 105 default: 106 assert( !"Not implemented!" ); 107 } 108 return 0; 109} 110 111#endif