Path: blob/master/src/jdk.internal.le/windows/native/lible/Kernel32.cpp
41149 views
/*1* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#include "jni.h"26#include "jni_util.h"27#include "jvm.h"28#include "jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl.h"2930#include <stdlib.h>31#include <wincon.h>32#include <winuser.h>3334static jclass pointerClass;35static jmethodID pointerConstructor;36static jfieldID pointerValue;3738static jclass intByReferenceClass;39static jfieldID intByReferenceValue;4041static jclass lastErrorExceptionClass;42static jmethodID lastErrorExceptionConstructor;4344//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CHAR_INFO45static jclass CHAR_INFO_Class;46static jmethodID CHAR_INFO_Constructor;47static jfieldID CHAR_INFO_uChar;48static jfieldID CHAR_INFO_Attributes;4950//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_CURSOR_INFO51static jclass CONSOLE_CURSOR_INFO_Class;52static jmethodID CONSOLE_CURSOR_INFO_Constructor;53static jfieldID CONSOLE_CURSOR_INFO_dwSize;54static jfieldID CONSOLE_CURSOR_INFO_bVisible;5556//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_SCREEN_BUFFER_INFO57static jclass CONSOLE_SCREEN_BUFFER_INFO_Class;58static jmethodID CONSOLE_SCREEN_BUFFER_INFO_Constructor;59static jfieldID CONSOLE_SCREEN_BUFFER_INFO_dwSize;60static jfieldID CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition;61static jfieldID CONSOLE_SCREEN_BUFFER_INFO_wAttributes;62static jfieldID CONSOLE_SCREEN_BUFFER_INFO_srWindow;63static jfieldID CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize;6465//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.COORD66static jclass COORD_Class;67static jmethodID COORD_Constructor;68static jfieldID COORD_X;69static jfieldID COORD_Y;7071//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD72static jclass INPUT_RECORD_Class;73static jmethodID INPUT_RECORD_Constructor;74static jfieldID INPUT_RECORD_EventType;75static jfieldID INPUT_RECORD_Event;7677//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD.EventUnion78static jclass EventUnion_Class;79static jmethodID EventUnion_Constructor;80static jfieldID EventUnion_KeyEvent;81static jfieldID EventUnion_MouseEvent;82static jfieldID EventUnion_WindowBufferSizeEvent;83static jfieldID EventUnion_MenuEvent;84static jfieldID EventUnion_FocusEvent;8586//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.KEY_EVENT_RECORD87static jclass KEY_EVENT_RECORD_Class;88static jmethodID KEY_EVENT_RECORD_Constructor;89static jfieldID KEY_EVENT_RECORD_bKeyDown;90static jfieldID KEY_EVENT_RECORD_wRepeatCount;91static jfieldID KEY_EVENT_RECORD_wVirtualKeyCode;92static jfieldID KEY_EVENT_RECORD_wVirtualScanCode;93static jfieldID KEY_EVENT_RECORD_uChar;94static jfieldID KEY_EVENT_RECORD_dwControlKeyState;9596//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MOUSE_EVENT_RECORD97static jclass MOUSE_EVENT_RECORD_Class;98static jmethodID MOUSE_EVENT_RECORD_Constructor;99static jfieldID MOUSE_EVENT_RECORD_dwMousePosition;100static jfieldID MOUSE_EVENT_RECORD_dwButtonState;101static jfieldID MOUSE_EVENT_RECORD_dwControlKeyState;102static jfieldID MOUSE_EVENT_RECORD_dwEventFlags;103104//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.WINDOW_BUFFER_SIZE_RECORD105static jclass WINDOW_BUFFER_SIZE_RECORD_Class;106static jmethodID WINDOW_BUFFER_SIZE_RECORD_Constructor;107static jfieldID WINDOW_BUFFER_SIZE_RECORD_dwSize;108109//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MENU_EVENT_RECORD110static jclass MENU_EVENT_RECORD_Class;111static jmethodID MENU_EVENT_RECORD_Constructor;112static jfieldID MENU_EVENT_RECORD_dwCommandId;113114//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.FOCUS_EVENT_RECORD115static jclass FOCUS_EVENT_RECORD_Class;116static jmethodID FOCUS_EVENT_RECORD_Constructor;117static jfieldID FOCUS_EVENT_RECORD_bSetFocus;118119//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.SMALL_RECT120static jclass SMALL_RECT_Class;121static jmethodID SMALL_RECT_Constructor;122static jfieldID SMALL_RECT_Left;123static jfieldID SMALL_RECT_Top;124static jfieldID SMALL_RECT_Right;125static jfieldID SMALL_RECT_Bottom;126127//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.UnionChar128static jclass UnionChar_Class;129static jmethodID UnionChar_Constructor;130static jfieldID UnionChar_UnicodeChar;131132JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_initIDs133(JNIEnv *env, jclass) {134jclass cls;135cls = env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Pointer");136CHECK_NULL(cls);137pointerClass = (jclass) env->NewGlobalRef(cls);138pointerConstructor = env->GetMethodID(cls, "<init>", "(J)V");139CHECK_NULL(pointerConstructor);140pointerValue = env->GetFieldID(cls, "value", "J");141CHECK_NULL(pointerValue);142143cls = env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/LastErrorException");144CHECK_NULL(cls);145lastErrorExceptionClass = (jclass) env->NewGlobalRef(cls);146lastErrorExceptionConstructor = env->GetMethodID(cls, "<init>", "(J)V");147CHECK_NULL(lastErrorExceptionConstructor);148149cls = env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/IntByReference");150CHECK_NULL(cls);151intByReferenceClass = (jclass) env->NewGlobalRef(cls);152intByReferenceValue = env->GetFieldID(cls, "value", "I");153CHECK_NULL(intByReferenceValue);154155//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CHAR_INFO156CHAR_INFO_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$CHAR_INFO"));157CHECK_NULL(CHAR_INFO_Class);158CHAR_INFO_Constructor = env->GetMethodID(cls, "<init>", "()V");159CHECK_NULL(CHAR_INFO_Constructor);160CHAR_INFO_uChar = env->GetFieldID(CHAR_INFO_Class, "uChar", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$UnionChar;");161CHECK_NULL(CHAR_INFO_uChar);162CHAR_INFO_Attributes = env->GetFieldID(CHAR_INFO_Class, "Attributes", "S");163CHECK_NULL(CHAR_INFO_Attributes);164165//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_CURSOR_INFO166CONSOLE_CURSOR_INFO_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$CONSOLE_CURSOR_INFO"));167CHECK_NULL(CONSOLE_CURSOR_INFO_Class);168CONSOLE_CURSOR_INFO_Constructor = env->GetMethodID(cls, "<init>", "()V");169CHECK_NULL(CONSOLE_CURSOR_INFO_Constructor);170CONSOLE_CURSOR_INFO_dwSize = env->GetFieldID(CONSOLE_CURSOR_INFO_Class, "dwSize", "I");171CHECK_NULL(CONSOLE_CURSOR_INFO_dwSize);172CONSOLE_CURSOR_INFO_bVisible = env->GetFieldID(CONSOLE_CURSOR_INFO_Class, "bVisible", "Z");173CHECK_NULL(CONSOLE_CURSOR_INFO_bVisible);174175//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.CONSOLE_SCREEN_BUFFER_INFO176CONSOLE_SCREEN_BUFFER_INFO_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$CONSOLE_SCREEN_BUFFER_INFO"));177CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_Class);178CONSOLE_SCREEN_BUFFER_INFO_Constructor = env->GetMethodID(cls, "<init>", "()V");179CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_Constructor);180CONSOLE_SCREEN_BUFFER_INFO_dwSize = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "dwSize", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;");181CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_dwSize);182CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "dwCursorPosition", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;");183CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition);184CONSOLE_SCREEN_BUFFER_INFO_wAttributes = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "wAttributes", "S");185CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_wAttributes);186CONSOLE_SCREEN_BUFFER_INFO_srWindow = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "srWindow", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$SMALL_RECT;");187CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_srWindow);188CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize = env->GetFieldID(CONSOLE_SCREEN_BUFFER_INFO_Class, "dwMaximumWindowSize", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;");189CHECK_NULL(CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize);190191//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.COORD192COORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD"));193CHECK_NULL(COORD_Class);194COORD_Constructor = env->GetMethodID(cls, "<init>", "()V");195CHECK_NULL(COORD_Constructor);196COORD_X = env->GetFieldID(COORD_Class, "X", "S");197CHECK_NULL(COORD_X);198COORD_Y = env->GetFieldID(COORD_Class, "Y", "S");199CHECK_NULL(COORD_Y);200201//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD202INPUT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD"));203CHECK_NULL(INPUT_RECORD_Class);204INPUT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V");205CHECK_NULL(INPUT_RECORD_Constructor);206INPUT_RECORD_EventType = env->GetFieldID(INPUT_RECORD_Class, "EventType", "S");207CHECK_NULL(INPUT_RECORD_EventType);208INPUT_RECORD_Event = env->GetFieldID(INPUT_RECORD_Class, "Event", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD$EventUnion;");209CHECK_NULL(INPUT_RECORD_Event);210211//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.INPUT_RECORD.EventUnion212EventUnion_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD$EventUnion"));213CHECK_NULL(EventUnion_Class);214EventUnion_Constructor = env->GetMethodID(cls, "<init>", "()V");215CHECK_NULL(EventUnion_Constructor);216EventUnion_KeyEvent = env->GetFieldID(EventUnion_Class, "KeyEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$KEY_EVENT_RECORD;");217CHECK_NULL(EventUnion_KeyEvent);218EventUnion_MouseEvent = env->GetFieldID(EventUnion_Class, "MouseEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MOUSE_EVENT_RECORD;");219CHECK_NULL(EventUnion_MouseEvent);220EventUnion_WindowBufferSizeEvent = env->GetFieldID(EventUnion_Class, "WindowBufferSizeEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$WINDOW_BUFFER_SIZE_RECORD;");221CHECK_NULL(EventUnion_WindowBufferSizeEvent);222EventUnion_MenuEvent = env->GetFieldID(EventUnion_Class, "MenuEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MENU_EVENT_RECORD;");223CHECK_NULL(EventUnion_MenuEvent);224EventUnion_FocusEvent = env->GetFieldID(EventUnion_Class, "FocusEvent", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$FOCUS_EVENT_RECORD;");225CHECK_NULL(EventUnion_FocusEvent);226227//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.KEY_EVENT_RECORD228KEY_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$KEY_EVENT_RECORD"));229CHECK_NULL(KEY_EVENT_RECORD_Class);230KEY_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V");231CHECK_NULL(KEY_EVENT_RECORD_Constructor);232KEY_EVENT_RECORD_bKeyDown = env->GetFieldID(KEY_EVENT_RECORD_Class, "bKeyDown", "Z");233CHECK_NULL(KEY_EVENT_RECORD_bKeyDown);234KEY_EVENT_RECORD_wRepeatCount = env->GetFieldID(KEY_EVENT_RECORD_Class, "wRepeatCount", "S");235CHECK_NULL(KEY_EVENT_RECORD_wRepeatCount);236KEY_EVENT_RECORD_wVirtualKeyCode = env->GetFieldID(KEY_EVENT_RECORD_Class, "wVirtualKeyCode", "S");237CHECK_NULL(KEY_EVENT_RECORD_wVirtualKeyCode);238KEY_EVENT_RECORD_wVirtualScanCode = env->GetFieldID(KEY_EVENT_RECORD_Class, "wVirtualScanCode", "S");239CHECK_NULL(KEY_EVENT_RECORD_wVirtualScanCode);240KEY_EVENT_RECORD_uChar = env->GetFieldID(KEY_EVENT_RECORD_Class, "uChar", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$UnionChar;");241CHECK_NULL(KEY_EVENT_RECORD_uChar);242KEY_EVENT_RECORD_dwControlKeyState = env->GetFieldID(KEY_EVENT_RECORD_Class, "dwControlKeyState", "I");243CHECK_NULL(KEY_EVENT_RECORD_dwControlKeyState);244245//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MOUSE_EVENT_RECORD246MOUSE_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MOUSE_EVENT_RECORD"));247CHECK_NULL(MOUSE_EVENT_RECORD_Class);248MOUSE_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V");249CHECK_NULL(MOUSE_EVENT_RECORD_Constructor);250MOUSE_EVENT_RECORD_dwMousePosition = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwMousePosition", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;");251CHECK_NULL(MOUSE_EVENT_RECORD_dwMousePosition);252MOUSE_EVENT_RECORD_dwButtonState = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwButtonState", "I");253CHECK_NULL(MOUSE_EVENT_RECORD_dwButtonState);254MOUSE_EVENT_RECORD_dwControlKeyState = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwControlKeyState", "I");255CHECK_NULL(MOUSE_EVENT_RECORD_dwControlKeyState);256MOUSE_EVENT_RECORD_dwEventFlags = env->GetFieldID(MOUSE_EVENT_RECORD_Class, "dwEventFlags", "I");257CHECK_NULL(MOUSE_EVENT_RECORD_dwEventFlags);258259//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.WINDOW_BUFFER_SIZE_RECORD260WINDOW_BUFFER_SIZE_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$WINDOW_BUFFER_SIZE_RECORD"));261CHECK_NULL(WINDOW_BUFFER_SIZE_RECORD_Class);262WINDOW_BUFFER_SIZE_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V");263CHECK_NULL(WINDOW_BUFFER_SIZE_RECORD_Constructor);264WINDOW_BUFFER_SIZE_RECORD_dwSize = env->GetFieldID(WINDOW_BUFFER_SIZE_RECORD_Class, "dwSize", "Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32$COORD;");265CHECK_NULL(WINDOW_BUFFER_SIZE_RECORD_dwSize);266267//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.MENU_EVENT_RECORD268MENU_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$MENU_EVENT_RECORD"));269CHECK_NULL(MENU_EVENT_RECORD_Class);270MENU_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V");271CHECK_NULL(MENU_EVENT_RECORD_Constructor);272MENU_EVENT_RECORD_dwCommandId = env->GetFieldID(MENU_EVENT_RECORD_Class, "dwCommandId", "I");273CHECK_NULL(MENU_EVENT_RECORD_dwCommandId);274275//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.FOCUS_EVENT_RECORD276FOCUS_EVENT_RECORD_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$FOCUS_EVENT_RECORD"));277CHECK_NULL(FOCUS_EVENT_RECORD_Class);278FOCUS_EVENT_RECORD_Constructor = env->GetMethodID(cls, "<init>", "()V");279CHECK_NULL(FOCUS_EVENT_RECORD_Constructor);280FOCUS_EVENT_RECORD_bSetFocus = env->GetFieldID(FOCUS_EVENT_RECORD_Class, "bSetFocus", "Z");281CHECK_NULL(FOCUS_EVENT_RECORD_bSetFocus);282283//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.SMALL_RECT284SMALL_RECT_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$SMALL_RECT"));285CHECK_NULL(SMALL_RECT_Class);286SMALL_RECT_Constructor = env->GetMethodID(cls, "<init>", "()V");287CHECK_NULL(SMALL_RECT_Constructor);288SMALL_RECT_Left = env->GetFieldID(SMALL_RECT_Class, "Left", "S");289CHECK_NULL(SMALL_RECT_Left);290SMALL_RECT_Top = env->GetFieldID(SMALL_RECT_Class, "Top", "S");291CHECK_NULL(SMALL_RECT_Top);292SMALL_RECT_Right = env->GetFieldID(SMALL_RECT_Class, "Right", "S");293CHECK_NULL(SMALL_RECT_Right);294SMALL_RECT_Bottom = env->GetFieldID(SMALL_RECT_Class, "Bottom", "S");295CHECK_NULL(SMALL_RECT_Bottom);296297//jdk.internal.org.jline.terminal.impl.jna.win.Kernel32.UnionChar298UnionChar_Class = (jclass) env->NewGlobalRef(env->FindClass("jdk/internal/org/jline/terminal/impl/jna/win/Kernel32$UnionChar"));299CHECK_NULL(UnionChar_Class);300UnionChar_Constructor = env->GetMethodID(cls, "<init>", "()V");301CHECK_NULL(UnionChar_Constructor);302UnionChar_UnicodeChar = env->GetFieldID(UnionChar_Class, "UnicodeChar", "C");303CHECK_NULL(UnionChar_UnicodeChar);304}305306/*307* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl308* Method: WaitForSingleObject309* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;I)I310*/311JNIEXPORT jint JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_WaitForSingleObject312(JNIEnv *env, jobject kernel, jobject in_hHandle, jint in_dwMilliseconds) {313HANDLE h = GetStdHandle((jint) env->GetLongField(in_hHandle, pointerValue));314return WaitForSingleObject(h, in_dwMilliseconds);315}316317/*318* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl319* Method: GetStdHandle320* Signature: (I)Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;321*/322JNIEXPORT jobject JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetStdHandle323(JNIEnv *env, jobject, jint nStdHandle) {324return env->NewObject(pointerClass,325pointerConstructor,326nStdHandle);327}328329/*330* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl331* Method: GetConsoleOutputCP332* Signature: ()I333*/334JNIEXPORT jint JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetConsoleOutputCP335(JNIEnv *, jobject) {336return GetConsoleOutputCP();337}338339/*340* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl341* Method: FillConsoleOutputCharacter342* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;CILjdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;Ljdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V343*/344JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_FillConsoleOutputCharacter345(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jchar in_cCharacter, jint in_nLength, jobject in_dwWriteCoord, jobject out_lpNumberOfCharsWritten) {346HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));347DWORD written;348COORD coord;349coord.X = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_X);350coord.Y = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_Y);351if (!FillConsoleOutputCharacter(h, (CHAR) in_cCharacter, in_nLength, coord, &written)) {352DWORD error = GetLastError();353jobject exc = env->NewObject(lastErrorExceptionClass,354lastErrorExceptionConstructor,355(jlong) error);356env->Throw((jthrowable) exc);357return ;358}359env->SetIntField(out_lpNumberOfCharsWritten, intByReferenceValue, written);360}361362/*363* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl364* Method: FillConsoleOutputAttribute365* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;SILjdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;Ljdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V366*/367JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_FillConsoleOutputAttribute368(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jshort in_wAttribute, jint in_nLength, jobject in_dwWriteCoord, jobject out_lpNumberOfAttrsWritten) {369HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));370DWORD written;371COORD coord;372coord.X = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_X);373coord.Y = (SHORT) env->GetLongField(in_dwWriteCoord, COORD_Y);374if (!FillConsoleOutputAttribute(h, in_wAttribute, in_nLength, coord, &written)) {375DWORD error = GetLastError();376jobject exc = env->NewObject(lastErrorExceptionClass,377lastErrorExceptionConstructor,378(jlong) error);379env->Throw((jthrowable) exc);380return ;381}382env->SetIntField(out_lpNumberOfAttrsWritten, intByReferenceValue, written);383}384385/*386* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl387* Method: GetConsoleMode388* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V389*/390JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetConsoleMode391(JNIEnv *env, jobject, jobject in_hConsoleOutput, jobject out_lpMode) {392HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));393DWORD mode;394if (!GetConsoleMode(h, &mode)) {395DWORD error = GetLastError();396jobject exc = env->NewObject(lastErrorExceptionClass,397lastErrorExceptionConstructor,398(jlong) error);399env->Throw((jthrowable) exc);400return ;401}402env->SetIntField(out_lpMode, intByReferenceValue, mode);403}404405/*406* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl407* Method: GetConsoleScreenBufferInfo408* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/CONSOLE_SCREEN_BUFFER_INFO;)V409*/410JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_GetConsoleScreenBufferInfo411(JNIEnv *env, jobject, jobject in_hConsoleOutput, jobject/*CONSOLE_SCREEN_BUFFER_INFO*/ out_lpConsoleScreenBufferInfo) {412HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));413CONSOLE_SCREEN_BUFFER_INFO buffer;414if (!GetConsoleScreenBufferInfo(h, &buffer)) {415DWORD error = GetLastError();416jobject exc = env->NewObject(lastErrorExceptionClass,417lastErrorExceptionConstructor,418(jlong) error);419env->Throw((jthrowable) exc);420return ;421}422423jobject dwSize = env->NewObject(COORD_Class,424COORD_Constructor);425env->SetIntField(dwSize, COORD_X, buffer.dwSize.X);426env->SetIntField(dwSize, COORD_Y, buffer.dwSize.Y);427env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_dwSize, dwSize);428429jobject dwCursorPosition = env->NewObject(COORD_Class,430COORD_Constructor);431env->SetIntField(dwCursorPosition, COORD_X, buffer.dwCursorPosition.X);432env->SetIntField(dwCursorPosition, COORD_Y, buffer.dwCursorPosition.Y);433env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_dwCursorPosition, dwCursorPosition);434435env->SetIntField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_wAttributes, buffer.wAttributes);436437jobject srWindow = env->NewObject(SMALL_RECT_Class,438SMALL_RECT_Constructor);439env->SetIntField(srWindow, SMALL_RECT_Left, buffer.srWindow.Left);440env->SetIntField(srWindow, SMALL_RECT_Top, buffer.srWindow.Top);441env->SetIntField(srWindow, SMALL_RECT_Right, buffer.srWindow.Right);442env->SetIntField(srWindow, SMALL_RECT_Bottom, buffer.srWindow.Bottom);443env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_srWindow, srWindow);444445jobject dwMaximumWindowSize = env->NewObject(COORD_Class,446COORD_Constructor);447env->SetIntField(dwMaximumWindowSize, COORD_X, buffer.dwMaximumWindowSize.X);448env->SetIntField(dwMaximumWindowSize, COORD_Y, buffer.dwMaximumWindowSize.Y);449env->SetObjectField(out_lpConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO_dwMaximumWindowSize, dwMaximumWindowSize);450}451452/*453* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl454* Method: ReadConsoleInput455* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;[Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/INPUT_RECORD;ILjdk/internal/org/jline/terminal/impl/jna/win/IntByReference;)V456*/457JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_ReadConsoleInput458(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jobjectArray/*INPUT_RECORD[]*/ out_lpBuffer, jint in_nLength, jobject out_lpNumberOfEventsRead) {459HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));460INPUT_RECORD *buffer = new INPUT_RECORD[in_nLength];461DWORD numberOfEventsRead;462if (!ReadConsoleInputW(h, buffer, in_nLength, &numberOfEventsRead)) {463delete buffer;464DWORD error = GetLastError();465jobject exc = env->NewObject(lastErrorExceptionClass,466lastErrorExceptionConstructor,467(jlong) error);468env->Throw((jthrowable) exc);469return ;470}471for (unsigned int i = 0; i < numberOfEventsRead; i++) {472jobject record = env->NewObject(INPUT_RECORD_Class,473INPUT_RECORD_Constructor);474env->SetShortField(record, INPUT_RECORD_EventType, buffer[i].EventType);475switch (buffer[i].EventType) {476case KEY_EVENT: {477jobject keyEvent = env->NewObject(KEY_EVENT_RECORD_Class,478KEY_EVENT_RECORD_Constructor);479env->SetBooleanField(keyEvent, KEY_EVENT_RECORD_bKeyDown, buffer[i].Event.KeyEvent.bKeyDown);480env->SetShortField(keyEvent, KEY_EVENT_RECORD_wRepeatCount, buffer[i].Event.KeyEvent.wRepeatCount);481env->SetShortField(keyEvent, KEY_EVENT_RECORD_wVirtualKeyCode, buffer[i].Event.KeyEvent.wVirtualKeyCode);482env->SetShortField(keyEvent, KEY_EVENT_RECORD_wVirtualScanCode, buffer[i].Event.KeyEvent.wVirtualScanCode);483484jobject unionChar = env->NewObject(UnionChar_Class,485UnionChar_Constructor);486487env->SetIntField(unionChar, UnionChar_UnicodeChar, buffer[i].Event.KeyEvent.uChar.UnicodeChar);488489env->SetObjectField(keyEvent, KEY_EVENT_RECORD_uChar, unionChar);490491env->SetIntField(keyEvent, KEY_EVENT_RECORD_dwControlKeyState, buffer[i].Event.KeyEvent.dwControlKeyState);492493jobject event = env->NewObject(EventUnion_Class,494EventUnion_Constructor);495496env->SetObjectField(event, EventUnion_KeyEvent, keyEvent);497env->SetObjectField(record, INPUT_RECORD_Event, event);498break;499}500case MOUSE_EVENT: {501jobject mouseEvent = env->NewObject(MOUSE_EVENT_RECORD_Class,502MOUSE_EVENT_RECORD_Constructor);503504jobject dwMousePosition = env->NewObject(COORD_Class,505COORD_Constructor);506env->SetIntField(dwMousePosition, COORD_X, buffer[i].Event.MouseEvent.dwMousePosition.X);507env->SetIntField(dwMousePosition, COORD_Y, buffer[i].Event.MouseEvent.dwMousePosition.Y);508env->SetObjectField(mouseEvent, MOUSE_EVENT_RECORD_dwMousePosition, dwMousePosition);509env->SetIntField(mouseEvent, MOUSE_EVENT_RECORD_dwButtonState, buffer[i].Event.MouseEvent.dwButtonState);510env->SetIntField(mouseEvent, MOUSE_EVENT_RECORD_dwControlKeyState, buffer[i].Event.MouseEvent.dwControlKeyState);511env->SetIntField(mouseEvent, MOUSE_EVENT_RECORD_dwEventFlags, buffer[i].Event.MouseEvent.dwEventFlags);512513jobject event = env->NewObject(EventUnion_Class,514EventUnion_Constructor);515516env->SetObjectField(event, EventUnion_MouseEvent, mouseEvent);517env->SetObjectField(record, INPUT_RECORD_Event, event);518break;519}520case WINDOW_BUFFER_SIZE_EVENT: {521jobject windowBufferSize = env->NewObject(WINDOW_BUFFER_SIZE_RECORD_Class,522WINDOW_BUFFER_SIZE_RECORD_Constructor);523524jobject dwSize = env->NewObject(COORD_Class,525COORD_Constructor);526env->SetIntField(dwSize, COORD_X, buffer[i].Event.WindowBufferSizeEvent.dwSize.X);527env->SetIntField(dwSize, COORD_Y, buffer[i].Event.WindowBufferSizeEvent.dwSize.Y);528env->SetObjectField(windowBufferSize, WINDOW_BUFFER_SIZE_RECORD_dwSize, dwSize);529530jobject event = env->NewObject(EventUnion_Class,531EventUnion_Constructor);532533env->SetObjectField(event, EventUnion_WindowBufferSizeEvent, windowBufferSize);534env->SetObjectField(record, INPUT_RECORD_Event, event);535break;536}537case MENU_EVENT: {538jobject menuEvent = env->NewObject(MENU_EVENT_RECORD_Class,539MENU_EVENT_RECORD_Constructor);540541env->SetBooleanField(menuEvent, MENU_EVENT_RECORD_dwCommandId, buffer[i].Event.MenuEvent.dwCommandId);542543jobject event = env->NewObject(EventUnion_Class,544EventUnion_Constructor);545546env->SetObjectField(event, EventUnion_MenuEvent, menuEvent);547env->SetObjectField(record, INPUT_RECORD_Event, event);548break;549}550case FOCUS_EVENT: {551jobject focusEvent = env->NewObject(FOCUS_EVENT_RECORD_Class,552FOCUS_EVENT_RECORD_Constructor);553554env->SetIntField(focusEvent, FOCUS_EVENT_RECORD_bSetFocus, buffer[i].Event.FocusEvent.bSetFocus);555556jobject event = env->NewObject(EventUnion_Class,557EventUnion_Constructor);558559env->SetObjectField(event, EventUnion_FocusEvent, focusEvent);560env->SetObjectField(record, INPUT_RECORD_Event, event);561break;562}563}564env->SetObjectArrayElement(out_lpBuffer, i, record);565}566env->SetIntField(out_lpNumberOfEventsRead, intByReferenceValue, numberOfEventsRead);567delete buffer;568}569570/*571* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl572* Method: SetConsoleCursorPosition573* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;)V574*/575JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleCursorPosition576(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jobject in_dwCursorPosition) {577HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));578COORD coord;579coord.X = (SHORT) env->GetLongField(in_dwCursorPosition, COORD_X);580coord.Y = (SHORT) env->GetLongField(in_dwCursorPosition, COORD_Y);581if (!SetConsoleCursorPosition(h, coord)) {582DWORD error = GetLastError();583jobject exc = env->NewObject(lastErrorExceptionClass,584lastErrorExceptionConstructor,585(jlong) error);586env->Throw((jthrowable) exc);587return;588}589}590591/*592* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl593* Method: SetConsoleMode594* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;I)V595*/596JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleMode597(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jint in_dwMode) {598HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));599if (!SetConsoleMode(h, in_dwMode)) {600DWORD error = GetLastError();601jobject exc = env->NewObject(lastErrorExceptionClass,602lastErrorExceptionConstructor,603(jlong) error);604env->Throw((jthrowable) exc);605return ;606}607}608609/*610* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl611* Method: SetConsoleTextAttribute612* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;S)V613*/614JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleTextAttribute615(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jshort in_wAttributes) {616HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));617if (!SetConsoleTextAttribute(h, in_wAttributes)) {618DWORD error = GetLastError();619jobject exc = env->NewObject(lastErrorExceptionClass,620lastErrorExceptionConstructor,621(jlong) error);622env->Throw((jthrowable) exc);623return ;624}625}626627/*628* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl629* Method: SetConsoleTitle630* Signature: (Ljava/lang/String;)V631*/632JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_SetConsoleTitle633(JNIEnv *env, jobject, jstring in_lpConsoleTitle) {634const char *chars = env->GetStringUTFChars(in_lpConsoleTitle, NULL);635if (!SetConsoleTitle(chars)) {636env->ReleaseStringUTFChars(in_lpConsoleTitle, chars);637DWORD error = GetLastError();638jobject exc = env->NewObject(lastErrorExceptionClass,639lastErrorExceptionConstructor,640(jlong) error);641env->Throw((jthrowable) exc);642return ;643}644env->ReleaseStringUTFChars(in_lpConsoleTitle, chars);645}646647/*648* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl649* Method: WriteConsoleW650* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;[CILjdk/internal/org/jline/terminal/impl/jna/win/IntByReference;Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;)V651*/652JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_WriteConsoleW653(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jcharArray in_lpBuffer, jint in_nNumberOfCharsToWrite, jobject out_lpNumberOfCharsWritten, jobject) {654HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));655jchar *chars = new jchar[in_nNumberOfCharsToWrite];656env->GetCharArrayRegion(in_lpBuffer, 0, in_nNumberOfCharsToWrite, chars);657DWORD written;658if (!WriteConsoleW(h, chars, in_nNumberOfCharsToWrite, &written, NULL)) {659delete chars;660DWORD error = GetLastError();661jobject exc = env->NewObject(lastErrorExceptionClass,662lastErrorExceptionConstructor,663(jlong) error);664env->Throw((jthrowable) exc);665return ;666}667668env->SetIntField(out_lpNumberOfCharsWritten, intByReferenceValue, written);669delete chars;670}671672/*673* Class: jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl674* Method: ScrollConsoleScreenBuffer675* Signature: (Ljdk/internal/org/jline/terminal/impl/jna/win/Pointer;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/SMALL_RECT;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/SMALL_RECT;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/COORD;Ljdk/internal/org/jline/terminal/impl/jna/win/Kernel32/CHAR_INFO;)V676*/677JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_win_Kernel32Impl_ScrollConsoleScreenBuffer678(JNIEnv *env, jobject kernel, jobject in_hConsoleOutput, jobject in_lpScrollRectangle, jobject in_lpClipRectangle, jobject in_dwDestinationOrigin, jobject in_lpFill) {679HANDLE h = GetStdHandle((jint) env->GetLongField(in_hConsoleOutput, pointerValue));680681SMALL_RECT scrollRectangle;682scrollRectangle.Left = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Left);683scrollRectangle.Top = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Top);684scrollRectangle.Right = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Right);685scrollRectangle.Bottom = (SHORT) env->GetLongField(in_lpScrollRectangle, SMALL_RECT_Bottom);686687SMALL_RECT clipRectangle;688clipRectangle.Left = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Left);689clipRectangle.Top = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Top);690clipRectangle.Right = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Right);691clipRectangle.Bottom = (SHORT) env->GetLongField(in_lpClipRectangle, SMALL_RECT_Bottom);692693COORD destinationOrigin;694destinationOrigin.X = (SHORT) env->GetLongField(in_dwDestinationOrigin, COORD_X);695destinationOrigin.Y = (SHORT) env->GetLongField(in_dwDestinationOrigin, COORD_Y);696697CHAR_INFO charInfo;698charInfo.Char.UnicodeChar = env->GetCharField(env->GetObjectField(in_lpFill, CHAR_INFO_uChar), UnionChar_UnicodeChar);699charInfo.Attributes = env->GetShortField(in_lpFill, CHAR_INFO_Attributes);700701if (!ScrollConsoleScreenBuffer(h, &scrollRectangle, &clipRectangle, destinationOrigin, &charInfo)) {702DWORD error = GetLastError();703jobject exc = env->NewObject(lastErrorExceptionClass,704lastErrorExceptionConstructor,705(jlong) error);706env->Throw((jthrowable) exc);707return ;708}709}710711712