diff --git a/src/lib/keymap.c b/src/lib/keymap.c index c4c5f5f..b326ced 100644 --- a/src/lib/keymap.c +++ b/src/lib/keymap.c @@ -30,6 +30,7 @@ #include "statusc.h" #include "trace_dsc.h" #include "utilc.h" +#include "lib3270.h" #undef COLS extern int cCOLS; @@ -66,8 +67,7 @@ struct keymap { #define IS_INACTIVE(k) ((k)->hints[0] & KM_INACTIVE) -KEYBOARD_INFO *keyboard_info_3270 = 0; - +const KEYBOARD_INFO *keyboard_info_3270 = 0; static struct keymap *master_keymap = NULL; static struct keymap **nextk = &master_keymap; @@ -812,3 +812,10 @@ keymap_dump(void) } } } + +int set_3270_keyboard(const KEYBOARD_INFO *kbd) +{ + keyboard_info_3270 = kbd; + return 0; +} + diff --git a/src/lib/keymapc.h b/src/lib/keymapc.h index cff6bbc..c8e29fc 100644 --- a/src/lib/keymapc.h +++ b/src/lib/keymapc.h @@ -13,6 +13,8 @@ /* c3270 version of keymapc.h */ +#include "lib3270.h" + #define KM_CTRL 0x0001 #define KM_META 0x0002 @@ -21,24 +23,5 @@ extern char *lookup_key(int k); extern void keymap_dump(void); extern const char *decode_key(int k, int hint, char *buf); -#pragma pack(1) - -typedef struct _keytable -{ - const char *name; - int code; -} KEYTABLE; - -typedef struct _keyboard_info -{ - unsigned short sz; - unsigned short magic; - - void (*beep)(void); - - const KEYTABLE *keys; -} KEYBOARD_INFO; - -#pragma pack() diff --git a/src/lib/lib3270.h b/src/lib/lib3270.h index 8f09175..1181c7b 100644 --- a/src/lib/lib3270.h +++ b/src/lib/lib3270.h @@ -12,15 +12,79 @@ * for more details. */ -/* Non-display version of screen.h */ +#ifndef LIB3270_INCLUDED + +#define LIB3270_INCLUDED #ifdef __cplusplus extern "C" { #endif + +#pragma pack(1) + +#define SCREEN_MAGIC 0x4871 + +typedef struct _screen_callback +{ + unsigned short sz; + unsigned short magic; + + void (*screen_init)(void); + void (*screen_disp)(Boolean erasing unused); + void (*screen_suspend)(void); + void (*screen_resume)(void); + + void (*cursor_move)(int baddr); + void (*toggle_monocase)(struct toggle *t unused, enum toggle_type tt unused); + + void (*status_ctlr_done)(void); + void (*status_insert_mode)(Boolean on); + void (*status_minus)(void); + void (*status_oerr)(int error_type); + void (*status_reset)(void); + void (*status_reverse_mode)(Boolean on); + void (*status_syswait)(void); + void (*status_twait)(void); + void (*status_typeahead)(Boolean on); + void (*status_compose)(Boolean on, unsigned char c, enum keytype keytype); + void (*status_lu)(const char *lu); + + void (*ring_bell)(void); + void (*screen_flip)(void); + void (*screen_width)(int width); + + void (*Redraw_action)(Widget w, XEvent *event, String *params, Cardinal *num_params); + +} SCREEN_CALLBACK; + +typedef struct _keytable +{ + const char *name; + int code; +} KEYTABLE; + +typedef struct _keyboard_info +{ + unsigned short sz; + unsigned short magic; + + void (*beep)(void); + + const KEYTABLE *keys; +} KEYBOARD_INFO; + +#pragma pack() + +int set_3270_screen(const SCREEN_CALLBACK *scr); +int set_3270_keyboard(const KEYBOARD_INFO *kbd); int run_emulator(const char *cl_hostname); + #ifdef __cplusplus } #endif + + +#endif // LIB3270_INCLUDED diff --git a/src/lib/screen.c b/src/lib/screen.c index c5d1c9c..a7d00af 100644 --- a/src/lib/screen.c +++ b/src/lib/screen.c @@ -36,12 +36,19 @@ #include "utilc.h" #include "widec.h" #include "xioc.h" +#include "lib3270.h" /*---[ Publics ]--------------------------------------------------------------*/ -SCREEN_CALLBACK *screen_callbacks_3270 = 0; -Boolean escaped = True; +const SCREEN_CALLBACK *screen_callbacks_3270 = 0; +Boolean escaped = True; +/* Set callback structure */ +int set_3270_screen(const SCREEN_CALLBACK *scr) +{ + screen_callbacks_3270 = scr; + return 0; +} /* Initialize the screen. */ void screen_init(void) diff --git a/src/lib/screenc.h b/src/lib/screenc.h index e0f6548..8484c10 100644 --- a/src/lib/screenc.h +++ b/src/lib/screenc.h @@ -13,47 +13,7 @@ /* c3270 version of screenc.h */ - -#pragma pack(1) - -#define SCREEN_MAGIC 0x4871 - -typedef struct _screen_callback -{ - unsigned short sz; - unsigned short magic; - - void (*screen_init)(void); - void (*screen_disp)(Boolean erasing unused); - void (*screen_suspend)(void); - void (*screen_resume)(void); - - void (*cursor_move)(int baddr); - void (*toggle_monocase)(struct toggle *t unused, enum toggle_type tt unused); - - void (*status_ctlr_done)(void); - void (*status_insert_mode)(Boolean on); - void (*status_minus)(void); - void (*status_oerr)(int error_type); - void (*status_reset)(void); - void (*status_reverse_mode)(Boolean on); - void (*status_syswait)(void); - void (*status_twait)(void); - void (*status_typeahead)(Boolean on); - void (*status_compose)(Boolean on, unsigned char c, enum keytype keytype); - void (*status_lu)(const char *lu); - - void (*ring_bell)(void); - void (*screen_flip)(void); - void (*screen_width)(int width); - - void (*Redraw_action)(Widget w, XEvent *event, String *params, Cardinal *num_params); - -} SCREEN_CALLBACK; - -#pragma pack() - -extern SCREEN_CALLBACK *screen_callbacks_3270; +#include "lib3270.h" #define blink_start() #define display_heightMM() 100 @@ -67,18 +27,11 @@ extern SCREEN_CALLBACK *screen_callbacks_3270; #define screen_scroll() extern void cursor_move(int baddr); -extern void cursor_move(int baddr); extern void ring_bell(void); -extern void ring_bell(void); -extern void screen_132(void); extern void screen_132(void); extern void screen_80(void); -extern void screen_80(void); -extern void screen_disp(Boolean erasing); extern void screen_disp(Boolean erasing); extern void screen_init(void); -extern void screen_init(void); -extern void screen_flip(void); extern void screen_flip(void); extern void screen_resume(void); extern void screen_suspend(void); -- libgit2 0.21.2