From 6d6bb88a0215b87a4a47ed86a84ae3c75d399962 Mon Sep 17 00:00:00 2001 From: Jeffrey Armstrong Date: Sun, 24 Apr 2016 18:05:02 -0400 Subject: Initial import of 5.0 source code with minor changes to use termios on Linux. --- ntsedt.c | 1104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1104 insertions(+) create mode 100644 ntsedt.c (limited to 'ntsedt.c') diff --git a/ntsedt.c b/ntsedt.c new file mode 100644 index 0000000..41a09f4 --- /dev/null +++ b/ntsedt.c @@ -0,0 +1,1104 @@ +/*Copyright (c) Anker Berg-Sonne, 1985,1986,1987*/ +#include "proto.h" +#include "commdlg.h" + +char szAppName[10]; +char szWindowTitle[30]; +HANDLE hInst, hCursor; +FARPROC lpprocAbout; +FARPROC lpprocFsel; +FARPROC lpprocPrompt; +HWND Curr_Wnd, Buf_Wnd[Maxbuffers]; +LOGFONT LF; +HANDLE Buf_Font; +int Char_Width, Rfreshed=0, Char_Height, Dragging=0, DragX, DragY; +int Ch_Ch, Ch_Count=0, First=1, Cursor_On=0, Sav_Cur, Def_Height, + Def_Width, Saved_Num_Lock, Lst_Index; +char Work[80], Path[80], Drive[3], Dir[66], File[9], Ext[5]; +char Fil_String[80], Curr_Dir[80], Sel_Dir[80], Sel_Drive; +unsigned char Keyb_State[256]; +int Save_My_Num_Lock, Save_Their_Num_Lock; + +extern int _argc; +extern char **_argv; + +BOOL FAR WINAPI About(HWND hDlg,unsigned message,WORD,LONG) +{if (message == WM_COMMAND) + {EndDialog( hDlg, TRUE ); + return TRUE; + } else + if (message == WM_INITDIALOG) + return TRUE; else + return FALSE; +} + +void SedtPaint(HWND,PAINTSTRUCT *pps,int Is_Current ) +{HBRUSH hbr, hbrOld; + HDC hDC; + if (Rfreshed) + {Rfreshed=0; + return; + } + hDC=pps->hdc; + if (pps->fErase) + {hbr = CreateSolidBrush( GetSysColor(COLOR_WINDOW) ); + hbrOld = (HBRUSH)SelectObject( hDC, (HANDLE)hbr ); + FillRect( hDC, (LPRECT)&pps->rcPaint, hbr ); + SelectObject( hDC, (HANDLE)hbrOld ); + DeleteObject( (HANDLE)hbr ); + } + SetBkMode( hDC, OPAQUE); + if (Out_Count) + Out_Zap(); + S_Header(); + if (In_Help) + {Display_Help(Help_Pos); + Out_Zap(); + Win_On_Curs(); + } else + {if (Show_Ruler) + S_Ruler(); + Fill_Screen(Rel_First,Rel_Last); + if (!Is_Current) + Mark_Cursor(); + Out_Zap(); + } +} + +BOOL SedtInit(HANDLE hInstance ) +{PWNDCLASS pSedtClass; + LoadString( hInstance, IDSNAME, (LPSTR)szAppName, 10 ); + LoadString( hInstance, IDSTITLE, (LPSTR)szWindowTitle, 30 ); + pSedtClass = (PWNDCLASS)LocalAlloc( LPTR, sizeof(WNDCLASS) ); + pSedtClass->hCursor = LoadCursor( NULL, IDC_IBEAM ); + pSedtClass->hIcon = LoadIcon( hInstance, (LPSTR)szAppName ); + pSedtClass->lpszMenuName = (LPSTR)"SedtMenu"; + pSedtClass->lpszClassName = (LPSTR)szAppName; + pSedtClass->hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); + pSedtClass->hInstance = hInstance; + pSedtClass->style = CS_VREDRAW | CS_HREDRAW | CS_CLASSDC; + pSedtClass->lpfnWndProc = SedtWndProc; + if (!RegisterClass( (LPWNDCLASS)pSedtClass ) ) + return FALSE; + LocalFree( (HANDLE)pSedtClass ); + return TRUE; /* Initialization succeeded */ +} + +int Make_Window(int B,int Show) +{HWND hWnd; + HMENU hMenu, hMenu1; + HDC hDC; + RECT Rect; + TEXTMETRIC TM; + HANDLE Old_Font; + int I; + if ((hWnd = CreateWindow((LPSTR)szAppName, + (LPSTR)szWindowTitle, + WS_OVERLAPPED|WS_VSCROLL|WS_MINIMIZEBOX|WS_MAXIMIZEBOX| + WS_THICKFRAME|WS_SYSMENU, + CW_USEDEFAULT,0,CW_USEDEFAULT,0, + (HWND)NULL, /* no parent */ + (HMENU)NULL, /* use class menu */ + (HANDLE)hInst, /* handle to window instance */ + (LPSTR)NULL /* no params to pass on */ + ))==NULL) + return 0; + Curr_Wnd=Buf_Wnd[B]=hWnd; + hDC = GetDC( hWnd ); + LF.lfWidth=0; + LF.lfEscapement=0; + LF.lfOrientation=0; + LF.lfItalic=0; + LF.lfUnderline=0; + LF.lfStrikeOut=0; + LF.lfCharSet=ANSI_CHARSET; + LF.lfOutPrecision=OUT_DEFAULT_PRECIS; + LF.lfClipPrecision=CLIP_DEFAULT_PRECIS; + LF.lfQuality=DRAFT_QUALITY; + LF.lfPitchAndFamily=FF_MODERN; + if (Def_Font!=0) + {strcpy(LF.lfFaceName,"Courier New"); + LF.lfWeight=FW_BOLD; + LF.lfHeight= -Def_Font; + } else + {strcpy(LF.lfFaceName,"Fixedsys"); + LF.lfWeight=FW_DONTCARE; + LF.lfHeight=0; + } + Buf_Font=CreateFontIndirect((LPLOGFONT)&LF); + Old_Font=SelectObject(hDC,Buf_Font); + GetTextMetrics( hDC, (LPTEXTMETRIC)&TM ); + SelectObject(hDC,Old_Font); + GetClientRect(Curr_Wnd,(LPRECT)&Rect); + Scr_Width=(Rect.right+1)/(Char_Width=TM.tmAveCharWidth); + Scr_Length=(Rect.bottom+1)/(Char_Height=TM.tmHeight); + ReleaseDC( hWnd, hDC ); + SetScrollRange(hWnd,SB_VERT,0,100,1); + if (Zoom_Windows) + ShowWindow(hWnd,Show|SW_SHOWMAXIMIZED); else + ShowWindow( hWnd, Show ); + Rfreshed=1; + UpdateWindow( hWnd ); + hMenu=GetMenu(hWnd); + for (I=0;I=Scr_Width) + {while (My_Col-Scr_Shift>=Scr_Width) + Scr_Shift+=Shift_Screen?Shift_Screen:Scr_Width/2; + } + } + Offset=Rel_First+Rel_Last; + Rel_First=Show_Ruler?3:2; + Rel_Last=Scr_Length-2; + My_Line=Home=(Rel_First+Rel_Last+1)/2; + Rel_First-=Home; + Rel_Last-=Home; + if (Float_Cursor) + Set_Offset(Offset); + SetCaretPos((int)(Char_Width*(My_Col-Scr_Shift-1)), + (int)(Char_Height*(My_Line-1))); + } + if (!Is_Current) + Restore_Window(B); + break; + case WM_ERASEBKGND: + GetClientRect( hWnd, (LPRECT)&rect ); + hbr = CreateSolidBrush( GetSysColor(COLOR_WINDOW) ); + hbrOld = (HBRUSH)SelectObject( (HDC)wParam, (HANDLE)hbr ); + FillRect( (HDC)wParam, (LPRECT)&rect, hbr ); + SelectObject( (HDC)wParam, (HANDLE)hbrOld ); + DeleteObject( (HANDLE)hbr ); + break; + case WM_QUERYENDSESSION: + for (I=0;IBuf_Lines) + Ent_Count=Buf_Lines; + Abs_Line(); + break; + } + Move_Entity(); + Upd_Header(); + Win_On_Curs(); + } + Out_Zap(); + break; + case WM_COMMAND: + if (In_Help) + break; + if (!Mouse_OK) + break; + Win_Off_Curs(); + switch (wParam) + {case FILE_OPEN: + if (Fsel_Input()) + {Make_File(); + Count=1; + Edit_File(Com_Arg); + Upd_Header(); + } + break; + case FILE_SAVE: + if ((S=Outfile)==NULL||S[0]==0) + Error(2,No_Output_File_Txt); else + {Wr_Buffer(S); + } + if (!Err_Flag) + Clr_Changes(); + Upd_Header(); + break; + case FILE_SAVE_AS: + if (Fsel_Input()) + {Make_File(); + strcpy(New_File,Com_Arg); + Wr_Buffer(Outfile=New_File); + S_Header(); + if (!Err_Flag) + Clr_Changes(); + Upd_Header(); + } + break; + case FILE_INSERT: + if (Fsel_Input()) + {Make_File(); + Include_File(Com_Arg,File_Not_Found_Txt); + Fill_Screen(0,Rel_Last); + Set_Changes(); + S_Header(); + } + break; + case FILE_QUIT: + if (In_Help) + break; + Win_Quit(); + break; + case FILE_ABOUT: + DialogBox( hInst, MAKEINTRESOURCE(ABOUTBOX), hWnd, lpprocAbout ); + break; + case WINDOW_0: + case WINDOW_1: + case WINDOW_2: + case WINDOW_3: + Ch_Window(wParam-20); + break; + case WINDOW_SWITCH: + Other_Window(); + break; + case FILE_NEW: + Zero(); + break; + case EDIT_CLEAR: + Reset(); + break; + case EDIT_CUT: + This_Cmd=C_Delete; + Init_Entity(); + Sel_Range(); + if (!Err_Flag) + {if (Blk_Mode) + Blk_Rem_It(Past_String); else + Rem_It(Past_String); + Set_Changes(); + } + break; + case EDIT_PASTE: + Count=1; + Paste(); + Upd_Header(); + break; + case RULER_0: + case RULER_1: + case RULER_2: + case RULER_3: + case RULER_4: + case RULER_5: + case RULER_6: + case RULER_7: + case RULER_8: + case RULER_9: + Readruler((char)('0'+wParam-40)); + if (Show_Ruler) + S_Ruler(); + break; + case HELP: + strcpy(Com_Arg,Do_Mapping("HELP.HLP")); + Do_Help(); + break; + case FONT_SELECT: + Win_Font(); + break; + } + Out_Zap(); + Win_On_Curs(); + break; + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + return(0L); +} + +void Win_Scroll(int T,int B,int S) +{RECT Rect; + Rect.top=(T-1)*Char_Height; + Rect.bottom=B*Char_Height; + Rect.left=0; + Rect.right=Scr_Width*Char_Width; + ScrollWindow(Curr_Wnd,0,-S*Char_Height,&Rect,&Rect); + Rfreshed=1; + UpdateWindow(Curr_Wnd); +} + +void Win_Clear() +{HDC hDC; + RECT rect; + HBRUSH hbr, hbrOld; + hDC = GetDC(Curr_Wnd); + GetClientRect( Curr_Wnd, (LPRECT)&rect ); + hbr = CreateSolidBrush( GetSysColor(COLOR_WINDOW) ); + hbrOld = (HBRUSH)SelectObject( hDC, (HANDLE)hbr ); + FillRect( hDC, (LPRECT)&rect, hbr ); + SelectObject( hDC, (HANDLE)hbrOld ); + DeleteObject( (HANDLE)hbr ); + ReleaseDC(Curr_Wnd, hDC ); +} + +void Win_Erase(int L,int C,int W) +{HDC hDC; + RECT rect; + HBRUSH hbr, hbrOld; + hDC = GetDC(Curr_Wnd); + rect.top=(L-1)*Char_Height; + rect.left=(C-1)*Char_Width; + rect.bottom=rect.top+Char_Height; + rect.right=rect.left+W*Char_Width; + hbr = CreateSolidBrush( GetSysColor(COLOR_WINDOW) ); + hbrOld = (HBRUSH)SelectObject( hDC, (HANDLE)hbr ); + FillRect( hDC, (LPRECT)&rect, hbr ); + SelectObject( hDC, (HANDLE)hbrOld ); + DeleteObject( (HANDLE)hbr ); + ReleaseDC(Curr_Wnd, hDC ); +} + +void Win_On_Curs() +{ + if (Cursor_On) + Win_Off_Curs(); + SetCaretPos((int)(Char_Width*(My_Col-Scr_Shift-1)), + (int)(Char_Height*(My_Line-1))); + ShowCaret(Curr_Wnd); + Cursor_On=1; +} + +void Win_Off_Curs() +{ + HideCaret(Curr_Wnd ); + Cursor_On=0; +} + +void Win_Getmem(HANDLE H,int A,int L) +{LPSTR P; + P=GlobalLock(H); + LockData(0); + segread(&Rrv); + movedata(HIWORD(P),LOWORD(P),Rrv.ds,A,L); + UnlockData(0); + GlobalUnlock(H); +} + +void Win_Putmem(HANDLE A,int H,int L) +{LPSTR P; + P=GlobalLock(H); + LockData(0); + segread(&Rrv); + movedata(Rrv.ds,A,HIWORD(P),LOWORD(P),L); + UnlockData(0); + GlobalUnlock(H); +} + +HANDLE Win_Alloc(int L) +{ + return GlobalAlloc(GMEM_MOVEABLE,(long)L); +} + +void Win_Free(HANDLE H) +{ + GlobalFree(H); +} + +void WinText(int L,int C,char *S,int A) +{HDC hDC; + HANDLE Old_Font; + hDC = GetDC(Curr_Wnd); + Old_Font=SelectObject(hDC,Buf_Font); + SetBkMode( hDC, OPAQUE); + if (A&A_Reverse) + {SetTextColor(hDC,GetSysColor(COLOR_WINDOW)); + SetBkColor(hDC,GetSysColor(COLOR_WINDOWTEXT)); + } else + {SetTextColor( hDC, GetSysColor(COLOR_WINDOWTEXT) ); + SetBkColor(hDC,GetSysColor(COLOR_WINDOW)); + } + TextOut(hDC,Char_Width*(C-1),Char_Height*(L-1), + (char FAR *)S,strlen(S)); + SelectObject(hDC,Old_Font); + ReleaseDC(Curr_Wnd, hDC ); +} + +void WinChar() +{static MSG msg; + int I, J, K; + static Last_Character, Last_Scancode; + if (Ch_Count>0) + {Ch_Count--; + Character=Last_Character; + Scancode=Last_Scancode; + return; + } + Rfreshed=0; + while (1) + {if (Working_Flag) + Clr_Working(); + Err_Flag=0; + if (!GetMessage((LPMSG)&msg,NULL,0,0)) + {Not_End=0; + return; + } + if (msg.message==WM_CHAR) + {Ch_Count=(msg.lParam&0xFFFF)-1; + Last_Character=Character=msg.wParam; + if (Do_Debug) + Diag("Character:Scancode=%d,Character=%d",Scancode,Character); + return; + } else + if (msg.message==WM_KEYDOWN) + {Ch_Count=(msg.lParam&0xFFFF)-1; + Last_Scancode=Scancode=(msg.lParam>>16)&0xFF; + if (Set_Num_Lock!=-1&&Scancode==0x45) + {GetKeyboardState(Keyb_State); + Keyb_State[VK_NUMLOCK]=Set_Num_Lock; + SetKeyboardState(Keyb_State); + } + if (Do_Debug) + Diag("Scancode=%d,Window code=%d",Scancode,msg.wParam); + for (I=0;I='Z') + Drive[0]-='a'-'A'; + if ((Drive[0]-'A')!=Sel_Drive) + {Sel_Drive=Drive[0]-'A'; + bdos(0xE,Sel_Drive,0); + getcwd(Sel_Dir,80); + } + } + if (Dir[0]!=0) + {if (Dir[strlen(Dir)-1]=='\\') + Dir[strlen(Dir)-1]=0; + chdir(Dir); + getcwd(Sel_Dir,80); + } + if (File[0]!=0||Ext[0]!=0) + {strcpy(Fil_String,File); + strcat(Fil_String,Ext); + } + if (strchr(Fil_String,'*')==NULL&&strchr(Fil_String,'?')==NULL) + EndDialog(hDlg,TRUE); else + {DlgDirList(hDlg,(LPSTR)Fil_String,FSELLIST,0,0); + DlgDirList(hDlg,(LPSTR)Fil_String,FSELDLIST,0,0x0010|0x4000|0x8000); + SetDlgItemText(hDlg,FSELDIR,(LPSTR)Sel_Dir); + SetDlgItemText(hDlg,FSELNAME,(LPSTR)Fil_String); + } +} + +BOOL FAR WINAPI Fsel(HWND hDlg,unsigned message,WORD wParam,LONG lParam) +{static char S[128]; + int I; + switch (message) + {case WM_COMMAND: + /*Diag("Fsel:wParam=%x,lParam=%lx",wParam,lParam);*/ + switch (wParam) + {case FSELOK: + Fsel_Exit(hDlg); + break; + case FSELCANCEL: + EndDialog( hDlg, FALSE ); + break; + case FSELLIST: + if (HIWORD(lParam)==LBN_SELCHANGE) + {if (DlgDirSelect(hDlg,(LPSTR)S,FSELLIST)==0) + SetDlgItemText(hDlg,FSELNAME,(LPSTR)S); + } else + if (HIWORD(lParam)==LBN_DBLCLK) + {if (DlgDirSelect(hDlg,(LPSTR)S,FSELLIST)==0) + Fsel_Exit(hDlg); + } else + if (HIWORD(lParam)==0) + Fsel_Exit(hDlg); + break; + case FSELDLIST: + if (HIWORD(lParam)==LBN_SELCHANGE) + {if (DlgDirSelect(hDlg,(LPSTR)S,FSELDLIST)==0) + ; + } else + if (HIWORD(lParam)==LBN_DBLCLK) + {if (S[I=strlen(S)-1]=='\\'||S[I]=='/') + {S[I]=0; + chdir(S); + } else + bdos(0xE,S[0]-'a',0); + getcwd(Sel_Dir,80); + Sel_Drive=bdos(0x19,0,0); + SetDlgItemText(hDlg,FSELDIR,(LPSTR)Sel_Dir); + DlgDirList(hDlg,(LPSTR)Fil_String,FSELLIST,0,0); + DlgDirList(hDlg,(LPSTR)Fil_String,FSELDLIST,0,0x0010|0x4000|0x8000); + SetDlgItemText(hDlg,FSELNAME,(LPSTR)Fil_String); + } else + if (HIWORD(lParam)==0) + Fsel_Exit(hDlg); + break; + case FSELNAME: + if (HIWORD(lParam)==0) + Fsel_Exit(hDlg); + break; + } + break; + case WM_INITDIALOG: + Fsel_Init(hDlg); + break; + default: + return FALSE; + } + return TRUE; +} + +int Prompt_Input() +{int Res; + Res=DialogBox(hInst,MAKEINTRESOURCE(PROMPTBOX),Curr_Wnd,lpprocPrompt); + UpdateWindow(Curr_Wnd); + return Res; +} + +void Prompt_Init(HWND hDlg) +{ + SetDlgItemText(hDlg,PROMPTTEXT,(LPSTR)Dsk_Rec); + Lst_Index=-1; +} + +void Prompt_Exit(HWND hDlg) +{ + GetDlgItemText(hDlg,PROMPTINPUT,(LPSTR)Dsk_Rec,Blksize); + if (Dsk_Rec[0]!=0) + {C_Move(Lst_Input[0],Lst_Input[1],132*9); + strcpy(Lst_Input[0],Dsk_Rec); + } + EndDialog(hDlg,TRUE); +} + +BOOL FAR WINAPI Prompt(HWND hDlg,unsigned message,WORD wParam,LONG lParam) +{char S[80]; + int I; + switch (message) + {case WM_COMMAND: + switch (wParam) + {case PROMPTOK: + Prompt_Exit(hDlg); + Fsel_Exit(hDlg); + break; + case PROMPTCANCEL: + EndDialog( hDlg, FALSE ); + break; + case PROMPTINPUT: + if (HIWORD(lParam)==0) + Prompt_Exit(hDlg); + break; + case PROMPTNEXT: + if (Lst_Index>0) + SetDlgItemText(hDlg,PROMPTINPUT,(LPSTR)Lst_Input[--Lst_Index]); + break; + case PROMPTPREV: + if (Lst_Index<9) + SetDlgItemText(hDlg,PROMPTINPUT,(LPSTR)Lst_Input[++Lst_Index]); + break; + } + break; + case WM_INITDIALOG: + Prompt_Init(hDlg); + break; + default: + return FALSE; + } + return TRUE; +} + +int Win_Newwindow(int B,int Show) +{ + return Make_Window(B,Show); +} + +void Win_Topwindow(int B) +{ + SetFocus(Curr_Wnd=Buf_Wnd[B]); +} + +void Swap_Window(int B) +{ + Out_Zap(); + Sav_Window(Cur_Buffer); + Sav_Cur=Cur_Buffer; + Cur_Buffer=B; + Current=(&Main_Buffer); + Load_Window(Cur_Buffer); + Curr_Wnd=Buf_Wnd[B]; +} + +void Restore_Window(int) +{ + Out_Zap(); + Sav_Window(Cur_Buffer); + Cur_Buffer=Sav_Cur; + Current=(&Main_Buffer); + Load_Window(Cur_Buffer); + Curr_Wnd=Buf_Wnd[Cur_Buffer]; +} + +void Win_Name(char *S) +{int I; + HMENU hMenu; + strcpy(Com_Arg,(char *)Txt_Sedt); + if (S==NULL) + strcat(Com_Arg,(char *)Txt_Untitled); else + strcat(Com_Arg,S); + SetWindowText(Curr_Wnd,Com_Arg); + for (I=0;I0) + LF.lfHeight*=-1; + LF.lfHeight--; + LF.lfWidth=0; + Buf_Font=CreateFontIndirect(&LF); + Old_Font=SelectObject(hDC,Buf_Font); + GetClientRect(Curr_Wnd,(LPRECT)&Rect); + GetTextMetrics( hDC, (LPTEXTMETRIC)&TM ); + Scr_Width=(Rect.right+1)/(Char_Width=TM.tmAveCharWidth); + Scr_Length=(Rect.bottom+1)/(Char_Height=TM.tmHeight); + if (Cursor_On) + HideCaret(Curr_Wnd); + DestroyCaret(); + CreateCaret( Curr_Wnd, (HBITMAP)NULL,(int)Char_Width, + (int)Char_Height); + SetCaretPos((int)(Char_Width*(My_Col-Scr_Shift-1)), + (int)(Char_Height*(My_Line-1))); + if (Cursor_On) + ShowCaret(Curr_Wnd); + SelectObject(hDC,Old_Font); + ReleaseDC(Curr_Wnd,hDC); + Refresh(); +} + +void Win_Smaller() +{int Old_Size; + RECT Rect; + HDC hDC; + TEXTMETRIC TM; + HANDLE Old_Font; + hDC = GetDC(Curr_Wnd); + DeleteObject(Buf_Font); + if (LF.lfHeight>0) + LF.lfHeight*=-1; + LF.lfHeight++; + LF.lfWidth=0; + Buf_Font=CreateFontIndirect(&LF); + Old_Font=SelectObject(hDC,Buf_Font); + GetClientRect(Curr_Wnd,(LPRECT)&Rect); + GetTextMetrics( hDC, (LPTEXTMETRIC)&TM ); + Scr_Width=(Rect.right+1)/(Char_Width=TM.tmAveCharWidth); + Scr_Length=(Rect.bottom+1)/(Char_Height=TM.tmHeight); + if (Cursor_On) + HideCaret(Curr_Wnd); + DestroyCaret(); + CreateCaret( Curr_Wnd, (HBITMAP)NULL,(int)Char_Width, + (int)Char_Height); + SetCaretPos((int)(Char_Width*(My_Col-Scr_Shift-1)), + (int)(Char_Height*(My_Line-1))); + if (Cursor_On) + ShowCaret(Curr_Wnd); + SelectObject(hDC,Old_Font); + ReleaseDC(Curr_Wnd,hDC); + Refresh(); +} + +void Win_Set_Num_Lock(void) +{Save_My_Num_Lock=1; +} + +void Win_Clear_Num_Lock(void) +{Save_My_Num_Lock=0; +} + +void Win_Reset_Num_Lock(void) +{GetKeyboardState(Keyb_State); + Keyb_State[VK_NUMLOCK]=Save_Their_Num_Lock; + SetKeyboardState(Keyb_State); +} -- cgit v1.2.3