hrmph..
This commit is contained in:
parent
789b325b54
commit
9ff7afb0f9
@ -1,5 +0,0 @@
|
||||
MANIFEST
|
||||
README
|
||||
Screen.pm
|
||||
Makefile.PL
|
||||
test.pl
|
@ -1,687 +0,0 @@
|
||||
# This Makefile is for the Term::Screen extension to perl.
|
||||
#
|
||||
# It was generated automatically by MakeMaker version
|
||||
# 6.03 (Revision: 1.6) from the contents of
|
||||
# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
|
||||
#
|
||||
# ANY CHANGES MADE HERE WILL BE LOST!
|
||||
#
|
||||
# MakeMaker ARGV: (q[PREFIX=${DESTDIR}/usr/local], q[INSTALLSITELIB=${DESTDIR}/usr/local/libdata/perl5/site_perl], q[INSTALLSITEARCH=${INSTALLSITELIB}/sparc64-openbsd], q[INSTALLPRIVLIB=${DESTDIR}/usr/./libdata/perl5], q[INSTALLARCHLIB=${INSTALLPRIVLIB}/sparc64-openbsd], q[INSTALLMAN1DIR=${DESTDIR}/usr/local/man/man1], q[INSTALLMAN3DIR=${DESTDIR}/usr/local/man/man3p], q[INSTALLBIN=${PREFIX}/bin], q[INSTALLSCRIPT=${INSTALLBIN}])
|
||||
#
|
||||
# MakeMaker Parameters:
|
||||
|
||||
# NAME => q[Term::Screen]
|
||||
# PREREQ_PM => { Term::Cap=>q[0] }
|
||||
# VERSION_FROM => q[Screen.pm]
|
||||
|
||||
# --- MakeMaker post_initialize section:
|
||||
|
||||
|
||||
# --- MakeMaker const_config section:
|
||||
|
||||
# These definitions are from config.sh (via /usr/libdata/perl5/sparc64-openbsd/5.8.0/Config.pm)
|
||||
|
||||
# They may have been overridden via Makefile.PL or on the command line
|
||||
AR = ar
|
||||
CC = cc
|
||||
CCCDLFLAGS = -DPIC -fPIC
|
||||
CCDLFLAGS = -Wl,-R/usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE
|
||||
DLEXT = so
|
||||
DLSRC = dl_dlopen.xs
|
||||
LD = cc
|
||||
LDDLFLAGS = -shared -fPIC
|
||||
LDFLAGS = -Wl,-E
|
||||
LIBC = /usr/lib/libc.so.29.0
|
||||
LIB_EXT = .a
|
||||
OBJ_EXT = .o
|
||||
OSNAME = openbsd
|
||||
OSVERS = 3.2
|
||||
RANLIB = ranlib
|
||||
SO = so
|
||||
EXE_EXT =
|
||||
FULL_AR = /usr/bin/ar
|
||||
|
||||
|
||||
# --- MakeMaker constants section:
|
||||
AR_STATIC_ARGS = cr
|
||||
NAME = Term::Screen
|
||||
DISTNAME = Term-Screen
|
||||
NAME_SYM = Term_Screen
|
||||
VERSION = 1.02
|
||||
VERSION_SYM = 1_02
|
||||
XS_VERSION = 1.02
|
||||
INST_ARCHLIB = blib/arch
|
||||
INST_SCRIPT = blib/script
|
||||
INST_BIN = blib/bin
|
||||
INST_LIB = blib/lib
|
||||
INSTALLDIRS = site
|
||||
PREFIX = ${DESTDIR}/usr/local
|
||||
SITEPREFIX = ${DESTDIR}/usr/local
|
||||
VENDORPREFIX = ${DESTDIR}/usr/local
|
||||
INSTALLPRIVLIB = ${DESTDIR}/usr/./libdata/perl5
|
||||
INSTALLSITELIB = ${DESTDIR}/usr/local/libdata/perl5/site_perl
|
||||
INSTALLVENDORLIB = ${DESTDIR}/usr/local/lib/perl5
|
||||
INSTALLARCHLIB = ${INSTALLPRIVLIB}/sparc64-openbsd
|
||||
INSTALLSITEARCH = ${INSTALLSITELIB}/sparc64-openbsd
|
||||
INSTALLVENDORARCH = ${DESTDIR}/usr/local/lib/perl5/5.8.0/sparc64-openbsd
|
||||
INSTALLBIN = ${PREFIX}/bin
|
||||
INSTALLSITEBIN = ${DESTDIR}/usr/local/bin
|
||||
INSTALLVENDORBIN = ${DESTDIR}/usr/local/bin
|
||||
INSTALLSCRIPT = ${INSTALLBIN}
|
||||
PERL_LIB = /usr/libdata/perl5
|
||||
PERL_ARCHLIB = /usr/libdata/perl5/sparc64-openbsd/5.8.0
|
||||
SITELIBEXP = /usr/local/libdata/perl5/site_perl
|
||||
SITEARCHEXP = /usr/local/libdata/perl5/site_perl/sparc64-openbsd
|
||||
LIBPERL_A = libperl.a
|
||||
FIRST_MAKEFILE = Makefile
|
||||
MAKE_APERL_FILE = Makefile.aperl
|
||||
PERLMAINCC = $(CC)
|
||||
PERL_INC = /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE
|
||||
PERL = /usr/bin/perl
|
||||
FULLPERL = /usr/bin/perl
|
||||
PERLRUN = $(PERL)
|
||||
FULLPERLRUN = $(FULLPERL)
|
||||
PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
|
||||
FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
|
||||
ABSPERL = $(PERL)
|
||||
ABSPERLRUN = $(ABSPERL)
|
||||
ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
|
||||
FULL_AR = /usr/bin/ar
|
||||
PERL_CORE = 0
|
||||
NOOP = $(SHELL) -c true
|
||||
NOECHO = @
|
||||
|
||||
VERSION_MACRO = VERSION
|
||||
DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
|
||||
XS_VERSION_MACRO = XS_VERSION
|
||||
XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
|
||||
PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
|
||||
|
||||
MAKEMAKER = /usr/libdata/perl5/ExtUtils/MakeMaker.pm
|
||||
MM_VERSION = 6.03
|
||||
|
||||
# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
|
||||
# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
|
||||
# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
|
||||
# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
|
||||
FULLEXT = Term/Screen
|
||||
BASEEXT = Screen
|
||||
PARENT_NAME = Term
|
||||
DLBASE = $(BASEEXT)
|
||||
VERSION_FROM = Screen.pm
|
||||
OBJECT =
|
||||
LDFROM = $(OBJECT)
|
||||
LINKTYPE = dynamic
|
||||
|
||||
# Handy lists of source code files:
|
||||
XS_FILES=
|
||||
C_FILES =
|
||||
O_FILES =
|
||||
H_FILES =
|
||||
MAN1PODS =
|
||||
MAN3PODS = Screen.pm
|
||||
INST_MAN1DIR = blib/man1
|
||||
MAN1EXT = 1
|
||||
INSTALLMAN1DIR = ${DESTDIR}/usr/local/man/man1
|
||||
INSTALLSITEMAN1DIR = ${DESTDIR}/usr/local/man/man$(MAN1EXT)
|
||||
INSTALLVENDORMAN1DIR = ${DESTDIR}/usr/local/man/man$(MAN1EXT)
|
||||
INST_MAN3DIR = blib/man3
|
||||
MAN3EXT = 3p
|
||||
INSTALLMAN3DIR = ${DESTDIR}/usr/local/man/man3p
|
||||
INSTALLSITEMAN3DIR = ${DESTDIR}/usr/local/man/man$(MAN3EXT)
|
||||
INSTALLVENDORMAN3DIR = ${DESTDIR}/usr/local/man/man$(MAN3EXT)
|
||||
PERM_RW = 644
|
||||
PERM_RWX = 755
|
||||
|
||||
# work around a famous dec-osf make(1) feature(?):
|
||||
makemakerdflt: all
|
||||
|
||||
.SUFFIXES: .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
|
||||
|
||||
# Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
|
||||
# some make implementations will delete the Makefile when we rebuild it. Because
|
||||
# we call false(1) when we rebuild it. So make(1) is not completely wrong when it
|
||||
# does so. Our milage may vary.
|
||||
# .PRECIOUS: Makefile # seems to be not necessary anymore
|
||||
|
||||
.PHONY: all config static dynamic test linkext manifest
|
||||
|
||||
# Where is the Config information that we are using/depend on
|
||||
CONFIGDEP = $(PERL_ARCHLIB)/Config.pm $(PERL_INC)/config.h
|
||||
|
||||
# Where to put things:
|
||||
INST_LIBDIR = $(INST_LIB)/Term
|
||||
INST_ARCHLIBDIR = $(INST_ARCHLIB)/Term
|
||||
|
||||
INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
|
||||
INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
|
||||
|
||||
INST_STATIC =
|
||||
INST_DYNAMIC =
|
||||
INST_BOOT =
|
||||
|
||||
EXPORT_LIST =
|
||||
|
||||
PERL_ARCHIVE =
|
||||
|
||||
PERL_ARCHIVE_AFTER =
|
||||
|
||||
TO_INST_PM = Screen.pm
|
||||
|
||||
PM_TO_BLIB = Screen.pm \
|
||||
blib/lib/Term/Screen.pm
|
||||
|
||||
|
||||
# --- MakeMaker tool_autosplit section:
|
||||
# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
|
||||
AUTOSPLITFILE = $(PERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
|
||||
|
||||
|
||||
|
||||
# --- MakeMaker tool_xsubpp section:
|
||||
|
||||
|
||||
# --- MakeMaker tools_other section:
|
||||
|
||||
SHELL = /bin/sh
|
||||
CHMOD = chmod
|
||||
CP = cp
|
||||
LD = cc
|
||||
MV = mv
|
||||
NOOP = $(SHELL) -c true
|
||||
RM_F = rm -f
|
||||
RM_RF = rm -rf
|
||||
TEST_F = test -f
|
||||
TOUCH = touch
|
||||
UMASK_NULL = umask 0
|
||||
DEV_NULL = > /dev/null 2>&1
|
||||
|
||||
# The following is a portable way to say mkdir -p
|
||||
# To see which directories are created, change the if 0 to if 1
|
||||
MKPATH = $(PERLRUN) "-MExtUtils::Command" -e mkpath
|
||||
|
||||
# This helps us to minimize the effect of the .exists files A yet
|
||||
# better solution would be to have a stable file in the perl
|
||||
# distribution with a timestamp of zero. But this solution doesn't
|
||||
# need any changes to the core distribution and works with older perls
|
||||
EQUALIZE_TIMESTAMP = $(PERLRUN) "-MExtUtils::Command" -e eqtime
|
||||
|
||||
# Here we warn users that an old packlist file was found somewhere,
|
||||
# and that they should call some uninstall routine
|
||||
WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \
|
||||
-e 'print "WARNING: I have found an old package in\n";' \
|
||||
-e 'print "\t$$ARGV[0].\n";' \
|
||||
-e 'print "Please make sure the two installations are not conflicting\n";'
|
||||
|
||||
UNINST=0
|
||||
VERBINST=0
|
||||
|
||||
MOD_INSTALL = $(PERL) "-I$(INST_LIB)" "-I$(PERL_LIB)" "-MExtUtils::Install" \
|
||||
-e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"
|
||||
|
||||
DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \
|
||||
-e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", $$arg=shift, "|", $$arg, ">";' \
|
||||
-e 'print "=over 4";' \
|
||||
-e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \
|
||||
-e 'print "=back";'
|
||||
|
||||
UNINSTALL = $(PERLRUN) "-MExtUtils::Install" \
|
||||
-e 'uninstall($$ARGV[0],1,1); print "\nUninstall is deprecated. Please check the";' \
|
||||
-e 'print " packlist above carefully.\n There may be errors. Remove the";' \
|
||||
-e 'print " appropriate files manually.\n Sorry for the inconveniences.\n"'
|
||||
|
||||
|
||||
# --- MakeMaker dist section:
|
||||
ZIPFLAGS = -r
|
||||
TO_UNIX = @$(NOOP)
|
||||
TAR = tar
|
||||
POSTOP = @$(NOOP)
|
||||
ZIP = zip
|
||||
DIST_DEFAULT = tardist
|
||||
CI = ci -u
|
||||
SHAR = shar
|
||||
COMPRESS = gzip --best
|
||||
DIST_CP = best
|
||||
PREOP = @$(NOOP)
|
||||
TARFLAGS = cvf
|
||||
DISTVNAME = $(DISTNAME)-$(VERSION)
|
||||
SUFFIX = .gz
|
||||
RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
|
||||
|
||||
|
||||
# --- MakeMaker macro section:
|
||||
|
||||
|
||||
# --- MakeMaker depend section:
|
||||
|
||||
|
||||
# --- MakeMaker cflags section:
|
||||
|
||||
|
||||
# --- MakeMaker const_loadlibs section:
|
||||
|
||||
|
||||
# --- MakeMaker const_cccmd section:
|
||||
|
||||
|
||||
# --- MakeMaker post_constants section:
|
||||
|
||||
|
||||
# --- MakeMaker pasthru section:
|
||||
|
||||
PASTHRU = LIB="$(LIB)"\
|
||||
LIBPERL_A="$(LIBPERL_A)"\
|
||||
LINKTYPE="$(LINKTYPE)"\
|
||||
PREFIX="$(PREFIX)"\
|
||||
OPTIMIZE="$(OPTIMIZE)"\
|
||||
PASTHRU_DEFINE="$(PASTHRU_DEFINE)"\
|
||||
PASTHRU_INC="$(PASTHRU_INC)"
|
||||
|
||||
|
||||
# --- MakeMaker c_o section:
|
||||
|
||||
|
||||
# --- MakeMaker xs_c section:
|
||||
|
||||
|
||||
# --- MakeMaker xs_o section:
|
||||
|
||||
|
||||
# --- MakeMaker top_targets section:
|
||||
|
||||
all :: pure_all manifypods
|
||||
@$(NOOP)
|
||||
|
||||
pure_all :: config pm_to_blib subdirs linkext
|
||||
@$(NOOP)
|
||||
|
||||
subdirs :: $(MYEXTLIB)
|
||||
@$(NOOP)
|
||||
|
||||
config :: Makefile $(INST_LIBDIR)/.exists
|
||||
@$(NOOP)
|
||||
|
||||
config :: $(INST_ARCHAUTODIR)/.exists
|
||||
@$(NOOP)
|
||||
|
||||
config :: $(INST_AUTODIR)/.exists
|
||||
@$(NOOP)
|
||||
|
||||
$(INST_AUTODIR)/.exists :: /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h
|
||||
@$(MKPATH) $(INST_AUTODIR)
|
||||
@$(EQUALIZE_TIMESTAMP) /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h $(INST_AUTODIR)/.exists
|
||||
|
||||
-@$(CHMOD) $(PERM_RWX) $(INST_AUTODIR)
|
||||
|
||||
$(INST_LIBDIR)/.exists :: /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h
|
||||
@$(MKPATH) $(INST_LIBDIR)
|
||||
@$(EQUALIZE_TIMESTAMP) /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h $(INST_LIBDIR)/.exists
|
||||
|
||||
-@$(CHMOD) $(PERM_RWX) $(INST_LIBDIR)
|
||||
|
||||
$(INST_ARCHAUTODIR)/.exists :: /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h
|
||||
@$(MKPATH) $(INST_ARCHAUTODIR)
|
||||
@$(EQUALIZE_TIMESTAMP) /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h $(INST_ARCHAUTODIR)/.exists
|
||||
|
||||
-@$(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR)
|
||||
|
||||
config :: $(INST_MAN3DIR)/.exists
|
||||
@$(NOOP)
|
||||
|
||||
|
||||
$(INST_MAN3DIR)/.exists :: /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h
|
||||
@$(MKPATH) $(INST_MAN3DIR)
|
||||
@$(EQUALIZE_TIMESTAMP) /usr/libdata/perl5/sparc64-openbsd/5.8.0/CORE/perl.h $(INST_MAN3DIR)/.exists
|
||||
|
||||
-@$(CHMOD) $(PERM_RWX) $(INST_MAN3DIR)
|
||||
|
||||
help:
|
||||
perldoc ExtUtils::MakeMaker
|
||||
|
||||
|
||||
# --- MakeMaker linkext section:
|
||||
|
||||
linkext :: $(LINKTYPE)
|
||||
@$(NOOP)
|
||||
|
||||
|
||||
# --- MakeMaker dlsyms section:
|
||||
|
||||
|
||||
# --- MakeMaker dynamic section:
|
||||
|
||||
## $(INST_PM) has been moved to the all: target.
|
||||
## It remains here for awhile to allow for old usage: "make dynamic"
|
||||
#dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
|
||||
dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT)
|
||||
@$(NOOP)
|
||||
|
||||
|
||||
# --- MakeMaker dynamic_bs section:
|
||||
|
||||
BOOTSTRAP =
|
||||
|
||||
|
||||
# --- MakeMaker dynamic_lib section:
|
||||
|
||||
|
||||
# --- MakeMaker static section:
|
||||
|
||||
## $(INST_PM) has been moved to the all: target.
|
||||
## It remains here for awhile to allow for old usage: "make static"
|
||||
#static :: Makefile $(INST_STATIC) $(INST_PM)
|
||||
static :: Makefile $(INST_STATIC)
|
||||
@$(NOOP)
|
||||
|
||||
|
||||
# --- MakeMaker static_lib section:
|
||||
|
||||
|
||||
# --- MakeMaker manifypods section:
|
||||
POD2MAN_EXE = /usr/bin/pod2man
|
||||
POD2MAN = $(PERL) -we '%m=@ARGV;for (keys %m){' \
|
||||
-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "Makefile";' \
|
||||
-e 'print "Manifying $$m{$$_}\n";' \
|
||||
-e 'system(q[$(PERLRUN) $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\047t install $$m{$$_}\n";' \
|
||||
-e 'chmod(oct($(PERM_RW)), $$m{$$_}) or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
|
||||
|
||||
manifypods : pure_all Screen.pm
|
||||
@$(POD2MAN) \
|
||||
Screen.pm \
|
||||
$(INST_MAN3DIR)/Term::Screen.$(MAN3EXT)
|
||||
|
||||
# --- MakeMaker processPL section:
|
||||
|
||||
|
||||
# --- MakeMaker installbin section:
|
||||
|
||||
|
||||
# --- MakeMaker subdirs section:
|
||||
|
||||
# none
|
||||
|
||||
# --- MakeMaker clean section:
|
||||
|
||||
# Delete temporary files but do not touch installed files. We don't delete
|
||||
# the Makefile here so a later make realclean still has a makefile to use.
|
||||
|
||||
clean ::
|
||||
-rm -rf ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all perlmain.c tmon.out mon.out so_locations pm_to_blib *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT) $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def lib$(BASEEXT).def $(BASEEXT).exp $(BASEEXT).x core core.*perl.*.? *perl.core
|
||||
-mv Makefile Makefile.old $(DEV_NULL)
|
||||
|
||||
|
||||
# --- MakeMaker realclean section:
|
||||
|
||||
# Delete temporary files (via clean) and also delete installed files
|
||||
realclean purge :: clean
|
||||
rm -rf $(INST_AUTODIR) $(INST_ARCHAUTODIR)
|
||||
rm -rf $(DISTVNAME)
|
||||
rm -f blib/lib/Term/Screen.pm
|
||||
rm -rf Makefile Makefile.old
|
||||
|
||||
|
||||
# --- MakeMaker dist_basics section:
|
||||
distclean :: realclean distcheck
|
||||
$(NOECHO) $(NOOP)
|
||||
|
||||
distcheck :
|
||||
$(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
|
||||
|
||||
skipcheck :
|
||||
$(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
|
||||
|
||||
manifest :
|
||||
$(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
|
||||
|
||||
veryclean : realclean
|
||||
$(RM_F) *~ *.orig */*~ */*.orig
|
||||
|
||||
|
||||
|
||||
# --- MakeMaker dist_core section:
|
||||
|
||||
dist : $(DIST_DEFAULT)
|
||||
@$(PERL) -le 'print "Warning: Makefile possibly out of date with $$vf" if ' \
|
||||
-e '-e ($$vf="$(VERSION_FROM)") and -M $$vf < -M "Makefile";'
|
||||
|
||||
tardist : $(DISTVNAME).tar$(SUFFIX)
|
||||
|
||||
zipdist : $(DISTVNAME).zip
|
||||
|
||||
$(DISTVNAME).tar$(SUFFIX) : distdir
|
||||
$(PREOP)
|
||||
$(TO_UNIX)
|
||||
$(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
|
||||
$(RM_RF) $(DISTVNAME)
|
||||
$(COMPRESS) $(DISTVNAME).tar
|
||||
$(POSTOP)
|
||||
|
||||
$(DISTVNAME).zip : distdir
|
||||
$(PREOP)
|
||||
$(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
|
||||
$(RM_RF) $(DISTVNAME)
|
||||
$(POSTOP)
|
||||
|
||||
uutardist : $(DISTVNAME).tar$(SUFFIX)
|
||||
uuencode $(DISTVNAME).tar$(SUFFIX) \
|
||||
$(DISTVNAME).tar$(SUFFIX) > \
|
||||
$(DISTVNAME).tar$(SUFFIX)_uu
|
||||
|
||||
shdist : distdir
|
||||
$(PREOP)
|
||||
$(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
|
||||
$(RM_RF) $(DISTVNAME)
|
||||
$(POSTOP)
|
||||
|
||||
|
||||
# --- MakeMaker dist_dir section:
|
||||
distdir :
|
||||
$(RM_RF) $(DISTVNAME)
|
||||
$(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
|
||||
-e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
|
||||
|
||||
|
||||
|
||||
# --- MakeMaker dist_test section:
|
||||
|
||||
disttest : distdir
|
||||
cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL
|
||||
cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
|
||||
cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
|
||||
|
||||
|
||||
# --- MakeMaker dist_ci section:
|
||||
|
||||
ci :
|
||||
$(PERLRUN) "-MExtUtils::Manifest=maniread" \
|
||||
-e "@all = keys %{ maniread() };" \
|
||||
-e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \
|
||||
-e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
|
||||
|
||||
|
||||
# --- MakeMaker install section:
|
||||
|
||||
install :: all pure_install doc_install
|
||||
|
||||
install_perl :: all pure_perl_install doc_perl_install
|
||||
|
||||
install_site :: all pure_site_install doc_site_install
|
||||
|
||||
install_vendor :: all pure_vendor_install doc_vendor_install
|
||||
|
||||
pure_install :: pure_$(INSTALLDIRS)_install
|
||||
|
||||
doc_install :: doc_$(INSTALLDIRS)_install
|
||||
@echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
|
||||
|
||||
pure__install : pure_site_install
|
||||
@echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
|
||||
|
||||
doc__install : doc_site_install
|
||||
@echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
|
||||
|
||||
pure_perl_install ::
|
||||
@$(MOD_INSTALL) \
|
||||
read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
|
||||
write $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
|
||||
$(INST_LIB) $(INSTALLPRIVLIB) \
|
||||
$(INST_ARCHLIB) $(INSTALLARCHLIB) \
|
||||
$(INST_BIN) $(INSTALLBIN) \
|
||||
$(INST_SCRIPT) $(INSTALLSCRIPT) \
|
||||
$(INST_MAN1DIR) $(INSTALLMAN1DIR) \
|
||||
$(INST_MAN3DIR) $(INSTALLMAN3DIR)
|
||||
@$(WARN_IF_OLD_PACKLIST) \
|
||||
$(SITEARCHEXP)/auto/$(FULLEXT)
|
||||
|
||||
|
||||
pure_site_install ::
|
||||
@$(MOD_INSTALL) \
|
||||
read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
|
||||
write $(INSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
|
||||
$(INST_LIB) $(INSTALLSITELIB) \
|
||||
$(INST_ARCHLIB) $(INSTALLSITEARCH) \
|
||||
$(INST_BIN) $(INSTALLSITEBIN) \
|
||||
$(INST_SCRIPT) $(INSTALLSCRIPT) \
|
||||
$(INST_MAN1DIR) $(INSTALLSITEMAN1DIR) \
|
||||
$(INST_MAN3DIR) $(INSTALLSITEMAN3DIR)
|
||||
@$(WARN_IF_OLD_PACKLIST) \
|
||||
$(PERL_ARCHLIB)/auto/$(FULLEXT)
|
||||
|
||||
pure_vendor_install ::
|
||||
@$(MOD_INSTALL) \
|
||||
$(INST_LIB) $(INSTALLVENDORLIB) \
|
||||
$(INST_ARCHLIB) $(INSTALLVENDORARCH) \
|
||||
$(INST_BIN) $(INSTALLVENDORBIN) \
|
||||
$(INST_SCRIPT) $(INSTALLSCRIPT) \
|
||||
$(INST_MAN1DIR) $(INSTALLVENDORMAN1DIR) \
|
||||
$(INST_MAN3DIR) $(INSTALLVENDORMAN3DIR)
|
||||
|
||||
doc_perl_install ::
|
||||
-@$(MKPATH) $(INSTALLARCHLIB)
|
||||
-@$(DOC_INSTALL) \
|
||||
"Module" "$(NAME)" \
|
||||
"installed into" "$(INSTALLPRIVLIB)" \
|
||||
LINKTYPE "$(LINKTYPE)" \
|
||||
VERSION "$(VERSION)" \
|
||||
EXE_FILES "$(EXE_FILES)" \
|
||||
>> $(INSTALLARCHLIB)/perllocal.pod
|
||||
|
||||
doc_site_install ::
|
||||
-@$(MKPATH) $(INSTALLARCHLIB)
|
||||
-@$(DOC_INSTALL) \
|
||||
"Module" "$(NAME)" \
|
||||
"installed into" "$(INSTALLSITELIB)" \
|
||||
LINKTYPE "$(LINKTYPE)" \
|
||||
VERSION "$(VERSION)" \
|
||||
EXE_FILES "$(EXE_FILES)" \
|
||||
>> $(INSTALLSITEARCH)/perllocal.pod
|
||||
|
||||
doc_vendor_install ::
|
||||
|
||||
|
||||
uninstall :: uninstall_from_$(INSTALLDIRS)dirs
|
||||
|
||||
uninstall_from_perldirs ::
|
||||
@$(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
|
||||
|
||||
uninstall_from_sitedirs ::
|
||||
@$(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
|
||||
|
||||
|
||||
# --- MakeMaker force section:
|
||||
# Phony target to force checking subdirectories.
|
||||
FORCE:
|
||||
@$(NOOP)
|
||||
|
||||
|
||||
# --- MakeMaker perldepend section:
|
||||
|
||||
|
||||
# --- MakeMaker makefile section:
|
||||
|
||||
# We take a very conservative approach here, but it\'s worth it.
|
||||
# We move Makefile to Makefile.old here to avoid gnu make looping.
|
||||
Makefile : Makefile.PL $(CONFIGDEP)
|
||||
@echo "Makefile out-of-date with respect to $?"
|
||||
@echo "Cleaning current config before rebuilding Makefile..."
|
||||
-@$(RM_F) Makefile.old
|
||||
-@$(MV) Makefile Makefile.old
|
||||
-$(MAKE) -f Makefile.old clean $(DEV_NULL) || $(NOOP)
|
||||
$(PERLRUN) Makefile.PL "PREFIX=${DESTDIR}/usr/local" "INSTALLSITELIB=${DESTDIR}/usr/local/libdata/perl5/site_perl" "INSTALLSITEARCH=${INSTALLSITELIB}/sparc64-openbsd" "INSTALLPRIVLIB=${DESTDIR}/usr/./libdata/perl5" "INSTALLARCHLIB=${INSTALLPRIVLIB}/sparc64-openbsd" "INSTALLMAN1DIR=${DESTDIR}/usr/local/man/man1" "INSTALLMAN3DIR=${DESTDIR}/usr/local/man/man3p" "INSTALLBIN=${PREFIX}/bin" "INSTALLSCRIPT=${INSTALLBIN}"
|
||||
@echo "==> Your Makefile has been rebuilt. <=="
|
||||
@echo "==> Please rerun the make command. <=="
|
||||
false
|
||||
|
||||
|
||||
|
||||
# --- MakeMaker staticmake section:
|
||||
|
||||
# --- MakeMaker makeaperl section ---
|
||||
MAP_TARGET = perl
|
||||
FULLPERL = /usr/bin/perl
|
||||
|
||||
$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
|
||||
$(MAKE) -f $(MAKE_APERL_FILE) $@
|
||||
|
||||
$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
|
||||
@echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
|
||||
@$(PERLRUNINST) \
|
||||
Makefile.PL DIR= \
|
||||
MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
|
||||
MAKEAPERL=1 NORECURS=1 CCCDLFLAGS= \
|
||||
PREFIX=${DESTDIR}/usr/local \
|
||||
INSTALLSITELIB=${DESTDIR}/usr/local/libdata/perl5/site_perl \
|
||||
INSTALLSITEARCH=${INSTALLSITELIB}/sparc64-openbsd \
|
||||
INSTALLPRIVLIB=${DESTDIR}/usr/./libdata/perl5 \
|
||||
INSTALLARCHLIB=${INSTALLPRIVLIB}/sparc64-openbsd \
|
||||
INSTALLMAN1DIR=${DESTDIR}/usr/local/man/man1 \
|
||||
INSTALLMAN3DIR=${DESTDIR}/usr/local/man/man3p \
|
||||
INSTALLBIN=${PREFIX}/bin \
|
||||
INSTALLSCRIPT=${INSTALLBIN}
|
||||
|
||||
|
||||
# --- MakeMaker test section:
|
||||
|
||||
TEST_VERBOSE=0
|
||||
TEST_TYPE=test_$(LINKTYPE)
|
||||
TEST_FILE = test.pl
|
||||
TEST_FILES =
|
||||
TESTDB_SW = -d
|
||||
|
||||
testdb :: testdb_$(LINKTYPE)
|
||||
|
||||
test :: $(TEST_TYPE)
|
||||
|
||||
test_dynamic :: pure_all
|
||||
PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
|
||||
|
||||
testdb_dynamic :: pure_all
|
||||
PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
|
||||
|
||||
test_ : test_dynamic
|
||||
|
||||
test_static :: test_dynamic
|
||||
testdb_static :: testdb_dynamic
|
||||
|
||||
|
||||
# --- MakeMaker ppd section:
|
||||
# Creates a PPD (Perl Package Description) for a binary distribution.
|
||||
ppd:
|
||||
@$(PERL) -e "print qq{<SOFTPKG NAME=\"$(DISTNAME)\" VERSION=\"1,02,0,0\">\n\t<TITLE>$(DISTNAME)</TITLE>\n\t<ABSTRACT></ABSTRACT>\n\t<AUTHOR></AUTHOR>\n}" > $(DISTNAME).ppd
|
||||
@$(PERL) -e "print qq{\t<IMPLEMENTATION>\n\t\t<DEPENDENCY NAME=\"Term-Cap\" VERSION=\"0,0,0,0\" />\n}" >> $(DISTNAME).ppd
|
||||
@$(PERL) -e "print qq{\t\t<OS NAME=\"$(OSNAME)\" />\n\t\t<ARCHITECTURE NAME=\"sparc64-openbsd\" />\n\t\t<CODEBASE HREF=\"\" />\n\t</IMPLEMENTATION>\n</SOFTPKG>\n}" >> $(DISTNAME).ppd
|
||||
|
||||
# --- MakeMaker pm_to_blib section:
|
||||
|
||||
pm_to_blib: $(TO_INST_PM)
|
||||
@$(PERLRUNINST) "-MExtUtils::Install" \
|
||||
-e "pm_to_blib({qw{Screen.pm blib/lib/Term/Screen.pm}},'$(INST_LIB)/auto','$(PM_FILTER)')"
|
||||
@$(TOUCH) $@
|
||||
|
||||
# --- MakeMaker selfdocument section:
|
||||
|
||||
|
||||
# --- MakeMaker postamble section:
|
||||
|
||||
|
||||
# End.
|
@ -1,7 +0,0 @@
|
||||
use ExtUtils::MakeMaker;
|
||||
|
||||
WriteMakefile(
|
||||
'NAME' => 'Term::Screen',
|
||||
'VERSION_FROM' => 'Screen.pm',
|
||||
'PREREQ_PM' => { Term::Cap => 0 },
|
||||
);
|
@ -1,61 +0,0 @@
|
||||
Term::Screen version 1.01
|
||||
=========================
|
||||
|
||||
This module provides a simple interface to the terminal control features
|
||||
for character mode terminals.
|
||||
|
||||
INSTALLATION
|
||||
|
||||
This module will build in the usual way :
|
||||
|
||||
perl Makefile.PL
|
||||
make
|
||||
make test
|
||||
make install
|
||||
|
||||
This last step may need to be done as a user with permission to write into
|
||||
the Perl library directories - if you are not able to do this you may run
|
||||
the first step with:
|
||||
|
||||
perl Makefile.PL PREFIX=/some/directory/you/can/write/to
|
||||
|
||||
And then run the rest of the procedure as usual - you will need to add
|
||||
that path to @INC as described in the FAQ or in the manpage for the 'lib'
|
||||
pragma.
|
||||
|
||||
DEPENDENCIES
|
||||
|
||||
This module depends on version 1.01 or greater of Term::Cap - whilst this
|
||||
module has been in the core Perl distribution for some years it had
|
||||
previously required a patch - 1.01 is available as part of the 5.7.2
|
||||
development release (not intended for general release) and will be in
|
||||
5.8.0 - it is hoped that 1.02 will be released to CPAN for those who
|
||||
dont want to upgrade their version of Perl just now.
|
||||
|
||||
TO DO
|
||||
|
||||
Make a terminfo version of this so better function key support would be
|
||||
built in.
|
||||
|
||||
Make an MS-DOS version and a MAC version and an OS/2 version and a VMS
|
||||
version, and ... so we can stop seeing "how can I read one char questions"
|
||||
|
||||
SUPPORT
|
||||
|
||||
Please contact the current maintainer of this module to report any bugs
|
||||
or suggest changes to this module.
|
||||
|
||||
Jonathan Stowe <jns@gellyfish.com>
|
||||
|
||||
COPYRIGHT AND LICENSE
|
||||
|
||||
Copyright (c) Mark Kaehny 1996
|
||||
Jonathan Stowe 2001
|
||||
|
||||
|
||||
This is free software it can be modified and distributed under the same
|
||||
terms as Perl itself - see the README file in the Perl Distribution for
|
||||
more information.
|
||||
|
||||
Mark Kaehny
|
||||
kaehny@execpc.com
|
@ -1,628 +0,0 @@
|
||||
# $Id: Screen.pm,v 1.1.1.1 2003/01/27 23:34:37 margarida Exp $
|
||||
|
||||
package Term::Screen;
|
||||
|
||||
use strict;
|
||||
|
||||
use vars qw($VERSION);
|
||||
|
||||
$VERSION = '1.02';
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Term::Screen - A Simple all perl Term::Cap based screen positioning module
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
require Term::Screen;
|
||||
|
||||
$scr = new Term::Screen;
|
||||
unless ($scr) { die " Something's wrong \n"; }
|
||||
$scr->clrscr();
|
||||
$scr->at(5,3);
|
||||
$scr->puts("this is some stuff");
|
||||
$scr->at(10,10)->bold()->puts("hi!")->normal();
|
||||
# you can concatenate many calls (not getch)
|
||||
$c = $scr->getch(); # doesn't need Enter key
|
||||
...
|
||||
if ($scr->key_pressed()) { print "ha you hit a key!"; }
|
||||
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Term::Screen is a very simple screen positioning module that should
|
||||
work wherever C<Term::Cap> does. It is set up for Unix using stty's but
|
||||
these dependences are isolated by evals in the C<new> constructor. Thus
|
||||
you may create a child module implementing Screen with MS-DOS, ioctl,
|
||||
or other means to get raw and unblocked input. This is not a replacement
|
||||
for Curses -- it has no memory. This was written so that it could be
|
||||
easily changed to fit nasty systems, and to be available first thing.
|
||||
|
||||
The input functions getch, key_pressed, echo, and noecho are implemented
|
||||
so as to work under a fairly standard Unix system. They use 'stty'
|
||||
to set raw and no echo modes and turn on auto flush. All of these are
|
||||
'eval'ed so that this class can be inherited for new definitions easily.
|
||||
|
||||
Term::Screen was designed to be "required", then used with object syntax
|
||||
as shown above. One quirk (which the author was used to so he didn't
|
||||
care) is that for function key translation, no delay is set. So for many
|
||||
terminals to get an esc character, you have to hit another char after it,
|
||||
generally another esc.
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
Term::Screen has a very minimal set of of fixed character terminal position
|
||||
and character reading commands:
|
||||
|
||||
=over 4
|
||||
|
||||
=cut
|
||||
|
||||
require Term::Cap;
|
||||
|
||||
=item new()
|
||||
|
||||
Initialize the screen. Does not clear the screen, but does home the cursor.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub new
|
||||
{
|
||||
my ($prototype, @args) = @_;
|
||||
|
||||
my $classname = ref($prototype) || $prototype;
|
||||
|
||||
my ($ospeed);
|
||||
# adjust OSPEED below to your system.
|
||||
eval { $ospeed = `stty speed`; }; # Unixish way to get OSpeed - works
|
||||
$ospeed = 9600 if ($@); # on Linux, Gnuish, Suns ...
|
||||
my $term = Tgetent Term::Cap { 'TERM' => '', 'OSPEED' => $ospeed };
|
||||
|
||||
my $this = {}; # create object
|
||||
bless $this, $classname;
|
||||
$this->term($term); # keep termcap entry reference
|
||||
$this->{IN} = ''; # clear input buffer
|
||||
$this->{ROWS} = 0;
|
||||
$this->{COLS} = 0;
|
||||
$this->resize(); # sets $this->{ROWS} & {COLS}
|
||||
$this->{KEYS} = {}; # set up fn key hash of hashes
|
||||
$this->get_fn_keys() ; # define function key table from defaults
|
||||
$this->at(0,0); # home cursor
|
||||
$this->{ECHO} = 1; # start off echoing
|
||||
$| = 1; # for output flush on writes
|
||||
# wrapped so inherited versions can call with different input codes
|
||||
eval { system('stty raw -echo'); }; # turn on raw input
|
||||
# ignore errors
|
||||
return $this;
|
||||
}
|
||||
|
||||
sub DESTROY { eval { system('stty -raw echo'); } }
|
||||
|
||||
=item term(term)
|
||||
|
||||
Sets or Gets the Term::Cap object used by this object.
|
||||
|
||||
=cut
|
||||
|
||||
sub term
|
||||
{
|
||||
my ( $self, $term ) = @_;
|
||||
|
||||
if ( defined $term && ref $term and UNIVERSAL::isa($term,'Term::Cap'))
|
||||
{
|
||||
$self->{TERM} = $term;
|
||||
}
|
||||
return $self->{TERM};
|
||||
}
|
||||
|
||||
=item rows(rows)
|
||||
|
||||
Returns and/or sets the number of rows on the terminal.
|
||||
|
||||
=cut
|
||||
|
||||
sub rows
|
||||
{
|
||||
my ( $self, $rows ) = @_;
|
||||
|
||||
if ( defined $rows and $rows =~ /\d+/ )
|
||||
{
|
||||
$self->{ROWS} = $rows;
|
||||
}
|
||||
|
||||
return $self->{ROWS};
|
||||
}
|
||||
|
||||
=item cols(cols)
|
||||
|
||||
Returns and/or sets the number of cols on the terminal.
|
||||
|
||||
=cut
|
||||
|
||||
sub cols
|
||||
{
|
||||
my ( $self, $cols ) = @_;
|
||||
|
||||
|
||||
if ( defined $cols and $cols =~ /\d+/ )
|
||||
{
|
||||
$self->{COLS} = $cols;
|
||||
}
|
||||
|
||||
return $self->{COLS};
|
||||
}
|
||||
|
||||
=item at(row,col)
|
||||
|
||||
Moves cursor to (row,col) where (0,0) is upper left corner, - if the spot is
|
||||
illegal does whatever 'cm' in termcap does, since that is what it uses.
|
||||
|
||||
=cut
|
||||
|
||||
sub at
|
||||
{
|
||||
my ($this, $r, $c) = @_;
|
||||
if ($r < 0) {$r = 0;}
|
||||
if ($c < 0) {$c = 0;}
|
||||
if ($r >= $this->{ROWS}) {$r = $this->{ROWS}-1;}
|
||||
if ($c >= $this->{COLS}) {$c = $this->{COLS}-1;}
|
||||
$this->term()->Tgoto('cm', $c, $r, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item resize(r,c)
|
||||
|
||||
Tell screen the new number of rows & cols physically you can skip the r & c
|
||||
and get new checked vals from stty or termcap. Term::Screen does not
|
||||
handle resize signals internally, but you can do it by checking and updating
|
||||
screen size using this function.
|
||||
|
||||
=cut
|
||||
|
||||
sub resize
|
||||
{
|
||||
my ($this, $r, $c) = @_;
|
||||
my $size = '';
|
||||
|
||||
# find screen size -- trying different methods
|
||||
if ($#_ != 2 || $r <= 0 || $c <= 0)
|
||||
{
|
||||
$r = 0; $c = 0;
|
||||
eval { $size = `stty size`; }; # not portable but most accurate
|
||||
if ( $size =~ /^\s*(\d+)\s+(\d+)\s*/ )
|
||||
{
|
||||
($r, $c) = ($1, $2);
|
||||
}
|
||||
}
|
||||
if ($r == 0 || $c == 0) # try getting rows and cols some other way
|
||||
{
|
||||
if (exists $ENV{'LINES'}) { $r = $ENV{'LINES'}; }
|
||||
else { $r = $this->term()->{'_li'}; } # this is often wrong
|
||||
if (exists $ENV{'COLUMNS'}) { $c = $ENV{'COLUMNS'}; }
|
||||
else { $c = $this->term()->{'_co'}; }
|
||||
}
|
||||
$this->{ROWS} = $r; $this->{COLS} = $c;
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item normal()
|
||||
|
||||
Turn off any highlightling (bold, reverse)
|
||||
|
||||
=cut
|
||||
|
||||
sub normal
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('me',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item bold()
|
||||
|
||||
The md value from termcap - turn on bold usually
|
||||
|
||||
=cut
|
||||
|
||||
sub bold
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('md',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item reverse()
|
||||
|
||||
The mr value from termcap - turn on reverse text often. these last
|
||||
two default to whatever is available.
|
||||
|
||||
=cut
|
||||
|
||||
sub reverse
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('mr',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item clrscr()
|
||||
|
||||
Clear the screen and home cursor
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub clrscr
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('cl',1, *STDOUT);
|
||||
$this->{'rc'} = [0,0];
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item clreol()
|
||||
|
||||
Clear to the end of the line - cursor doesn't move
|
||||
|
||||
=cut
|
||||
|
||||
sub clreol
|
||||
{
|
||||
my $this = shift;
|
||||
if (exists ($this->term()->{'_ce'}))
|
||||
{
|
||||
$this->term()->Tputs('ce',1,*STDOUT);
|
||||
}
|
||||
return $this
|
||||
}
|
||||
|
||||
=item clreos()
|
||||
|
||||
Clear to end of screen - right and down, cursor doesn't move.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub clreos
|
||||
{
|
||||
my $this = shift;
|
||||
if (exists ($this->term()->{'_cd'}))
|
||||
{
|
||||
$this->term()->Tputs('cd',1,*STDOUT);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item il()
|
||||
|
||||
Insert blank line before line cursor is on, moving lower lines down.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub il
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('al', 1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item dl()
|
||||
|
||||
Delete line cursor is on, moving lower lines up.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub dl
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('dl',1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item ic_exists()
|
||||
|
||||
Insert character option is available.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub ic_exists { ( exists ($_[0]->term()->{'ic'}) ? 1 : 0 ); }
|
||||
|
||||
*exists_ic = \&ic_exists;
|
||||
|
||||
=item ic()
|
||||
|
||||
Insert character at current position move rest to the right.
|
||||
|
||||
=cut
|
||||
|
||||
sub ic
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('ic',1, *STDOUT);
|
||||
$this;
|
||||
}
|
||||
|
||||
=item dc_exists()
|
||||
|
||||
Delete char option exists and is available.
|
||||
|
||||
=cut
|
||||
|
||||
sub dc_exists { ( exists ($_[0]->term()->{'dc'}) ? 1 : 0 ); }
|
||||
|
||||
*exists_dc = \&dc_exists;
|
||||
|
||||
=item dc()
|
||||
|
||||
Delete character at current position moving rest to the left.
|
||||
|
||||
=cut
|
||||
|
||||
sub dc
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('dc',1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=back
|
||||
|
||||
The following are the I/O functions. They provide standard useful
|
||||
single character reading values. getch returns either a single char or
|
||||
the name of a function key when a key is pressed. The only exception is
|
||||
when you hit a character that is the start of a function key sequence.
|
||||
In this case getch keeps waiting for the next char to see if it is fn key.
|
||||
Generally this is the escape key, and why you need to hit esc twice.
|
||||
To get a stright char, just use the regular 'gets' perl function. You
|
||||
will need to echo it yourself if you want.
|
||||
|
||||
=over 4
|
||||
|
||||
=item puts(str)
|
||||
|
||||
Prints $s and returns the screen object. Used to do things like
|
||||
C<$scr->at(10,0)->puts("Hi!")->at(0,0);>. You can just use
|
||||
print if you want.
|
||||
|
||||
=cut
|
||||
|
||||
sub puts { print $_[1]; return $_[0]; }
|
||||
|
||||
=item getch()
|
||||
|
||||
Returns just a char in raw mode. Function keys are returned as their
|
||||
capability names, e.g. the up key would return "ku". See the
|
||||
C<get_fn_keys> function for what a lot of the names are. This will wait
|
||||
for next char if in a possible fn key string, so you would need to type
|
||||
'esc' 'esc' most likely to get out of getch, since 'esc' is usually the
|
||||
leading char for function keys. You can use perl's getc, to go 'underneath'
|
||||
getch if you want. See the table in Screen::get_fn_keys() for more
|
||||
information.
|
||||
|
||||
=cut
|
||||
|
||||
sub getch
|
||||
{
|
||||
my $this = shift;
|
||||
my ($c, $fn_flag) = ('', 0);
|
||||
my $partial_fn_str = '';
|
||||
|
||||
if ($this->{IN}) { $c = chop($this->{IN}); }
|
||||
else { $c = getc(STDIN); }
|
||||
|
||||
$partial_fn_str = $c;
|
||||
while (exists ($this->{KEYS}{$partial_fn_str}))
|
||||
{ # in a possible function key sequence
|
||||
$fn_flag = 1;
|
||||
if ($this->{KEYS}{$partial_fn_str}) # key found
|
||||
{
|
||||
$c = $this->{KEYS}{$partial_fn_str};
|
||||
$partial_fn_str = '';
|
||||
last;
|
||||
}
|
||||
else # wait for another key to see if were in FN yet
|
||||
{
|
||||
if ($this->{IN}) { $partial_fn_str .= chop($this->{IN}); }
|
||||
else { $partial_fn_str .= getc(); }
|
||||
}
|
||||
}
|
||||
if ($fn_flag) # seemed like a fn key
|
||||
{
|
||||
if ($partial_fn_str) # oops not a fn key
|
||||
{
|
||||
if ($partial_fn_str eq "\e\e") # take care of funny ESC case
|
||||
{
|
||||
$c = "\e";
|
||||
$partial_fn_str = "";
|
||||
}
|
||||
else # buffer up the received chars
|
||||
{
|
||||
$this->{IN} = CORE::reverse($partial_fn_str) . $this->{IN};
|
||||
$c = chop($this->{IN});
|
||||
$this->puts($c) if ($this->{ECHO} && ($c ne "\e"));
|
||||
}
|
||||
}
|
||||
# if fn_key then never echo so do nothing here
|
||||
}
|
||||
elsif ($this->{ECHO} && ($c ne "\e")) { $this->puts($c); } # regular key
|
||||
return $c;
|
||||
}
|
||||
|
||||
=item def_key('name','input string')
|
||||
|
||||
Lets you define your own function key sequence. 'name' is what will be
|
||||
returned by getch. 'input string' is what the fn key sends literally. This
|
||||
will override any prev definitions of the input. A whole bunch of defaults
|
||||
are defined for xterms rxvt's, etc. in the get_fn_keys function.
|
||||
|
||||
=cut
|
||||
|
||||
sub def_key
|
||||
{
|
||||
my ($this, $fn, $str) = @_;
|
||||
|
||||
$this->{KEYS}{$str} = $fn if ($str ne '');
|
||||
while ($str ne '')
|
||||
{
|
||||
chop($str);
|
||||
$this->{KEYS}{$str} = '' if ($str ne '');
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
=item key_pressed([sec])
|
||||
|
||||
Returns true if there is a character waiting. You can pass an option time in
|
||||
seconds to wait.
|
||||
|
||||
=cut
|
||||
|
||||
sub key_pressed
|
||||
{
|
||||
my ($this, $seconds) = @_;
|
||||
my $readfields = '';
|
||||
my $ready = 0;
|
||||
|
||||
$seconds = 0 if (!defined $seconds);
|
||||
vec($readfields, fileno(STDIN), 1) = 1; # set up to check STDIN
|
||||
eval { $ready = select($readfields, undef, undef, $seconds); };
|
||||
return $ready;
|
||||
}
|
||||
|
||||
=item echo()
|
||||
|
||||
Tells getch to echo the input to the screen. (the default.)
|
||||
|
||||
=cut
|
||||
|
||||
sub echo { my $this = shift; $this->{ECHO} = 1; return $this; }
|
||||
|
||||
=item noecho()
|
||||
|
||||
Tells getch NOT to echo input to the screen.
|
||||
|
||||
=cut
|
||||
|
||||
sub noecho { my $this = shift; $this->{ECHO} = 0; return $this; }
|
||||
|
||||
=item flush_input()
|
||||
|
||||
Clears input buffer and removes any incoming chars.
|
||||
|
||||
=cut
|
||||
|
||||
sub flush_input
|
||||
{
|
||||
my $this = shift;
|
||||
$this->{IN} = '';
|
||||
while ($this->key_pressed()) { getc(); }
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item stuff_input(str)
|
||||
|
||||
Lets you stuff chars into the input buffer to be read like keystrokes.
|
||||
This is only the C<getch> method buffer, the underlying getc stuff
|
||||
is not touched.
|
||||
|
||||
=cut
|
||||
|
||||
sub stuff_input
|
||||
{
|
||||
my ($this, $str) = @_;
|
||||
$this->{IN} = CORE::reverse($str) . $this->{IN};
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
# internal functions
|
||||
|
||||
# This function sets up the arrow keys from { ku kd kr kl }
|
||||
# and the function keys from {k0 .. k9} with labels from { l0 .. l9}
|
||||
# (if they exist of course.)
|
||||
# This is all encoded in a funny way -- as a hash with the
|
||||
# characters as keys - check the code. It makes checking fn keys easy.
|
||||
|
||||
sub get_fn_keys
|
||||
{
|
||||
my $this = shift;
|
||||
my $term = $this->term();
|
||||
my @keys = qw/ku kd kl kr k0 k1 k2 k3 k4 k5 k6 k7 k8 k9/;
|
||||
my ($fn, $ufn, $lfn);
|
||||
|
||||
# throw in some defaults (xterm & rxvt arrows);
|
||||
$this->def_key("ku","\e[A");
|
||||
$this->def_key("kd","\e[B");
|
||||
$this->def_key("kr","\e[C");
|
||||
$this->def_key("kl","\e[D");
|
||||
|
||||
# PC keyboard fn keys for xterm (some of them)
|
||||
$this->def_key("k1","\e[11~");
|
||||
$this->def_key("k2","\e[12~");
|
||||
$this->def_key("k3","\e[13~");
|
||||
$this->def_key("k4","\e[14~");
|
||||
$this->def_key("k5","\e[15~");
|
||||
$this->def_key("k6","\e[17~");
|
||||
$this->def_key("k7","\e[18~");
|
||||
$this->def_key("k8","\e[19~");
|
||||
$this->def_key("k9","\e[20~");
|
||||
$this->def_key("k10","\e[21~");
|
||||
$this->def_key("k11","\e[23~");
|
||||
$this->def_key("k12","\e[24~");
|
||||
|
||||
$this->def_key("ins","\e[2~");
|
||||
$this->def_key("del","\e[3~");
|
||||
|
||||
$this->def_key("home","\e[H"); # mult defs are no problem
|
||||
$this->def_key("home","\eO"); # these are some I have found
|
||||
$this->def_key("end","\eOw");
|
||||
$this->def_key("end","\eOe");
|
||||
$this->def_key("pgup", "\e[5~");
|
||||
$this->def_key("pgdn", "\e[6~");
|
||||
|
||||
# try to get anything useful out of termcap
|
||||
# (not too accurate in many cases
|
||||
|
||||
foreach $fn (@keys)
|
||||
{
|
||||
$ufn = '_' . $fn;
|
||||
$lfn = $ufn;
|
||||
$lfn =~ s/_k/_l/;
|
||||
|
||||
if (exists $term->{$ufn})
|
||||
{
|
||||
if ((exists $term->{$lfn}) && ($term->{$lfn}))
|
||||
{ $fn = substr($lfn,1); }
|
||||
$this->def_key($fn, $term->{$ufn});
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Term::Screen.pm by Mark Kaehny (kaehny@execpc.com)
|
||||
Currently maintained by Jonathan Stowe <jns@gellyfish.com>
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Please see the README file in the distribution kit for the license details
|
||||
for this module.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
Term::Cap, termcap, curses, stty, select
|
||||
|
||||
=cut
|
@ -1,628 +0,0 @@
|
||||
# $Id: Screen.pm,v 1.1.1.1 2003/01/27 23:34:38 margarida Exp $
|
||||
|
||||
package Term::Screen;
|
||||
|
||||
use strict;
|
||||
|
||||
use vars qw($VERSION);
|
||||
|
||||
$VERSION = '1.02';
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Term::Screen - A Simple all perl Term::Cap based screen positioning module
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
require Term::Screen;
|
||||
|
||||
$scr = new Term::Screen;
|
||||
unless ($scr) { die " Something's wrong \n"; }
|
||||
$scr->clrscr();
|
||||
$scr->at(5,3);
|
||||
$scr->puts("this is some stuff");
|
||||
$scr->at(10,10)->bold()->puts("hi!")->normal();
|
||||
# you can concatenate many calls (not getch)
|
||||
$c = $scr->getch(); # doesn't need Enter key
|
||||
...
|
||||
if ($scr->key_pressed()) { print "ha you hit a key!"; }
|
||||
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Term::Screen is a very simple screen positioning module that should
|
||||
work wherever C<Term::Cap> does. It is set up for Unix using stty's but
|
||||
these dependences are isolated by evals in the C<new> constructor. Thus
|
||||
you may create a child module implementing Screen with MS-DOS, ioctl,
|
||||
or other means to get raw and unblocked input. This is not a replacement
|
||||
for Curses -- it has no memory. This was written so that it could be
|
||||
easily changed to fit nasty systems, and to be available first thing.
|
||||
|
||||
The input functions getch, key_pressed, echo, and noecho are implemented
|
||||
so as to work under a fairly standard Unix system. They use 'stty'
|
||||
to set raw and no echo modes and turn on auto flush. All of these are
|
||||
'eval'ed so that this class can be inherited for new definitions easily.
|
||||
|
||||
Term::Screen was designed to be "required", then used with object syntax
|
||||
as shown above. One quirk (which the author was used to so he didn't
|
||||
care) is that for function key translation, no delay is set. So for many
|
||||
terminals to get an esc character, you have to hit another char after it,
|
||||
generally another esc.
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
Term::Screen has a very minimal set of of fixed character terminal position
|
||||
and character reading commands:
|
||||
|
||||
=over 4
|
||||
|
||||
=cut
|
||||
|
||||
require Term::Cap;
|
||||
|
||||
=item new()
|
||||
|
||||
Initialize the screen. Does not clear the screen, but does home the cursor.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub new
|
||||
{
|
||||
my ($prototype, @args) = @_;
|
||||
|
||||
my $classname = ref($prototype) || $prototype;
|
||||
|
||||
my ($ospeed);
|
||||
# adjust OSPEED below to your system.
|
||||
eval { $ospeed = `stty speed`; }; # Unixish way to get OSpeed - works
|
||||
$ospeed = 9600 if ($@); # on Linux, Gnuish, Suns ...
|
||||
my $term = Tgetent Term::Cap { 'TERM' => '', 'OSPEED' => $ospeed };
|
||||
|
||||
my $this = {}; # create object
|
||||
bless $this, $classname;
|
||||
$this->term($term); # keep termcap entry reference
|
||||
$this->{IN} = ''; # clear input buffer
|
||||
$this->{ROWS} = 0;
|
||||
$this->{COLS} = 0;
|
||||
$this->resize(); # sets $this->{ROWS} & {COLS}
|
||||
$this->{KEYS} = {}; # set up fn key hash of hashes
|
||||
$this->get_fn_keys() ; # define function key table from defaults
|
||||
$this->at(0,0); # home cursor
|
||||
$this->{ECHO} = 1; # start off echoing
|
||||
$| = 1; # for output flush on writes
|
||||
# wrapped so inherited versions can call with different input codes
|
||||
eval { system('stty raw -echo'); }; # turn on raw input
|
||||
# ignore errors
|
||||
return $this;
|
||||
}
|
||||
|
||||
sub DESTROY { eval { system('stty -raw echo'); } }
|
||||
|
||||
=item term(term)
|
||||
|
||||
Sets or Gets the Term::Cap object used by this object.
|
||||
|
||||
=cut
|
||||
|
||||
sub term
|
||||
{
|
||||
my ( $self, $term ) = @_;
|
||||
|
||||
if ( defined $term && ref $term and UNIVERSAL::isa($term,'Term::Cap'))
|
||||
{
|
||||
$self->{TERM} = $term;
|
||||
}
|
||||
return $self->{TERM};
|
||||
}
|
||||
|
||||
=item rows(rows)
|
||||
|
||||
Returns and/or sets the number of rows on the terminal.
|
||||
|
||||
=cut
|
||||
|
||||
sub rows
|
||||
{
|
||||
my ( $self, $rows ) = @_;
|
||||
|
||||
if ( defined $rows and $rows =~ /\d+/ )
|
||||
{
|
||||
$self->{ROWS} = $rows;
|
||||
}
|
||||
|
||||
return $self->{ROWS};
|
||||
}
|
||||
|
||||
=item cols(cols)
|
||||
|
||||
Returns and/or sets the number of cols on the terminal.
|
||||
|
||||
=cut
|
||||
|
||||
sub cols
|
||||
{
|
||||
my ( $self, $cols ) = @_;
|
||||
|
||||
|
||||
if ( defined $cols and $cols =~ /\d+/ )
|
||||
{
|
||||
$self->{COLS} = $cols;
|
||||
}
|
||||
|
||||
return $self->{COLS};
|
||||
}
|
||||
|
||||
=item at(row,col)
|
||||
|
||||
Moves cursor to (row,col) where (0,0) is upper left corner, - if the spot is
|
||||
illegal does whatever 'cm' in termcap does, since that is what it uses.
|
||||
|
||||
=cut
|
||||
|
||||
sub at
|
||||
{
|
||||
my ($this, $r, $c) = @_;
|
||||
if ($r < 0) {$r = 0;}
|
||||
if ($c < 0) {$c = 0;}
|
||||
if ($r >= $this->{ROWS}) {$r = $this->{ROWS}-1;}
|
||||
if ($c >= $this->{COLS}) {$c = $this->{COLS}-1;}
|
||||
$this->term()->Tgoto('cm', $c, $r, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item resize(r,c)
|
||||
|
||||
Tell screen the new number of rows & cols physically you can skip the r & c
|
||||
and get new checked vals from stty or termcap. Term::Screen does not
|
||||
handle resize signals internally, but you can do it by checking and updating
|
||||
screen size using this function.
|
||||
|
||||
=cut
|
||||
|
||||
sub resize
|
||||
{
|
||||
my ($this, $r, $c) = @_;
|
||||
my $size = '';
|
||||
|
||||
# find screen size -- trying different methods
|
||||
if ($#_ != 2 || $r <= 0 || $c <= 0)
|
||||
{
|
||||
$r = 0; $c = 0;
|
||||
eval { $size = `stty size`; }; # not portable but most accurate
|
||||
if ( $size =~ /^\s*(\d+)\s+(\d+)\s*/ )
|
||||
{
|
||||
($r, $c) = ($1, $2);
|
||||
}
|
||||
}
|
||||
if ($r == 0 || $c == 0) # try getting rows and cols some other way
|
||||
{
|
||||
if (exists $ENV{'LINES'}) { $r = $ENV{'LINES'}; }
|
||||
else { $r = $this->term()->{'_li'}; } # this is often wrong
|
||||
if (exists $ENV{'COLUMNS'}) { $c = $ENV{'COLUMNS'}; }
|
||||
else { $c = $this->term()->{'_co'}; }
|
||||
}
|
||||
$this->{ROWS} = $r; $this->{COLS} = $c;
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item normal()
|
||||
|
||||
Turn off any highlightling (bold, reverse)
|
||||
|
||||
=cut
|
||||
|
||||
sub normal
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('me',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item bold()
|
||||
|
||||
The md value from termcap - turn on bold usually
|
||||
|
||||
=cut
|
||||
|
||||
sub bold
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('md',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item reverse()
|
||||
|
||||
The mr value from termcap - turn on reverse text often. these last
|
||||
two default to whatever is available.
|
||||
|
||||
=cut
|
||||
|
||||
sub reverse
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('mr',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item clrscr()
|
||||
|
||||
Clear the screen and home cursor
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub clrscr
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('cl',1, *STDOUT);
|
||||
$this->{'rc'} = [0,0];
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item clreol()
|
||||
|
||||
Clear to the end of the line - cursor doesn't move
|
||||
|
||||
=cut
|
||||
|
||||
sub clreol
|
||||
{
|
||||
my $this = shift;
|
||||
if (exists ($this->term()->{'_ce'}))
|
||||
{
|
||||
$this->term()->Tputs('ce',1,*STDOUT);
|
||||
}
|
||||
return $this
|
||||
}
|
||||
|
||||
=item clreos()
|
||||
|
||||
Clear to end of screen - right and down, cursor doesn't move.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub clreos
|
||||
{
|
||||
my $this = shift;
|
||||
if (exists ($this->term()->{'_cd'}))
|
||||
{
|
||||
$this->term()->Tputs('cd',1,*STDOUT);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item il()
|
||||
|
||||
Insert blank line before line cursor is on, moving lower lines down.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub il
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('al', 1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item dl()
|
||||
|
||||
Delete line cursor is on, moving lower lines up.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub dl
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('dl',1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item ic_exists()
|
||||
|
||||
Insert character option is available.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub ic_exists { ( exists ($_[0]->term()->{'ic'}) ? 1 : 0 ); }
|
||||
|
||||
*exists_ic = \&ic_exists;
|
||||
|
||||
=item ic()
|
||||
|
||||
Insert character at current position move rest to the right.
|
||||
|
||||
=cut
|
||||
|
||||
sub ic
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('ic',1, *STDOUT);
|
||||
$this;
|
||||
}
|
||||
|
||||
=item dc_exists()
|
||||
|
||||
Delete char option exists and is available.
|
||||
|
||||
=cut
|
||||
|
||||
sub dc_exists { ( exists ($_[0]->term()->{'dc'}) ? 1 : 0 ); }
|
||||
|
||||
*exists_dc = \&dc_exists;
|
||||
|
||||
=item dc()
|
||||
|
||||
Delete character at current position moving rest to the left.
|
||||
|
||||
=cut
|
||||
|
||||
sub dc
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('dc',1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=back
|
||||
|
||||
The following are the I/O functions. They provide standard useful
|
||||
single character reading values. getch returns either a single char or
|
||||
the name of a function key when a key is pressed. The only exception is
|
||||
when you hit a character that is the start of a function key sequence.
|
||||
In this case getch keeps waiting for the next char to see if it is fn key.
|
||||
Generally this is the escape key, and why you need to hit esc twice.
|
||||
To get a stright char, just use the regular 'gets' perl function. You
|
||||
will need to echo it yourself if you want.
|
||||
|
||||
=over 4
|
||||
|
||||
=item puts(str)
|
||||
|
||||
Prints $s and returns the screen object. Used to do things like
|
||||
C<$scr->at(10,0)->puts("Hi!")->at(0,0);>. You can just use
|
||||
print if you want.
|
||||
|
||||
=cut
|
||||
|
||||
sub puts { print $_[1]; return $_[0]; }
|
||||
|
||||
=item getch()
|
||||
|
||||
Returns just a char in raw mode. Function keys are returned as their
|
||||
capability names, e.g. the up key would return "ku". See the
|
||||
C<get_fn_keys> function for what a lot of the names are. This will wait
|
||||
for next char if in a possible fn key string, so you would need to type
|
||||
'esc' 'esc' most likely to get out of getch, since 'esc' is usually the
|
||||
leading char for function keys. You can use perl's getc, to go 'underneath'
|
||||
getch if you want. See the table in Screen::get_fn_keys() for more
|
||||
information.
|
||||
|
||||
=cut
|
||||
|
||||
sub getch
|
||||
{
|
||||
my $this = shift;
|
||||
my ($c, $fn_flag) = ('', 0);
|
||||
my $partial_fn_str = '';
|
||||
|
||||
if ($this->{IN}) { $c = chop($this->{IN}); }
|
||||
else { $c = getc(STDIN); }
|
||||
|
||||
$partial_fn_str = $c;
|
||||
while (exists ($this->{KEYS}{$partial_fn_str}))
|
||||
{ # in a possible function key sequence
|
||||
$fn_flag = 1;
|
||||
if ($this->{KEYS}{$partial_fn_str}) # key found
|
||||
{
|
||||
$c = $this->{KEYS}{$partial_fn_str};
|
||||
$partial_fn_str = '';
|
||||
last;
|
||||
}
|
||||
else # wait for another key to see if were in FN yet
|
||||
{
|
||||
if ($this->{IN}) { $partial_fn_str .= chop($this->{IN}); }
|
||||
else { $partial_fn_str .= getc(); }
|
||||
}
|
||||
}
|
||||
if ($fn_flag) # seemed like a fn key
|
||||
{
|
||||
if ($partial_fn_str) # oops not a fn key
|
||||
{
|
||||
if ($partial_fn_str eq "\e\e") # take care of funny ESC case
|
||||
{
|
||||
$c = "\e";
|
||||
$partial_fn_str = "";
|
||||
}
|
||||
else # buffer up the received chars
|
||||
{
|
||||
$this->{IN} = CORE::reverse($partial_fn_str) . $this->{IN};
|
||||
$c = chop($this->{IN});
|
||||
$this->puts($c) if ($this->{ECHO} && ($c ne "\e"));
|
||||
}
|
||||
}
|
||||
# if fn_key then never echo so do nothing here
|
||||
}
|
||||
elsif ($this->{ECHO} && ($c ne "\e")) { $this->puts($c); } # regular key
|
||||
return $c;
|
||||
}
|
||||
|
||||
=item def_key('name','input string')
|
||||
|
||||
Lets you define your own function key sequence. 'name' is what will be
|
||||
returned by getch. 'input string' is what the fn key sends literally. This
|
||||
will override any prev definitions of the input. A whole bunch of defaults
|
||||
are defined for xterms rxvt's, etc. in the get_fn_keys function.
|
||||
|
||||
=cut
|
||||
|
||||
sub def_key
|
||||
{
|
||||
my ($this, $fn, $str) = @_;
|
||||
|
||||
$this->{KEYS}{$str} = $fn if ($str ne '');
|
||||
while ($str ne '')
|
||||
{
|
||||
chop($str);
|
||||
$this->{KEYS}{$str} = '' if ($str ne '');
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
=item key_pressed([sec])
|
||||
|
||||
Returns true if there is a character waiting. You can pass an option time in
|
||||
seconds to wait.
|
||||
|
||||
=cut
|
||||
|
||||
sub key_pressed
|
||||
{
|
||||
my ($this, $seconds) = @_;
|
||||
my $readfields = '';
|
||||
my $ready = 0;
|
||||
|
||||
$seconds = 0 if (!defined $seconds);
|
||||
vec($readfields, fileno(STDIN), 1) = 1; # set up to check STDIN
|
||||
eval { $ready = select($readfields, undef, undef, $seconds); };
|
||||
return $ready;
|
||||
}
|
||||
|
||||
=item echo()
|
||||
|
||||
Tells getch to echo the input to the screen. (the default.)
|
||||
|
||||
=cut
|
||||
|
||||
sub echo { my $this = shift; $this->{ECHO} = 1; return $this; }
|
||||
|
||||
=item noecho()
|
||||
|
||||
Tells getch NOT to echo input to the screen.
|
||||
|
||||
=cut
|
||||
|
||||
sub noecho { my $this = shift; $this->{ECHO} = 0; return $this; }
|
||||
|
||||
=item flush_input()
|
||||
|
||||
Clears input buffer and removes any incoming chars.
|
||||
|
||||
=cut
|
||||
|
||||
sub flush_input
|
||||
{
|
||||
my $this = shift;
|
||||
$this->{IN} = '';
|
||||
while ($this->key_pressed()) { getc(); }
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item stuff_input(str)
|
||||
|
||||
Lets you stuff chars into the input buffer to be read like keystrokes.
|
||||
This is only the C<getch> method buffer, the underlying getc stuff
|
||||
is not touched.
|
||||
|
||||
=cut
|
||||
|
||||
sub stuff_input
|
||||
{
|
||||
my ($this, $str) = @_;
|
||||
$this->{IN} = CORE::reverse($str) . $this->{IN};
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
# internal functions
|
||||
|
||||
# This function sets up the arrow keys from { ku kd kr kl }
|
||||
# and the function keys from {k0 .. k9} with labels from { l0 .. l9}
|
||||
# (if they exist of course.)
|
||||
# This is all encoded in a funny way -- as a hash with the
|
||||
# characters as keys - check the code. It makes checking fn keys easy.
|
||||
|
||||
sub get_fn_keys
|
||||
{
|
||||
my $this = shift;
|
||||
my $term = $this->term();
|
||||
my @keys = qw/ku kd kl kr k0 k1 k2 k3 k4 k5 k6 k7 k8 k9/;
|
||||
my ($fn, $ufn, $lfn);
|
||||
|
||||
# throw in some defaults (xterm & rxvt arrows);
|
||||
$this->def_key("ku","\e[A");
|
||||
$this->def_key("kd","\e[B");
|
||||
$this->def_key("kr","\e[C");
|
||||
$this->def_key("kl","\e[D");
|
||||
|
||||
# PC keyboard fn keys for xterm (some of them)
|
||||
$this->def_key("k1","\e[11~");
|
||||
$this->def_key("k2","\e[12~");
|
||||
$this->def_key("k3","\e[13~");
|
||||
$this->def_key("k4","\e[14~");
|
||||
$this->def_key("k5","\e[15~");
|
||||
$this->def_key("k6","\e[17~");
|
||||
$this->def_key("k7","\e[18~");
|
||||
$this->def_key("k8","\e[19~");
|
||||
$this->def_key("k9","\e[20~");
|
||||
$this->def_key("k10","\e[21~");
|
||||
$this->def_key("k11","\e[23~");
|
||||
$this->def_key("k12","\e[24~");
|
||||
|
||||
$this->def_key("ins","\e[2~");
|
||||
$this->def_key("del","\e[3~");
|
||||
|
||||
$this->def_key("home","\e[H"); # mult defs are no problem
|
||||
$this->def_key("home","\eO"); # these are some I have found
|
||||
$this->def_key("end","\eOw");
|
||||
$this->def_key("end","\eOe");
|
||||
$this->def_key("pgup", "\e[5~");
|
||||
$this->def_key("pgdn", "\e[6~");
|
||||
|
||||
# try to get anything useful out of termcap
|
||||
# (not too accurate in many cases
|
||||
|
||||
foreach $fn (@keys)
|
||||
{
|
||||
$ufn = '_' . $fn;
|
||||
$lfn = $ufn;
|
||||
$lfn =~ s/_k/_l/;
|
||||
|
||||
if (exists $term->{$ufn})
|
||||
{
|
||||
if ((exists $term->{$lfn}) && ($term->{$lfn}))
|
||||
{ $fn = substr($lfn,1); }
|
||||
$this->def_key($fn, $term->{$ufn});
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Term::Screen.pm by Mark Kaehny (kaehny@execpc.com)
|
||||
Currently maintained by Jonathan Stowe <jns@gellyfish.com>
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Please see the README file in the distribution kit for the license details
|
||||
for this module.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
Term::Cap, termcap, curses, stty, select
|
||||
|
||||
=cut
|
@ -1,294 +0,0 @@
|
||||
.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
|
||||
.\"
|
||||
.\" Standard preamble:
|
||||
.\" ========================================================================
|
||||
.de Sh \" Subsection heading
|
||||
.br
|
||||
.if t .Sp
|
||||
.ne 5
|
||||
.PP
|
||||
\fB\\$1\fR
|
||||
.PP
|
||||
..
|
||||
.de Sp \" Vertical space (when we can't use .PP)
|
||||
.if t .sp .5v
|
||||
.if n .sp
|
||||
..
|
||||
.de Vb \" Begin verbatim text
|
||||
.ft CW
|
||||
.nf
|
||||
.ne \\$1
|
||||
..
|
||||
.de Ve \" End verbatim text
|
||||
.ft R
|
||||
.fi
|
||||
..
|
||||
.\" Set up some character translations and predefined strings. \*(-- will
|
||||
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
|
||||
.\" double quote, and \*(R" will give a right double quote. | will give a
|
||||
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
|
||||
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
|
||||
.\" expand to `' in nroff, nothing in troff, for use with C<>.
|
||||
.tr \(*W-|\(bv\*(Tr
|
||||
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
||||
.ie n \{\
|
||||
. ds -- \(*W-
|
||||
. ds PI pi
|
||||
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
||||
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
||||
. ds L" ""
|
||||
. ds R" ""
|
||||
. ds C` ""
|
||||
. ds C' ""
|
||||
'br\}
|
||||
.el\{\
|
||||
. ds -- \|\(em\|
|
||||
. ds PI \(*p
|
||||
. ds L" ``
|
||||
. ds R" ''
|
||||
'br\}
|
||||
.\"
|
||||
.\" If the F register is turned on, we'll generate index entries on stderr for
|
||||
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
|
||||
.\" entries marked with X<> in POD. Of course, you'll have to process the
|
||||
.\" output yourself in some meaningful fashion.
|
||||
.if \nF \{\
|
||||
. de IX
|
||||
. tm Index:\\$1\t\\n%\t"\\$2"
|
||||
..
|
||||
. nr % 0
|
||||
. rr F
|
||||
.\}
|
||||
.\"
|
||||
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||
.\" way too many mistakes in technical documents.
|
||||
.hy 0
|
||||
.if n .na
|
||||
.\"
|
||||
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
|
||||
.\" Fear. Run. Save yourself. No user-serviceable parts.
|
||||
. \" fudge factors for nroff and troff
|
||||
.if n \{\
|
||||
. ds #H 0
|
||||
. ds #V .8m
|
||||
. ds #F .3m
|
||||
. ds #[ \f1
|
||||
. ds #] \fP
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
|
||||
. ds #V .6m
|
||||
. ds #F 0
|
||||
. ds #[ \&
|
||||
. ds #] \&
|
||||
.\}
|
||||
. \" simple accents for nroff and troff
|
||||
.if n \{\
|
||||
. ds ' \&
|
||||
. ds ` \&
|
||||
. ds ^ \&
|
||||
. ds , \&
|
||||
. ds ~ ~
|
||||
. ds /
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
|
||||
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
|
||||
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
|
||||
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
|
||||
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
|
||||
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
|
||||
.\}
|
||||
. \" troff and (daisy-wheel) nroff accents
|
||||
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
|
||||
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
|
||||
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
|
||||
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
|
||||
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
|
||||
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
|
||||
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
|
||||
.ds ae a\h'-(\w'a'u*4/10)'e
|
||||
.ds Ae A\h'-(\w'A'u*4/10)'E
|
||||
. \" corrections for vroff
|
||||
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
|
||||
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
|
||||
. \" for low resolution devices (crt and lpr)
|
||||
.if \n(.H>23 .if \n(.V>19 \
|
||||
\{\
|
||||
. ds : e
|
||||
. ds 8 ss
|
||||
. ds o a
|
||||
. ds d- d\h'-1'\(ga
|
||||
. ds D- D\h'-1'\(hy
|
||||
. ds th \o'bp'
|
||||
. ds Th \o'LP'
|
||||
. ds ae ae
|
||||
. ds Ae AE
|
||||
.\}
|
||||
.rm #[ #] #H #V #F C
|
||||
.\" ========================================================================
|
||||
.\"
|
||||
.IX Title "Screen 3"
|
||||
.TH Screen 3 "2002-09-28" "perl v5.8.0" "User Contributed Perl Documentation"
|
||||
.SH "NAME"
|
||||
Term::Screen \- A Simple all perl Term::Cap based screen positioning module
|
||||
.SH "SYNOPSIS"
|
||||
.IX Header "SYNOPSIS"
|
||||
.Vb 1
|
||||
\& require Term::Screen;
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 10
|
||||
\& $scr = new Term::Screen;
|
||||
\& unless ($scr) { die " Something's wrong \en"; }
|
||||
\& $scr->clrscr();
|
||||
\& $scr->at(5,3);
|
||||
\& $scr->puts("this is some stuff");
|
||||
\& $scr->at(10,10)->bold()->puts("hi!")->normal();
|
||||
\& # you can concatenate many calls (not getch)
|
||||
\& $c = $scr->getch(); # doesn't need Enter key
|
||||
\& ...
|
||||
\& if ($scr->key_pressed()) { print "ha you hit a key!"; }
|
||||
.Ve
|
||||
.SH "DESCRIPTION"
|
||||
.IX Header "DESCRIPTION"
|
||||
Term::Screen is a very simple screen positioning module that should
|
||||
work wherever \f(CW\*(C`Term::Cap\*(C'\fR does. It is set up for Unix using stty's but
|
||||
these dependences are isolated by evals in the \f(CW\*(C`new\*(C'\fR constructor. Thus
|
||||
you may create a child module implementing Screen with \s-1MS\-DOS\s0, ioctl,
|
||||
or other means to get raw and unblocked input. This is not a replacement
|
||||
for Curses \*(-- it has no memory. This was written so that it could be
|
||||
easily changed to fit nasty systems, and to be available first thing.
|
||||
.PP
|
||||
The input functions getch, key_pressed, echo, and noecho are implemented
|
||||
so as to work under a fairly standard Unix system. They use 'stty'
|
||||
to set raw and no echo modes and turn on auto flush. All of these are
|
||||
\&'eval'ed so that this class can be inherited for new definitions easily.
|
||||
.PP
|
||||
Term::Screen was designed to be \*(L"required\*(R", then used with object syntax
|
||||
as shown above. One quirk (which the author was used to so he didn't
|
||||
care) is that for function key translation, no delay is set. So for many
|
||||
terminals to get an esc character, you have to hit another char after it,
|
||||
generally another esc.
|
||||
.SH "PUBLIC INTERFACE"
|
||||
.IX Header "PUBLIC INTERFACE"
|
||||
Term::Screen has a very minimal set of of fixed character terminal position
|
||||
and character reading commands:
|
||||
.IP "\fInew()\fR" 4
|
||||
.IX Item "new()"
|
||||
Initialize the screen. Does not clear the screen, but does home the cursor.
|
||||
.IP "term(term)" 4
|
||||
.IX Item "term(term)"
|
||||
Sets or Gets the Term::Cap object used by this object.
|
||||
.IP "rows(rows)" 4
|
||||
.IX Item "rows(rows)"
|
||||
Returns and/or sets the number of rows on the terminal.
|
||||
.IP "cols(cols)" 4
|
||||
.IX Item "cols(cols)"
|
||||
Returns and/or sets the number of cols on the terminal.
|
||||
.IP "at(row,col)" 4
|
||||
.IX Item "at(row,col)"
|
||||
Moves cursor to (row,col) where (0,0) is upper left corner, \- if the spot is
|
||||
illegal does whatever 'cm' in termcap does, since that is what it uses.
|
||||
.IP "resize(r,c)" 4
|
||||
.IX Item "resize(r,c)"
|
||||
Tell screen the new number of rows & cols physically you can skip the r & c
|
||||
and get new checked vals from stty or termcap. Term::Screen does not
|
||||
handle resize signals internally, but you can do it by checking and updating
|
||||
screen size using this function.
|
||||
.IP "\fInormal()\fR" 4
|
||||
.IX Item "normal()"
|
||||
Turn off any highlightling (bold, reverse)
|
||||
.IP "\fIbold()\fR" 4
|
||||
.IX Item "bold()"
|
||||
The md value from termcap \- turn on bold usually
|
||||
.IP "\fIreverse()\fR" 4
|
||||
.IX Item "reverse()"
|
||||
The mr value from termcap \- turn on reverse text often. these last
|
||||
two default to whatever is available.
|
||||
.IP "\fIclrscr()\fR" 4
|
||||
.IX Item "clrscr()"
|
||||
Clear the screen and home cursor
|
||||
.IP "\fIclreol()\fR" 4
|
||||
.IX Item "clreol()"
|
||||
Clear to the end of the line \- cursor doesn't move
|
||||
.IP "\fIclreos()\fR" 4
|
||||
.IX Item "clreos()"
|
||||
Clear to end of screen \- right and down, cursor doesn't move.
|
||||
.IP "\fIil()\fR" 4
|
||||
.IX Item "il()"
|
||||
Insert blank line before line cursor is on, moving lower lines down.
|
||||
.IP "\fIdl()\fR" 4
|
||||
.IX Item "dl()"
|
||||
Delete line cursor is on, moving lower lines up.
|
||||
.IP "\fIic_exists()\fR" 4
|
||||
.IX Item "ic_exists()"
|
||||
Insert character option is available.
|
||||
.IP "\fIic()\fR" 4
|
||||
.IX Item "ic()"
|
||||
Insert character at current position move rest to the right.
|
||||
.IP "\fIdc_exists()\fR" 4
|
||||
.IX Item "dc_exists()"
|
||||
Delete char option exists and is available.
|
||||
.IP "\fIdc()\fR" 4
|
||||
.IX Item "dc()"
|
||||
Delete character at current position moving rest to the left.
|
||||
.PP
|
||||
The following are the I/O functions. They provide standard useful
|
||||
single character reading values. getch returns either a single char or
|
||||
the name of a function key when a key is pressed. The only exception is
|
||||
when you hit a character that is the start of a function key sequence.
|
||||
In this case getch keeps waiting for the next char to see if it is fn key.
|
||||
Generally this is the escape key, and why you need to hit esc twice.
|
||||
To get a stright char, just use the regular 'gets' perl function. You
|
||||
will need to echo it yourself if you want.
|
||||
.IP "puts(str)" 4
|
||||
.IX Item "puts(str)"
|
||||
Prints \f(CW$s\fR and returns the screen object. Used to do things like
|
||||
\&\f(CW\*(C`$scr\-\*(C'\fRat(10,0)\->puts(\*(L"Hi!\*(R")\->at(0,0);>. You can just use
|
||||
print if you want.
|
||||
.IP "\fIgetch()\fR" 4
|
||||
.IX Item "getch()"
|
||||
Returns just a char in raw mode. Function keys are returned as their
|
||||
capability names, e.g. the up key would return \*(L"ku\*(R". See the
|
||||
\&\f(CW\*(C`get_fn_keys\*(C'\fR function for what a lot of the names are. This will wait
|
||||
for next char if in a possible fn key string, so you would need to type
|
||||
\&'esc' 'esc' most likely to get out of getch, since 'esc' is usually the
|
||||
leading char for function keys. You can use perl's getc, to go 'underneath'
|
||||
getch if you want. See the table in \fIScreen::get_fn_keys()\fR for more
|
||||
information.
|
||||
.IP "def_key('name','input string')" 4
|
||||
.IX Item "def_key('name','input string')"
|
||||
Lets you define your own function key sequence. 'name' is what will be
|
||||
returned by getch. 'input string' is what the fn key sends literally. This
|
||||
will override any prev definitions of the input. A whole bunch of defaults
|
||||
are defined for xterms rxvt's, etc. in the get_fn_keys function.
|
||||
.IP "key_pressed([sec])" 4
|
||||
.IX Item "key_pressed([sec])"
|
||||
Returns true if there is a character waiting. You can pass an option time in
|
||||
seconds to wait.
|
||||
.IP "\fIecho()\fR" 4
|
||||
.IX Item "echo()"
|
||||
Tells getch to echo the input to the screen. (the default.)
|
||||
.IP "\fInoecho()\fR" 4
|
||||
.IX Item "noecho()"
|
||||
Tells getch \s-1NOT\s0 to echo input to the screen.
|
||||
.IP "\fIflush_input()\fR" 4
|
||||
.IX Item "flush_input()"
|
||||
Clears input buffer and removes any incoming chars.
|
||||
.IP "stuff_input(str)" 4
|
||||
.IX Item "stuff_input(str)"
|
||||
Lets you stuff chars into the input buffer to be read like keystrokes.
|
||||
This is only the \f(CW\*(C`getch\*(C'\fR method buffer, the underlying getc stuff
|
||||
is not touched.
|
||||
.SH "AUTHOR"
|
||||
.IX Header "AUTHOR"
|
||||
Term::Screen.pm by Mark Kaehny (kaehny@execpc.com)
|
||||
Currently maintained by Jonathan Stowe <jns@gellyfish.com>
|
||||
.SH "LICENSE AND COPYRIGHT"
|
||||
.IX Header "LICENSE AND COPYRIGHT"
|
||||
Please see the \s-1README\s0 file in the distribution kit for the license details
|
||||
for this module.
|
||||
.SH "SEE ALSO"
|
||||
.IX Header "SEE ALSO"
|
||||
Term::Cap, termcap, curses, stty, select
|
@ -1,85 +0,0 @@
|
||||
#
|
||||
# TCtest.pl
|
||||
#
|
||||
# test program to exercise the screen contol module
|
||||
#
|
||||
# by Mark Kaehny 1995
|
||||
# this file is available under the same terms as the perl language
|
||||
# distribution. See the Artistic License.
|
||||
#
|
||||
|
||||
require Term::Screen;
|
||||
|
||||
$scr = new Term::Screen;
|
||||
|
||||
#test clear screen and output
|
||||
$scr->clrscr();
|
||||
$scr->puts("Test series for Screen.pm module for perl5");
|
||||
|
||||
# test cursor movement, output and linking together
|
||||
$scr->at(2,3)->puts("1. Should be at row 2 col 3 (upper left is 0,0)");
|
||||
|
||||
#test current position update
|
||||
$r = $scr->{'r'}; $c = $scr->{'c'};
|
||||
$scr->at(3,0)->puts("2. Last position $r $c -- should be 2 50.");
|
||||
|
||||
#test rows and cols ( should be updated for signal )
|
||||
$scr->at(4,0)->puts("3. Screen size: " . $scr->{'rows'} . " rows and " .
|
||||
$scr->{'cols'} . " columns.");
|
||||
# test standout and normal test
|
||||
$scr->at(6,0);
|
||||
$scr->puts("4. Testing ")->reverse()->puts("reverse");
|
||||
$scr->normal()->puts(" mode, ");
|
||||
$scr->bold()->puts("bold")->normal()->puts(" mode, ");
|
||||
$scr->bold()->reverse()->puts("and both")->normal()->puts(" together.");
|
||||
|
||||
# test clreol
|
||||
# first put some stuff up
|
||||
$line = "0---------10--------20--------30--------40--------50--------60--------70-------";
|
||||
$scr->at(7,0)->puts("5. Testing clreol - " .
|
||||
" The next 2 lines should end at col 20 and 30.");
|
||||
for (8 .. 10) {$scr->at($_,0)->puts($line);}
|
||||
$scr->at(8,20)->clreol()->at(9,30)->clreol();
|
||||
|
||||
# test clreos
|
||||
for (11 .. 20) { $scr->at($_,0)->puts($line); }
|
||||
$scr->at(11,0)->puts("6. Clreos - Hit a key to clear all right and below:");
|
||||
$scr->getch();
|
||||
$scr->clreos();
|
||||
|
||||
#test insert line and delete line
|
||||
$scr->at(12,0)->puts("7. Test insert and delete line - 15 deleted, and ...");
|
||||
for (13 .. 16) { $scr->at($_,0)->puts($_ . substr($line,2)); }
|
||||
$scr->at(15,0)->dl();
|
||||
$scr->at(14,0)->il()->at(14,0)->puts("... this is where line 14 was");
|
||||
|
||||
# test key_pressed
|
||||
$scr->at(18,0)->puts("8. Key_pressed - Don't Hit a key in the next 5 seconds: ");
|
||||
if ($scr->key_pressed(5)) { $scr->puts("HEY A KEY WAS HIT"); }
|
||||
else { $scr->puts("GOOD - NO KEY HIT!"); }
|
||||
$scr->at(19,0)->puts("Hit a key in next 15 seconds: ");
|
||||
if ($scr->key_pressed(15)) { $scr->puts("KEY HIT!"); }
|
||||
else { $scr->puts("NO KEY HIT"); }
|
||||
|
||||
# test getch
|
||||
# clear buffer out
|
||||
$scr->flush_input();
|
||||
$scr->at(21,0)->puts("Testing getch, Enter Key (q to quit): ")->at(21,40);
|
||||
$ch = '';
|
||||
while(($ch = $scr->getch()) ne 'q')
|
||||
{
|
||||
if (length($ch) == 1)
|
||||
{
|
||||
$scr->at(21,50)->clreol()->puts("ord of char is: ");
|
||||
$scr->puts(ord($ch))->at(21,40);
|
||||
}
|
||||
else
|
||||
{
|
||||
$scr->at(21,50)->clreol()->puts("function value: $ch");
|
||||
$scr->at(21,40);
|
||||
}
|
||||
}
|
||||
|
||||
$scr->at(22,0);
|
||||
|
||||
|
@ -1,628 +0,0 @@
|
||||
# $Id: Screen.pm,v 1.1.1.1 2003/01/27 23:34:38 margarida Exp $
|
||||
|
||||
package Term::Screen;
|
||||
|
||||
use strict;
|
||||
|
||||
use vars qw($VERSION);
|
||||
|
||||
$VERSION = '1.02';
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Term::Screen - A Simple all perl Term::Cap based screen positioning module
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
require Term::Screen;
|
||||
|
||||
$scr = new Term::Screen;
|
||||
unless ($scr) { die " Something's wrong \n"; }
|
||||
$scr->clrscr();
|
||||
$scr->at(5,3);
|
||||
$scr->puts("this is some stuff");
|
||||
$scr->at(10,10)->bold()->puts("hi!")->normal();
|
||||
# you can concatenate many calls (not getch)
|
||||
$c = $scr->getch(); # doesn't need Enter key
|
||||
...
|
||||
if ($scr->key_pressed()) { print "ha you hit a key!"; }
|
||||
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Term::Screen is a very simple screen positioning module that should
|
||||
work wherever C<Term::Cap> does. It is set up for Unix using stty's but
|
||||
these dependences are isolated by evals in the C<new> constructor. Thus
|
||||
you may create a child module implementing Screen with MS-DOS, ioctl,
|
||||
or other means to get raw and unblocked input. This is not a replacement
|
||||
for Curses -- it has no memory. This was written so that it could be
|
||||
easily changed to fit nasty systems, and to be available first thing.
|
||||
|
||||
The input functions getch, key_pressed, echo, and noecho are implemented
|
||||
so as to work under a fairly standard Unix system. They use 'stty'
|
||||
to set raw and no echo modes and turn on auto flush. All of these are
|
||||
'eval'ed so that this class can be inherited for new definitions easily.
|
||||
|
||||
Term::Screen was designed to be "required", then used with object syntax
|
||||
as shown above. One quirk (which the author was used to so he didn't
|
||||
care) is that for function key translation, no delay is set. So for many
|
||||
terminals to get an esc character, you have to hit another char after it,
|
||||
generally another esc.
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
Term::Screen has a very minimal set of of fixed character terminal position
|
||||
and character reading commands:
|
||||
|
||||
=over 4
|
||||
|
||||
=cut
|
||||
|
||||
require Term::Cap;
|
||||
|
||||
=item new()
|
||||
|
||||
Initialize the screen. Does not clear the screen, but does home the cursor.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub new
|
||||
{
|
||||
my ($prototype, @args) = @_;
|
||||
|
||||
my $classname = ref($prototype) || $prototype;
|
||||
|
||||
my ($ospeed);
|
||||
# adjust OSPEED below to your system.
|
||||
eval { $ospeed = `stty speed`; }; # Unixish way to get OSpeed - works
|
||||
$ospeed = 9600 if ($@); # on Linux, Gnuish, Suns ...
|
||||
my $term = Tgetent Term::Cap { 'TERM' => '', 'OSPEED' => $ospeed };
|
||||
|
||||
my $this = {}; # create object
|
||||
bless $this, $classname;
|
||||
$this->term($term); # keep termcap entry reference
|
||||
$this->{IN} = ''; # clear input buffer
|
||||
$this->{ROWS} = 0;
|
||||
$this->{COLS} = 0;
|
||||
$this->resize(); # sets $this->{ROWS} & {COLS}
|
||||
$this->{KEYS} = {}; # set up fn key hash of hashes
|
||||
$this->get_fn_keys() ; # define function key table from defaults
|
||||
$this->at(0,0); # home cursor
|
||||
$this->{ECHO} = 1; # start off echoing
|
||||
$| = 1; # for output flush on writes
|
||||
# wrapped so inherited versions can call with different input codes
|
||||
eval { system('stty raw -echo'); }; # turn on raw input
|
||||
# ignore errors
|
||||
return $this;
|
||||
}
|
||||
|
||||
sub DESTROY { eval { system('stty -raw echo'); } }
|
||||
|
||||
=item term(term)
|
||||
|
||||
Sets or Gets the Term::Cap object used by this object.
|
||||
|
||||
=cut
|
||||
|
||||
sub term
|
||||
{
|
||||
my ( $self, $term ) = @_;
|
||||
|
||||
if ( defined $term && ref $term and UNIVERSAL::isa($term,'Term::Cap'))
|
||||
{
|
||||
$self->{TERM} = $term;
|
||||
}
|
||||
return $self->{TERM};
|
||||
}
|
||||
|
||||
=item rows(rows)
|
||||
|
||||
Returns and/or sets the number of rows on the terminal.
|
||||
|
||||
=cut
|
||||
|
||||
sub rows
|
||||
{
|
||||
my ( $self, $rows ) = @_;
|
||||
|
||||
if ( defined $rows and $rows =~ /\d+/ )
|
||||
{
|
||||
$self->{ROWS} = $rows;
|
||||
}
|
||||
|
||||
return $self->{ROWS};
|
||||
}
|
||||
|
||||
=item cols(cols)
|
||||
|
||||
Returns and/or sets the number of cols on the terminal.
|
||||
|
||||
=cut
|
||||
|
||||
sub cols
|
||||
{
|
||||
my ( $self, $cols ) = @_;
|
||||
|
||||
|
||||
if ( defined $cols and $cols =~ /\d+/ )
|
||||
{
|
||||
$self->{COLS} = $cols;
|
||||
}
|
||||
|
||||
return $self->{COLS};
|
||||
}
|
||||
|
||||
=item at(row,col)
|
||||
|
||||
Moves cursor to (row,col) where (0,0) is upper left corner, - if the spot is
|
||||
illegal does whatever 'cm' in termcap does, since that is what it uses.
|
||||
|
||||
=cut
|
||||
|
||||
sub at
|
||||
{
|
||||
my ($this, $r, $c) = @_;
|
||||
if ($r < 0) {$r = 0;}
|
||||
if ($c < 0) {$c = 0;}
|
||||
if ($r >= $this->{ROWS}) {$r = $this->{ROWS}-1;}
|
||||
if ($c >= $this->{COLS}) {$c = $this->{COLS}-1;}
|
||||
$this->term()->Tgoto('cm', $c, $r, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item resize(r,c)
|
||||
|
||||
Tell screen the new number of rows & cols physically you can skip the r & c
|
||||
and get new checked vals from stty or termcap. Term::Screen does not
|
||||
handle resize signals internally, but you can do it by checking and updating
|
||||
screen size using this function.
|
||||
|
||||
=cut
|
||||
|
||||
sub resize
|
||||
{
|
||||
my ($this, $r, $c) = @_;
|
||||
my $size = '';
|
||||
|
||||
# find screen size -- trying different methods
|
||||
if ($#_ != 2 || $r <= 0 || $c <= 0)
|
||||
{
|
||||
$r = 0; $c = 0;
|
||||
eval { $size = `stty size`; }; # not portable but most accurate
|
||||
if ( $size =~ /^\s*(\d+)\s+(\d+)\s*/ )
|
||||
{
|
||||
($r, $c) = ($1, $2);
|
||||
}
|
||||
}
|
||||
if ($r == 0 || $c == 0) # try getting rows and cols some other way
|
||||
{
|
||||
if (exists $ENV{'LINES'}) { $r = $ENV{'LINES'}; }
|
||||
else { $r = $this->term()->{'_li'}; } # this is often wrong
|
||||
if (exists $ENV{'COLUMNS'}) { $c = $ENV{'COLUMNS'}; }
|
||||
else { $c = $this->term()->{'_co'}; }
|
||||
}
|
||||
$this->{ROWS} = $r; $this->{COLS} = $c;
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item normal()
|
||||
|
||||
Turn off any highlightling (bold, reverse)
|
||||
|
||||
=cut
|
||||
|
||||
sub normal
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('me',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item bold()
|
||||
|
||||
The md value from termcap - turn on bold usually
|
||||
|
||||
=cut
|
||||
|
||||
sub bold
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('md',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item reverse()
|
||||
|
||||
The mr value from termcap - turn on reverse text often. these last
|
||||
two default to whatever is available.
|
||||
|
||||
=cut
|
||||
|
||||
sub reverse
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('mr',1,*STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item clrscr()
|
||||
|
||||
Clear the screen and home cursor
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub clrscr
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('cl',1, *STDOUT);
|
||||
$this->{'rc'} = [0,0];
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item clreol()
|
||||
|
||||
Clear to the end of the line - cursor doesn't move
|
||||
|
||||
=cut
|
||||
|
||||
sub clreol
|
||||
{
|
||||
my $this = shift;
|
||||
if (exists ($this->term()->{'_ce'}))
|
||||
{
|
||||
$this->term()->Tputs('ce',1,*STDOUT);
|
||||
}
|
||||
return $this
|
||||
}
|
||||
|
||||
=item clreos()
|
||||
|
||||
Clear to end of screen - right and down, cursor doesn't move.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub clreos
|
||||
{
|
||||
my $this = shift;
|
||||
if (exists ($this->term()->{'_cd'}))
|
||||
{
|
||||
$this->term()->Tputs('cd',1,*STDOUT);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item il()
|
||||
|
||||
Insert blank line before line cursor is on, moving lower lines down.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub il
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('al', 1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item dl()
|
||||
|
||||
Delete line cursor is on, moving lower lines up.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub dl
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('dl',1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item ic_exists()
|
||||
|
||||
Insert character option is available.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
sub ic_exists { ( exists ($_[0]->term()->{'ic'}) ? 1 : 0 ); }
|
||||
|
||||
*exists_ic = \&ic_exists;
|
||||
|
||||
=item ic()
|
||||
|
||||
Insert character at current position move rest to the right.
|
||||
|
||||
=cut
|
||||
|
||||
sub ic
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('ic',1, *STDOUT);
|
||||
$this;
|
||||
}
|
||||
|
||||
=item dc_exists()
|
||||
|
||||
Delete char option exists and is available.
|
||||
|
||||
=cut
|
||||
|
||||
sub dc_exists { ( exists ($_[0]->term()->{'dc'}) ? 1 : 0 ); }
|
||||
|
||||
*exists_dc = \&dc_exists;
|
||||
|
||||
=item dc()
|
||||
|
||||
Delete character at current position moving rest to the left.
|
||||
|
||||
=cut
|
||||
|
||||
sub dc
|
||||
{
|
||||
my $this = shift;
|
||||
$this->term()->Tputs('dc',1, *STDOUT);
|
||||
return $this;
|
||||
}
|
||||
|
||||
=back
|
||||
|
||||
The following are the I/O functions. They provide standard useful
|
||||
single character reading values. getch returns either a single char or
|
||||
the name of a function key when a key is pressed. The only exception is
|
||||
when you hit a character that is the start of a function key sequence.
|
||||
In this case getch keeps waiting for the next char to see if it is fn key.
|
||||
Generally this is the escape key, and why you need to hit esc twice.
|
||||
To get a stright char, just use the regular 'gets' perl function. You
|
||||
will need to echo it yourself if you want.
|
||||
|
||||
=over 4
|
||||
|
||||
=item puts(str)
|
||||
|
||||
Prints $s and returns the screen object. Used to do things like
|
||||
C<$scr->at(10,0)->puts("Hi!")->at(0,0);>. You can just use
|
||||
print if you want.
|
||||
|
||||
=cut
|
||||
|
||||
sub puts { print $_[1]; return $_[0]; }
|
||||
|
||||
=item getch()
|
||||
|
||||
Returns just a char in raw mode. Function keys are returned as their
|
||||
capability names, e.g. the up key would return "ku". See the
|
||||
C<get_fn_keys> function for what a lot of the names are. This will wait
|
||||
for next char if in a possible fn key string, so you would need to type
|
||||
'esc' 'esc' most likely to get out of getch, since 'esc' is usually the
|
||||
leading char for function keys. You can use perl's getc, to go 'underneath'
|
||||
getch if you want. See the table in Screen::get_fn_keys() for more
|
||||
information.
|
||||
|
||||
=cut
|
||||
|
||||
sub getch
|
||||
{
|
||||
my $this = shift;
|
||||
my ($c, $fn_flag) = ('', 0);
|
||||
my $partial_fn_str = '';
|
||||
|
||||
if ($this->{IN}) { $c = chop($this->{IN}); }
|
||||
else { $c = getc(STDIN); }
|
||||
|
||||
$partial_fn_str = $c;
|
||||
while (exists ($this->{KEYS}{$partial_fn_str}))
|
||||
{ # in a possible function key sequence
|
||||
$fn_flag = 1;
|
||||
if ($this->{KEYS}{$partial_fn_str}) # key found
|
||||
{
|
||||
$c = $this->{KEYS}{$partial_fn_str};
|
||||
$partial_fn_str = '';
|
||||
last;
|
||||
}
|
||||
else # wait for another key to see if were in FN yet
|
||||
{
|
||||
if ($this->{IN}) { $partial_fn_str .= chop($this->{IN}); }
|
||||
else { $partial_fn_str .= getc(); }
|
||||
}
|
||||
}
|
||||
if ($fn_flag) # seemed like a fn key
|
||||
{
|
||||
if ($partial_fn_str) # oops not a fn key
|
||||
{
|
||||
if ($partial_fn_str eq "\e\e") # take care of funny ESC case
|
||||
{
|
||||
$c = "\e";
|
||||
$partial_fn_str = "";
|
||||
}
|
||||
else # buffer up the received chars
|
||||
{
|
||||
$this->{IN} = CORE::reverse($partial_fn_str) . $this->{IN};
|
||||
$c = chop($this->{IN});
|
||||
$this->puts($c) if ($this->{ECHO} && ($c ne "\e"));
|
||||
}
|
||||
}
|
||||
# if fn_key then never echo so do nothing here
|
||||
}
|
||||
elsif ($this->{ECHO} && ($c ne "\e")) { $this->puts($c); } # regular key
|
||||
return $c;
|
||||
}
|
||||
|
||||
=item def_key('name','input string')
|
||||
|
||||
Lets you define your own function key sequence. 'name' is what will be
|
||||
returned by getch. 'input string' is what the fn key sends literally. This
|
||||
will override any prev definitions of the input. A whole bunch of defaults
|
||||
are defined for xterms rxvt's, etc. in the get_fn_keys function.
|
||||
|
||||
=cut
|
||||
|
||||
sub def_key
|
||||
{
|
||||
my ($this, $fn, $str) = @_;
|
||||
|
||||
$this->{KEYS}{$str} = $fn if ($str ne '');
|
||||
while ($str ne '')
|
||||
{
|
||||
chop($str);
|
||||
$this->{KEYS}{$str} = '' if ($str ne '');
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
=item key_pressed([sec])
|
||||
|
||||
Returns true if there is a character waiting. You can pass an option time in
|
||||
seconds to wait.
|
||||
|
||||
=cut
|
||||
|
||||
sub key_pressed
|
||||
{
|
||||
my ($this, $seconds) = @_;
|
||||
my $readfields = '';
|
||||
my $ready = 0;
|
||||
|
||||
$seconds = 0 if (!defined $seconds);
|
||||
vec($readfields, fileno(STDIN), 1) = 1; # set up to check STDIN
|
||||
eval { $ready = select($readfields, undef, undef, $seconds); };
|
||||
return $ready;
|
||||
}
|
||||
|
||||
=item echo()
|
||||
|
||||
Tells getch to echo the input to the screen. (the default.)
|
||||
|
||||
=cut
|
||||
|
||||
sub echo { my $this = shift; $this->{ECHO} = 1; return $this; }
|
||||
|
||||
=item noecho()
|
||||
|
||||
Tells getch NOT to echo input to the screen.
|
||||
|
||||
=cut
|
||||
|
||||
sub noecho { my $this = shift; $this->{ECHO} = 0; return $this; }
|
||||
|
||||
=item flush_input()
|
||||
|
||||
Clears input buffer and removes any incoming chars.
|
||||
|
||||
=cut
|
||||
|
||||
sub flush_input
|
||||
{
|
||||
my $this = shift;
|
||||
$this->{IN} = '';
|
||||
while ($this->key_pressed()) { getc(); }
|
||||
return $this;
|
||||
}
|
||||
|
||||
=item stuff_input(str)
|
||||
|
||||
Lets you stuff chars into the input buffer to be read like keystrokes.
|
||||
This is only the C<getch> method buffer, the underlying getc stuff
|
||||
is not touched.
|
||||
|
||||
=cut
|
||||
|
||||
sub stuff_input
|
||||
{
|
||||
my ($this, $str) = @_;
|
||||
$this->{IN} = CORE::reverse($str) . $this->{IN};
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
# internal functions
|
||||
|
||||
# This function sets up the arrow keys from { ku kd kr kl }
|
||||
# and the function keys from {k0 .. k9} with labels from { l0 .. l9}
|
||||
# (if they exist of course.)
|
||||
# This is all encoded in a funny way -- as a hash with the
|
||||
# characters as keys - check the code. It makes checking fn keys easy.
|
||||
|
||||
sub get_fn_keys
|
||||
{
|
||||
my $this = shift;
|
||||
my $term = $this->term();
|
||||
my @keys = qw/ku kd kl kr k0 k1 k2 k3 k4 k5 k6 k7 k8 k9/;
|
||||
my ($fn, $ufn, $lfn);
|
||||
|
||||
# throw in some defaults (xterm & rxvt arrows);
|
||||
$this->def_key("ku","\e[A");
|
||||
$this->def_key("kd","\e[B");
|
||||
$this->def_key("kr","\e[C");
|
||||
$this->def_key("kl","\e[D");
|
||||
|
||||
# PC keyboard fn keys for xterm (some of them)
|
||||
$this->def_key("k1","\e[11~");
|
||||
$this->def_key("k2","\e[12~");
|
||||
$this->def_key("k3","\e[13~");
|
||||
$this->def_key("k4","\e[14~");
|
||||
$this->def_key("k5","\e[15~");
|
||||
$this->def_key("k6","\e[17~");
|
||||
$this->def_key("k7","\e[18~");
|
||||
$this->def_key("k8","\e[19~");
|
||||
$this->def_key("k9","\e[20~");
|
||||
$this->def_key("k10","\e[21~");
|
||||
$this->def_key("k11","\e[23~");
|
||||
$this->def_key("k12","\e[24~");
|
||||
|
||||
$this->def_key("ins","\e[2~");
|
||||
$this->def_key("del","\e[3~");
|
||||
|
||||
$this->def_key("home","\e[H"); # mult defs are no problem
|
||||
$this->def_key("home","\eO"); # these are some I have found
|
||||
$this->def_key("end","\eOw");
|
||||
$this->def_key("end","\eOe");
|
||||
$this->def_key("pgup", "\e[5~");
|
||||
$this->def_key("pgdn", "\e[6~");
|
||||
|
||||
# try to get anything useful out of termcap
|
||||
# (not too accurate in many cases
|
||||
|
||||
foreach $fn (@keys)
|
||||
{
|
||||
$ufn = '_' . $fn;
|
||||
$lfn = $ufn;
|
||||
$lfn =~ s/_k/_l/;
|
||||
|
||||
if (exists $term->{$ufn})
|
||||
{
|
||||
if ((exists $term->{$lfn}) && ($term->{$lfn}))
|
||||
{ $fn = substr($lfn,1); }
|
||||
$this->def_key($fn, $term->{$ufn});
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Term::Screen.pm by Mark Kaehny (kaehny@execpc.com)
|
||||
Currently maintained by Jonathan Stowe <jns@gellyfish.com>
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Please see the README file in the distribution kit for the license details
|
||||
for this module.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
Term::Cap, termcap, curses, stty, select
|
||||
|
||||
=cut
|
@ -1,2 +0,0 @@
|
||||
/home/niness/ports/devel/p5-Term-Screen/w-p5-Term-Screen-1.02/fake-sparc64/usr/local/libdata/perl5/site_perl/Term/Screen.pm
|
||||
/home/niness/ports/devel/p5-Term-Screen/w-p5-Term-Screen-1.02/fake-sparc64/usr/local/man/man3p/Term::Screen.3p
|
@ -1,22 +0,0 @@
|
||||
=head2 Sun Jan 26 22:21:54 2003: C<Module> L<Term::Screen|Term::Screen>
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
C<installed into: /home/niness/ports/devel/p5-Term-Screen/w-p5-Term-Screen-1.02/fake-sparc64/usr/local/libdata/perl5/site_perl>
|
||||
|
||||
=item *
|
||||
|
||||
C<LINKTYPE: dynamic>
|
||||
|
||||
=item *
|
||||
|
||||
C<VERSION: 1.02>
|
||||
|
||||
=item *
|
||||
|
||||
C<EXE_FILES: >
|
||||
|
||||
=back
|
||||
|
@ -1,294 +0,0 @@
|
||||
.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
|
||||
.\"
|
||||
.\" Standard preamble:
|
||||
.\" ========================================================================
|
||||
.de Sh \" Subsection heading
|
||||
.br
|
||||
.if t .Sp
|
||||
.ne 5
|
||||
.PP
|
||||
\fB\\$1\fR
|
||||
.PP
|
||||
..
|
||||
.de Sp \" Vertical space (when we can't use .PP)
|
||||
.if t .sp .5v
|
||||
.if n .sp
|
||||
..
|
||||
.de Vb \" Begin verbatim text
|
||||
.ft CW
|
||||
.nf
|
||||
.ne \\$1
|
||||
..
|
||||
.de Ve \" End verbatim text
|
||||
.ft R
|
||||
.fi
|
||||
..
|
||||
.\" Set up some character translations and predefined strings. \*(-- will
|
||||
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
|
||||
.\" double quote, and \*(R" will give a right double quote. | will give a
|
||||
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
|
||||
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
|
||||
.\" expand to `' in nroff, nothing in troff, for use with C<>.
|
||||
.tr \(*W-|\(bv\*(Tr
|
||||
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
||||
.ie n \{\
|
||||
. ds -- \(*W-
|
||||
. ds PI pi
|
||||
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
||||
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
||||
. ds L" ""
|
||||
. ds R" ""
|
||||
. ds C` ""
|
||||
. ds C' ""
|
||||
'br\}
|
||||
.el\{\
|
||||
. ds -- \|\(em\|
|
||||
. ds PI \(*p
|
||||
. ds L" ``
|
||||
. ds R" ''
|
||||
'br\}
|
||||
.\"
|
||||
.\" If the F register is turned on, we'll generate index entries on stderr for
|
||||
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
|
||||
.\" entries marked with X<> in POD. Of course, you'll have to process the
|
||||
.\" output yourself in some meaningful fashion.
|
||||
.if \nF \{\
|
||||
. de IX
|
||||
. tm Index:\\$1\t\\n%\t"\\$2"
|
||||
..
|
||||
. nr % 0
|
||||
. rr F
|
||||
.\}
|
||||
.\"
|
||||
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||
.\" way too many mistakes in technical documents.
|
||||
.hy 0
|
||||
.if n .na
|
||||
.\"
|
||||
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
|
||||
.\" Fear. Run. Save yourself. No user-serviceable parts.
|
||||
. \" fudge factors for nroff and troff
|
||||
.if n \{\
|
||||
. ds #H 0
|
||||
. ds #V .8m
|
||||
. ds #F .3m
|
||||
. ds #[ \f1
|
||||
. ds #] \fP
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
|
||||
. ds #V .6m
|
||||
. ds #F 0
|
||||
. ds #[ \&
|
||||
. ds #] \&
|
||||
.\}
|
||||
. \" simple accents for nroff and troff
|
||||
.if n \{\
|
||||
. ds ' \&
|
||||
. ds ` \&
|
||||
. ds ^ \&
|
||||
. ds , \&
|
||||
. ds ~ ~
|
||||
. ds /
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
|
||||
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
|
||||
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
|
||||
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
|
||||
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
|
||||
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
|
||||
.\}
|
||||
. \" troff and (daisy-wheel) nroff accents
|
||||
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
|
||||
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
|
||||
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
|
||||
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
|
||||
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
|
||||
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
|
||||
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
|
||||
.ds ae a\h'-(\w'a'u*4/10)'e
|
||||
.ds Ae A\h'-(\w'A'u*4/10)'E
|
||||
. \" corrections for vroff
|
||||
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
|
||||
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
|
||||
. \" for low resolution devices (crt and lpr)
|
||||
.if \n(.H>23 .if \n(.V>19 \
|
||||
\{\
|
||||
. ds : e
|
||||
. ds 8 ss
|
||||
. ds o a
|
||||
. ds d- d\h'-1'\(ga
|
||||
. ds D- D\h'-1'\(hy
|
||||
. ds th \o'bp'
|
||||
. ds Th \o'LP'
|
||||
. ds ae ae
|
||||
. ds Ae AE
|
||||
.\}
|
||||
.rm #[ #] #H #V #F C
|
||||
.\" ========================================================================
|
||||
.\"
|
||||
.IX Title "Screen 3"
|
||||
.TH Screen 3 "2002-09-28" "perl v5.8.0" "User Contributed Perl Documentation"
|
||||
.SH "NAME"
|
||||
Term::Screen \- A Simple all perl Term::Cap based screen positioning module
|
||||
.SH "SYNOPSIS"
|
||||
.IX Header "SYNOPSIS"
|
||||
.Vb 1
|
||||
\& require Term::Screen;
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 10
|
||||
\& $scr = new Term::Screen;
|
||||
\& unless ($scr) { die " Something's wrong \en"; }
|
||||
\& $scr->clrscr();
|
||||
\& $scr->at(5,3);
|
||||
\& $scr->puts("this is some stuff");
|
||||
\& $scr->at(10,10)->bold()->puts("hi!")->normal();
|
||||
\& # you can concatenate many calls (not getch)
|
||||
\& $c = $scr->getch(); # doesn't need Enter key
|
||||
\& ...
|
||||
\& if ($scr->key_pressed()) { print "ha you hit a key!"; }
|
||||
.Ve
|
||||
.SH "DESCRIPTION"
|
||||
.IX Header "DESCRIPTION"
|
||||
Term::Screen is a very simple screen positioning module that should
|
||||
work wherever \f(CW\*(C`Term::Cap\*(C'\fR does. It is set up for Unix using stty's but
|
||||
these dependences are isolated by evals in the \f(CW\*(C`new\*(C'\fR constructor. Thus
|
||||
you may create a child module implementing Screen with \s-1MS\-DOS\s0, ioctl,
|
||||
or other means to get raw and unblocked input. This is not a replacement
|
||||
for Curses \*(-- it has no memory. This was written so that it could be
|
||||
easily changed to fit nasty systems, and to be available first thing.
|
||||
.PP
|
||||
The input functions getch, key_pressed, echo, and noecho are implemented
|
||||
so as to work under a fairly standard Unix system. They use 'stty'
|
||||
to set raw and no echo modes and turn on auto flush. All of these are
|
||||
\&'eval'ed so that this class can be inherited for new definitions easily.
|
||||
.PP
|
||||
Term::Screen was designed to be \*(L"required\*(R", then used with object syntax
|
||||
as shown above. One quirk (which the author was used to so he didn't
|
||||
care) is that for function key translation, no delay is set. So for many
|
||||
terminals to get an esc character, you have to hit another char after it,
|
||||
generally another esc.
|
||||
.SH "PUBLIC INTERFACE"
|
||||
.IX Header "PUBLIC INTERFACE"
|
||||
Term::Screen has a very minimal set of of fixed character terminal position
|
||||
and character reading commands:
|
||||
.IP "\fInew()\fR" 4
|
||||
.IX Item "new()"
|
||||
Initialize the screen. Does not clear the screen, but does home the cursor.
|
||||
.IP "term(term)" 4
|
||||
.IX Item "term(term)"
|
||||
Sets or Gets the Term::Cap object used by this object.
|
||||
.IP "rows(rows)" 4
|
||||
.IX Item "rows(rows)"
|
||||
Returns and/or sets the number of rows on the terminal.
|
||||
.IP "cols(cols)" 4
|
||||
.IX Item "cols(cols)"
|
||||
Returns and/or sets the number of cols on the terminal.
|
||||
.IP "at(row,col)" 4
|
||||
.IX Item "at(row,col)"
|
||||
Moves cursor to (row,col) where (0,0) is upper left corner, \- if the spot is
|
||||
illegal does whatever 'cm' in termcap does, since that is what it uses.
|
||||
.IP "resize(r,c)" 4
|
||||
.IX Item "resize(r,c)"
|
||||
Tell screen the new number of rows & cols physically you can skip the r & c
|
||||
and get new checked vals from stty or termcap. Term::Screen does not
|
||||
handle resize signals internally, but you can do it by checking and updating
|
||||
screen size using this function.
|
||||
.IP "\fInormal()\fR" 4
|
||||
.IX Item "normal()"
|
||||
Turn off any highlightling (bold, reverse)
|
||||
.IP "\fIbold()\fR" 4
|
||||
.IX Item "bold()"
|
||||
The md value from termcap \- turn on bold usually
|
||||
.IP "\fIreverse()\fR" 4
|
||||
.IX Item "reverse()"
|
||||
The mr value from termcap \- turn on reverse text often. these last
|
||||
two default to whatever is available.
|
||||
.IP "\fIclrscr()\fR" 4
|
||||
.IX Item "clrscr()"
|
||||
Clear the screen and home cursor
|
||||
.IP "\fIclreol()\fR" 4
|
||||
.IX Item "clreol()"
|
||||
Clear to the end of the line \- cursor doesn't move
|
||||
.IP "\fIclreos()\fR" 4
|
||||
.IX Item "clreos()"
|
||||
Clear to end of screen \- right and down, cursor doesn't move.
|
||||
.IP "\fIil()\fR" 4
|
||||
.IX Item "il()"
|
||||
Insert blank line before line cursor is on, moving lower lines down.
|
||||
.IP "\fIdl()\fR" 4
|
||||
.IX Item "dl()"
|
||||
Delete line cursor is on, moving lower lines up.
|
||||
.IP "\fIic_exists()\fR" 4
|
||||
.IX Item "ic_exists()"
|
||||
Insert character option is available.
|
||||
.IP "\fIic()\fR" 4
|
||||
.IX Item "ic()"
|
||||
Insert character at current position move rest to the right.
|
||||
.IP "\fIdc_exists()\fR" 4
|
||||
.IX Item "dc_exists()"
|
||||
Delete char option exists and is available.
|
||||
.IP "\fIdc()\fR" 4
|
||||
.IX Item "dc()"
|
||||
Delete character at current position moving rest to the left.
|
||||
.PP
|
||||
The following are the I/O functions. They provide standard useful
|
||||
single character reading values. getch returns either a single char or
|
||||
the name of a function key when a key is pressed. The only exception is
|
||||
when you hit a character that is the start of a function key sequence.
|
||||
In this case getch keeps waiting for the next char to see if it is fn key.
|
||||
Generally this is the escape key, and why you need to hit esc twice.
|
||||
To get a stright char, just use the regular 'gets' perl function. You
|
||||
will need to echo it yourself if you want.
|
||||
.IP "puts(str)" 4
|
||||
.IX Item "puts(str)"
|
||||
Prints \f(CW$s\fR and returns the screen object. Used to do things like
|
||||
\&\f(CW\*(C`$scr\-\*(C'\fRat(10,0)\->puts(\*(L"Hi!\*(R")\->at(0,0);>. You can just use
|
||||
print if you want.
|
||||
.IP "\fIgetch()\fR" 4
|
||||
.IX Item "getch()"
|
||||
Returns just a char in raw mode. Function keys are returned as their
|
||||
capability names, e.g. the up key would return \*(L"ku\*(R". See the
|
||||
\&\f(CW\*(C`get_fn_keys\*(C'\fR function for what a lot of the names are. This will wait
|
||||
for next char if in a possible fn key string, so you would need to type
|
||||
\&'esc' 'esc' most likely to get out of getch, since 'esc' is usually the
|
||||
leading char for function keys. You can use perl's getc, to go 'underneath'
|
||||
getch if you want. See the table in \fIScreen::get_fn_keys()\fR for more
|
||||
information.
|
||||
.IP "def_key('name','input string')" 4
|
||||
.IX Item "def_key('name','input string')"
|
||||
Lets you define your own function key sequence. 'name' is what will be
|
||||
returned by getch. 'input string' is what the fn key sends literally. This
|
||||
will override any prev definitions of the input. A whole bunch of defaults
|
||||
are defined for xterms rxvt's, etc. in the get_fn_keys function.
|
||||
.IP "key_pressed([sec])" 4
|
||||
.IX Item "key_pressed([sec])"
|
||||
Returns true if there is a character waiting. You can pass an option time in
|
||||
seconds to wait.
|
||||
.IP "\fIecho()\fR" 4
|
||||
.IX Item "echo()"
|
||||
Tells getch to echo the input to the screen. (the default.)
|
||||
.IP "\fInoecho()\fR" 4
|
||||
.IX Item "noecho()"
|
||||
Tells getch \s-1NOT\s0 to echo input to the screen.
|
||||
.IP "\fIflush_input()\fR" 4
|
||||
.IX Item "flush_input()"
|
||||
Clears input buffer and removes any incoming chars.
|
||||
.IP "stuff_input(str)" 4
|
||||
.IX Item "stuff_input(str)"
|
||||
Lets you stuff chars into the input buffer to be read like keystrokes.
|
||||
This is only the \f(CW\*(C`getch\*(C'\fR method buffer, the underlying getc stuff
|
||||
is not touched.
|
||||
.SH "AUTHOR"
|
||||
.IX Header "AUTHOR"
|
||||
Term::Screen.pm by Mark Kaehny (kaehny@execpc.com)
|
||||
Currently maintained by Jonathan Stowe <jns@gellyfish.com>
|
||||
.SH "LICENSE AND COPYRIGHT"
|
||||
.IX Header "LICENSE AND COPYRIGHT"
|
||||
Please see the \s-1README\s0 file in the distribution kit for the license details
|
||||
for this module.
|
||||
.SH "SEE ALSO"
|
||||
.IX Header "SEE ALSO"
|
||||
Term::Cap, termcap, curses, stty, select
|
@ -1 +0,0 @@
|
||||
positioning screen based module
|
@ -1,6 +0,0 @@
|
||||
Term::Screen is a very simple screen positioning module
|
||||
that should work wherever "Term::Cap" does. It is set up
|
||||
for Unix using stty's but these dependences are isolated
|
||||
by evals in the "new" constructor. Thus you may create a
|
||||
child module implementing Screen with MS-DOS, ioctl, or
|
||||
other means to get raw and unblocked input.
|
@ -1,4 +0,0 @@
|
||||
@comment subdir=devel/p5-Term-Screen cdrom=yes ftp=yes
|
||||
@comment $OpenBSD: PLIST,v 1.1.1.1 2003/01/27 23:34:38 margarida Exp $
|
||||
libdata/perl5/site_perl/Term/Screen.pm
|
||||
man/man3p/Term::Screen.3p
|
@ -1,216 +0,0 @@
|
||||
/set type=dir uname=root gname=wheel mode=0755
|
||||
.
|
||||
etc
|
||||
..
|
||||
usr
|
||||
local
|
||||
bin
|
||||
..
|
||||
include
|
||||
X11
|
||||
..
|
||||
..
|
||||
info
|
||||
..
|
||||
lib
|
||||
X11
|
||||
app-defaults
|
||||
..
|
||||
..
|
||||
..
|
||||
libdata
|
||||
perl5
|
||||
site_perl
|
||||
..
|
||||
..
|
||||
..
|
||||
libexec
|
||||
..
|
||||
man
|
||||
cat1
|
||||
..
|
||||
cat2
|
||||
..
|
||||
cat3
|
||||
..
|
||||
cat4
|
||||
..
|
||||
cat5
|
||||
..
|
||||
cat6
|
||||
..
|
||||
cat7
|
||||
..
|
||||
cat8
|
||||
..
|
||||
cat9
|
||||
..
|
||||
catl
|
||||
..
|
||||
catn
|
||||
..
|
||||
ja_JP.EUC
|
||||
cat1
|
||||
..
|
||||
cat2
|
||||
..
|
||||
cat3
|
||||
..
|
||||
cat4
|
||||
..
|
||||
cat5
|
||||
..
|
||||
cat6
|
||||
..
|
||||
cat7
|
||||
..
|
||||
cat8
|
||||
..
|
||||
cat9
|
||||
..
|
||||
catl
|
||||
..
|
||||
catn
|
||||
..
|
||||
man1
|
||||
..
|
||||
man2
|
||||
..
|
||||
man3
|
||||
..
|
||||
man4
|
||||
..
|
||||
man5
|
||||
..
|
||||
man6
|
||||
..
|
||||
man7
|
||||
..
|
||||
man8
|
||||
..
|
||||
man9
|
||||
..
|
||||
manl
|
||||
..
|
||||
mann
|
||||
..
|
||||
..
|
||||
man1
|
||||
..
|
||||
man2
|
||||
..
|
||||
man3
|
||||
..
|
||||
man4
|
||||
..
|
||||
man5
|
||||
..
|
||||
man6
|
||||
..
|
||||
man7
|
||||
..
|
||||
man8
|
||||
..
|
||||
man9
|
||||
..
|
||||
manl
|
||||
..
|
||||
mann
|
||||
..
|
||||
..
|
||||
sbin
|
||||
..
|
||||
share
|
||||
dict
|
||||
..
|
||||
doc
|
||||
..
|
||||
examples
|
||||
..
|
||||
misc
|
||||
..
|
||||
nls
|
||||
C
|
||||
..
|
||||
da_DK.ISO_8859-1
|
||||
..
|
||||
de_AT.ISO_8859-1
|
||||
..
|
||||
de_CH.ISO_8859-1
|
||||
..
|
||||
de_DE.ISO_8859-1
|
||||
..
|
||||
el_GR.ISO_8859-7
|
||||
..
|
||||
en_AU.ISO_8859-1
|
||||
..
|
||||
en_CA.ISO_8859-1
|
||||
..
|
||||
en_GB.ISO_8859-1
|
||||
..
|
||||
en_US.ISO_8859-1
|
||||
..
|
||||
es_ES.ISO_8859-1
|
||||
..
|
||||
et_EE.ISO-8859-1
|
||||
..
|
||||
fi_FI.ISO_8859-1
|
||||
..
|
||||
fr_BE.ISO_8859-1
|
||||
..
|
||||
fr_CA.ISO_8859-1
|
||||
..
|
||||
fr_CH.ISO_8859-1
|
||||
..
|
||||
fr_FR.ISO_8859-1
|
||||
..
|
||||
hr_HR.ISO_8859-2
|
||||
..
|
||||
is_IS.ISO_8859-1
|
||||
..
|
||||
it_CH.ISO_8859-1
|
||||
..
|
||||
it_IT.ISO_8859-1
|
||||
..
|
||||
ja_JP.EUC
|
||||
..
|
||||
ko_KR.EUC
|
||||
..
|
||||
lt_LN.ASCII
|
||||
..
|
||||
lt_LN.ISO_8859-1
|
||||
..
|
||||
lt_LN.ISO_8859-2
|
||||
..
|
||||
nl_BE.ISO_8859-1
|
||||
..
|
||||
nl_NL.ISO_8859-1
|
||||
..
|
||||
no_NO.ISO_8859-1
|
||||
..
|
||||
pt_PT.ISO_8859-1
|
||||
..
|
||||
ru_RU.CP866
|
||||
..
|
||||
ru_RU.ISO_8859-5
|
||||
..
|
||||
ru_RU.KOI8-R
|
||||
..
|
||||
sv_SE.ISO_8859-1
|
||||
..
|
||||
uk_UA.KOI8-U
|
||||
..
|
||||
..
|
||||
skel
|
||||
..
|
||||
..
|
||||
..
|
||||
..
|
||||
var
|
||||
db
|
||||
..
|
||||
log
|
||||
..
|
||||
spool
|
||||
..
|
||||
www type=dir uname=root gname=daemon mode=755
|
Loading…
Reference in New Issue
Block a user