'Biblioteca para uso de modem 'por Claudio Eduardo Storti Lago DECLARE FUNCTION AutoAnswer (AutoAnswerString$) DECLARE FUNCTION ModemInput$ (Coluna!, Linha!, MaxLenght!, Prompt$) DECLARE FUNCTION ModemInkey$ () DECLARE SUB ClearLocalScreen () DECLARE SUB ClearRemoteScreen () DECLARE SUB CloseModem () DECLARE SUB GotoXYRemote (Coluna!, Linha!) DECLARE SUB GotoXYLocal (Coluna!, Linha!) DECLARE SUB LocalString (Text$) DECLARE SUB InitModem (Port$, Baud$, Parity$, BE$, BS$) DECLARE SUB LeModem () DECLARE SUB SendKey (Caracter$) DECLARE SUB SendKeyAuto () DECLARE SUB EnviaString (Text$) DECLARE SUB EnviaStringAuto (Text$) DECLARE SUB Filter (Texto$) '$INCLUDE: 'qb.bi' CONST False = 0 CONST True = NOT False InitModem "2", "19200", "n", "8", "1" IF AutoAnswer("ATA") = True THEN ClearLocalScreen ClearRemoteScreen Nome$ = ModemInput$(10, 10, 10, "Qual o seu nome? ") END IF END Desconecta: CloseModem TIMER OFF RETURN FUNCTION AutoAnswer (AutoAnswerString$) AutoAnswer = False DO a$ = ModemInkey$ LocalString a$ LastString$ = LastString$ + a$ IF RIGHT$(LastString$, 4) = "RING" THEN TIMER ON ON TIMER(30) GOSUB Desconecta EnviaStringAuto AutoAnswerString$ END IF IF RIGHT$(LastString$, 8) = "CONNECT " THEN DO a$ = ModemInkey$ LocalString a$ LastString$ = LastString$ + a$ LOOP UNTIL RIGHT$(LastString$, 1) = CHR$(10) AutoAnswer = True TIMER OFF EXIT DO END IF LOOP END FUNCTION SUB ClearLocalScreen LocalString CHR$(27) + "[2J" END SUB SUB ClearRemoteScreen PRINT #1, CHR$(27) + "[2J" END SUB SUB CloseModem CLOSE #1 END SUB SUB EnviaString (Text$) FOR i = 1 TO LEN(Text$) a$ = MID$(Text$, i, 1) PRINT #1, a$; NEXT i END SUB SUB EnviaStringAuto (Text$) PRINT #1, Text$ END SUB SUB Filter (Texto$) DIM Entrada AS RegTypeX DIM Saida AS RegTypeX Entrada.ax = ASC(Texto$) CALL INTERRUPTX(&H29, Entrada, Saida) END SUB SUB GotoXYLocal (Coluna, Linha) LocalString CHR$(27) + "[" + MID$(STR$(Linha), 2, LEN(STR$(Linha))) + ";" + MID$(STR$(Coluna), 2, LEN(STR$(Coluna))) + "H" END SUB SUB GotoXYRemote (Coluna, Linha) PRINT #1, CHR$(27) + "[" + MID$(STR$(Linha), 2, LEN(STR$(Linha))) + ";" + MID$(STR$(Coluna), 2, LEN(STR$(Coluna))) + "H" END SUB SUB InitModem (Port$, Baud$, Parity$, BE$, BS$) OPEN "Com" + Port$ + ":" + Baud$ + "," + Parity$ + "," + BE$ + "," + BS$ FOR RANDOM AS #1 END SUB SUB LeModem IF NOT EOF(1) THEN a$ = INPUT$(1, #1): Filter a$ END SUB SUB LocalString (Text$) Tamanho = LEN(Text$) FOR i = 1 TO Tamanho Caractere$ = MID$(Text$, i, i) Filter Caractere$ NEXT i END SUB FUNCTION ModemInkey$ IF NOT EOF(1) THEN ModemInkey$ = INPUT$(1, #1) END IF END FUNCTION FUNCTION ModemInput$ (Coluna, Linha, MaxLenght, Prompt$) GotoXYLocal Coluna, Linha 'Posiciona e envia a string LOCAL LocalString Prompt$ GotoXYRemote Coluna, Linha 'Posiciona e envia a string REMOTE EnviaString Prompt$ 'Pega a resposta do modem DO Tecla$ = ModemInkey$ IF Tecla$ = "" THEN Tecla$ = INKEY$ IF Tecla$ = CHR$(13) THEN EXIT DO IF Tecla$ <> "" THEN IF NOT Tecla$ = CHR$(8) THEN Resposta$ = Resposta$ + Tecla$ IF LEN(Resposta$) < MaxLenght + 1 THEN LocalString Tecla$ EnviaString Tecla$ END IF IF LEN(Resposta$) > MaxLenght THEN Resposta$ = MID$(Resposta$, 1, MaxLenght) LocalString CHR$(7) EnviaString CHR$(7) END IF ELSE IF LEN(Resposta$) = 0 THEN GOTO PulaConfere Resposta$ = MID$(Resposta$, 1, LEN(Resposta$) - 1) IF LEN(Resposta$) < MaxLenght + 1 THEN LocalString CHR$(8) EnviaString CHR$(8) END IF IF LEN(Resposta$) > MaxLenght THEN Resposta$ = MID$(Resposta$, 1, MaxLenght) LocalString CHR$(7) EnviaString CHR$(7) END IF PulaConfere: END IF END IF LOOP ModemInput$ = Resposta$ END FUNCTION SUB SendKey (Caracter$) PRINT #1, Caracter$; END SUB SUB SendKeyAuto Tecla$ = INKEY$ PRINT #1, Tecla$; END SUB