• Software 24.02.2020

    Tim Swenson ha creado un programa muy básico en SuperBASIC que muestra la potencia de la pila TCP de emuladores como QPC2, uQLx o SMSQmulator corriendo el sistema operativo SMSQ/E.

    El programa es básicamente una forma sencilla de entrar al canal #QLForum en el IRC y enviar y recibir mensajes, mostrando los usuarios conectados, aunque esto se puede cambiar modificando los datos de conexión en el código del programa.

    Ejecutando el programa

    Para usarlo, sólo es necesario descargar el archivo, y ejecutarlo con lrun.

    lrun win1_QLbas_bas

    Cambiad win1_ por el dispositivo en el que se encuentre el fichero: mdv1_, win1_, dos1_, flp1_, ram1_ …

    Aqui tenéis el código que podéis copiar y pegar en un fichero al que podéis llamar “QLirc_bas”

    100 DIM user$(30,10)
    110 OPEN #4,scr_432x230a0x0
    120 BORDER #4,2,4
    130 OPEN #5,con_512x20a0x231_32
    140 BORDER #5,2,2
    150 OPEN #6,scr_79x230a433x0
    160 BORDER #6,2,4
    170 CLS #4
    180 CLS #5
    190 CURSOR #5,0,0
    200 CLS #6
    210 OVER #4,1
    220 CSIZE #4,3,1
    230 FOR x = 1 TO 5
    240     CURSOR #4,40+(2*x),40+(2*x)
    250     PRINT #4,"QLirc"
    260 NEXT x
    270 INK #4,2
    280 CURSOR #4,50,50
    290 PRINT #4,"QLirc"
    300 INK #4,4
    310 CSIZE #4,0,0
    320 OVER #4,0
    330 PRINT #4," Simple Internet Relay Chat Client"
    340 PRINT #4,"  For Sinclair QL Emulators"
    350 PRINT #4," "
    360 PRINT #5,"Enter IRC Name/Handle: ";
    370 INPUT #5,name$
    380 CLS #5
    390 OPEN_IN #3,"tcp_chat.qlforum.co.uk:6667"
    400 FOR x = 1 TO 2
    410    INPUT #3,in$
    420 NEXT x
    430 PRINT #4,"..... Connecting ...."
    440 PRINT #3,"USER "&name$&" * irc.mibbit.net :purple"&CHR$(13)&CHR$(10)&CHR$(13)
    450 PRINT #3,"NICK "&name$&CHR$(13)&CHR$(10)&CHR$(13)
    460 INPUT #3,in$
    470 a = ":" INSTR in$
    480 a$ = in$(a TO )
    490 PRINT #3,"PONG "&a$&CHR$(13)&CHR$(10)&CHR$(13)
    500 REPeat loop
    510    INPUT #3,in$
    520    x$ = name$&" MODE"
    530    IF ( x$ INSTR in$) THEN EXIT loop
    540 END REPeat loop
    550 PRINT #3,"JOIN #QLFORUM"&CHR$(13)&CHR$(10)&CHR$(13)
    560 FOR x = 1 TO 3
    570    INPUT #3,in$
    580 NEXT x
    590 INPUT #3,who$
    600 INPUT #3,in$
    610 users = 1
    620 l = LEN(who$)
    630 who$ = who$( 2 TO l-2)
    640 w = ":" INSTR who$
    650 who$ = who$( w+1 TO)
    660 REPeat loop
    670    w = " " INSTR who$
    680    IF w = 0 THEN
    690       user$(users)=who$
    700       EXIT loop
    710    END IF
    720    user$(users)=who$( TO w-1)
    730    users = users + 1
    740    who$=who$(w+1 TO )
    750 END REPeat loop
    760 FOR x = 1 TO users
    770    PRINT #6,user$(x)
    780 NEXT x
    790 PRINT #4,"Now Joined to #QLForum."
    800 a$ = ""
    810 aa$ = ""
    820 b$ = ""
    830 bb$ = ""
    840 REMark count = 0
    850 curpos = 0
    860 CURSEN #5
    870 REPeat mainloop
    880    a$ = INKEY$(#5,0)
    890    IF a$ <> "" THEN
    900       IF a$ = CHR$(10) THEN
    910          IF aa$ = "/exit" THEN
    920             EXIT mainloop
    930          END IF
    940          PRINT #3,"PRIVMSG #QLForum :"&aa$&CHR$(13)&CHR$(10)&CHR$(13)
    950          PRINT #4,name$&" : "&aa$
    960          aa$ = ""
    970          a$ = ""
    980          CLS #5
    990          curpos = 0
    1000          NEXT mainloop
    1010       END IF
    1020       IF a$ = CHR$(194) THEN
    1030          IF curpos > 0 THEN LET curpos = curpos - 1
    1040          AT #5,0,curpos
    1050          PRINT #5," ";
    1060          aa$ = aa$( 1 TO LEN(aa$)-1)
    1070          AT #5,0,curpos
    1080       ELSE
    1090          aa$ = aa$ & a$
    1100          AT #5,0,curpos
    1110          PRINT #5,a$;
    1120          curpos = curpos + 1
    1130       END IF
    1140    END IF
    1150    b$ = INKEY$(#3,0)
    1160    IF b$ = CHR$(10) THEN
    1170          IF ("PRIVMSG" INSTR bb$) THEN
    1180               y = "!" INSTR bb$
    1190               userchat$=bb$( 3 TO y-1)
    1200               PRINT #4,userchat$;": ";
    1210               bb$=bb$(y TO )
    1220               y = "#QLForum" INSTR bb$
    1230               PRINT #4,bb$(y+10 TO LEN(bb$)-1)
    1240          END IF
    1250          IF ("PING" INSTR bb$) THEN
    1260              PRINT #3,"PONG irc.us.mibbit.net"&CHR$(13)&CHR$(10)&CHR$(13)
    1270          END IF
    1280          IF ("JOIN" INSTR bb$) THEN
    1290              a = "!" INSTR bb$
    1300              users = users+1
    1310              user$(users) = bb$(3 TO a-1)
    1320              PRINT #6,user$(users)
    1330          END IF
    1340          IF ("PART" INSTR bb$) THEN
    1350              a = "!" INSTR bb$
    1360              user1$=bb$(3 TO a-1)
    1370              FOR x = 1 TO users
    1380                 IF user$(x) = user1$ THEN user$(x)=""
    1390              NEXT x
    1400              CLS #6
    1410              FOR x = 1 TO users
    1420                 IF LEN(user$(x)) <> 0 THEN PRINT #6,user$(x)
    1430              NEXT x
    1440           END IF
    1450 REMark count = 0
    1460          bb$ = ""
    1470    END IF
    1480    bb$ = bb$ & b$
    1490 END REPeat mainloop
    1500 CLOSE #3
    1510 CLOSE #4
    1520 CLOSE #5

    Nota: Al descargar el programa, asegurate de que las lineas 840 y 1450 están comentadas antes de ejecutar el programa, ya que COUNT es una palabra reservada de una extensión de SuperBASIC, y puede dar error.

    El programa se puede descargar de aquí: http://swensont.epizy.com/QLirc.zip

    Qué hace el programa

    El programa, hasta la línea 380 abre los canales y prepara la pantalla para las ventanas de la aplicación, y nos pide el nickname.

    Seguidamente abre la conexión TPC en la línea 390, realiza la conexion, entra en el chat y lista los usuarios conectados.

    A partir de la línea 870 entra en el bucle de programa que lee el mensaje que introduzcamos, revisa si hemos escrito “/exit” para salir, responde a los PING del servidor IRC (mediante PONG) para indicar que la conexión sigue activa y actualiza la lista de usuarios.

    Al salir, cierra los canales y termina la conexión.

    Usando el programa

    Al iniciarse, el programa te pide el nombre de usuario o nick con el que te presentarás en el chat.

    Luego podemos escribir y Enter para enviar mensajes, como cualquier chat.

    Conviene recordar que se trata de una versión muy limitada de la implementación del protocolo IRC, por lo que no podemos esperar nada más de él.

    Como comentamos, se sale del programa escribiendo /exit

    Qué aporta

    Sea como fuere, el programa es un ejemplo de la potencia del SuperBASIC y el sistema operativo SMSQ/E, y puede servir de incentivo para que otros programadores se animen a usar la pila TCP/IP en el QL para, por ejemplo, conectar con servicios web via SOAP o REST…

    La pila TCP/IP del QL ya se usa en otros programas de QL como el navegador web en modo texto Lynx, el cliente de correo electrónico Qpop3, el cliente FTP QFTP, o el programa Telnet para QL.

    admin @ Lunes, 24 de febrero de 2020

  • Comentarios cerrados