1
1

Numerous OS/2 and NT fixes. Borland C++ for OS/2 supported

Этот коммит содержится в:
Pavel Machek 1998-03-23 05:27:15 +00:00
родитель 8be7ff1383
Коммит 8665ccd219
17 изменённых файлов: 190 добавлений и 383 удалений

Просмотреть файл

@ -3,6 +3,7 @@
* *
* Written by Miguel de Icaza * Written by Miguel de Icaza
*/ */
#include <config.h>
#include "util.h" #include "util.h"
#include <gnome.h> #include <gnome.h>
#include <gdk/gdkkeysyms.h> #include <gdk/gdkkeysyms.h>

Просмотреть файл

@ -1,3 +1,7 @@
Mon Mar 23 08:16:12 1998 Pavel Roskin <pavel@absolute.spb.su>
* nt/key.nt.c: cleanup, more keys work (not all)
Sat Mar 7 14:43:27 1998 Pavel Roskin <pavel@absolute.spb.su> Sat Mar 7 14:43:27 1998 Pavel Roskin <pavel@absolute.spb.su>
* nt/Makefile.NT, nt/Makefile.VC4: rewritten for GNU make. * nt/Makefile.NT, nt/Makefile.VC4: rewritten for GNU make.

Просмотреть файл

@ -113,7 +113,6 @@ SRCS= $(EXTRA_MC_SRCS) \
dirhist.c \ dirhist.c \
main.c \ main.c \
popt.c \ popt.c \
mouse.c \
text.c \ text.c \
screen.c screen.c

Просмотреть файл

