home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
rox.zip
/
cmdline.rox
< prev
next >
Wrap
Text File
|
1994-04-08
|
6KB
|
224 lines
:class CmdLine
:*--------------------------------------------------------------------
:*
:*--------------------------------------------------------------------
:method init
prevLine.0 = 0
key._1B = "esc"
key._08 = "backsp"
key._09 = "tab"
key._0D = "enter"
key._003B = "f1"
key._003C = "f2"
key._003D = "f3"
key._003E = "f4"
key._003F = "f5"
key._0040 = "f6"
key._0041 = "f7"
key._0042 = "f8"
key._0043 = "f9"
key._0044 = "f10"
key._0085 = "f11"
key._0086 = "f12"
key._E048 = "cup"
key._E050 = "cdown"
key._E04B = "cleft"
key._E04D = "cright"
key._E047 = "home"
key._E04F = "end"
key._E049 = "pageup"
key._E051 = "pagedown"
key._E052 = "ins"
key._E053 = "del"
rc = RoxAddVar(self,"prevline.0")
rc = RoxAddVar(self,"key._1B")
rc = RoxAddVar(self,"key._08")
rc = RoxAddVar(self,"key._09")
rc = RoxAddVar(self,"key._0D")
rc = RoxAddVar(self,"key._003B")
rc = RoxAddVar(self,"key._003C")
rc = RoxAddVar(self,"key._003D")
rc = RoxAddVar(self,"key._003E")
rc = RoxAddVar(self,"key._003F")
rc = RoxAddVar(self,"key._0040")
rc = RoxAddVar(self,"key._0041")
rc = RoxAddVar(self,"key._0042")
rc = RoxAddVar(self,"key._0043")
rc = RoxAddVar(self,"key._0044")
rc = RoxAddVar(self,"key._0085")
rc = RoxAddVar(self,"key._0086")
rc = RoxAddVar(self,"key._E048")
rc = RoxAddVar(self,"key._E050")
rc = RoxAddVar(self,"key._E04B")
rc = RoxAddVar(self,"key._E04D")
rc = RoxAddVar(self,"key._E047")
rc = RoxAddVar(self,"key._E04F")
rc = RoxAddVar(self,"key._E049")
rc = RoxAddVar(self,"key._E051")
rc = RoxAddVar(self,"key._E052")
rc = RoxAddVar(self,"key._E053")
:*--------------------------------------------------------------------
:*
:*--------------------------------------------------------------------
:method getLine
parse value SysCurPos() with origRow origCol .
line = ""
currRow = origRow
currCol = origCol
currOfs = 0
toFill = 78 - origCol
insert = 0
currLine = prevLine.0
firstCup = 1
key = ""
do while (key <> "enter")
lastKey = key
key = getKey()
select
when (key = "ins") then
do
if (insert = 1) then
insert = 0
else
insert = 1
iterate
end
when (key = "enter") then
nop
when (key = "cup") | (key = "cdown") then
do
if (prevLine.0 = 0) then
iterate
if (key = "cup") then
do
if (firstCup) then
firstCup = 0
else
currLine = currLine - 1
end
else
currLine = currLine + 1
if (currLine <= 0) then
currLine = prevLine.0
if (currLine > prevLine.0) then
currLine = 1
line = prevLine.currLine
currOfs = length(line)
end
when (key = "del") then
line = delstr(line,currOfs+1,1)
when (key = "cright") then
do
if (currOfs < length(line)) then
currOfs = currOfs + 1
end
when (key = "cleft") then
do
if (currOfs > 0) then
currOfs = currOfs - 1
end
when (key = "home") then
currOfs = 0
when (key = "end") then
currOfs = length(line)
when (key = "esc") then
do
line = ""
currOfs = 0
end
when (key = "backsp") then
do
if (currOfs <= 0) then
iterate
line = delstr(line,currOfs,1)
currOfs = currOfs - 1
end
otherwise
if (length(key) > 1) then
iterate
if (insert) then
line = insert(key,line,currOfs)
else
line = overlay(key,line,currOfs+1)
currOfs = currOfs + 1
end
rc = SysCurPos(origRow,origCol)
rc = charout("STDOUT:",left(line,toFill))
rc = SysCurPos(origRow,origCol + currOfs)
end
if (line <> "") & (lastKey <> "cup") & (lastKey <> "cdown") then
do
o = prevLine.0 + 1
prevLine.0 = o
prevLine.o = line
rc = RoxAddVar(self,"prevLine."o)
end
return line
/*------------------------------------------------------------------
* get key
*------------------------------------------------------------------*/
getKey: procedure expose key.
/*------------------------------------------------------------------
* get first key
*------------------------------------------------------------------*/
call on halt name ignore
key = SysGetKey("NOECHO")
ckey = c2x(key)
/*------------------------------------------------------------------
* get second 'key' if needed
*------------------------------------------------------------------*/
if (ckey = "E0") | (ckey = "00") then
ckey = ckey || c2x(SysGetKey("NOECHO"))
/*------------------------------------------------------------------
* look it up
*------------------------------------------------------------------*/
ckey = "_"ckey
name = key.ckey
if (symbol("key."ckey) = "LIT") then
return key
else
return key.ckey
/*------------------------------------------------------------------
* handle break
*------------------------------------------------------------------*/
ignore:
return ""