QLirc: un cliente simple de IRC para emuladores de QL

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.

1 comentario
  1. afx dijo:

    ¡Estupendo aporte Badaman! Buen punto de partida para introducirnos en las comunicaciones tcp-ip con el QL.

Deja un comentario