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

This commit is contained in:
Pavel Machek 1998-03-23 05:27:15 +00:00
parent 8be7ff1383
commit 8665ccd219
17 changed files with 190 additions and 383 deletions

View File

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

View File

@ -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>
* nt/Makefile.NT, nt/Makefile.VC4: rewritten for GNU make.

View File

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

View File

@ -44,15 +44,6 @@ int double_click_speed; /* they are here to keep linker happy */
int mou_auto_repeat;
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 */
struct {
int key_code;
@ -81,13 +72,6 @@ struct {
{ KEY_IC, VK_INSERT },
{ KEY_DC, VK_DELETE },
{ 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_NPAGE, VK_NEXT },
@ -98,72 +82,78 @@ struct {
{ KEY_HOME, VK_HOME },
{ KEY_END, VK_END },
{ KEY_KP_MULTIPLY, VK_MULTIPLY }, // Numeric pad
{ KEY_KP_ADD, VK_ADD },
{ KEY_KP_SUBTRACT, VK_SUBTRACT },
{ ALT('*'), VK_MULTIPLY }, // Numeric pad
{ ALT('+'), VK_ADD },
{ ALT('-'), VK_SUBTRACT },
/* Control key codes */
{ 0, VK_CONTROL }, /* Control */
{ 0, VK_MENU }, /* Alt */
// { 0, VK_ESCAPE }, /* ESC */
{ ESC_CHAR, 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}
};
/* 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
Get handle to console input
*/
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) */
static int seq_buffer[33];
static int *seq_append = 0;
static int push_char (int c)
int ctrl_pressed ()
{
if (!seq_append)
seq_append = seq_buffer;
if (seq_append == &(seq_buffer [sizeof (seq_buffer)-2]))
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);
}
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;
*(seq_append++) = c;
*seq_append = 0;
return 1;
if (asc && c)
return c;
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)
{
INPUT_RECORD ir; /* Input record */
@ -178,18 +168,6 @@ int get_key_code (int no_delay)
return 0;
}
pend_send:
if (pending_keys) {
int d = *pending_keys++;
if (!*pending_keys){
pending_keys = 0;
seq_append = 0;
}
return d;
}
do {
win32APICALL(ReadConsoleInput(hConsoleInput, &ir, 1, &dw));
switch (ir.EventType) {
@ -200,9 +178,10 @@ pend_send:
vkcode = ir.Event.KeyEvent.wVirtualKeyCode;
ch = ir.Event.KeyEvent.uChar.AsciiChar;
dwSaved_ControlState = ir.Event.KeyEvent.dwControlKeyState;
j = VKtoCurses(vkcode);
return j ? j : ch;
j = translate_key_code (ch, vkcode);
if (j)
return j;
break;
case MOUSE_EVENT:
// Save event as a GPM-like event
@ -226,58 +205,6 @@ pend_send:
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)
{
int c;
@ -292,9 +219,6 @@ static int getch_with_delay (void)
return c;
}
extern int max_dirt_limit;
/* Returns a character read from stdin with appropriate interpretation */
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 ();
/* 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);
if (!c) { /* Code is 0, so this is a Control key or mouse event */
#ifdef HAVE_SLANG
// SLms_GetEvent (event);
*event = evSaved_Event;
#else
ms_GetEvent (event); /* my curses */
#endif
return EV_NONE; /* FIXME: when should we return EV_MOUSE ? */
if (!c) {
/* Code is 0, so this is a Control key or mouse event */
return EV_NONE; /* FIXME: mouse not supported */
}
return c;
@ -346,44 +256,6 @@ int mi_getch ()
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.
It checks for any waiting event (that can be a Key, Mouse event,
@ -418,23 +290,8 @@ int get_modifier()
return retval;
}
int ctrl_pressed ()
{
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 functions for UNIX compatibility */
void define_sequence (int code, char* vkcode, int action)
{
}
void channels_up()
@ -443,11 +300,11 @@ void channels_up()
void channels_down()
{
}
void learn_keys()
{
message (1, "Learn Keys", "Sorry, no learn keys on Win32");
}
void init_key_input_fd (void)
{
}
/* mouse is not yet supported, sorry */
void init_mouse (void) {}
void shut_mouse (void) {}
#endif /* _OS_NT */

View File

@ -30,48 +30,6 @@
#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 ()
{
SLsmg_reset_smg ();
@ -233,10 +191,10 @@ void load_terminfo_keys ()
int getch ()
{
if (no_slang_delay)
if (SLang_input_pending2 (0) == 0)
if (SLang_input_pending (0) == 0)
return -1;
return SLang_getkey2 ();
return SLang_getkey ();
}
extern int slow_terminal;

View File

@ -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>
* os2/Makefile.OS2, os2/Makefile.EMX: new files. Use

View File

@ -8,7 +8,7 @@
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 \
drive.h drive.os2.c inst.cmd key.os2.c mc.def mc.ico slint.os2.c \
util.os2.c

View File

@ -10,10 +10,6 @@
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
# Just comment RSC out if you have problems with resources
# RSC=rc.exe

View File

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

View File

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

View File

@ -30,48 +30,6 @@
#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 ()
{
SLsmg_reset_smg ();
@ -233,10 +191,10 @@ void load_terminfo_keys ()
int getch ()
{
if (no_slang_delay)
if (SLang_input_pending2 (0) == 0)
if (SLang_input_pending (0) == 0)
return -1;
return SLang_getkey2 ();
return SLang_getkey ();
}
extern int slow_terminal;

View File

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

View File

@ -26,7 +26,7 @@ int SLang_Ignore_User_Abort = 0;
# 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 imax;
@ -58,7 +58,7 @@ unsigned int SLang_getkey (void)
#endif
return(ch);
}
#endif /* 0 */
#endif /* OS2_NT */
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);
}
#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 n;
@ -105,7 +105,7 @@ int SLang_input_pending (int tsecs)
return n;
}
#endif /* 0 */
#endif /* OS2_NT */
void SLang_flush_input (void)
{

View File

@ -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>
* screen.c: Remove KEY_DC forever. This should have never been

View File

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

View File

@ -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))
#if 0
# define one_vline() {acs (); addch (ACS_VLINE); noacs ();}
# define one_hline() {acs (); addch (ACS_HLINE); noacs ();}
#ifdef OS2_NT
# define one_vline() addch(ACS_VLINE)
# define one_hline() addch(ACS_HLINE)
/* This is fast, but unusefull if ! pc_system - doesn't use
Alt_Char_Pairs [] :( */
#else

View File

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