MODEM
MODEM
PUBLIC nkey,cChr,IRQ
PUBLIC inbuf,fgcl:=10,bgcl:=0
*EXIT PROCEDURE cleanup
SETCANCEL(.f.)
SET CONFIRM ON
CLS
EscSpool:=""
GotEsc:=.f.
IRQ:=3
SET CURSOR ON
*4K BUFFER
*inbuf:=space(4000)
IF !INIT_PORT(COM2,115200/115200,EIGHT_DATA_BITS,NO_PARITY,;
ONE_STOP_BIT,IRQ,8192)
? "No init! Wrong data"
QUIT
ENDIF
IF ISWORKING()
setcolor("10/")
? "Interrupt is working!"
ELSE
? "Nothing yet..."
ENDIF
? ""
minit="ATX3E1&C1M1W1"+CHR(13)
OUTCHR(@minit)
outchr("ATDT021333314644"+CHR(13))
inkey(2)
//minit:=REPLICATE("test ",30)
//OUTCHR(@minit)
FOR tmp = 1 to 20
@ ROW(),0 say OUTBUFSIZE()
IF OUTBUFSIZE()=0
EXIT
ENDIF
INKEY(.1)
NEXT
nkey:=0
setcolor(TRIM(STR(fgcl))+"/"+TRIM(STR(bgcl)))
mr=ROW()
mc=COL()
SET CURSOR OFF
mline:=ISONLINE()
@ MAXROW(),0 SAY " "+IF(ISONLINE()=.t.,"OnLine ","OffLine")+" � "+IOLIB_VER()+" �
DTR "+IF(SETDTR()=.t.,"on ","off")+"Alt-H=Help " COLOR "W+/R"
@ mr,mc SAY ""
SET CURSOR ON
cChr:=INCHR(1)
IF !cChr=NIL
IF ASC(cChr)=10 .and. ROW()>MAXROW()-2
SCROLL(0,0,MAXROW()-1,79,1)
ELSEIF ASC(cChr)=27
EscSpool:=chr(27)
gotEsc:=.T.
ELSEIF gotEsc
EscSpool:=EscSpool+cChr
IF ISALPHA(cChr)
ANSI(EscSpool,cChr)
gotEsc:=.F.
ELSEIF LEN(EscSpool)>15 .or. !SUBSTR(EscSpool,2,1)=="["
gotEsc:=.f.
?? EscSpool
ENDIF
ELSE
IF COL()=MAXCOL() .AND. ROW()=MAXROW()-1
SCROLL(0,0,MAXROW()-1,79,1)
@ ROW(),0 SAY ""
ENDIF
?? cChr
ENDIF
ENDIF
IF ROW()=MAXROW() .OR. !mline=ISONLINE()
mr=ROW()
mc=COL()
SET CURSOR OFF
@ MAXROW(),0 SAY " "+IF(ISONLINE()=.t.,"OnLine ","OffLine")+" � "+IOLIB_VER()+"
� DTR "+IF(SETDTR()=.t.,"on ","off")+"Alt-H=Help " COLOR "W+/R"
IF mr=MAXROW()
mr=MAXROW()-1
ENDIF
@ mr,mc SAY ""
SET CURSOR ON
mline:=ISONLINE()
ENDIF
enddo
setdtr(.f.)
QUIT
*******************************************
* ANSI() may have bugs
*
*
*
FUNCTION ANSI(cString,cterm)
LOCAL x,cSpec,nRow:=ROW(),nCol:=COL(),cfg:=NIL,cbg:=NIL
LOCAL nfg:=NIL,nbg:=NIL,cbuf:=""
LOCAL cClrs:={},lBright:=.f.
*@ 24,70 SAY cString COLOR "w+/r"
cString:=SUBSTR(cString,3)
DO CASE
CASE cString=="2J"
@ 0,0 CLEAR TO MAXROW()-1,MAXCOL()
nRow:=0
nCol:=0
CASE cString=="0m"
fgcl:=7
bgcl:=0
setcolor("7/0")
CASE cterm=="p"
*^&*$(^ trying to remap your keyboard!
CASE cString=="A"
nRow:=nRow-1
CASE cString=="B"
nRow:=nRow+1
CASE cString=="C"
nCol:=nCol+1
CASE cString=="D"
nCol:=nCol-1
CASE cString=="H" .or. cString=="f"
nRow:=0
nCol:=0
CASE cString=="K"
@ nRow,nCol CLEAR TO nRow,MAXCOL()
CASE cterm=="A"
nRow:=nRow-VAL(cString)
CASE cterm=="B"
nRow:=nRow+VAL(cString)
CASE cterm=="C"
nCol:=nCol+VAL(cString)
CASE cterm=="D"
nCol:=nCol-VAL(cString)
CASE cterm=="H" .OR. cterm=="f"
nRow:=VAL(cString)
cString:=SUBSTR(cString,AT(";",cString)+1 )
nCol:=VAL(cString)
CASE cterm=="m" && change color
cbuf:=SUBSTR(cString,1,LEN(cString)-1)
x=1
DO WHILE LEN(cbuf)>0
AADD(cClrs,VAL(cBuf))
IF AT(";",cbuf)=0
EXIT
ENDIF
cBuf:=SUBSTR(cBuf,AT(";",cbuf)+1)
ENDDO
bright:=IF(fgcl>7,.T.,.F.)
blink:=IF(bgcl>7,.T.,.F.)
FOR x=1 to LEN(cClrs)
DO CASE
CASE cClrs[x]==NIL
CASE cClrs[x]==0
bright:=.f.
blink:=.f.
bgcl:=0
CASE cClrs[x]==1
bright:=.t.
CASE cClrs[x]==5
blink:=.t.
CASE cClrs[x]==7
nFg:=NIL
nbg:=NIL
fgcl:=0
bgcl:=7
bright:=.f.
blink:=.f.
EXIT
CASE cClrs[x]>39
nBg:=ASCAN({40,44,42,46,41,45,43,47}, (cClrs[x]))-1
CASE cClrs[x]>29
nFg:=ASCAN({30,34,32,36,31,35,33,37} ,cClrs[x])-1
ENDCASE
NEXT
fgcl:=IF(nfg=NIL,fgcl,nfg)
fgcl:=IF(bright .and. fgcl<8 ,fgcl+8,fgcl)
bgcl:=IF(nbg=NIL,bgcl,nbg)
bgcl:=IF(blink .and. bgcl<8 ,bgcl+8,bgcl)
setcolor(TRIM(STR(fgcl))+IF(blink,"*/","/")+TRIM(STR(bgcl)))
OTHERWISE
* @ 24,10 say " "+ cString+" "
ENDCASE
nRow:=IF(nRow=MAXROW(),MAXROW()-1,nRow)
nRow:=IF(nRow<0,0,nRow)
nCol:=IF(nCol>MAXCOL(),MAXCOL(),nCol)
nCol:=IF(nCol<0,0,nCol)
@ nRow,nCol SAY ""
RETURN NIL