Paso 9: Boletín sistema.
[código]
COMUNES compartidos Lfeed$, Mod.dem, consola, Lfeed, Car.ret, Car.ret$
Retraso de DECLARE SUB (seg.)
DECLARE SUB Lout (l$, Cr!)
CONST False = 0
CONST True = -1
' ****************************************************************************
' Lizzybbs versión 0.00001
«escrito por computothought main.loop
' prestado algunas rutinas de entrada de datos del programa dumbbs
«última actualización: 06/02/95
Start.Program:
Limpieza de GOSUB
Mientras que no
GOSUB The.main.loop
VENDO
GOSUB end.of.job
FINAL
' *****************************************************************************
' Subrutinas
' -----------------------------------------------------------------------------
servicio de limpieza:
CLS
CERRAR
= 0
Cdmask = & H80
Portador = 0
«Puertos del estado deben ser Com1 = 3fe y Com2 = 2fe (? f8 + 6)
RS232.Port = & H3FE: ' & H3F8 + 6
Mod.dem = 1
Consola = 2
Puerto$ = "COM1:"
$ Baud = "300",
Flujo de $ = "N, 8, 1": ', DS0 "
Minutos = 60
Char.Wait.Time = 4 * minutos
Char.Grace.Time = 1 * minutos
Lin.length = 40
Q$ = CHR$(34)
Campana$ = CHR$(7)
Car.RET = 13
Car.RET$ = CHR$(Car.ret)
Lfeed = 10
Lfeed$ = CHR$(Lfeed)
' ------------------------------------------------
' select.baud - seleccione la velocidad en baudios
Com.spec$ = puerto$ + $ velocidad flujo$
' ----------------------------------------------
' Abrir líneas de comunicación
Com.spec$ abierta para al azar como #Mod.dem
Pause GOSUB
ABIERTO "scrn:" para la salida como #Console
IMPRIMIR
' ---------------------------------------------
' Reiniciar el archivo de registro de obra
ABIERTO "append", #5, "worklog"
PRINT #5, "Inicio del trabajo", tiempo$, $ fecha
CIERRE #5
VOLVER
' ------------------------------------------------
' gchar - consigue un personaje
Gchar:
Char.Timeout = False
Charet = 0
T = TIEMPO
HACER
Si no EOF(Mod.dem) entonces
$ Clizzyied = $ de entrada (1, #Mod.dem)
C = ASC(Clizzyied$)
IMPRESIÓN #Mod.dem, CHR$(C);
IF C <> 8 entonces
IMPRESIÓN #Console, CHR$(C);
OTRA COSA
IMPRESIÓN #Console, CHR$(29);
END IF
Charet = 1
END IF
GOSUB Carchek
BUCLE hasta temporizador > T + Haret Char.wait.time o = 1 o portador = False
IF contador > T + Char.wait.time entonces
a$ = Car.ret$ + Lfeed$ + $ campana Campana$
a$ = a$ + "Este BBS colgará si no oprime una tecla."
Llame al patán (a$, True)
Violación = 2
Char.Timeout = True
C = 256
END IF
VOLVER
' ----------------------------------------------------
' gline - obtenga una línea
Gline:
In.line$ = ""
GOSUB Clear.garbage
HACER
GOSUB Gchar
SELECCIONE CASO C
Se trata de > 255, Car.ret
REM
CASO 29, 8
In.line$ = LEFT$ ($In.line, LEN(In.line$) - 1)
CASO MÁS
In.Line$ = In.line$ + CHR$(C)
FINAL SELECCIONE
BUCLE hasta LEN(In.line$) > o Lin.length (C = Car.ret y LEN(In.line$) > 0) o C > 255 o portador = False
VOLVER
' -------------------------------------------------------------------------
' Dtrlow
Dtrlow:
#Mod.dem impresión, "ATH0"
Pause GOSUB
#Mod.dem impresión, "ATZ"
Pause GOSUB
VOLVER
' --------------------------------------------------------------------------
' Dtrhi
Dtrhi:
IMPRESIÓN #Mod.dem, "ATE0M0S0 = 1 y C1"
Pause GOSUB
VOLVER
' ----------------------------------------------------------
' archivo
File.download:
Dload.Item$ = ""
Mientras que UCASE$(Dload.item$) <> "0"
$ Usefile = "dir.fil"
GOSUB File.display
GOSUB Clear.garbage
GOSUB Gchar
Dload.Item$ = UCASE$(CHR$(C))
MIENTRAS Dload.item$ < = Dload.item$ y "Z" > = "A"
Patán de llamada ("Por favor abre tu tampón ahora, entonces pulse cualquier tecla!", True)
GOSUB File.display
GOSUB Clear.garbage
GOSUB Gchar
$ Usefile = "\ul\dload" + CHR$(C)
GOSUB File.display
Patán de llamada ("Por favor cerrar el buffer ahora, entonces pulse cualquier tecla!", True)
GOSUB Clear.garbage
GOSUB Gchar
LAZO
IF operador = False o Char.timeout salida no
LAZO
VOLVER
' ----------------------------------------------------------
' Boletín de pantalla
boletines:
Bullet.Item$ = ""
Mientras que UCASE$(Bullet.item$) <> "Q"
$ Usefile = "cartel"
GOSUB File.display
LLAMADA patán ("ingrese opción:", False)
GOSUB Clear.garbage
GOSUB Gchar
Bullet.Item$ = UCASE$(CHR$(C))
Lout CALL ("", True)
Mientras que C > 48 y C < 57
$ Usefile = $ Usefile + Bullet.item$
GOSUB File.display
C = 256
LAZO
IF operador = False o Char.timeout salida no
LAZO
VOLVER
' ----------------------------------------------------------
' rutina de usuario nuevo
New.User:
$ Usefile = "newuser"
GOSUB File.display
LLAMADA patán ("por favor ingrese una contraseña única:", False)
GOSUB Gline
Lout CALL ("", True)
Pass.in$ = In.line$
CIERRE #4
KILL "userfile.old"
NOMBRE "userfile" como "userfile.old"
ABIERTO "O", #6, "userfile"
Estado = 4
PRINT #6, Q$; Log.Name$; Q$; ","; Q$; Pass.in$; Q$; ","; Estado; ","; Q$; Time.in$; Q$
CIERRE #6
ABIERTO "I", #7, "userfile.old"
OPEN "A", #8, "userfile"
MIENTRAS NO EOF(7)
ENTRADA #7$, $ B, C, D$
PRINT #8, Q$; a$; Q$; ","; Q$; B$; Q$; ","; C; ","; Q$; D$; Q$
Si a$ = "Fin" y luego hacer de salida
LAZO
CIERRE #7
CIERRE #8
VOLVER
' ---------------------------------------------------------
' file.display
File.display:
ABREN "I", #3, Usefile$
MIENTRAS NO EOF(3)
LINE INPUT #3, data.in$
Llame al Lout ($data.in, True)
VENDO
CIERRE #3
VOLVER
' =========================================================
' El bucle principal
'
' Aquí es donde realmente comienza las 'municiones'.
'
The.Main.Loop:
Reiniciar:
VER IMPRIMIR
GOSUB Dtrlow
GOSUB Dtrhi
CLS
IMPRIMIR
Localice 2, 30: Imprimir "versión BBS lizzyied 0,001"
IMPRIMIR
Wait.for.ring:
HACER
C = 256
UBICAR 3, 30
IMPRIMIR FECHA$; " "; TIEMPO$
UBICAR 4, 30
Imprimir "Rs232:"; INP(RS232.Port)
GOSUB Carchek
BUCLE hasta portador
' -----------------------------------------------------
' empezar
Mainloop:
VER IMPRIMIR 6 A 25
GOSUB Clear.garbage
IMPRIMIR
' -----------------------------------------------------
' Rúbrica
$ Usefile = "prelog"
GOSUB File.display
' -----------------------------------------------------
' Inicio de sesión
Inicio de sesión:
Time.in$ = $ tiempo
Legal = False
LLAMADA patán ("por favor introduzca su nombre:", False)
GOSUB Gline
Log.Name$ = In.line$
Lout CALL ("", True)
CIERRE #4
ABREN "I", #4, "userfile"
MIENTRAS NO EOF(4)
ENTRADA #4, Name.in$, Pass.in$, estado, empezar a $
IF UCASE$(Name.in$) = UCASE$(Log.name$) o Name.in$ = "Fin" y luego hacer la salida
LAZO
IF Name.in$ = "Fin" entonces
GOSUB New.user
OTRA COSA
PARA xdummy = 1 a 3
Patán de llamada ("contraseña:", False)
GOSUB Gline
Pass.Word$ = ""
Pass.Word$ = In.line$
Lout CALL ("", True)
IF Pass.word$ = Pass.in$ entonces
SALIDA PARA
ELSEIF ((Pass.word$ <> Pass.in$) y (xdummy > 3)) entonces
violar = 1
Cierre de sesión GOTO
END IF
SIGUIENTE xdummy
END IF
CIERRE #4
' -----------------------------------------------------
' principal
MENU.Item$ = ""
Mientras que UCASE$(menu.item$) <> "G"
$ Usefile = "post2"
GOSUB File.display
Lout CALL ("", True)
Patán de llamada ("su opción:", False)
GOSUB Clear.garbage
GOSUB Gchar
MENU.Item$ = UCASE$(CHR$(C))
Lout CALL ("", True)
SELECT CASE menu.item$
CASO "D"
GOSUB file.download
CASO "B"
Boletines GOSUB
CASO "G"
violar = 0
FINAL SELECCIONE
IF operador = False o Char.timeout salida no
LAZO
' -----------------------------------------------------
' pie de página
$ Usefile = "epilog"
GOSUB File.display
' -----------------------------------------------------
' pausa
pausa:
PARA x = 1 a 4000
SIGUIENTE x
VOLVER
' -----------------------------------------------------
' cerrar la sesión
Cierre de sesión:
ABIERTO "append", #5, "worklog"
IMPRESIÓN #5, Name.in$, Pass.word$, Time.in$, $ tiempo, violar
CIERRE #5
a$ = "Cerrar"
Llame al patán (a$, True)
a$ = "+++"
Llame al patán (a$, True)
T = TIEMPO
HACER
LAZO hasta el tiempo T + > 4
Imprimir "giro DTR bajo"
GOSUB Dtrlow
Llamar al delay(2)
Imprimir "Trayendo DTR alto"
GOSUB Dtrhi
Llamar al delay(2)
VOLVER
' ------------------------------------------------------
Carchek:
CC = (INP(Rs232.port) y Cdmask)
IF CC = 128 ENTONCES
Portador = True
OTRA COSA
Portador = False
END IF
VOLVER
' ------------------------------------------------------
Clear.Garbage:
SI NO EOF(1) ENTONCES
HACER
$ Clizzyied = $ de entrada (1, #Mod.dem)
BUCLE hasta EOF(Mod.dem)
END IF
VOLVER
' ------------------------------------------------------
end.of.Job:
ABIERTO "append", #5, "worklog"
PRINT #5, "Fin de uso", tiempo$, $ fecha
CIERRE #5
CERRAR
VOLVER
' ===========================================================================
SUB delay (Secs)
' ------------------------------------------------
' retrasar - espere tantos segundos
Delay (Secs):
T1 = TIEMPO
HACER
BUCLE hasta temporizador > 40 + T1
END SUB
SUB rasante (tiempo)
' ----------------------------------------------------
' flush - flush buffer
T = TIEMPO
HACER
Si no EOF(Mod.dem) entonces
Dummy$ = INPUT$(LOF(Mod.dem), #Mod.dem)
END IF
BUCLE hasta temporizador > T + tiempo
END SUB
SUB Lout (l$, Cr)
' ---------------------------------------------------
' lout - salida de línea
PARA j = 1 TO LEN(l$)
G = ASC (MID$ ($l, j, 1))
IMPRESIÓN #Mod.dem, CHR$(G);
IMPRESIÓN #Console, CHR$(G);
PRÓXIMO j
IF Cr entonces
IMPRESIÓN #Mod.dem, Car.ret$; Lfeed$
IMPRESIÓN #Console, Car.ret$;
END IF
END SUB
[/ code]