home *** CD-ROM | disk | FTP | other *** search
/ Boot Disc 8 / boot-disc-1997-04.iso / PDA_Soft / Psion / comms / freevt04 / FREEVT.OPL < prev    next >
Text File  |  1995-04-24  |  12KB  |  623 lines

  1. APP freevt
  2.     type $1003
  3.     path "\fvt"
  4.     ext "fvt"
  5.     icon "\opd\freevt.pic"
  6. ENDA
  7.  
  8. PROC freevt:
  9.     global col%,row%,w1%,w2%,scrs%,scre%,stat%
  10.     global baud%,datab%,pari%,sbit%,hs1%,hs2%,hs3%,hs4%,hsa%(8),proto%
  11.     global backs%,enter%,mini$(21),mhang$(21),mdiap$(21),mdias$(21),mcon$(21)
  12.     local f%,s%,ta%,p$(2),t$(4),lit$(80),address%,alen%
  13.     local li$(80)
  14.     cache 5000,7000
  15.     cls
  16.     rem Init of global parameters
  17.     hsa%(1)=0    :rem RTS/CTS
  18.     hsa%(2)=3    :rem XON/XOFF+RTS/CTS
  19.     hsa%(3)=4    :rem NONE
  20.     hsa%(4)=7    :rem XON/XOFF
  21.     hsa%(5)=8    :rem RTS/CTS+DTR/DSR
  22.     hsa%(6)=11:rem ALL
  23.     hsa%(7)=12:rem DTR/DSR
  24.     hsa%(8)=15:rem DTR/DSR+XON/XOFF
  25.     col%=1    :rem startcolumn
  26.     row%=1    :rem startrow
  27.     scrs%=1    :rem start default scrollingregion
  28.     scre%=25:rem end
  29.     baud%=16:rem baudrate (=19200)
  30.     pari%=0    :rem parity (=none)
  31.     datab%=8:rem databits
  32.     sbit%=1    :rem stopbits
  33.     hs1%=2    :rem 4 params. for handshake
  34.     hs2%=1    :rem at this stage only hs1% is used
  35.     hs3%=1
  36.     hs4%=1
  37.     proto%=6:rem defaultprotocoll (=YModem)
  38.     backs%=8:rem BS sends BS, not DEL
  39.     enter%=13:rem enter sends CR, not LF
  40.     mini$="ATZ~"
  41.     mhang$="ATH0~"
  42.     mdiap$="ATDT"
  43.     mdias$="~"
  44.     mcon$="CONNECT"
  45.     lopen "TTY:A"
  46.     rsset:(baud%,pari%,datab%,sbit%,11,&FFFFFFFE)
  47.     w1%=gcreate(0,0,479,150,1,0)
  48.     w2%=gcreate(0,151,479,9,1,0)
  49.     guse w1%
  50.     gfont 13:gstyle 0
  51.     gat 0,5
  52.     cursor w1%
  53.     guse w2%
  54.     gat 0,0
  55.     glineto 479,0
  56.     gfont 4:gstyle 4
  57.     gat 0,8:gprint "                         FreeVT V0.4                           "
  58.     gat 0,8
  59.     glineto 479,8
  60.     if cmd$(2)<>""
  61.         if exist(cmd$(2))
  62.             loadp:(cmd$(2))
  63.         endif
  64.     endif
  65.     pstat:
  66.     guse w1%
  67.     gupdate off
  68.     do
  69.         t$=""
  70.         ta%=key
  71.         if (ta%<255) and (ta%>0)
  72.             t$=chr$(ta%)
  73.         endif
  74.         li$=lreadl$:
  75.         if li$<>""
  76.             p$=right$(li$,1)
  77.             if asc(p$)<32
  78.                 li$=left$(li$,len(li$)-1)
  79.             endif
  80.         endif
  81.         if li$<>""
  82.             mat:(col%,row%)
  83.             if (col%+len(li$))>81
  84.                 lit$=left$(li$,81-col%)
  85.                 li$=right$(li$,len(li$)-(81-col%))
  86.                 gprintb lit$,(6*len(lit$))
  87.                 col%=1
  88.                 row%=row%+1
  89.                 if row%>25
  90.                     gscroll 0,-6
  91.                     row%=25
  92.                 endif
  93.                 mat:(col%,row%)
  94.             endif
  95.             gprintb li$,len(li$)*6
  96.             col%=col%+len(li$)
  97.         endif
  98.         if p$<>""
  99.             if asc(p$)<32
  100.                 if p$=chr$(27)
  101.                     intervt:
  102.                 elseif p$=chr$(13)
  103.                     col%=1
  104.                 elseif p$=chr$(10)
  105.                     row%=row%+1
  106.                 elseif p$=chr$(9)
  107.                     col%=((((col%-1)/8)+1)*8)+1
  108.                 elseif p$=chr$(8)
  109.                     backsp:
  110.                 elseif p$=chr$(7)
  111.                     beep 5,300
  112.                 endif
  113.             else
  114.                 if p$=chr$(127)
  115.                     delete:
  116.                 endif
  117.             endif
  118.             mat:(col%,row%)
  119.             p$=""
  120.         endif
  121.         if col%<1
  122.             col%=1
  123.         elseif col%>81
  124.             col%=1
  125.             row%=row%+1
  126.         endif
  127.         if row%<1
  128.             row%=1
  129.         elseif row%>25
  130.             gscroll 0,-6
  131.             row%=25
  132.         endif
  133.         if ta%>255
  134.             if ta%>255 and ta%<260
  135.                 t$=chr$(27)+"["+chr$(ta%-191)
  136.             elseif ta%=290
  137.                 vtmenu:(0)
  138.             elseif ta%>512 and ta%<768 and ta%<>632
  139.                 if kmod=10
  140.                     ta%=ta%-(%a-%A)
  141.                 endif
  142.                 vtmenu:(ta%)
  143.             endif
  144.         endif
  145.         if t$<>""
  146.             if t$=chr$(8)
  147.                 t$=chr$(backs%)
  148.             elseif t$=chr$(13)
  149.                 t$=chr$(enter%)
  150.             endif
  151.             alen%=len(t$)
  152.             ioa(-1,2,stat%,#uadd(addr(t$),1),alen%)
  153.             iosignal
  154.         endif
  155.     until (ta%=632)
  156.     lclose
  157. ENDP
  158.  
  159.  
  160. PROC intervt:
  161.     local i$(2),vs$(40),t$(10),px%,py%,m%,ti%
  162.     ti%=second
  163.     ti%=ti%+2
  164.     if ti%>60
  165.         ti%=ti%-60
  166.     endif
  167.     vs$=""
  168.     do
  169.         i$=lread$:
  170.         if i$<>""
  171.             vs$=vs$+i$
  172.         endif
  173.     until (i$<>"") and (loc("RSnHrqxCDABfhlIEu=)mgKJPLMic>",i$)) or ti%=second
  174.     if vs$="[J"
  175.         gscroll 0,(26-row%)*6,0,row%*6,479,(26-row%)*6
  176.         gat (col%-1)*6,(row%*6)-1
  177.         gprintb "",((81-col%)*6)
  178.         gat (col%-1)*6,(row%*6)-1
  179.     elseif vs$="[1J"
  180.         gscroll 0,-6*(row%-1),0,0,479,6*(row%-1)
  181.         gat 0,((row%*6)-1)
  182.         gprintb "",((col%-1)*6)
  183.         gat (col%-1)*6,(row%*6)-1
  184.     elseif vs$="[2J"
  185.         gcls
  186.         col%=1
  187.         row%=1
  188.     elseif vs$="[7m"
  189.         gstyle 4
  190.     elseif vs$="[4m"
  191.         gstyle 2
  192.     elseif vs$="[m"
  193.         gstyle 0
  194.     elseif left$(vs$,1)="[" and right$(vs$,1)="A"
  195.         if (len(vs$)-2)>0
  196.             t$=mid$(vs$,2,len(vs$)-2)
  197.             row%=row%-val(t$)
  198.         else
  199.             row%=row%-1
  200.         endif
  201.         if row%<1
  202.             row%=1
  203.         endif
  204.     elseif left$(vs$,1)="[" and right$(vs$,1)="B"
  205.         if (len(vs$)-2)>0
  206.             t$=mid$(vs$,2,len(vs$)-2)
  207.             row%=row%+val(t$)
  208.         else
  209.             row%=row%+1
  210.         endif
  211.         if row%>25
  212.             row%=25
  213.         endif
  214.     elseif left$(vs$,1)="[" and right$(vs$,1)="C"
  215.         if (len(vs$)-2)>0
  216.             t$=mid$(vs$,2,len(vs$)-2)
  217.             col%=col%+val(t$)
  218.         else
  219.             col%=col%+1
  220.         endif
  221.         if col%>80
  222.             col%=80
  223.         endif
  224.     elseif left$(vs$,1)="[" and right$(vs$,1)="D"
  225.         if (len(vs$)-2)>0
  226.             t$=mid$(vs$,2,len(vs$)-2)
  227.             col%=col%-val(t$)
  228.         else
  229.             col%=col%-1
  230.         endif
  231.         if col%<1
  232.             col%=1
  233.         endif
  234.     elseif left$(vs$,1)="[" and ((right$(vs$,1)="f") or (right$(vs$,1)="H"))
  235.         vs$=mid$(vs$,2,len(vs$)-2)
  236.         m%=loc(vs$,";")
  237.         if m%=0
  238.             col%=1
  239.             row%=1
  240.         else
  241.             if m%>1
  242.                 row%=val(left$(vs$,(m%-1)))
  243.                 if row%<1
  244.                     row%=1
  245.                 endif
  246.             elseif m%=1
  247.                 row%=1
  248.             endif
  249.             if m%<len(vs$)
  250.                 col%=val(right$(vs$,len(vs$)-m%))
  251.                 if col%<1
  252.                     col%=1
  253.                 endif
  254.             endif
  255.         endif
  256.     elseif vs$="[K"
  257.         gat (col%-1)*6,(row%*6)-1
  258.         gprintb "",((81-col%)*6)
  259.         gat (col%-1)*6,(row%*6)-1
  260.     elseif vs$="[1K"
  261.         gat 0,((row%*6)-1)
  262.         gprintb "",((col%-1)*6)
  263.         gat (col%-1)*6,(row%*6)-1
  264.     elseif vs$="[2K"
  265.         gat 0,((row%*6)-1)
  266.         gprintb "",(80*6)
  267.         gat (col%-1)*6,(row%*6)-1
  268.     elseif left$(vs$,1)="[" and right$(vs$,1)="L"
  269.         py%=1
  270.         if left$(vs$,1)="[" and len(vs$)>2
  271.             vs$=mid$(vs$,2,len(vs$)-2)
  272.             py%=val(vs$)
  273.         endif
  274.         gscroll 0,py%*6,0,(row%*6)-1,479,(scre%*6)-((row%*6)-1)
  275.     elseif left$(vs$,1)="[" and right$(vs$,1)="r"
  276.         vs$=mid$(vs$,2,len(vs$)-2)
  277.         if vs$<>"" and loc(vs$,";")
  278.             m%=loc(vs$,";")
  279.             scrs%=val(left$(vs$,m%-1))
  280.             scre%=val(right$(vs$,len(vs$)-m%))
  281.             if scrs%>25
  282.                 scrs%=25
  283.             elseif scrs%<1
  284.                 scrs%=1
  285.             endif
  286.             if scre%>25
  287.                 scre%=25
  288.             elseif scre%<1
  289.                 scre%=1
  290.             endif
  291.         endif
  292.     elseif vs$="D"
  293.         row%=row%+1
  294.         if row%>scre%
  295.             row%=scre%
  296.             gscroll 0,-6,0,scrs%*6,479,(scre%*6)-(scrs%*6)
  297.         endif
  298.     elseif vs$="M"
  299.         row%=row%-1
  300.         if row%<scrs%
  301.             row%=scrs%
  302.             gscroll 0,6,0,(scrs%-1)*6,479,(scre%*6)-(scrs%*6)
  303.         endif
  304.     elseif vs$="E"
  305.         row%=row%+1
  306.         if row%>25
  307.             gscroll 0,-6
  308.             row%=25
  309.         endif
  310.     elseif vs$="c"
  311.         guse w1%
  312.         gcls
  313.         row%=1
  314.         col%=1
  315.         mat:(col%,row%)
  316.         gstyle 0
  317.         scrs%=1
  318.         scre%=25
  319.         cursor w1%
  320.     elseif vs$="[?25l" or vs$="[?50l"
  321.         cursor off
  322.     elseif vs$="[?25h" or vs$="[?50h"
  323.         cursor w1%
  324.     endif
  325. ENDP
  326.  
  327.  
  328. PROC delete:
  329.     col%=col%-1
  330.     if col%<1
  331.         col%=80
  332.         row%=row%-1
  333.         if row%<1
  334.             row%=1
  335.             col%=1
  336.         endif
  337.     endif
  338.     mat:(col%,row%)
  339. ENDP
  340.  
  341.  
  342. PROC backsp:
  343.     col%=col%-1
  344.     if col%<1
  345.         col%=80
  346.         row%=row%-1
  347.         if row%<1
  348.             row%=1
  349.             col%=1
  350.         endif
  351.     endif
  352.     mat:(col%,row%)
  353. ENDP
  354.  
  355.  
  356. PROC mat:(col%,row%)
  357.     gat ((col%-1)*6),((row%*6)-1)
  358. ENDP
  359.  
  360.  
  361. PROC lread$:
  362.     local err%,len%,bl%,buf$(2)
  363.     err%=iow(-1,10,len%,bl%)
  364.     if len%<>0 and not err%
  365.         err%=ioread(-1,uadd(addr(buf$),1),1)
  366.         pokeb addr(buf$),1
  367.     else
  368.         buf$=""
  369.     endif
  370.     return buf$
  371. ENDP
  372.  
  373.  
  374. PROC lreadl$:
  375.     local err%,len%,bl%,buf$(80)
  376.     err%=iow(-1,10,len%,bl%)
  377.     buf$=""
  378.     if err%>=0
  379.         if len%>79
  380.             len%=79
  381.         endif
  382.         if len%>0
  383.             err%=iow(-1,1,#uadd(addr(buf$),1),len%)
  384.             pokeb addr(buf$),len%
  385.         else
  386.             buf$=""
  387.             gupdate on
  388.             gupdate off
  389.         endif
  390.     endif
  391.     return buf$
  392. ENDP
  393.  
  394.  
  395. PROC vtmenu:(ta%)
  396. local men%,ho$(10),fi$(128),tmp&,tmp2&
  397.     ho$="lsxcrSRPph"
  398.     if ta%=0
  399.         minit
  400.         mcard "File","Load settings",%l,"Save settings",-%s,"Exit",%x
  401.         mcard "Display","Clear screen",%c,"Reset terminal",%r
  402.         mcard "Transfer","Send",%S,"Receive",%R,"Protocoll",%P
  403.         mcard "Options","Port",%p,"Handshake",%h,"Translations",%T
  404.         mcard "Modem","Hangup",%H,"Initialize",%I,"Dial",%D,"Setup",%U
  405.         men%=menu
  406.     else
  407.         men%=ta%-512
  408.     endif
  409.     if men%=%c
  410.         gcls
  411.         row%=1
  412.         col%=1
  413.         mat:(col%,row%)
  414.     elseif men%=%p
  415.         pari%=pari%+1
  416.         datab%=datab%-7
  417.         dinit "Port"
  418.         dchoice baud%,"Speed:","50,75,110,134,150,300,600,1200,1800,2000,2400,3600,4800,7200,9600,19200"
  419.         dchoice datab%,"Databits:","8,7,6,5"
  420.         dchoice pari%,"Parity:","None,Even,Odd"
  421.         dchoice sbit%,"Stopbits:","1,2"
  422.         dialog
  423.         pari%=pari%-1
  424.         datab%=9-datab%
  425.         rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
  426.         pstat:
  427.     elseif men%=%h
  428.         dinit "Handshake"
  429.         rem dchoice hs1%,"Xon/Xoff","On,Off"
  430.         rem dchoice hs2%,"RTS/CTS","On,Off"
  431.         rem dchoice hs3%,"DTR/DSR","On,Off"
  432.         rem dchoice hs4%,"DCD","On,Off"
  433.         dchoice hs1%,"Handshake","RTS/CTS,XON/XOFF+RTS/CTS,NONE,XON/XOFF,RTS/CTS+DTR/DSR,ALL,DTR/DSR,XON/XOFF+DTR/DSR"
  434.         dialog
  435.         rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
  436.     elseif men%=%P
  437.         dinit "Protocoll"
  438.         dchoice proto%,"","ASCII,XModem,XModem CRC,Xmodem CRC (1K),XModem Checksum,YModem,YModem (1K),YModem-G,YModem-G (1K)"
  439.         dialog
  440.         pstat:
  441.     elseif men%=%r
  442.         guse w1%
  443.         gcls
  444.         row%=1
  445.         col%=1
  446.         mat:(col%,row%)
  447.         gstyle 0
  448.         scrs%=1
  449.         scre%=25
  450.         cursor w1%
  451.     elseif men%=%s
  452.         fi$="\FVT\.fvt"
  453.         dinit "Save settings to"
  454.         dfile fi$,"",17
  455.         if dialog
  456.             savep:(fi$)
  457.         endif
  458.     elseif men%=%l
  459.         fi$="\FVT\.fvt"
  460.         dinit "Load settings from"
  461.         dfile fi$,"",208
  462.         if dialog
  463.             loadp:(fi$)
  464.         endif
  465.     elseif men%=%T
  466.         tmp&=backs%
  467.         tmp2&=enter%
  468.         dinit "Translate keys"
  469.         dlong tmp&,"backspace",1,255
  470.         dlong tmp2&,"enter",1,255
  471.         dialog
  472.         backs%=tmp&
  473.         enter%=tmp2&
  474.     elseif men%=%U
  475.         dinit "Modem setup"
  476.         dtext "","('~' = CR (13), '^' = LF (10))",$200
  477.         dedit mini$,"Init",20
  478.         dedit mhang$,"Hang-Up",20
  479.         dedit mdiap$,"Dial prefix",20
  480.         dedit mdias$,"Dial suffix",20
  481.         dedit mcon$,"Connectstring",20
  482.         dialog
  483.     elseif men%=%I
  484.         wmodem:(mini$)
  485.     elseif men%=%H
  486.         busy "Hanging up..."
  487.         rsset:(baud%,pari%,datab%,sbit%,4,&FFFFFFFE)
  488.         pause 40
  489.         rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
  490.         pause 10
  491.         wmodem:(mhang$)
  492.         pause 10
  493.         busy off
  494.     endif
  495. ENDP
  496.  
  497.  
  498. PROC rsset:(baud%,parity%,data%,stop%,hand%,term&)
  499.     local frame%,srchar%(6),dummy%,err%
  500.     frame%=data%-5
  501.     if stop%=2
  502.         frame%=frame% or 16
  503.     endif
  504.     if parity%
  505.         frame%=frame% or 32
  506.     endif
  507.     srchar%(1)=baud% or (baud%*256)
  508.     srchar%(2)=frame% or (parity%*256)
  509.     srchar%(3)=(hand% and 255) or $1100
  510.     srchar%(4)=$13
  511.     pokel addr(srchar%(5)),term&
  512.     err%=iow(-1,7,srchar%(1),dummy%)
  513.     if err%
  514.         raise err%
  515.     endif
  516. ENDP
  517.  
  518. PROC loadp:(fi$)
  519.     local p%(15),ha%,ret%
  520.     busy "Loading..."
  521.     ret%=ioopen(ha%,fi$,$0000)
  522.     if ret%
  523.         raise ret%
  524.     endif
  525.     ret%=ioread(ha%,addr(p%()),22)
  526.     if ret%=22
  527.         baud%=p%(1)
  528.         pari%=p%(2)
  529.         datab%=p%(3)
  530.         sbit%=p%(4)
  531.         hs1%=p%(5)
  532.         hs2%=p%(6)
  533.         hs3%=p%(7)
  534.         hs4%=p%(8)
  535.         proto%=p%(9)
  536.         backs%=p%(10)
  537.         enter%=p%(11)
  538.         rsset:(baud%,pari%,datab%,sbit%,hs1%,&FFFFFFFE)
  539.     endif
  540.     ioclose(ha%)
  541.     pstat:
  542.     busy off
  543. ENDP
  544.  
  545. PROC savep:(fi$)
  546.     local p%(15),ha%,ret%
  547.     busy "Saving..."
  548.     ret%=ioopen(ha%,fi$,$0102)
  549.     if ret%>=0
  550.         p%(1)=baud%
  551.         p%(2)=pari%
  552.         p%(3)=datab%
  553.         p%(4)=sbit%
  554.         p%(5)=hs1%
  555.         p%(6)=hs2%
  556.         p%(7)=hs3%
  557.         p%(8)=hs4%
  558.         p%(9)=proto%
  559.         p%(10)=backs%
  560.         p%(11)=enter%
  561.         ret%=iowrite(ha%,addr(p%()),22)
  562.         if ret%
  563.             raise ret%
  564.         endif
  565.     else
  566.         raise ret%
  567.     endif
  568.     ioclose(ha%)
  569.     busy off
  570. endp
  571.  
  572. PROC pstat:
  573.     local st$(20),ba%(16)
  574.     ba%(1)=50
  575.     ba%(2)=75
  576.     ba%(3)=110
  577.     ba%(4)=134
  578.     ba%(5)=150
  579.     ba%(6)=300
  580.     ba%(7)=600
  581.     ba%(8)=1200
  582.     ba%(9)=1800
  583.     ba%(10)=2000
  584.     ba%(11)=2400
  585.     ba%(12)=3600
  586.     ba%(13)=4800
  587.     ba%(14)=7200
  588.     ba%(15)=9600
  589.     ba%(16)=19200
  590.     guse w2%
  591.     gat 400,8
  592.     st$=""
  593.     st$=gen$(ba%(baud%),-5)+" "
  594.     st$=st$+gen$(datab%,1)
  595.     if pari%=0
  596.         st$=st$+"N"
  597.     elseif pari%=1
  598.         st$=st$+"E"
  599.     elseif pari%=2
  600.         st$=st$+"O"
  601.     endif
  602.     st$=st$+gen$(sbit%,1)
  603.     gprintb st$,len(st$)*8
  604.     guse w1%
  605. ENDP
  606.  
  607. PROC wmodem:(mostr$)
  608. local i%,tmp$(2),address%,alen%
  609.     i%=1
  610.     while i%<=len(mostr$)
  611.         tmp$=mid$(mostr$,i%,1)
  612.         if tmp$="~"
  613.             tmp$=chr$(13)
  614.         elseif tmp$="^"
  615.             tmp$=chr$(10)
  616.         endif
  617.         alen%=1
  618.         ioa(-1,2,stat%,#uadd(addr(tmp$),1),alen%)
  619.         iosignal
  620.         i%=i%+1
  621.     endwh
  622. ENDP
  623.