diff options
Diffstat (limited to 'navit/binding/win32/tell_navit.c')
-rw-r--r-- | navit/binding/win32/tell_navit.c | 263 |
1 files changed, 129 insertions, 134 deletions
diff --git a/navit/binding/win32/tell_navit.c b/navit/binding/win32/tell_navit.c index e06f73258..f99319f92 100644 --- a/navit/binding/win32/tell_navit.c +++ b/navit/binding/win32/tell_navit.c @@ -29,151 +29,146 @@ #include <glib.h> #include "binding_win32.h" -static LRESULT CALLBACK message_handler( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - switch(uMsg) { - case WM_CREATE: - return 0; - } - return TRUE; +static LRESULT CALLBACK message_handler( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { + switch(uMsg) { + case WM_CREATE: + return 0; + } + return TRUE; } int errormode=1; -void err(char *fmt, ...) -{ - va_list ap; - char buf[1024]; +void err(char *fmt, ...) { + va_list ap; + char buf[1024]; #if defined HAVE_API_WIN32_CE #define vsnprintf _vsnprintf #endif - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - switch(errormode) { - case 0: /* be silent */ - break; - case 1: - MessageBox(NULL, buf, "tell_navit", MB_ICONERROR|MB_OK); - break; - case 2: - fprintf(stderr,"%s",buf); - break; - } + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + switch(errormode) { + case 0: /* be silent */ + break; + case 1: + MessageBox(NULL, buf, "tell_navit", MB_ICONERROR|MB_OK); + break; + case 2: + fprintf(stderr,"%s",buf); + break; + } } -void print_usage(void) -{ - err( - "tell_navit usage:\n" - "tell_navit [options] navit_command\n" - "\t-h this help\n" - "\t-e <way>: set way to report error messages:\n" - "\t\t0 - suppress messages\n" - "\t\t1 - use messagebox (default)\n" - "\t\t2 - print to stderr\n" - ); +void print_usage(void) { + err( + "tell_navit usage:\n" + "tell_navit [options] navit_command\n" + "\t-h this help\n" + "\t-e <way>: set way to report error messages:\n" + "\t\t0 - suppress messages\n" + "\t\t1 - use messagebox (default)\n" + "\t\t2 - print to stderr\n" + ); } -int main(int argc, char **argv) -{ - HWND navitWindow; - COPYDATASTRUCT cd; - char opt; - - TCHAR *g_szClassName = TEXT("TellNavitWND"); - WNDCLASS wc; - HWND hwnd; - HWND hWndParent=NULL; - - - if(argc>0) { - while((opt = getopt(argc, argv, ":hvc:d:e:s:")) != -1) { - switch(opt){ - case 'h': - print_usage(); - exit(0); - break; - case 'e': - errormode=atoi(optarg); - break; - default: - err("Unknown option %c\n", opt); - exit(1); - break; - } - } - } else { - print_usage(); - exit(1); - } - if(optind==argc) { - err("Navit command to execute is needed."); - exit(1); - } - - - memset(&wc, 0 , sizeof(WNDCLASS)); - wc.lpfnWndProc = message_handler; - wc.hInstance = GetModuleHandle(NULL); - wc.lpszClassName = g_szClassName; - - if (!RegisterClass(&wc)) - { - err(TEXT("Window class registration failed\n")); - return 1; - } else { - hwnd = CreateWindow( - g_szClassName, - TEXT("Tell Navit"), - 0, - 0, - 0, - 0, - 0, - hWndParent, - NULL, - GetModuleHandle(NULL), - NULL); - if(!hwnd) { - err(TEXT("Can't create hidden window\n")); - UnregisterClass(g_szClassName,NULL); - return 1; - } - } - - navitWindow=FindWindow( TEXT("NAVGRA"), NULL ); - if(!navitWindow) { - err(TEXT("Navit window not found\n")); - DestroyWindow(hwnd); - UnregisterClass(g_szClassName,NULL); - return 1; - } else { - int rv; - char *command=g_strjoinv(" ",argv+optind); - struct navit_binding_w32_msg *msg; - int sz=sizeof(*msg)+strlen(command); - - cd.dwData=NAVIT_BINDING_W32_DWDATA; - msg=g_malloc0(sz); - msg->version=NAVIT_BINDING_W32_VERSION; - g_strlcpy(msg->magic,NAVIT_BINDING_W32_MAGIC,sizeof(msg->magic)); - g_strlcpy(msg->text,command,sz-sizeof(*msg)+1); - cd.cbData=sz; - cd.lpData=msg; - rv=SendMessage( navitWindow, WM_COPYDATA, (WPARAM)hwnd, (LPARAM) (LPVOID) &cd ); - g_free(command); - g_free(msg); - if(rv!=0) { - err(TEXT("Error %d sending message, SendMessage return value is %d\n"), GetLastError(), rv); - DestroyWindow(hwnd); - UnregisterClass(g_szClassName,NULL); - return 1; - } - } - DestroyWindow(hwnd); - UnregisterClass(g_szClassName,NULL); - return 0; +int main(int argc, char **argv) { + HWND navitWindow; + COPYDATASTRUCT cd; + char opt; + + TCHAR *g_szClassName = TEXT("TellNavitWND"); + WNDCLASS wc; + HWND hwnd; + HWND hWndParent=NULL; + + + if(argc>0) { + while((opt = getopt(argc, argv, ":hvc:d:e:s:")) != -1) { + switch(opt) { + case 'h': + print_usage(); + exit(0); + break; + case 'e': + errormode=atoi(optarg); + break; + default: + err("Unknown option %c\n", opt); + exit(1); + break; + } + } + } else { + print_usage(); + exit(1); + } + if(optind==argc) { + err("Navit command to execute is needed."); + exit(1); + } + + + memset(&wc, 0, sizeof(WNDCLASS)); + wc.lpfnWndProc = message_handler; + wc.hInstance = GetModuleHandle(NULL); + wc.lpszClassName = g_szClassName; + + if (!RegisterClass(&wc)) { + err(TEXT("Window class registration failed\n")); + return 1; + } else { + hwnd = CreateWindow( + g_szClassName, + TEXT("Tell Navit"), + 0, + 0, + 0, + 0, + 0, + hWndParent, + NULL, + GetModuleHandle(NULL), + NULL); + if(!hwnd) { + err(TEXT("Can't create hidden window\n")); + UnregisterClass(g_szClassName,NULL); + return 1; + } + } + + navitWindow=FindWindow( TEXT("NAVGRA"), NULL ); + if(!navitWindow) { + err(TEXT("Navit window not found\n")); + DestroyWindow(hwnd); + UnregisterClass(g_szClassName,NULL); + return 1; + } else { + int rv; + char *command=g_strjoinv(" ",argv+optind); + struct navit_binding_w32_msg *msg; + int sz=sizeof(*msg)+strlen(command); + + cd.dwData=NAVIT_BINDING_W32_DWDATA; + msg=g_malloc0(sz); + msg->version=NAVIT_BINDING_W32_VERSION; + g_strlcpy(msg->magic,NAVIT_BINDING_W32_MAGIC,sizeof(msg->magic)); + g_strlcpy(msg->text,command,sz-sizeof(*msg)+1); + cd.cbData=sz; + cd.lpData=msg; + rv=SendMessage( navitWindow, WM_COPYDATA, (WPARAM)hwnd, (LPARAM) (LPVOID) &cd ); + g_free(command); + g_free(msg); + if(rv!=0) { + err(TEXT("Error %d sending message, SendMessage return value is %d\n"), GetLastError(), rv); + DestroyWindow(hwnd); + UnregisterClass(g_szClassName,NULL); + return 1; + } + } + DestroyWindow(hwnd); + UnregisterClass(g_szClassName,NULL); + return 0; } |