-rw-r--r-- | kinsole.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kinsole.cpp b/kinsole.cpp index 01286f3..7fa3f8b 100644 --- a/kinsole.cpp +++ b/kinsole.cpp | |||
@@ -1,115 +1,115 @@ | |||
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | 2 | ||
3 | #ifdef_DEBUG | 3 | #ifdef_DEBUG |
4 | #include <afxwin.h> | 4 | #include <afxwin.h> |
5 | #else | 5 | #else |
6 | #define ASSERT(f) ((void)0) | 6 | #define ASSERT(f) ((void)0) |
7 | #define VERIFY(f) ((void)(f)) | 7 | #define VERIFY(f) ((void)(f)) |
8 | #define TRACE0(sz) | 8 | #define TRACE0(sz) |
9 | #define TRACE1(sz, p1) | 9 | #define TRACE1(sz, p1) |
10 | #define TRACE2(sz, p1, p2) | 10 | #define TRACE2(sz, p1, p2) |
11 | #define TRACE3(sz, p1, p2, p3) | 11 | #define TRACE3(sz, p1, p2, p3) |
12 | #endif | 12 | #endif |
13 | 13 | ||
14 | #include <winsock.h> | 14 | #include <winsock.h> |
15 | #include "resource.h" | 15 | #include "resource.h" |
16 | #include "windowsx.h" | 16 | #include "windowsx.h" |
17 | 17 | ||
18 | #define DAMN_KIN_NAME "KINSole" | 18 | #define DAMN_KIN_NAME "KINSole" |
19 | #define DAMN_KIN_VERSION"1.1" | 19 | #define DAMN_KIN_VERSION"1.1.1" |
20 | 20 | ||
21 | #ifdef _DEBUG | 21 | #ifdef _DEBUG |
22 | #define new DEBUG_NEW | 22 | #define new DEBUG_NEW |
23 | #undef THIS_FILE | 23 | #undef THIS_FILE |
24 | static char THIS_FILE[] = __FILE__; | 24 | static char THIS_FILE[] = __FILE__; |
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | enum { | 27 | enum { |
28 | WM_USERSOCKET = WM_USER+16, | 28 | WM_USERSOCKET = WM_USER+16, |
29 | WM_USERKEY, | 29 | WM_USERKEY, |
30 | WM_USERNOP | 30 | WM_USERNOP |
31 | }; | 31 | }; |
32 | enum { | 32 | enum { |
33 | tnIAC = 255, | 33 | tnIAC = 255, |
34 | tnSE = 240, | 34 | tnSE = 240, |
35 | tnNOP = 241, | 35 | tnNOP = 241, |
36 | tnDM = 242, | 36 | tnDM = 242, |
37 | tnBreak = 243, | 37 | tnBreak = 243, |
38 | tnIP = 244, | 38 | tnIP = 244, |
39 | tnAO = 245, | 39 | tnAO = 245, |
40 | tnAYT = 246, | 40 | tnAYT = 246, |
41 | tnEC = 247, | 41 | tnEC = 247, |
42 | tnEL = 248, | 42 | tnEL = 248, |
43 | tnGA = 249, | 43 | tnGA = 249, |
44 | tnSB = 250, | 44 | tnSB = 250, |
45 | tnWILL = 251, | 45 | tnWILL = 251, |
46 | tnWONT = 252, | 46 | tnWONT = 252, |
47 | tnDO = 253, | 47 | tnDO = 253, |
48 | tnDONT = 254 | 48 | tnDONT = 254 |
49 | }; | 49 | }; |
50 | 50 | ||
51 | WSADATA wsaData; | 51 | WSADATA wsaData; |
52 | ATOM wsaWC = NULL; | 52 | ATOM wsaWC = NULL; |
53 | HWND wsaW = NULL; | 53 | HWND wsaW = NULL; |
54 | 54 | ||
55 | CHAR remoteHost[256]; | 55 | CHAR remoteHost[256]; |
56 | CHAR remoteProt[256]; | 56 | CHAR remoteProt[256]; |
57 | sockaddr_in remoteSIN; | 57 | sockaddr_in remoteSIN; |
58 | 58 | ||
59 | 59 | ||
60 | SOCKET telnetSocket; | 60 | SOCKET telnetSocket; |
61 | HANDLE hConsoleInput; | 61 | HANDLE hConsoleInput; |
62 | HANDLE hConsoleOutput; | 62 | HANDLE hConsoleOutput; |
63 | HWND hConsoleWindow; | 63 | HWND hConsoleWindow; |
64 | HANDLE hConsoleThread; | 64 | HANDLE hConsoleThread; |
65 | DWORD consoleThreadID; | 65 | DWORD consoleThreadID; |
66 | HANDLE hDispatchThread; | 66 | HANDLE hDispatchThread; |
67 | DWORD dispatchThreadID; | 67 | DWORD dispatchThreadID; |
68 | BOOL bTelnet,bTermPulled; | 68 | BOOL bTelnet,bTermPulled; |
69 | 69 | ||
70 | enum_cState { | 70 | enum_cState { |
71 | cstateNone = 0, cstateIAC, cstateDO, cstateSB, cstateSBData, | 71 | cstateNone = 0, cstateIAC, cstateDO, cstateSB, cstateSBData, |
72 | cstateSBDataIAC, cstateWILL, cstateDONT,cstateWONT, | 72 | cstateSBDataIAC, cstateWILL, cstateDONT,cstateWONT, |
73 | }connState = cstateNone; | 73 | }connState = cstateNone; |
74 | BYTE negOption = 0; | 74 | BYTE negOption = 0; |
75 | 75 | ||
76 | 76 | ||
77 | BOOL SelectSocket() { | 77 | BOOL SelectSocket() { |
78 | return WSAAsyncSelect(telnetSocket,wsaW,WM_USERSOCKET,FD_READ|FD_OOB|FD_CLOSE)!=SOCKET_ERROR; | 78 | return WSAAsyncSelect(telnetSocket,wsaW,WM_USERSOCKET,FD_READ|FD_OOB|FD_CLOSE)!=SOCKET_ERROR; |
79 | } | 79 | } |
80 | 80 | ||
81 | BOOL ShowWill(BYTE o) | 81 | BOOL ShowWill(BYTE o) |
82 | { | 82 | { |
83 | TRACE1("We're WILLing to %d\n",(WORD)o); | 83 | TRACE1("We're WILLing to %d\n",(WORD)o); |
84 | static | 84 | static |
85 | BYTE d[3] = {tnIAC,tnWILL,0}; | 85 | BYTE d[3] = {tnIAC,tnWILL,0}; |
86 | d[2] = o; | 86 | d[2] = o; |
87 | BOOL rv = send(telnetSocket,(char*)d,sizeof(d),0)==sizeof(d); | 87 | BOOL rv = send(telnetSocket,(char*)d,sizeof(d),0)==sizeof(d); |
88 | SelectSocket(); | 88 | SelectSocket(); |
89 | return rv; | 89 | return rv; |
90 | } | 90 | } |
91 | BOOL ShowUnwill(BYTE o) | 91 | BOOL ShowUnwill(BYTE o) |
92 | { | 92 | { |
93 | TRACE1("We're NOT WILLing to %d\n",(WORD)o); | 93 | TRACE1("We're NOT WILLing to %d\n",(WORD)o); |
94 | static | 94 | static |
95 | BYTE d[3] = {tnIAC,tnWONT,0}; | 95 | BYTE d[3] = {tnIAC,tnWONT,0}; |
96 | d[2] = o; | 96 | d[2] = o; |
97 | BOOL rv = send(telnetSocket,(char*)d,sizeof(d),0)==sizeof(d); | 97 | BOOL rv = send(telnetSocket,(char*)d,sizeof(d),0)==sizeof(d); |
98 | SelectSocket(); | 98 | SelectSocket(); |
99 | return rv; | 99 | return rv; |
100 | } | 100 | } |
101 | BOOL BegDo(BYTE o) | 101 | BOOL BegDo(BYTE o) |
102 | { | 102 | { |
103 | TRACE1("We beg to DO %d\n",(WORD)o); | 103 | TRACE1("We beg to DO %d\n",(WORD)o); |
104 | static | 104 | static |
105 | BYTE d[3] = {tnIAC,tnDO,0}; | 105 | BYTE d[3] = {tnIAC,tnDO,0}; |
106 | d[2] = o; | 106 | d[2] = o; |
107 | BOOL rv = send(telnetSocket,(char*)d,sizeof(d),0)==sizeof(d); | 107 | BOOL rv = send(telnetSocket,(char*)d,sizeof(d),0)==sizeof(d); |
108 | SelectSocket(); | 108 | SelectSocket(); |
109 | return rv; | 109 | return rv; |
110 | } | 110 | } |
111 | BOOL BegDont(BYTE o) | 111 | BOOL BegDont(BYTE o) |
112 | { | 112 | { |
113 | TRACE1("We beg DONT'T %d\n",(WORD)o); | 113 | TRACE1("We beg DONT'T %d\n",(WORD)o); |
114 | static | 114 | static |
115 | BYTE d[3] = {tnIAC,tnDONT,0}; | 115 | BYTE d[3] = {tnIAC,tnDONT,0}; |
@@ -457,193 +457,193 @@ LRESULT WSMessage(WPARAM wP,LPARAM lP) | |||
457 | TerminalPostO(); | 457 | TerminalPostO(); |
458 | //?? TRACE0("/FD_READ\n"); | 458 | //?? TRACE0("/FD_READ\n"); |
459 | return 0; | 459 | return 0; |
460 | } | 460 | } |
461 | if(WSAGETSELECTEVENT(lP)&FD_OOB){ | 461 | if(WSAGETSELECTEVENT(lP)&FD_OOB){ |
462 | TRACE0("OOB\n"); | 462 | TRACE0("OOB\n"); |
463 | } | 463 | } |
464 | if(WSAGETSELECTEVENT(lP)&FD_CLOSE){ | 464 | if(WSAGETSELECTEVENT(lP)&FD_CLOSE){ |
465 | TRACE0("CLOSE\n"); | 465 | TRACE0("CLOSE\n"); |
466 | PostMessage(wsaW,WM_QUIT,0,0); | 466 | PostMessage(wsaW,WM_QUIT,0,0); |
467 | return 0; | 467 | return 0; |
468 | } | 468 | } |
469 | VERIFY(SelectSocket()); | 469 | VERIFY(SelectSocket()); |
470 | return 0; | 470 | return 0; |
471 | } | 471 | } |
472 | 472 | ||
473 | LRESULT CALLBACK WSWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) | 473 | LRESULT CALLBACK WSWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) |
474 | { | 474 | { |
475 | switch(uMsg){ | 475 | switch(uMsg){ |
476 | case WM_USERSOCKET: | 476 | case WM_USERSOCKET: |
477 | return WSMessage(wParam,lParam); | 477 | return WSMessage(wParam,lParam); |
478 | case WM_USERKEY: | 478 | case WM_USERKEY: |
479 | return ProcessConsoleInput(); | 479 | return ProcessConsoleInput(); |
480 | default: | 480 | default: |
481 | TRACE0("DEFWINDOWPROC\n"); | 481 | TRACE0("DEFWINDOWPROC\n"); |
482 | return ::DefWindowProc(hWnd,uMsg,wParam,lParam); | 482 | return ::DefWindowProc(hWnd,uMsg,wParam,lParam); |
483 | } | 483 | } |
484 | return 0; | 484 | return 0; |
485 | } | 485 | } |
486 | 486 | ||
487 | 487 | ||
488 | BOOL InitializeWinsock() | 488 | BOOL InitializeWinsock() |
489 | { | 489 | { |
490 | if(WSAStartup(0x101,&wsaData)){ | 490 | if(WSAStartup(0x101,&wsaData)){ |
491 | printf("Failed to initialize winsock services\n"); | 491 | printf("Failed to initialize winsock services\n"); |
492 | return FALSE; | 492 | return FALSE; |
493 | } | 493 | } |
494 | WNDCLASS wc; | 494 | WNDCLASS wc; |
495 | memset(&wc,0,sizeof(wc)); | 495 | memset(&wc,0,sizeof(wc)); |
496 | wc.lpfnWndProc=WSWndProc; wc.hInstance=::GetModuleHandle(NULL); | 496 | wc.lpfnWndProc=WSWndProc; wc.hInstance=::GetModuleHandle(NULL); |
497 | wc.lpszClassName = "_WSTFWC_"; | 497 | wc.lpszClassName = "_WSTFWC_"; |
498 | wsaWC = RegisterClass(&wc); | 498 | wsaWC = RegisterClass(&wc); |
499 | if(!wsaWC){ | 499 | if(!wsaWC){ |
500 | printf("Failed to initialize winsock services - 1\n"); | 500 | printf("Failed to initialize winsock services - 1\n"); |
501 | return FALSE; | 501 | return FALSE; |
502 | } | 502 | } |
503 | wsaW = ::CreateWindow("_WSTFWC_","KIN Sole Mio",0,0,0,0,0,NULL,NULL,::GetModuleHandle(NULL),NULL); | 503 | wsaW = ::CreateWindow("_WSTFWC_","KIN Sole Mio",0,0,0,0,0,NULL,NULL,::GetModuleHandle(NULL),NULL); |
504 | if(!wsaW){ | 504 | if(!wsaW){ |
505 | printf("Failed to initialize winsock services\n"); | 505 | printf("Failed to initialize winsock services\n"); |
506 | return FALSE; | 506 | return FALSE; |
507 | } | 507 | } |
508 | return TRUE; | 508 | return TRUE; |
509 | } | 509 | } |
510 | void DeinitializeWinsock() | 510 | void DeinitializeWinsock() |
511 | { | 511 | { |
512 | if(wsaW) | 512 | if(wsaW) |
513 | ::DestroyWindow(wsaW); | 513 | ::DestroyWindow(wsaW); |
514 | wsaW=NULL; | 514 | wsaW=NULL; |
515 | if(wsaWC) | 515 | if(wsaWC) |
516 | ::UnregisterClass("_WSTFWC_",::GetModuleHandle(NULL)); | 516 | ::UnregisterClass("_WSTFWC_",::GetModuleHandle(NULL)); |
517 | wsaWC=NULL; | 517 | wsaWC=NULL; |
518 | WSACleanup(); | 518 | WSACleanup(); |
519 | } | 519 | } |
520 | 520 | ||
521 | HWND GetThisConsoleWnd() | 521 | HWND GetThisConsoleWnd() |
522 | { | 522 | { |
523 | DWORD pid = GetCurrentProcessId(); | 523 | DWORD pid = GetCurrentProcessId(); |
524 | CHAR title[512]; | 524 | CHAR title[512]; |
525 | CHAR* t = title; | 525 | CHAR* t = title; |
526 | if(!GetConsoleTitle(title,sizeof(title))) | 526 | if(!GetConsoleTitle(title,sizeof(title))) |
527 | t = NULL; | 527 | t = NULL; |
528 | HWND hrv = FindWindowEx(NULL,NULL,"tty",t); | 528 | HWND hrv = FindWindowEx(NULL,NULL,"tty",t); |
529 | HWND nopro = NULL; | 529 | HWND nopro = NULL; |
530 | UINT nopros=0; | 530 | UINT nopros=0; |
531 | do{ | 531 | do{ |
532 | DWORD wpid; | 532 | DWORD wpid; |
533 | if(!GetWindowThreadProcessId(hrv,&wpid)) | 533 | if(!GetWindowThreadProcessId(hrv,&wpid)) |
534 | continue; | 534 | continue; |
535 | if(wpid==pid) | 535 | if(wpid==pid) |
536 | return hrv; | 536 | return hrv; |
537 | nopro=hrv; | 537 | nopro=hrv; |
538 | nopros++; | 538 | nopros++; |
539 | hrv = FindWindowEx(NULL,hrv,"tty",t); | 539 | hrv = FindWindowEx(NULL,hrv,"tty",t); |
540 | }while(hrv); | 540 | }while(hrv); |
541 | if(nopros==1){ | 541 | if(nopros==1){ |
542 | ASSERT(nopro); | 542 | ASSERT(nopro); |
543 | return nopro; | 543 | return nopro; |
544 | } | 544 | } |
545 | return NULL; | 545 | return NULL; |
546 | } | 546 | } |
547 | 547 | ||
548 | main(int argc,char*argv[]) | 548 | main(int argc,char*argv[]) |
549 | { | 549 | { |
550 | if(argc<2){ | 550 | if(argc<2){ |
551 | usagebye: | 551 | usagebye: |
552 | printf( | 552 | printf( |
553 | DAMN_KIN_NAME " " DAMN_KIN_VERSION ", Copyright (c) 1998-2004 Klever Group (http://www.klever.net/)\n\n" | 553 | DAMN_KIN_NAME " " DAMN_KIN_VERSION ", Copyright (c) 1998-2005 Klever Group (http://www.klever.net/)\n\n" |
554 | "Usage:\t" DAMN_KIN_NAME " [<options> ]<host-name/ip-address>[ <port>]\n\n" | 554 | "Usage:\t" DAMN_KIN_NAME " [<options> ]<host-name/ip-address>[ <port>]\n\n" |
555 | "Options are:\n" | 555 | "Options are:\n" |
556 | "-r## or -##\tSet number of rows in console screenbuffer\n" | 556 | "-r## or -##\tSet number of rows in console screenbuffer\n" |
557 | "-c##\t\tSet number of columns in console screenbuffer\n" | 557 | "-c##\t\tSet number of columns in console screenbuffer\n" |
558 | "\tnote: changing console screenbuffer size may not work properly\n" | 558 | "\tnote: changing console screenbuffer size may not work properly\n" |
559 | "\twhen in full-screen mode\n" | 559 | "\twhen in full-screen mode\n" |
560 | "-l<user>\tPass username to remote server in environment\n" | 560 | "-l<user>\tPass username to remote server in environment\n" |
561 | "-e<var>=<val>\tPass environment variable to remote server\n" | 561 | "-e<var>=<val>\tPass environment variable to remote server\n" |
562 | "-v<var>=<val>\tPass user environment variable to remote server\n" | 562 | "-v<var>=<val>\tPass user environment variable to remote server\n" |
563 | "-t<termtype>\tChange preferred terminal type\n" | 563 | "-t<termtype>\tChange preferred terminal type\n" |
564 | "\tnote: there are only two different terminal emulations in this\n" | 564 | "\tnote: there are only two different terminal emulations in this\n" |
565 | "\trelease - one for dumb terminal and one for vt terminal\n" | 565 | "\trelease - one for dumb terminal and one for vt terminal\n" |
566 | ); | 566 | ); |
567 | CleanEnvars(); | 567 | CleanEnvars(); |
568 | return 1; | 568 | return 1; |
569 | } | 569 | } |
570 | if(!InitializeWinsock()){ | 570 | if(!InitializeWinsock()){ |
571 | DeinitializeWinsock(); | 571 | DeinitializeWinsock(); |
572 | return 2; | 572 | return 2; |
573 | } | 573 | } |
574 | CONSOLE_SCREEN_BUFFER_INFO csbi; | 574 | CONSOLE_SCREEN_BUFFER_INFO csbi; |
575 | int ac = 0; | 575 | int ac = 0; |
576 | CHAR *ho = NULL, *po = NULL; | 576 | CHAR *ho = NULL, *po = NULL; |
577 | HANDLE hConsole = CreateFile("CONOUT$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, | 577 | HANDLE hConsole = CreateFile("CONOUT$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, |
578 | NULL,OPEN_EXISTING,0,NULL); | 578 | NULL,OPEN_EXISTING,0,NULL); |
579 | ASSERT(hConsole); | 579 | ASSERT(hConsole); |
580 | // *** GetStdHandle(STD_OUTPUT_HANDLE);// *?*?* Do something about redirections and not only here. | 580 | // *** GetStdHandle(STD_OUTPUT_HANDLE);// *?*?* Do something about redirections and not only here. |
581 | VERIFY(GetConsoleScreenBufferInfo(hConsole,&csbi)); | 581 | VERIFY(GetConsoleScreenBufferInfo(hConsole,&csbi)); |
582 | BOOL bSized=FALSE; | 582 | BOOL bSized=FALSE; |
583 | bTermPulled=FALSE; | 583 | bTermPulled=FALSE; |
584 | for(int tmp=1;tmp<argc;tmp++){ | 584 | for(int tmp=1;tmp<argc;tmp++){ |
585 | char* v = argv[tmp]; | 585 | char* v = argv[tmp]; |
586 | ASSERT(v && *v); | 586 | ASSERT(v && *v); |
587 | if((*v)=='/' || (*v)=='-'){ | 587 | if((*v)=='/' || (*v)=='-'){ |
588 | int lines = atoi(&v[1]); | 588 | int lines = atoi(&v[1]); |
589 | if(lines){ | 589 | if(lines){ |
590 | if(lines<csbi.dwSize.Y){ | 590 | if(lines<csbi.dwSize.Y){ |
591 | SMALL_RECT wi = {0,0,csbi.dwSize.X-1,lines-1}; | 591 | SMALL_RECT wi = {0,0,csbi.dwSize.X-1,lines-1}; |
592 | VERIFY(SetConsoleWindowInfo(hConsole,TRUE,&wi)); | 592 | VERIFY(SetConsoleWindowInfo(hConsole,TRUE,&wi)); |
593 | } | 593 | } |
594 | COORD ns = {csbi.dwSize.X,lines}; | 594 | COORD ns = {csbi.dwSize.X,lines}; |
595 | if(SetConsoleScreenBufferSize(hConsole,ns)) | 595 | if(SetConsoleScreenBufferSize(hConsole,ns)) |
596 | bSized=TRUE; | 596 | bSized=TRUE; |
597 | }else if(v[1]=='r'){ | 597 | }else if(v[1]=='r'){ |
598 | int lines = atoi(&v[2]); | 598 | int lines = atoi(&v[2]); |
599 | if(lines){ | 599 | if(lines){ |
600 | if(lines<csbi.dwSize.Y){ | 600 | if(lines<csbi.dwSize.Y){ |
601 | SMALL_RECT wi = {0,0,csbi.dwSize.X-1,lines-1}; | 601 | SMALL_RECT wi = {0,0,csbi.dwSize.X-1,lines-1}; |
602 | VERIFY(SetConsoleWindowInfo(hConsole,TRUE,&wi)); | 602 | VERIFY(SetConsoleWindowInfo(hConsole,TRUE,&wi)); |
603 | } | 603 | } |
604 | COORD ns = {csbi.dwSize.X,lines}; | 604 | COORD ns = {csbi.dwSize.X,lines}; |
605 | if(SetConsoleScreenBufferSize(hConsole,ns)) | 605 | if(SetConsoleScreenBufferSize(hConsole,ns)) |
606 | bSized=TRUE; | 606 | bSized=TRUE; |
607 | }else | 607 | }else |
608 | goto usagebye; | 608 | goto usagebye; |
609 | }else if(v[1]=='c'){ | 609 | }else if(v[1]=='c'){ |
610 | int rows = atoi(&v[2]); | 610 | int rows = atoi(&v[2]); |
611 | if(rows){ | 611 | if(rows){ |
612 | if(rows<csbi.dwSize.X){ | 612 | if(rows<csbi.dwSize.X){ |
613 | SMALL_RECT wi = {0,0,rows-1,csbi.dwSize.Y-1}; | 613 | SMALL_RECT wi = {0,0,rows-1,csbi.dwSize.Y-1}; |
614 | VERIFY(SetConsoleWindowInfo(hConsole,TRUE,&wi)); | 614 | VERIFY(SetConsoleWindowInfo(hConsole,TRUE,&wi)); |
615 | } | 615 | } |
616 | COORD ns = {rows,csbi.dwSize.Y}; | 616 | COORD ns = {rows,csbi.dwSize.Y}; |
617 | if(SetConsoleScreenBufferSize(hConsole,ns)) | 617 | if(SetConsoleScreenBufferSize(hConsole,ns)) |
618 | bSized=TRUE; | 618 | bSized=TRUE; |
619 | }else | 619 | }else |
620 | goto usagebye; | 620 | goto usagebye; |
621 | }else if(v[1]=='l'){ | 621 | }else if(v[1]=='l'){ |
622 | CHAR* vv = &v[2]; | 622 | CHAR* vv = &v[2]; |
623 | VERIFY(AddEnvar(nesbVar,"USER",vv)); | 623 | VERIFY(AddEnvar(nesbVar,"USER",vv)); |
624 | }else if(v[1]=='e'){ // -e<name>=<value>VAR | 624 | }else if(v[1]=='e'){ // -e<name>=<value>VAR |
625 | CHAR* n = &v[2]; | 625 | CHAR* n = &v[2]; |
626 | CHAR* vv = strchr(&v[2],'='); | 626 | CHAR* vv = strchr(&v[2],'='); |
627 | if(!vv) | 627 | if(!vv) |
628 | goto usagebye; | 628 | goto usagebye; |
629 | *(vv++)=0; | 629 | *(vv++)=0; |
630 | VERIFY(AddEnvar(nesbVar,n,vv)); | 630 | VERIFY(AddEnvar(nesbVar,n,vv)); |
631 | }else if(v[1]=='v'){ // -v<name>=<value>USERVAR | 631 | }else if(v[1]=='v'){ // -v<name>=<value>USERVAR |
632 | CHAR* n = &v[2]; | 632 | CHAR* n = &v[2]; |
633 | CHAR* vv = strchr(n,'='); | 633 | CHAR* vv = strchr(n,'='); |
634 | if(!vv) | 634 | if(!vv) |
635 | goto usagebye; | 635 | goto usagebye; |
636 | *(vv++)=0; | 636 | *(vv++)=0; |
637 | VERIFY(AddEnvar(nesbUserVar,n,vv)); | 637 | VERIFY(AddEnvar(nesbUserVar,n,vv)); |
638 | }else if(v[1]=='t'){// -t<ttype> -t<tname>=<ttype> | 638 | }else if(v[1]=='t'){// -t<ttype> -t<tname>=<ttype> |
639 | CHAR* n = &v[2]; | 639 | CHAR* n = &v[2]; |
640 | CHAR* nn = strchr(n,'='); | 640 | CHAR* nn = strchr(n,'='); |
641 | if(nn){ | 641 | if(nn){ |
642 | *(nn++)=0; | 642 | *(nn++)=0; |
643 | if(!*nn) | 643 | if(!*nn) |
644 | nn=NULL; | 644 | nn=NULL; |
645 | } | 645 | } |
646 | if(!TerminalPullType(nn?nn:n,nn?n:NULL)){ | 646 | if(!TerminalPullType(nn?nn:n,nn?n:NULL)){ |
647 | printf("Available terminal types are:"); | 647 | printf("Available terminal types are:"); |
648 | TerminalPrintTypes(); | 648 | TerminalPrintTypes(); |
649 | printf("\n"); | 649 | printf("\n"); |