Commit 95ed0025 authored by Richard M. Stallman's avatar Richard M. Stallman

Initial revision

parent b0bfea29
# Makefile for GNU Emacs lib-src directory.
# Geoff Voelker (voelker@cs.washington.edu)
# Copyright (C) 1994 Free Software Foundation, Inc.
#
# This file is part of GNU Emacs.
#
# GNU Emacs is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Emacs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Emacs; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#
#
# Sets up the system dependent macros.
#
!include ..\nt\makefile.def
LOCAL_FLAGS = -DWINDOWSNT -DDOS_NT -DSTDC_HEADERS=1 -DNO_LDAV=1 -DNO_ARCHIVES=1 -I..\src
OBJDIR = obj
BLD = $(OBJDIR)\$(ARCH)
LINK_FLAGS = $(ARCH_LDFLAGS) -debug:PARTIAL -machine:$(ARCH) -subsystem:console -entry:mainCRTStartup
ALL = $(BLD)\make-docfile.exe \
$(BLD)\hexl.exe \
$(BLD)\wakeup.exe \
$(BLD)\ctags.exe \
$(BLD)\etags.exe
# don't know what (if) to do with these yet...
#
# $(BLD)\sorted-doc.exe \
# $(BLD)\env.exe \
# $(BLD)\server.exe \
# $(BLD)\emacstool.exe \
# $(BLD)\fakemail.exe \
# $(BLD)\leditcfns.exe \
# $(BLD)\movemail.exe \
# $(BLD)\emacsclient.exe \
# $(BLD)\cvtmail.exe \
# $(BLD)\digest-doc.exe \
# $(BLD)\test-distrib.exe \
LIBS = $(SYS_LIB_DIR)\setargv.obj \
$(SYS_LIB_DIR)\kernel32.lib \
$(SYS_LIB_DIR)\libc.lib
# $(SYS_LIB_DIR)\advapi32.lib \
$(BLD)\make-docfile.exe: $(LIBS) $(BLD)\make-docfile.obj
$(BLD)\hexl.exe: $(LIBS) $(BLD)\hexl.obj
$(BLD)\ctags.exe: $(BLD)\etags.exe
copy $(BLD)\etags.exe $(BLD)\ctags.exe
$(BLD)\wakeup.exe: $(LIBS) $(BLD)\wakeup.obj $(BLD)\ntlib.obj
$(LINK) -out:$@ $(LINK_FLAGS) $(BLD)\wakeup.obj $(BLD)\ntlib.obj $(LIBS)
make-docfile: $(BLD)\make-docfile.exe
wakeup: $(BLD)\wakeup.exe
etags: $(BLD)\etags.exe
hexl: $(BLD)\hexl.exe
ETAGSOBJ = $(BLD)\etags.obj \
$(BLD)\getopt.obj \
$(BLD)\getopt1.obj \
$(BLD)\ntlib.obj
$(BLD)\etags.exe: $(LIBS) $(ETAGSOBJ)
link32 -out:$@ -debug:PARTIAL -machine:$(ARCH) -align:0x1000 -subsystem:console -entry:mainCRTStartup $(ETAGSOBJ) $(LIBS)
#
# don't know what to do with these yet...
#
# $(BLD)\sorted-doc.exe: $(LIBS) $(BLD)\sorted-doc.obj
# $(BLD)\yow.exe: $(LIBS) $(BLD)\yow.obj
# $(BLD)\emacstool.exe: $(LIBS) $(BLD)\emacstool.obj
# $(BLD)\env.exe: $(LIBS) $(BLD)\env.obj
# $(BLD)\fakemail.exe: $(LIBS) $(BLD)\fakemail.obj
# $(BLD)\leditcfns.exe: $(LIBS) $(BLD)\leditcfns.obj
# $(BLD)\server.exe: $(LIBS) $(BLD)\server.obj
# $(BLD)\wakeup.exe: $(LIBS) $(BLD)\wakeup.obj
# $(BLD)\movemail.exe: $(LIBS) $(BLD)\movemail.obj
# $(BLD)\cvtmail.exe: $(LIBS) $(BLD)\cvtmail.obj
# $(BLD)\digest-doc.exe: $(LIBS) $(BLD)\digest-doc.obj
# $(BLD)\emacsclient.exe: $(LIBS) $(BLD)\emacsclient.obj
# $(BLD)\qsort.exe: $(LIBS) $(BLD)\qsort.obj
# $(BLD)\test-distrib.exe: $(LIBS) $(BLD)\test-distrib.obj
#
# From ..\makefile.nt, with .obj changed to .o
#
obj = abbrev.o alloc.o alloca.o buffer.o bytecode.o callint.o callproc.o casefiddle.o cm.o cmds.o data.o dired.o dispnew.o doc.o doprnt.o editfns.o eval.o fileio.o filelock.o filemode.o fns.o indent.o insdel.o keyboard.o keymap.o lastfile.o lread.o macros.o marker.o minibuf.o xfaces.o mocklisp.o nt.o ntheap.o ntinevt.o ntproc.o ntterm.o print.o process.o regex.o scroll.o search.o syntax.o sysdep.o term.o termcap.o tparam.o undo.o unexnt.o window.o xdisp.o casetab.o floatfns.o frame.o gmalloc.o intervals.o ralloc.o textprop.o vm-limit.o
lispdir = ..\lisp
#
# These are the lisp files that are loaded up in loadup.el
#
lisp= \
$(lispdir)\subr.elc \
$(lispdir)\byte-run.elc \
$(lispdir)\map-ynp.elc \
$(lispdir)\loaddefs.el \
$(lispdir)\simple.elc \
$(lispdir)\help.elc \
$(lispdir)\files.elc \
$(lispdir)\indent.elc \
$(lispdir)\window.elc \
$(lispdir)\frame.elc \
$(lispdir)\mouse.elc \
$(lispdir)\menu-bar.elc \
$(lispdir)\scroll-bar.elc \
$(lispdir)\select.elc \
$(lispdir)\paths.el \
$(lispdir)\startup.elc \
$(lispdir)\lisp.elc \
$(lispdir)\page.elc \
$(lispdir)\register.elc \
$(lispdir)\paragraphs.elc \
$(lispdir)\lisp-mode.elc \
$(lispdir)\text-mode.elc \
$(lispdir)\fill.elc \
$(lispdir)\c-mode.elc \
$(lispdir)\isearch.elc \
$(lispdir)\replace.elc \
$(lispdir)\abbrev.elc \
$(lispdir)\buff-menu.elc \
$(lispdir)\winnt.elc \
$(lispdir)\float-sup.elc \
$(lispdir)\vc-hooks.elc \
$(lispdir)\version.el
DOC = DOC
$(DOC): $(BLD)\make-docfile.exe
- rm -f $(DOC)
$(BLD)\make-docfile -d ..\src $(obj) > $(DOC)
$(BLD)\make-docfile -d ..\src $(lisp) >> $(DOC)
$(CP) $(DOC) ..\etc
- mkdir ..\src\$(OBJDIR)
- mkdir ..\src\$(OBJDIR)\etc
$(CP) $(DOC) ..\src\$(OBJDIR)\etc
{$(BLD)}.obj{$(BLD)}.exe:
$(LINK) -out:$@ $(LINK_FLAGS) $*.obj $(LIBS)
.c{$(BLD)}.obj:
$(CC) $(CFLAGS) -Fo$@ $<
#
# Build the executables
#
all: $(BLD) $(ALL) $(DOC)
#
# Assuming INSTALL_DIR is defined, build and install emacs in it.
#
INSTALL_FILES = $(ALL)
install: $(INSTALL_FILES)
- mkdir $(INSTALL_DIR)\bin
$(CP) $(BLD)\etags.exe $(INSTALL_DIR)\bin
$(CP) $(BLD)\ctags.exe $(INSTALL_DIR)\bin
$(CP) $(BLD)\hexl.exe $(INSTALL_DIR)\bin
$(CP) $(BLD)\wakeup.exe $(INSTALL_DIR)\bin\wakeup
- mkdir $(INSTALL_DIR)\etc
$(CP) $(DOC) $(INSTALL_DIR)\etc
#
# Maintenance
#
clean:; - del /q *~
- delnode /q deleted
- delnode /q obj
- del /q DOC
#
# Headers we would preprocess if we could.
#
..\src\config.h: ..\nt\src\config.h
cp ..\nt\src\config.h ..\src\config.h
..\src\paths.h: ..\nt\src\paths.h
cp ..\nt\src\paths.h ..\src\paths.h
### DEPENDENCIES ###
EMACS_ROOT = ..
SRC = .
$(BLD)\alloca.obj : \
$(SRC)\alloca.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\src\config.h \
$(EMACS_ROOT)\src\blockinput.h
$(BLD)\b2m.obj : \
$(SRC)\b2m.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h
$(BLD)\cvtmail.obj : \
$(SRC)\cvtmail.c
$(BLD)\digest-doc.obj : \
$(SRC)\digest-doc.c
$(BLD)\emacsclient.obj : \
$(SRC)\emacsclient.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h
$(BLD)\emacsserver.obj : \
$(SRC)\emacsserver.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h \
$(EMACS_ROOT)\nt\inc\sys\file.h
$(BLD)\emacstool.obj : \
$(SRC)\emacstool.c \
$(EMACS_ROOT)\nt\inc\sys\file.h
$(BLD)\etags.obj : \
$(SRC)\etags.c \
$(EMACS_ROOT)\nt\inc\sys\param.h \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h \
$(SRC)\getopt.h
$(BLD)\fakemail.obj : \
$(SRC)\fakemail.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h \
$(EMACS_ROOT)\nt\inc\pwd.h
$(BLD)\getdate.obj : \
$(SRC)\getdate.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\src\config.h \
$(MSTOOLS_SYS)\types.h
$(BLD)\getopt.obj : \
$(SRC)\getopt.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\src\config.h \
$(SRC)\getopt.h
$(BLD)\getopt1.obj : \
$(SRC)\getopt1.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\src\config.h \
$(SRC)\getopt.h
$(BLD)\hexl.obj : \
$(SRC)\hexl.c
$(BLD)\leditcfns.obj : \
$(SRC)\leditcfns.c
$(BLD)\make-docfile.obj : \
$(SRC)\make-docfile.c
$(BLD)\make-path.obj : \
$(SRC)\make-path.c
$(BLD)\movemail.obj : \
$(SRC)\movemail.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h \
$(EMACS_ROOT)\nt\inc\sys\file.h \
$(EMACS_ROOT)\src\vmsproc.h \
$(EMACS_ROOT)\lib-src\..\src\syswait.h \
$(EMACS_ROOT)\nt\inc\pwd.h
$(BLD)\profile.obj : \
$(SRC)\profile.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h \
$(EMACS_ROOT)\src\vmstime.h \
$(EMACS_ROOT)\lib-src\..\src\systime.h
$(BLD)\qsort.obj : \
$(SRC)\qsort.c
$(BLD)\sorted-doc.obj : \
$(SRC)\sorted-doc.c
$(BLD)\tcp.obj : \
$(SRC)\tcp.c
$(BLD)\test-distrib.obj : \
$(SRC)\test-distrib.c
$(BLD)\timer.obj : \
$(SRC)\timer.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\lib-src\..\src\config.h
$(BLD)\wakeup.obj : \
$(SRC)\wakeup.c \
$(EMACS_ROOT)\src\s\s-windowsnt.h \
$(EMACS_ROOT)\src\m\m-windowsnt.h \
$(EMACS_ROOT)\src\config.h
$(BLD)\yow.obj : \
$(SRC)\yow.c \
$(EMACS_ROOT)\lib-src\..\src\paths.h
/* Utility and Unix shadow routines for GNU Emacs support programs on NT.
Copyright (C) 1994 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any later
version.
GNU Emacs is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along
with GNU Emacs; see the file COPYING. If not, write to the Free Software
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
Geoff Voelker (voelker@cs.washington.edu) 10-8-94
*/
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#define MAXPATHLEN _MAX_PATH
/* Emulate sleep...we could have done this with a define, but that
would necessitate including windows.h in the files that used it.
This is much easier. */
void
nt_sleep(int seconds)
{
Sleep (seconds * 1000);
}
/* Get the current working directory. */
int
getwd (char *dir)
{
return GetCurrentDirectory (MAXPATHLEN, dir);
}
static HANDLE getppid_parent;
static int getppid_ppid;
int
getppid(void)
{
char *ppid;
DWORD result;
ppid = getenv ("__PARENT_PROCESS_ID");
if (!ppid)
{
printf("no pid.\n");
return 0;
}
else
{
getppid_ppid = atoi (ppid);
}
if (!getppid_parent)
{
getppid_parent = OpenProcess (SYNCHRONIZE, FALSE, atoi(ppid));
if (!getppid_parent)
{
printf ("Failed to open handle to parent process: %d\n",
GetLastError());
exit (1);
}
}
result = WaitForSingleObject (getppid_parent, 0);
switch (result)
{
case WAIT_TIMEOUT:
/* The parent is still alive. */
return getppid_ppid;
case WAIT_OBJECT_0:
/* The parent is gone. Return the pid of Unix init (1). */
return 1;
case WAIT_FAILED:
default:
printf ("Checking parent status failed: %d\n", GetLastError());
exit (1);
}
}
# Hacked up Nmake makefile for GNU Emacs
# Geoff Voelker (voelker@cs.washington.edu)
# Copyright (c) 1994 Free Software Foundation, Inc.
#
# This file is part of GNU Emacs.
#
# GNU Emacs is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Emacs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Emacs; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#
!include ..\nt\makefile.def
all:
#
# Assuming INSTALL_DIR is defined, copy the elisp files to it
#
install:; - mkdir $(INSTALL_DIR)\lisp
- del /q .\same-dir.tst
- del /q $(INSTALL_DIR)\lisp\same-dir.tst
echo SameDirTest > .\same-dir.tst
if not exist $(INSTALL_DIR)\lisp\same-dir.tst $(CP_DIR) . $(INSTALL_DIR)\lisp
- del /q .\same-dir.tst
#
# Maintenance
#
clean:; - del /q *~
- delnode /q deleted
;; winnt.el --- Lisp routines for Windows NT.
;; Copyright (C) 1994 Free Software Foundation, Inc.
;; Author: Geoff Voelker (voelker@cs.washington.edu)
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
;;; Commentary:
;; (August 12, 1993)
;; NT switches placed in:
;;
;; compile.el, dired-new.el, dired.el, loadup.el, startup.el, subr.el
;; (November 21, 1993)
;; General stuffing for supporting Windows NT.
;;; Code:
;; Map delete and backspace
(define-key function-key-map [backspace] "\177")
(define-key function-key-map [delete] "\C-d")
(define-key function-key-map [M-backspace] [?\M-\177])
;; Ignore case on file-name completion
(setq completion-ignore-case t)
;; The cmd.exe shell uses the "/c" switch instead of the "-c" switch
;; for executing its command line argument (from simple.el).
(setq shell-command-switch "/c")
;; Taken from dos-fn.el ... don't want all that's in the file, maybe
;; separate it out someday.
(defvar file-name-buffer-file-type-alist
'(
("[:/].*config.sys$" . nil) ; config.sys text
("\\.elc$" . t) ; emacs stuff
("\\.\\(obj\\|exe\\|com\\|lib\\|sys\\|chk\\|out\\|bin\\|ico\\|pif\\)$" . t)
; MS-Dos stuff
("\\.\\(arc\\|zip\\|pak\\|lzh\\|zoo\\)$" . t)
; Packers
("\\.\\(a\\|o\\|tar\\|z\\|gz\\|taz\\)$" . t)
; Unix stuff
("\\.tp[ulpw]$" . t)
; Borland Pascal stuff
("[:/]tags$" . t)
; Emacs TAGS file
)
"*Alist for distinguishing text files from binary files.
Each element has the form (REGEXP . TYPE), where REGEXP is matched
against the file name, and TYPE is nil for text, t for binary.")
(defun find-buffer-file-type (filename)
(let ((alist file-name-buffer-file-type-alist)
(found nil)
(code nil))
(let ((case-fold-search t))
(setq filename (file-name-sans-versions filename))
(while (and (not found) alist)
(if (string-match (car (car alist)) filename)
(setq code (cdr (car alist))
found t))
(setq alist (cdr alist))))
(if found
(cond((memq code '(nil t)) code)
((and (symbolp code) (fboundp code))
(funcall code filename)))
default-buffer-file-type)))
(defun find-file-binary (filename)
"Visit file FILENAME and treat it as binary."
(interactive "FFind file binary: ")
(let ((file-name-buffer-file-type-alist '(("" . t))))
(find-file filename)))
(defun find-file-text (filename)
"Visit file FILENAME and treat it as a text file."
(interactive "FFind file text: ")
(let ((file-name-buffer-file-type-alist '(("" . nil))))
(find-file filename)))
(defun find-file-not-found-set-buffer-file-type ()
(save-excursion
(set-buffer (current-buffer))
(setq buffer-file-type (find-buffer-file-type (buffer-file-name))))
nil)
;;; To set the default file type on new files.
(add-hook 'find-file-not-found-hooks 'find-file-not-found-set-buffer-file-type)
;;; Fix interface to (X-specific) mouse.el
(defalias 'window-frame 'ignore)
(defalias 'x-set-selection 'ignore)
(fset 'x-get-selection '(lambda (&rest rest) ""))
(fmakunbound 'font-menu-add-default)
(global-unset-key [C-down-mouse-1])
(global-unset-key [C-down-mouse-2])
(global-unset-key [C-down-mouse-3])
;;; winnt.el ends here
This diff is collapsed.
/* System description file for Windows NT.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/*
* Define symbols to identify the version of Unix this is.
* Define all the symbols that apply correctly.
*/
/* #define UNIPLUS */
/* #define USG5 */
/* #define USG */
/* #define HPUX */
/* #define UMAX */
/* #define BSD4_1 */
/* #define BSD4_2 */
/* #define BSD4_3 */
/* #define BSD */
/* #define VMS */
#ifndef WINDOWSNT
#define WINDOWSNT
#endif
#ifndef DOS_NT
#define DOS_NT /* MSDOS or WINDOWSNT */
#endif
/* SYSTEM_TYPE should indicate the kind of system you are using.
It sets the Lisp variable system-type. */
#define SYSTEM_TYPE "windows-nt"
#define SYMS_SYSTEM syms_of_ntterm ()
#define NO_MATHERR
#define HAVE_FREXP
#define HAVE_FMOD
/* NOMULTIPLEJOBS should be defined if your system's shell
does not have "job control" (the ability to stop a program,
run some other program, then continue the first one). */
/* #define NOMULTIPLEJOBS */
/* Emacs can read input using SIGIO and buffering characters itself,
or using CBREAK mode and making C-g cause SIGINT.
The choice is controlled by the variable interrupt_input.
Define INTERRUPT_INPUT to make interrupt_input = 1 the default (use SIGIO)
Emacs uses the presence or absence of the SIGIO macro to indicate
whether or not signal-driven I/O is possible. It uses
INTERRUPT_INPUT to decide whether to use it by default.
SIGIO can be used only on systems that implement it (4.2 and 4.3).
CBREAK mode has two disadvantages
1) At least in 4.2, it is impossible to handle the Meta key properly.
I hear that in system V this problem does not exist.
2) Control-G causes output to be discarded.
I do not know whether this can be fixed in system V.
Another method of doing input is planned but not implemented.
It would have Emacs fork off a separate process
to read the input and send it to the true Emacs process
through a pipe. */
#define INTERRUPT_INPUT
/* Letter to use in finding device name of first pty,
if system supports pty's. 'a' means it is /dev/ptya0 */
#define FIRST_PTY_LETTER 'a'
/*
* Define HAVE_TERMIOS if the system provides POSIX-style
* functions and macros for terminal control.
*
* Define HAVE_TERMIO if the system provides sysV-style ioctls