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.
¡Estupendo aporte Badaman! Buen punto de partida para introducirnos en las comunicaciones tcp-ip con el QL.