@ -44,15 +44,6 @@ int double_click_speed; /* they are here to keep linker happy */
int mou_auto_repeat; int mou_auto_repeat;
int use_8th_bit_as_meta = 0; int use_8th_bit_as_meta = 0;
/* Prototypes */
static int EscapeKey (char* seq);
static int ControlKey (char* seq);
static int AltKey (char *seq);
static int VKtoCurses (int vkcode);
static int correct_key_code (int c);
/* Static Tables */ /* Static Tables */
struct { struct {
int key_code; int key_code;
@ -81,13 +72,6 @@ struct {
{ KEY_IC, VK_INSERT }, { KEY_IC, VK_INSERT },
{ KEY_DC, VK_DELETE }, { KEY_DC, VK_DELETE },
{ KEY_BACKSPACE, VK_BACK }, { KEY_BACKSPACE, VK_BACK },
{ '\t', VK_TAB },
// { KEY_ENTER, VK_RETURN },
// { KEY_ENTER, VK_EXECUTE },
{ '\n', VK_RETURN },
{ '\n', VK_EXECUTE },
{ ' ', VK_SPACE },
// { KEY_PRINT, VK_SNAPSHOT },
{ KEY_PPAGE, VK_PRIOR }, // Movement keys { KEY_PPAGE, VK_PRIOR }, // Movement keys
{ KEY_NPAGE, VK_NEXT }, { KEY_NPAGE, VK_NEXT },
@ -98,72 +82,78 @@ struct {
{ KEY_HOME, VK_HOME }, { KEY_HOME, VK_HOME },
{ KEY_END, VK_END }, { KEY_END, VK_END },
{ KEY_KP_MULTIPLY, VK_MULTIPLY }, // Numeric pad { ALT('*'), VK_MULTIPLY }, // Numeric pad
{ KEY_KP_ADD, VK_ADD }, { ALT('+'), VK_ADD },
{ KEY_KP_SUBTRACT, VK_SUBTRACT }, { ALT('-'), VK_SUBTRACT },
/* Control key codes */ { ESC_CHAR, VK_ESCAPE }, /* ESC */
{ 0, VK_CONTROL }, /* Control */
{ 0, VK_MENU }, /* Alt */
// { 0, VK_ESCAPE }, /* ESC */
{ ESC_CHAR, VK_ESCAPE }, /* ESC */
/* Key codes to ignore */
{ -1, VK_SHIFT }, /* Shift when released generates a key event */
{ -1, VK_CAPITAL }, /* Caps-lock */
#if WINVER >= 0x400 /* new Chicago key codes (not in 3.x headers) */
{ -1, VK_APPS }, /* "Application key" */
{ -1, VK_LWIN }, /* Left "Windows" key */
{ -1, VK_RWIN }, /* Right "Windows" key */
#endif
{ 0, 0} { 0, 0}
}; };
/* Special handlers for control key codes
Note that howmany must be less than seq_buffer len
*/
struct {
int vkcode;
int (*func_hdlr)(char *);
int howmany;
} key_control_table[] = {
{ VK_ESCAPE, EscapeKey, 1 },
{ VK_CONTROL, ControlKey, 1 },
{ VK_MENU, AltKey, 1 },
{ 0, NULL, 0},
};
/* init_key - Called in main.c to initialize ourselves /* init_key - Called in main.c to initialize ourselves
Get handle to console input Get handle to console input
*/ */
void init_key (void) void init_key (void)
{ {
win32APICALL_HANDLE (hConsoleInput, /* = */ GetStdHandle (STD_INPUT_HANDLE)); win32APICALL_HANDLE (hConsoleInput, GetStdHandle (STD_INPUT_HANDLE));
} }
/* The maximum sequence length (32 + null terminator) */ int ctrl_pressed ()
static int seq_buffer[33];
static int *seq_append = 0;
static int push_char (int c)
{ {
if (!seq_append) return dwSaved_ControlState & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED);
seq_append = seq_buffer; }
if (seq_append == &(seq_buffer [sizeof (seq_buffer)-2])) int shift_pressed ()
{
return dwSaved_ControlState & SHIFT_PRESSED;
}
int alt_pressed ()
{
return dwSaved_ControlState & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED);
}
static int VKtoCurses (int a_vkc)
{
int i;
for (i = 0; key_table[i].vkcode != 0; i++)
if (a_vkc == key_table[i].vkcode) {
return key_table[i].key_code;
}
return 0;
}
static int translate_key_code(int asc, int scan)
{
int c;
c = VKtoCurses (scan);
if (!asc && !c)
return 0; return 0;
*(seq_append++) = c; if (asc && c)
*seq_append = 0; return c;
return 1; if (!asc)
{
if (shift_pressed() && (c >= KEY_F(1)) && (c <= KEY_F(10)))
c += 10;
if (alt_pressed() && (c >= KEY_F(1)) && (c <= KEY_F(2)))
c += 10;
if (alt_pressed() && (c == KEY_F(7)))
c = ALT('?');
if (ctrl_pressed() && c == '\t')
c = ALT('\t');
return c;
}
if (ctrl_pressed())
return XCTRL(asc);
if (alt_pressed())
return ALT(asc);
if (asc == 13)
return 10;
return asc;
} }
void define_sequence (int code, char* vkcode, int action)
{
}
static int *pending_keys;
int get_key_code (int no_delay) int get_key_code (int no_delay)
{ {
INPUT_RECORD ir; /* Input record */ INPUT_RECORD ir; /* Input record */
@ -178,18 +168,6 @@ int get_key_code (int no_delay)
return 0; return 0;
} }
pend_send:
if (pending_keys) {
int d = *pending_keys++;
if (!*pending_keys){
pending_keys = 0;
seq_append = 0;
}
return d;
}
do { do {
win32APICALL(ReadConsoleInput(hConsoleInput, &ir, 1, &dw)); win32APICALL(ReadConsoleInput(hConsoleInput, &ir, 1, &dw));
switch (ir.EventType) { switch (ir.EventType) {
@ -200,9 +178,10 @@ pend_send:
vkcode = ir.Event.KeyEvent.wVirtualKeyCode; vkcode = ir.Event.KeyEvent.wVirtualKeyCode;
ch = ir.Event.KeyEvent.uChar.AsciiChar; ch = ir.Event.KeyEvent.uChar.AsciiChar;
dwSaved_ControlState = ir.Event.KeyEvent.dwControlKeyState; dwSaved_ControlState = ir.Event.KeyEvent.dwControlKeyState;
j = translate_key_code (ch, vkcode);
j = VKtoCurses(vkcode); if (j)
return j ? j : ch; return j;
break;
case MOUSE_EVENT: case MOUSE_EVENT:
// Save event as a GPM-like event // Save event as a GPM-like event
@ -226,58 +205,6 @@ pend_send:
return 0; return 0;
} }
static int VKtoCurses (int a_vkc)
{
int i;
// Replace key code with that in table
for (i=0; key_table[i].vkcode != 0 || key_table[i].key_code != 0; i++)
if (a_vkc == key_table[i].vkcode) {
if (key_table[i].key_code)
return correct_key_code (key_table[i].key_code);
}
return 0;
}
static int correct_key_code (int c)
{
/* Check Control State */
if (ctrl_pressed())
if (c == '\t')
/* Make Ctrl-Tab same as reserved Alt-Tab */
c = ALT('\t');
else
c = XCTRL(c);
if (alt_pressed())
c = ALT(c);
if (shift_pressed() && (c >= KEY_F(1)) && (c <= KEY_F(10)))
c += 10;
if (alt_pressed() && (c >= KEY_F(1)) && (c <= KEY_F(2)))
c += 10;
if (alt_pressed() && (c == KEY_F(7)))
c = ALT('?');
switch (c) {
case KEY_KP_ADD:
c = alternate_plus_minus ? ALT('+') : '+';
break;
case KEY_KP_SUBTRACT:
c = alternate_plus_minus ? ALT('-') : '-';
break;
case KEY_KP_MULTIPLY:
c = alternate_plus_minus ? ALT('*') : '*';
break;
case -1:
c = 0;
break;
default:
break;
}
return c;
}
static int getch_with_delay (void) static int getch_with_delay (void)
{ {
int c; int c;
@ -292,9 +219,6 @@ static int getch_with_delay (void)
return c; return c;
} }
extern int max_dirt_limit;
/* Returns a character read from stdin with appropriate interpretation */ /* Returns a character read from stdin with appropriate interpretation */
int get_event (Gpm_Event *event, int redo_event, int block) int get_event (Gpm_Event *event, int redo_event, int block)
{ {
@ -311,25 +235,11 @@ int get_event (Gpm_Event *event, int redo_event, int block)
vfs_timeout_handler (); vfs_timeout_handler ();
/* Repeat if using mouse */
#ifdef HAVE_SLANG
while ((xmouse_flag) && !pending_keys)
{
// SLms_GetEvent (event);
*event = evSaved_Event;
}
#endif
c = block ? getch_with_delay () : get_key_code (1); c = block ? getch_with_delay () : get_key_code (1);
if (!c) { /* Code is 0, so this is a Control key or mouse event */
#ifdef HAVE_SLANG if (!c) {
// SLms_GetEvent (event); /* Code is 0, so this is a Control key or mouse event */
*event = evSaved_Event; return EV_NONE; /* FIXME: mouse not supported */
#else
ms_GetEvent (event); /* my curses */
#endif
return EV_NONE; /* FIXME: when should we return EV_MOUSE ? */
} }
return c; return c;
@ -346,44 +256,6 @@ int mi_getch ()
return key; return key;
} }
/*
Special handling of ESC key when old_esc_mode:
ESC+ a-z,\n\t\v\r! = ALT(c)
ESC + ' '|ESC = ESC
ESC+0-9 = F(c-'0')
*/
static int EscapeKey (char* seq)
{
int c = *seq;
if (old_esc_mode) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|| (c == '\n') || (c == '\t') || (c == XCTRL('h'))
|| (c == KEY_BACKSPACE) || (c == '!') || (c == '\r')
|| c == 127 || c == '+' || c == '-' || c == '\\'
|| c == '?')
c = ALT(c);
else if (isdigit(c))
c = KEY_F (c-'0');
else if (c == ' ')
c = ESC_CHAR;
return c;
}
else
return 0; /* i.e. return esc then c */
}
/* Control and Alt
*/
static int ControlKey (char* seq)
{
return XCTRL(*seq);
}
static int AltKey (char *seq)
{
return ALT(*seq);
}
/* /*
is_idle - A function to check if we're idle. is_idle - A function to check if we're idle.
It checks for any waiting event (that can be a Key, Mouse event, It checks for any waiting event (that can be a Key, Mouse event,
@ -418,23 +290,8 @@ int get_modifier()
return retval; return retval;
} }
int ctrl_pressed () /* void functions for UNIX compatibility */
{ void define_sequence (int code, char* vkcode, int action)
return dwSaved_ControlState & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED);
}
int shift_pressed ()
{
return dwSaved_ControlState & SHIFT_PRESSED;
}
int alt_pressed ()
{
return dwSaved_ControlState & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED);
}
/* void functions for UNIX copatibility */
void try_channels (int set_timeout)
{ {
} }
void channels_up() void channels_up()
@ -443,11 +300,11 @@ void channels_up()
void channels_down() void channels_down()
{ {
} }
void learn_keys()
{
message (1, "Learn Keys", "Sorry, no learn keys on Win32");
}
void init_key_input_fd (void) void init_key_input_fd (void)
{ {
} }
/* mouse is not yet supported, sorry */
void init_mouse (void) {}
void shut_mouse (void) {}
#endif /* _OS_NT */ #endif /* _OS_NT */

