home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Boot Disc 8
/
boot-disc-1997-04.iso
/
PDA_Soft
/
Psion
/
comms
/
freevt04
/
FREEVT.OPL
< prev
next >
Wrap
Text File
|
1995-04-24
|
12KB
|
623 lines
APP freevt
type $1003
path "\fvt"
ext "fvt"
icon "\opd\freevt.pic"
ENDA
PROC freevt:
global col%,row%,w1%,w2%,scrs%,scre%,stat%
global baud%,datab%,pari%,sbit%,hs1%,hs2%,hs3%,hs4%,hsa%(8),proto%
global backs%,enter%,mini$(21),mhang$(21),mdiap$(21),mdias$(21),mcon$(21)
local f%,s%,ta%,p$(2),t$(4),lit$(80),address%,alen%
local li$(80)
cache 5000,7000
cls
rem Init of global parameters
hsa%(1)=0 :rem RTS/CTS
hsa%(2)=3 :rem XON/XOFF+RTS/CTS
hsa%(3)=4 :rem NONE
hsa%(4)=7 :rem XON/XOFF
hsa%(5)=8 :rem RTS/CTS+DTR/DSR
hsa%(6)=11:rem ALL
hsa%(7)=12:rem DTR/DSR
hsa%(8)=15:rem DTR/DSR+XON/XOFF
col%=1 :rem startcolumn
row%=1 :rem startrow
scrs%=1 :rem start default scrollingregion
scre%=25:rem end
baud%=16:rem baudrate (=19200)
pari%=0 :rem parity (=none)
datab%=8:rem databits
sbit%=1 :rem stopbits
hs1%=2 :rem 4 params. for handshake
hs2%=1 :rem at this stage only hs1% is used
hs3%=1
hs4%=1
proto%=6:rem defaultprotocoll (=YModem)
backs%=8:rem BS sends BS, not DEL
enter%=13:rem enter sends CR, not LF
mini$="ATZ~"
mhang$="ATH0~"
mdiap$="ATDT"
mdias$="~"
mcon$="CONNECT"
lopen "TTY:A"
rsset:(baud%,pari%,datab%,sbit%,11,&FFFFFFFE)
w1%=gcreate(0,0,479,150,1,0)
w2%=gcreate(0,151,479,9,1,0)
guse w1%
gfont 13:gstyle 0
gat 0,5
cursor w1%
guse w2%
gat 0,0
glineto 479,0
gfont 4:gstyle 4
gat 0,8:gprint " FreeVT V0.4 "
gat 0,8
glineto 479,8
if cmd$(2)<>""
if exist(cmd$(2))
loadp:(cmd$(2))
endif
endif
pstat:
guse w1%
gupdate off
do
t$=""
ta%=key
if (ta%<255) and (ta%>0)
t$=chr$(ta%)
endif
li$=lreadl$:
if li$<>""
p$=right$(li$,1)
if asc(p$)<32
li$=left$(li$,len(li$)-1)
endif
endif
if li$<>""
mat:(col%,row%)
if (col%+len(li$))>81
lit$=left$(li$,81-col%)
li$=right$(li$,len(li$)-(81-col%))
gprintb lit$,(6*len(lit$))
col%=1
row%=row%+1
if row%>25
gscroll 0,-6
row%=25
endif
mat:(col%,row%)
endif
gprintb li$,len(li$)*6
col%=col%+len(li$)
endif
if p$<>""
if asc(p$)<32
if p$=chr$(27)
intervt:
elseif p$=chr$(13)
col%=1
elseif p$=chr$(10)
row%=row%+1
elseif p$=chr$(9)
col%=((((col%-1)/8)+1)*8)+1
elseif p$=chr$(8)
backsp:
elseif p$=chr$(7)
beep 5,300
endif
else
if p$=chr$(127)
delete:
endif
endif
mat:(col%,row%)
p$=""
endif
if col%<1
col%=1
elseif col%>81
col%=1
row%=row%+1
endif
if row%<1
row%=1
elseif row%>25
gscroll 0,-6
row%=25
endif
if ta%>255
if ta%>255 and ta%<260
t$=chr$(27)+"["+chr$(ta%-191)
elseif ta%=290
vtmenu:(0)
elseif ta%>512 and ta%<768 and ta%<>632
if kmod=10
ta%=ta%-(%a-%A)
endif
vtmenu:(ta%)
endif
endif
if t$<>""
if t$=chr$(8)
t$=chr$(backs%)
elseif t$=chr$(13)
t$=chr$(enter%)
endif
alen%=len(t$)
ioa(-1,2,stat%,#uadd(addr(t$),1),alen%)
iosignal
endif
until (ta%=632)
lclose
ENDP
PROC intervt:
local i$(2),vs$(40),t$(10),px%,py%,m%,ti%
ti%=second
ti%=ti%+2
if ti%>60
ti%=ti%-60
endif
vs$=""
do
i$=lread$:
if i$<>""
vs$=vs$+i$
endif
until (i$<>"") and (loc("RSnHrqxCDABfhlIEu=)mgKJPLMic>",i$)) or ti%=second
if vs$="[J"
gscroll 0,(26-row%)*6,0,row%*6,479,(26-row%)*6
gat (col%-1)*6,(row%*6)-1
gprintb "",((81-col%)*6)
gat (col%-1)*6,(row%*6)-1
elseif vs$="[1J"
gscroll 0,-6*(row%-1),0,0,479,6*(row%-1)
gat 0,((row%*6)-1)
gprintb "",((col%-1)*6)
gat (col%-1)*6,(row%*6)-1
elseif vs$="[2J"
gcls
col%=1
row%=1
elseif vs$="[7m"
gstyle 4
elseif vs$="[4m"
gstyle 2
elseif vs$="[m"
gstyle 0
elseif left$(vs$,1)="[" and right$(vs$,1)="A"
if (len(vs$)-2)>0
t$=mid$(vs$,2,len(vs$)-2)
row%=row%-val(t$)
else
row%=row%-1
endif
if row%<1
row%=1
endif
elseif left$(vs$,1)="[" and right$(vs$,1)="B"
if (len(vs$)-2)>0
t$=mid$(vs$,2,len(vs$)-2)
row%=row%+val(t$)
else
row%=row%+1
endif
if row%>25
row%=25
endif
elseif left$(vs$,1)="[" and right$(vs$,1)="C"
if (len(vs$)-2)>0
t$=mid$(vs$,2,len(vs$)-2)
col%=col%+val(t$)
else
col%=col%+1
endif
if col%>80
col%=80
endif
elseif left$(vs$,1)="[" and right$(vs$,1)="D"
if (len(vs$)-2)>0
t$=mid$(vs$,2,len(vs$)-2)
col%=col%-val(t$)
else
col%=col%-1
endif
if col%<1
col%=1
endif
elseif left$(vs$,1)="[" and ((right$(vs$,1)="f") or (right$(vs$,1)="H"))
vs$=mid$(vs$,2,len(vs$)-2)
m%=loc(vs$,";")
if m%=0
col%=1
row%=1
else
if m%>1
row%=val(left$(vs$,(m%-1)))
if row%<1
row%=1
endif
elseif m%=1
row%=1
endif
if m%<len(vs$)
col%=val(right$(vs$,len(vs$)-m%))
if col%<1
col%=1
endif
endif
endif
elseif vs$="[K"
gat (col%-1)*6,(row%*6)-1
gprintb "",((81-col%)*6)
gat (col%-1)*6,(row%*6)-1
elseif vs$="[1K"
gat 0,((row%*6)-1)
gprintb "",((col%-1)*6)
gat (col%-1)*6,(row%*6)-1
elseif vs$="[2K"
gat 0,((row%*6)-1)
gprintb "",(80*6)
gat (col%-1)*6,(row%*6)-1
elseif left$(vs$,1)="[" and right$(vs$,1)="L"
py%=1
if left$(vs$,1)="[" and len(vs$)>2
vs$=mid$(vs$,2,len(vs$)-2)
py%=val(vs$)
endif
gscroll 0,py%*6,0,(row%*6)-1,479,(scre%*6)-((row%*6)-1)
elseif left$(vs$,1)="[" and right$(vs$,1)="r"
vs$=mid$(vs$,2,len(vs$)-2)
if vs$<>"" and loc(vs$,";")
m%=loc(vs$,";")
scrs%=val(left$(vs$,m%-1))
scre%=val(right$(vs$,len(vs$)-m%))
if scrs%>25
scrs%=25
elseif scrs%<1
scrs%=1
endif
if scre%>25
scre%=25
elseif scre%<1
scre%=1
endif
endif
elseif vs$="D"
row%=row%+1
if row%>scre%
row%=scre%
gscroll 0,-6,0,scrs%*6,479,(scre%*6)-(scrs%*6)
endif
elseif vs$="M"
row%=row%-1
if row%<scrs%
row%=scrs%
gscroll 0,6,0,(scrs%-1)*6,479,(scre%*6)-(scrs%*6)
endif
elseif vs$="E"
row%=row%+1
if row%>25
gscroll 0,-6
row%=25
endif
elseif vs$="c"
guse w1%
gcls
row%=1
col%=1
mat:(col%,row%)
gstyle 0
scrs%=1
scre%=25
cursor w1%
elseif vs$="[?25l" or vs$="[?50l"
cursor off
elseif vs$="[?25h" or vs$="[?50h"
cursor w1%
endif
ENDP
PROC delete:
col%=col%-1
if col%<1
col%=80
row%=row%-1
if row%<1
row%=1
col%=1
endif
endif
mat:(col%,row%)
ENDP
PROC backsp:
col%=col%-1
if col%<1
col%=80
row%=row%-1
if row%<1
row%=1
col%=1
endif
endif
mat:(col%,row%)
ENDP
PROC mat:(col%,row%)
gat ((col%-1)*6),((row%*6)-1)
ENDP
PROC lread$:
local err%,len%,bl%,buf$(2)
err%=iow(-1,10,len%,bl%)
if len%<>0 and not err%
err%=ioread(-1,uadd(addr(buf$),1),1)
pokeb addr(buf$),1
else
buf$=""
endif
return buf$
ENDP
PROC lreadl$:
local err%,len%,bl%,buf$(80)
err%=iow(-1,10,len%,bl%)
buf$=""
if err%>=0
if len%>79
len%=79
endif
if len%>0
err%=iow(-1,1,#uadd(addr(buf$),1),len%)
pokeb addr(buf$),len%
else
buf$=""
gupdate on
gupdate off
endif
endif
return buf$
ENDP
PROC vtmenu:(ta%)
local men%,ho$(10),fi$(128),tmp&,tmp2&
ho$="lsxcrSRPph"
if ta%=0
minit
mcard "File","Load settings",%l,"Save settings",-%s,"Exit",%x
mcard "Display","Clear screen",%c,"Reset terminal",%r
mcard "Transfer","Send",%S,"Receive",%R,"Protocoll",%P
mcard "Options","Port",%p,"Handshake",%h,"Translations",%T
mcard "Modem","Hangup",%H,"Initialize",%I,"Dial",%D,"Setup",%U
men%=menu
else
men%=ta%-512
endif
if men%=%c
gcls
row%=1
col%=1
mat:(col%,row%)
elseif men%=%p
pari%=pari%+1
datab%=datab%-7
dinit "Port"
dchoice baud%,"Speed:","50,75,110,134,150,300,600,1200,1800,2000,2400,3600,4800,7200,9600,19200"
dchoice datab%,"Databits:","8,7,6,5"
dchoice pari%,"Parity:","None,Even,Odd"
dchoice sbit%,"Stopbits:","1,2"
dialog
pari%=pari%-1
datab%=9-datab%
rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
pstat:
elseif men%=%h
dinit "Handshake"
rem dchoice hs1%,"Xon/Xoff","On,Off"
rem dchoice hs2%,"RTS/CTS","On,Off"
rem dchoice hs3%,"DTR/DSR","On,Off"
rem dchoice hs4%,"DCD","On,Off"
dchoice hs1%,"Handshake","RTS/CTS,XON/XOFF+RTS/CTS,NONE,XON/XOFF,RTS/CTS+DTR/DSR,ALL,DTR/DSR,XON/XOFF+DTR/DSR"
dialog
rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
elseif men%=%P
dinit "Protocoll"
dchoice proto%,"","ASCII,XModem,XModem CRC,Xmodem CRC (1K),XModem Checksum,YModem,YModem (1K),YModem-G,YModem-G (1K)"
dialog
pstat:
elseif men%=%r
guse w1%
gcls
row%=1
col%=1
mat:(col%,row%)
gstyle 0
scrs%=1
scre%=25
cursor w1%
elseif men%=%s
fi$="\FVT\.fvt"
dinit "Save settings to"
dfile fi$,"",17
if dialog
savep:(fi$)
endif
elseif men%=%l
fi$="\FVT\.fvt"
dinit "Load settings from"
dfile fi$,"",208
if dialog
loadp:(fi$)
endif
elseif men%=%T
tmp&=backs%
tmp2&=enter%
dinit "Translate keys"
dlong tmp&,"backspace",1,255
dlong tmp2&,"enter",1,255
dialog
backs%=tmp&
enter%=tmp2&
elseif men%=%U
dinit "Modem setup"
dtext "","('~' = CR (13), '^' = LF (10))",$200
dedit mini$,"Init",20
dedit mhang$,"Hang-Up",20
dedit mdiap$,"Dial prefix",20
dedit mdias$,"Dial suffix",20
dedit mcon$,"Connectstring",20
dialog
elseif men%=%I
wmodem:(mini$)
elseif men%=%H
busy "Hanging up..."
rsset:(baud%,pari%,datab%,sbit%,4,&FFFFFFFE)
pause 40
rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
pause 10
wmodem:(mhang$)
pause 10
busy off
endif
ENDP
PROC rsset:(baud%,parity%,data%,stop%,hand%,term&)
local frame%,srchar%(6),dummy%,err%
frame%=data%-5
if stop%=2
frame%=frame% or 16
endif
if parity%
frame%=frame% or 32
endif
srchar%(1)=baud% or (baud%*256)
srchar%(2)=frame% or (parity%*256)
srchar%(3)=(hand% and 255) or $1100
srchar%(4)=$13
pokel addr(srchar%(5)),term&
err%=iow(-1,7,srchar%(1),dummy%)
if err%
raise err%
endif
ENDP
PROC loadp:(fi$)
local p%(15),ha%,ret%
busy "Loading..."
ret%=ioopen(ha%,fi$,$0000)
if ret%
raise ret%
endif
ret%=ioread(ha%,addr(p%()),22)
if ret%=22
baud%=p%(1)
pari%=p%(2)
datab%=p%(3)
sbit%=p%(4)
hs1%=p%(5)
hs2%=p%(6)
hs3%=p%(7)
hs4%=p%(8)
proto%=p%(9)
backs%=p%(10)
enter%=p%(11)
rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
endif
ioclose(ha%)
pstat:
busy off
ENDP
PROC savep:(fi$)
local p%(15),ha%,ret%
busy "Saving..."
ret%=ioopen(ha%,fi$,$0102)
if ret%>=0
p%(1)=baud%
p%(2)=pari%
p%(3)=datab%
p%(4)=sbit%
p%(5)=hs1%
p%(6)=hs2%
p%(7)=hs3%
p%(8)=hs4%
p%(9)=proto%
p%(10)=backs%
p%(11)=enter%
ret%=iowrite(ha%,addr(p%()),22)
if ret%
raise ret%
endif
else
raise ret%
endif
ioclose(ha%)
busy off
endp
PROC pstat:
local st$(20),ba%(16)
ba%(1)=50
ba%(2)=75
ba%(3)=110
ba%(4)=134
ba%(5)=150
ba%(6)=300
ba%(7)=600
ba%(8)=1200
ba%(9)=1800
ba%(10)=2000
ba%(11)=2400
ba%(12)=3600
ba%(13)=4800
ba%(14)=7200
ba%(15)=9600
ba%(16)=19200
guse w2%
gat 400,8
st$=""
st$=gen$(ba%(baud%),-5)+" "
st$=st$+gen$(datab%,1)
if pari%=0
st$=st$+"N"
elseif pari%=1
st$=st$+"E"
elseif pari%=2
st$=st$+"O"
endif
st$=st$+gen$(sbit%,1)
gprintb st$,len(st$)*8
guse w1%
ENDP
PROC wmodem:(mostr$)
local i%,tmp$(2),address%,alen%
i%=1
while i%<=len(mostr$)
tmp$=mid$(mostr$,i%,1)
if tmp$="~"
tmp$=chr$(13)
elseif tmp$="^"
tmp$=chr$(10)
endif
alen%=1
ioa(-1,2,stat%,#uadd(addr(tmp$),1),alen%)
iosignal
i%=i%+1
endwh
ENDP