Просмотреть файл

@ -30,48 +30,6 @@
#ifdef HAVE_SLANG #ifdef HAVE_SLANG
/* {{{ Copied from ../slang/slgetkey.c, removed the DEC_8Bit_HACK, */
extern unsigned int SLang_Input_Buffer_Len;
extern unsigned char SLang_Input_Buffer [];
extern unsigned int SLsys_getkey (void);
extern int SLsys_input_pending (int);
static unsigned int SLang_getkey2 (void)
{
unsigned int imax;
unsigned int ch;
if (SLang_Input_Buffer_Len)
{
ch = (unsigned int) *SLang_Input_Buffer;
SLang_Input_Buffer_Len--;
imax = SLang_Input_Buffer_Len;
memcpy ((char *) SLang_Input_Buffer,
(char *) (SLang_Input_Buffer + 1), imax);
return(ch);
}
else return(SLsys_getkey ());
}
static int SLang_input_pending2 (int tsecs)
{
int n;
unsigned char c;
if (SLang_Input_Buffer_Len) return (int) SLang_Input_Buffer_Len;
n = SLsys_input_pending (tsecs);
if (n <= 0) return 0;
c = (unsigned char) SLang_getkey2 ();
SLang_ungetkey_string (&c, 1);
return n;
}
/* }}} */
//??
static void slang_sigterm () static void slang_sigterm ()
{ {
SLsmg_reset_smg (); SLsmg_reset_smg ();
@ -233,10 +191,10 @@ void load_terminfo_keys ()
int getch () int getch ()
{ {
if (no_slang_delay) if (no_slang_delay)
if (SLang_input_pending2 (0) == 0) if (SLang_input_pending (0) == 0)
return -1; return -1;
return SLang_getkey2 (); return SLang_getkey ();
} }
extern int slow_terminal; extern int slow_terminal;

Просмотреть файл

@ -1,3 +1,14 @@
Mon Mar 23 08:10:28 1998 Pavel Roskin <pavel@absolute.spb.su>
* os2/Makefile.BC2: new file for Borland C++ version 2
* os2/key.os2.c: cleanup, more keys work (not all)
* os2/util.os2.c: Windows' programs temporaly disabled
in order to make mc work without PM
* os2/config.h: Borland C++ fixes
Sat Mar 7 14:19:29 1998 Pavel Roskin <pavel@absolute.spb.su> Sat Mar 7 14:19:29 1998 Pavel Roskin <pavel@absolute.spb.su>
* os2/Makefile.OS2, os2/Makefile.EMX: new files. Use * os2/Makefile.OS2, os2/Makefile.EMX: new files. Use

Просмотреть файл

@ -8,7 +8,7 @@
include ../Make.common include ../Make.common
FILES = Makefile Makefile.EMX Makefile.OS2 chmod.os2.c config.h \ FILES = Makefile Makefile.EMX Makefile.BC2 Makefile.OS2 chmod.os2.c config.h \
cons.handler.os2.c cons.saver.h direct.h dirent.h dirent.os2.c \ cons.handler.os2.c cons.saver.h direct.h dirent.h dirent.os2.c \
drive.h drive.os2.c inst.cmd key.os2.c mc.def mc.ico slint.os2.c \ drive.h drive.os2.c inst.cmd key.os2.c mc.def mc.ico slint.os2.c \
util.os2.c util.os2.c

Просмотреть файл

@ -10,10 +10,6 @@
MC_LIBS= MC_LIBS=
# ---- Path (case-sensitive!) is searched for executables
# If the command line contains quotes, it is passed to shell
# Errors are ignored in this case!
Path=d:/emx/bin
CC=gcc.exe CC=gcc.exe
# Just comment RSC out if you have problems with resources # Just comment RSC out if you have problems with resources
# RSC=rc.exe # RSC=rc.exe

Просмотреть файл

@ -56,10 +56,11 @@
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Headers // Headers
#define STDC_HEADERS #define STDC_HEADERS
#define HAVE_STDLIB_H
#define HAVE_STRING_H #define HAVE_STRING_H
#define HAVE_DIRENT_H #define HAVE_DIRENT_H
#define HAVE_LIMITS_H #define HAVE_LIMITS_H
#define HAVE_FCNTL_H
#define NO_UNISTD_H #define NO_UNISTD_H
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -72,13 +73,11 @@
#define HAVE_STRDUP #define HAVE_STRDUP
#define HAVE_STRERROR #define HAVE_STRERROR
#define HAVE_TRUNCATE #define HAVE_TRUNCATE
#define REGEX_MALLOC #define REGEX_MALLOC
#define NO_TERM #define NO_TERM
#define NO_INFOMOUNT #define NO_INFOMOUNT
#ifndef __EMX__
#define HAVE_SHORT_MKDIR
#endif
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Windowing library // Windowing library
@ -92,34 +91,29 @@
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Typedefs (some useless under NT) // Typedefs (some useless under NT)
typedef unsigned int umode_t;
#ifndef __EMX__ #ifndef __EMX__
typedef int gid_t; // Not defined in <sys/types.h> typedef int gid_t; // Not defined in <sys/types.h>
typedef int uid_t; typedef int uid_t;
typedef int mode_t;
typedef int pid_t; typedef int pid_t;
#endif
typedef unsigned int umode_t;
#ifndef __BORLANDC__
typedef int mode_t;
typedef unsigned int nlink_t; typedef unsigned int nlink_t;
#endif
#define INLINE #define INLINE
#define inline #define inline
#define ENOTDIR -1
#endif /* not __EMX__ */
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// File attributes // File attributes
#define S_ISBLK(m) 0 /* Some of these are not actual values*/ #define S_ISLNK(x) 0
#define S_ISLNK(x) 0
#ifndef __EMX__ #ifndef __WATCOMC__ // Already defined in Watcom C headers
#define S_ISFIFO(x) 0
#define S_IFBLK 0010000 /* but don't worry, these are yet not possible on NT */
#define S_IFLNK 0010000 #define S_IFLNK 0010000
#define S_IRWXU 0000700
#define S_IRUSR 0000400
#define S_IWUSR 0000200
#define S_IXUSR 0000100
#define S_IRWXG 0000070 #define S_IRWXG 0000070
#define S_IRGRP 0000040 #define S_IRGRP 0000040
#define S_IWGRP 0000020 #define S_IWGRP 0000020
@ -134,24 +128,40 @@ typedef unsigned int nlink_t;
#define S_ISGID 0002000 #define S_ISGID 0002000
#define S_ISVTX 0001000 #define S_ISVTX 0001000
#define S_IFMT 0xFF00 #ifndef __BORLANDC__
#ifndef FILE_DIRECTORY #define S_ISBLK( m ) 0 /* Some of these are not actual values*/
# define FILE_DIRECTORY 0x0010 #define S_IFBLK 0010000 /* but don't worry, these are yet not possible on NT */
#endif
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) #define S_IRWXU 0000700
#define S_ISDIR(m) ( (m & 0xF000) ? m & S_IFDIR : m & FILE_DIRECTORY) #define S_IRUSR 0000400
/* .ado: 0x8000 is regular file. 0x4xxx is DIR */ #define S_IWUSR 0000200
#define S_ISREG(m) (((m) & 0x8000) == S_IFREG) #define S_IXUSR 0000100
/* #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) */
#define S_IFIFO _S_IFIFO /* pipe */
#define S_ISCHR( m ) (((m) & S_IFMT) == S_IFCHR)
#define S_ISDIR( m ) (((m) & S_IFMT) == S_IFDIR)
#define S_ISREG( m ) (((m) & S_IFMT) == S_IFREG)
#define S_ISFIFO( m ) (((m) & S_IFMT) == S_IFIFO)
/* Missing mask definition */
#define O_ACCMODE 0003
#endif /* not __BORLANDC__ */
/* Symbolic constants for the access() function */ /* Symbolic constants for the access() function */
#define R_OK 4 /* Test for read permission */ #define R_OK 4 /* Test for read permission */
#define W_OK 2 /* Test for write permission */ #define W_OK 2 /* Test for write permission */
#define X_OK 1 /* Test for execute permission */ #define X_OK 1 /* Test for execute permission */
#define F_OK 0 /* Test for existence of file */ #define F_OK 0 /* Test for existence of file */
#endif /* __EMX__ */
/* Missing Errno definitions */
#define ELOOP 40 /* Too many symbolic links encountered */
#endif /* not __WATCOMC__ */
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Inline definitions // Inline definitions
@ -167,4 +177,4 @@ typedef unsigned int nlink_t;
# define MAX_PATH 260 # define MAX_PATH 260
#endif #endif
#endif /* Config.h */ #endif //__CONFIG_H

Просмотреть файл

@ -40,8 +40,6 @@
#include "../vfs/vfs.h" #include "../vfs/vfs.h"
#include "tty.h" #include "tty.h"
KBDINFO initialKbdInfo; /* keyboard info */
/* Code to read keystrokes in a separate thread */ /* Code to read keystrokes in a separate thread */
typedef struct kbdcodes { typedef struct kbdcodes {
@ -240,7 +238,7 @@ int get_key_code (int no_delay)
if (no_delay) { if (no_delay) {
/* Check if any input pending, otherwise return */ /* Check if any input pending, otherwise return */
nodelay (stdscr, TRUE); nodelay (stdscr, TRUE);
inp_ch = SLsys_input_pending(); inp_ch = SLang_input_pending(0);
if (inp_ch == 0) { if (inp_ch == 0) {
return 0; return 0;
} /* endif */ } /* endif */
@ -264,7 +262,9 @@ int get_key_code (int no_delay)
} /* endif */ } /* endif */
do { do {
inp_ch = SLsys_getkey(); inp_ch = SLang_getkey();
if (!inp_ch)
inp_ch = (SLang_getkey() << 8);
if (inp_ch) return (VKtoCurses(inp_ch)); if (inp_ch) return (VKtoCurses(inp_ch));
} while (!no_delay); } while (!no_delay);
return 0; return 0;
@ -315,7 +315,7 @@ static int VKtoCurses (int a_vkc)
} /* endif */ } /* endif */
// Scan Movement codes // Scan Movement codes
if (asciiCode == 0xE0) { if (asciiCode == 0) {
// Replace key code with that in table // Replace key code with that in table
for (i=0; movement[i].vkcode != 0 || movement[i].key_code != 0; i++) for (i=0; movement[i].vkcode != 0 || movement[i].key_code != 0; i++)
if (scanCode == movement[i].vkcode) if (scanCode == movement[i].vkcode)
@ -328,7 +328,7 @@ static int VKtoCurses (int a_vkc)
if (scanCode == fkt_table[i].vkcode) if (scanCode == fkt_table[i].vkcode)
return (fkt_table[i].key_code); return (fkt_table[i].key_code);
// ALT - KEY // ALT - KEY
if (altState) { /* if (altState) */ {
for (i=0; ALT_table[i].vkcode != 0 || ALT_table[i].key_code != 0; i++) for (i=0; ALT_table[i].vkcode != 0 || ALT_table[i].key_code != 0; i++)
if (scanCode == ALT_table[i].vkcode) if (scanCode == ALT_table[i].vkcode)
return (ALT_table[i].key_code); return (ALT_table[i].key_code);
@ -357,20 +357,18 @@ static int getch_with_delay (void)
return c; return c;
} }
extern int max_dirt_limit;
/* Returns a character read from stdin with appropriate interpretation */
/* Also takes care of generated mouse events */
/* Returns 0 if it is a mouse event */
/* The current behavior is to block allways */
int get_event (Gpm_Event *event, int redo_event, int block) int get_event (Gpm_Event *event, int redo_event, int block)
{ {
int c; int c;
static int flag; /* Return value from select */
static int dirty = 3;
/* .ado: For OS/2, for each event a refresh is required */ if ((dirty == 1) || is_idle ()){
mc_refresh (); refresh ();
doupdate (); doupdate ();
dirty = 1;
} else
dirty++;
vfs_timeout_handler (); vfs_timeout_handler ();
@ -384,7 +382,7 @@ int get_event (Gpm_Event *event, int redo_event, int block)
#endif #endif
c = getch_with_delay (); c = block ? getch_with_delay () : get_key_code (1);
if (!c) { /* Code is 0, so this is a Control key or mouse event */ if (!c) { /* Code is 0, so this is a Control key or mouse event */
#ifdef HAVE_SLANG #ifdef HAVE_SLANG
// SLms_GetEvent (event); // SLms_GetEvent (event);
@ -392,6 +390,7 @@ int get_event (Gpm_Event *event, int redo_event, int block)
#else #else
ms_GetEvent (event); /* my curses */ ms_GetEvent (event); /* my curses */
#endif #endif
return EV_NONE; /* FIXME: when should we return EV_MOUSE ? */
} }
return c; return c;
@ -441,11 +440,11 @@ void channels_up()
void channels_down() void channels_down()
{ {
} }
void learn_keys()
{
message (1, "Learn Keys", "Sorry, no learn keys on OS/2");
}
void init_key_input_fd (void) void init_key_input_fd (void)
{ {
} }
/* mouse is not yet supported, sorry */
void init_mouse (void) {}
void shut_mouse (void) {}
#endif /* __os2__ */ #endif /* __os2__ */

Просмотреть файл

@ -30,48 +30,6 @@
#ifdef HAVE_SLANG #ifdef HAVE_SLANG
/* {{{ Copied from ../slang/slgetkey.c, removed the DEC_8Bit_HACK, */
extern unsigned int SLang_Input_Buffer_Len;
extern unsigned char SLang_Input_Buffer [];
extern unsigned int SLsys_getkey (void);
extern int SLsys_input_pending (int);
static unsigned int SLang_getkey2 (void)
{
unsigned int imax;
unsigned int ch;
if (SLang_Input_Buffer_Len)
{
ch = (unsigned int) *SLang_Input_Buffer;
SLang_Input_Buffer_Len--;
imax = SLang_Input_Buffer_Len;
memcpy ((char *) SLang_Input_Buffer,
(char *) (SLang_Input_Buffer + 1), imax);
return(ch);
}
else return(SLsys_getkey ());
}
static int SLang_input_pending2 (int tsecs)
{
int n;
unsigned char c;
if (SLang_Input_Buffer_Len) return (int) SLang_Input_Buffer_Len;
n = SLsys_input_pending (tsecs);
if (n <= 0) return 0;
c = (unsigned char) SLang_getkey2 ();
SLang_ungetkey_string (&c, 1);
return n;
}
/* }}} */
//??
static void slang_sigterm () static void slang_sigterm ()
{ {
SLsmg_reset_smg (); SLsmg_reset_smg ();
@ -233,10 +191,10 @@ void load_terminfo_keys ()
int getch () int getch ()
{ {
if (no_slang_delay) if (no_slang_delay)
if (SLang_input_pending2 (0) == 0) if (SLang_input_pending (0) == 0)
return -1; return -1;
return SLang_getkey2 (); return SLang_getkey ();
} }
extern int slow_terminal; extern int slow_terminal;

Просмотреть файл

@ -48,6 +48,10 @@
#include <fs.h> #include <fs.h>
#include <util.h> #include <util.h>
#ifdef __BORLANDC__
#define ENOTEMPTY ERROR_DIR_NOT_EMPTY
#endif
char * char *
get_owner (int uid) get_owner (int uid)
{ {
@ -108,6 +112,7 @@ check_error_pipe (void)
static int static int
StartWindowsProg (char *name, SHORT type) StartWindowsProg (char *name, SHORT type)
{ {
#if 0 /* FIXME: PM DDL's should be loaded (or not loaded) at run time */
PROGDETAILS pDetails; PROGDETAILS pDetails;
memset(&pDetails, 0, sizeof(PROGDETAILS)) ; memset(&pDetails, 0, sizeof(PROGDETAILS)) ;
@ -140,6 +145,7 @@ StartWindowsProg (char *name, SHORT type)
NULL, NULL,
NULL, NULL,
SAF_INSTALLEDCMDLINE|SAF_STARTCHILDAPP) ; SAF_INSTALLEDCMDLINE|SAF_STARTCHILDAPP) ;
#endif
return 0; return 0;
} }
@ -669,7 +675,7 @@ vfs_file_is_ftp (char *filename)
} }
int int
mc_utime (char *path, struct utimbuf *times) mc_utime (char *path, void *times)
{ {
return 0; return 0;
} }

Просмотреть файл

@ -26,7 +26,7 @@ int SLang_Ignore_User_Abort = 0;
# endif # endif
#endif #endif
#if 0 /* see the replacement in src/slint.c */ #ifdef OS2_NT /* see the replacement in src/slint.c */
unsigned int SLang_getkey (void) unsigned int SLang_getkey (void)
{ {
unsigned int imax; unsigned int imax;
@ -58,7 +58,7 @@ unsigned int SLang_getkey (void)
#endif #endif
return(ch); return(ch);
} }
#endif /* 0 */ #endif /* OS2_NT */
void SLang_ungetkey_string (unsigned char *s, unsigned int n) void SLang_ungetkey_string (unsigned char *s, unsigned int n)
{ {
@ -89,7 +89,7 @@ void SLang_ungetkey (unsigned char ch)
SLang_ungetkey_string(&ch, 1); SLang_ungetkey_string(&ch, 1);
} }
#if 0 /* see the replacement in src/slint.c */ #ifdef OS2_NT /* see the replacement in src/slint.c */
int SLang_input_pending (int tsecs) int SLang_input_pending (int tsecs)
{ {
int n; int n;
@ -105,7 +105,7 @@ int SLang_input_pending (int tsecs)
return n; return n;
} }
#endif /* 0 */ #endif /* OS2_NT */
void SLang_flush_input (void) void SLang_flush_input (void)
{ {

Просмотреть файл

@ -1,3 +1,17 @@
Mon Mar 23 08:17:55 1998 Pavel Roskin <pavel@absolute.spb.su>
* src/main.c: mcedit can be named mce or mcedit.exe - only
3 first letters are significant. The same for mcview.
Console is always saved in do_execute() if it was saved there.
* src/util.h: STRNOMP introduced (strncmp on unix and strnicmp
on OS2_NT)
* slang/slgetkey.c: SLang_getkey() and SLang_input_pending()
enabled for OS2_NT
* myslang.h: using fast one_vline() and one_hline() for OS2_NT
1998-03-19 Miguel de Icaza <miguel@nuclecu.unam.mx> 1998-03-19 Miguel de Icaza <miguel@nuclecu.unam.mx>
* screen.c: Remove KEY_DC forever. This should have never been * screen.c: Remove KEY_DC forever. This should have never been

Просмотреть файл

@ -749,16 +749,6 @@ do_execute (const char *shell, const char *command, int internal_command)
#ifndef HAVE_GNOME #ifndef HAVE_GNOME
if (!internal_command){ if (!internal_command){
/* .ado: ask Juan why CONSOLE_SAVE not work here */
#ifndef _OS_NT
if (console_flag){
if (output_lines && keybar_visible)
putchar('\n');
fflush(stdout);
handle_console (CONSOLE_SAVE);
}
#endif
if ((pause_after_run == pause_always || if ((pause_after_run == pause_always ||
(pause_after_run == pause_on_dumb_terminals && (pause_after_run == pause_on_dumb_terminals &&
!xterm_flag && !console_flag)) && !quit){ !xterm_flag && !console_flag)) && !quit){
@ -768,16 +758,17 @@ do_execute (const char *shell, const char *command, int internal_command)
mc_raw_mode (); mc_raw_mode ();
xgetch (); xgetch ();
} }
#ifdef _OS_NT
if (console_flag){ if (console_flag){
if (output_lines && keybar_visible) if (output_lines && keybar_visible) {
putchar('\n'); putchar('\n');
handle_console (CONSOLE_SAVE); fflush(stdout);
}
} }
#endif
} }
#endif #endif
if (console_flag)
handle_console (CONSOLE_SAVE);
edition_post_exec (); edition_post_exec ();
#ifdef HAVE_SUBSHELL_SUPPORT #ifdef HAVE_SUBSHELL_SUPPORT
@ -2665,13 +2656,14 @@ static void handle_args (int argc, char *argv [])
* directory from the command line arguments * directory from the command line arguments
*/ */
tmp = poptGetArg (optCon); tmp = poptGetArg (optCon);
if (strstr (argv[0], "mcedit") == argv[0] + strlen(argv[0]) - 6) { if (!STRNCOMP (argv [0], "mce", 3)) {
edit_one_file = ""; edit_one_file = "";
if (tmp) if (tmp)
edit_one_file = strdup (tmp); edit_one_file = strdup (tmp);
} else if (strstr (argv [0], "mcview") == argv [0] + strlen (argv [0]) - 6) { } else
if (tmp) if (!STRNCOMP (argv [0], "mcv", 3)) {
view_one_file = strdup (tmp); if (tmp)
view_one_file = strdup (tmp);
} else { } else {
/* sets the current dir and the other dir */ /* sets the current dir and the other dir */
if (tmp) { if (tmp) {

Просмотреть файл

@ -126,9 +126,9 @@ void init_pair (int, char *, char *);
#define SLsmg_draw_double_box(r,c,dr,dc) SLsmg_draw_box ((r), (c), (dr), (dc)) #define SLsmg_draw_double_box(r,c,dr,dc) SLsmg_draw_box ((r), (c), (dr), (dc))
#if 0 #ifdef OS2_NT
# define one_vline() {acs (); addch (ACS_VLINE); noacs ();} # define one_vline() addch(ACS_VLINE)
# define one_hline() {acs (); addch (ACS_HLINE); noacs ();} # define one_hline() addch(ACS_HLINE)
/* This is fast, but unusefull if ! pc_system - doesn't use /* This is fast, but unusefull if ! pc_system - doesn't use
Alt_Char_Pairs [] :( */ Alt_Char_Pairs [] :( */
#else #else

Просмотреть файл

@ -184,6 +184,7 @@ void tell_parent (int msg);
# define PATH_ENV_SEP ';' # define PATH_ENV_SEP ';'
# define OS_SORT_CASE_SENSITIVE_DEFAULT 0 # define OS_SORT_CASE_SENSITIVE_DEFAULT 0
# define STRCOMP stricmp # define STRCOMP stricmp
# define STRNCOMP strnicmp
# define MC_ARCH_FLAGS REG_ICASE # define MC_ARCH_FLAGS REG_ICASE
char *get_default_shell (void); char *get_default_shell (void);
char *get_default_editor (void); char *get_default_editor (void);
@ -195,6 +196,7 @@ void tell_parent (int msg);
# define get_default_editor() "vi" # define get_default_editor() "vi"
# define OS_SORT_CASE_SENSITIVE_DEFAULT 1 # define OS_SORT_CASE_SENSITIVE_DEFAULT 1
# define STRCOMP strcmp # define STRCOMP strcmp
# define STRNCOMP strncmp
# define MC_ARCH_FLAGS 0 # define MC_ARCH_FLAGS 0
#endif #endif