Étape 9: tableau d’affichage du système.
[code]
COMMUN partagé Car.ret, Car.ret$, Lfeed, Lfeed$, Mod.dem, Console
Delay DECLARE SUB (Secs!)
DECLARE SUB Lout (l$, Cr!)
CONST False = 0
CONST True = -1
' ****************************************************************************
' Lizzybbs version 0,00001
' main.loop écrit par computothought
« certaines routines d’entrée de données emprunté le programme dumbbs
« dernière mise à jour 06/02/95
Start.Program :
Entretien ménager GOSUB
Bien que ne pas fait
GOSUB The.main.loop
WEND
GOSUB end.of.job
FIN
' *****************************************************************************
« Sous-routines
' -----------------------------------------------------------------------------
entretien ménager :
CLS
FERMER
Done = 0
Cdmask = & H80
Transporteur = 0
"Ports de statut devraient être Com1 = 3fe et Com2 = 2fe (? f8 + 6)
RS232.port = & H3FE: "& H3F8 + 6
Mod.DEM = 1
Console = 2
Port$ = "COM1:"
Baud$ = « 300 »,
Flow$ = « N, 8, 1 »: ', DS0 "
Minutes = 60
Char.Wait.Time = 4 * minutes
Char.Grace.Time = 1 * minutes
Lin.Length = 40
Q$ = CHR$(34)
Bell$ = CHR$(7)
Car.RET = 13
Car.RET$ = CHR$(Car.ret)
Lfeed = 10
Lfeed$ = CHR$(Lfeed)
' ------------------------------------------------
' select.baud - sélectionnez la vitesse de transmission
Com.spec$ = Port$ + Baud$ + $ de flux
' ----------------------------------------------
« ouvrir des lignes de communication
Com.spec$ ouverte pour aléatoire AS #Mod.dem
Pause GOSUB
OPEN "scrn:" pour la sortie AS #Console
IMPRIMER
' ---------------------------------------------
"Redémarrer le fichier journal de travail
OPEN « append », #5, « worklog »
PRINT #5, « Début d’emploi », $ de l’heure, DATE$
PROCHE #5
RETOUR
' ------------------------------------------------
"gchar - obtenez un caractère
Gchar :
Char.Timeout = False
Charest = 0
T = TIMER
FAIRE
Si ce n’est EOF(Mod.dem) puis
Clizzyied$ = $ d’entrée (1, #Mod.dem)
C = ASC(Clizzyied$)
IMPRESSION #Mod.dem, CHR$(C) ;
IF <> C 8 puis
IMPRESSION #Console, CHR$(C) ;
D’AUTRE
IMPRESSION #Console, CHR$(29) ;
END IF
Charest = 1
END IF
GOSUB Carchek
BOUCLE jusqu'à minuterie > T + Char.wait.time OR Charest = 1 ou transporteur = False
IF TIMER > T + Char.wait.time puis
a$ = Car.ret$ + Lfeed$ + $ de Bell, Bell$
a$ = a$ + « Ce BBS raccroche si vous n’appuyez pas sur une touche. »
APPEL de Lout (a$, True)
Violation = 2
Char.Timeout = True
C = 256
END IF
RETOUR
' ----------------------------------------------------
' gline - chercher une ligne
Gline :
In.Line$ = ""
GOSUB Clear.garbage
FAIRE
GOSUB Gchar
SÉLECTIONNEZ LE CAS C
AFFAIRE est > 255, Car.ret
REM
CAS 29, 8
In.Line$ = LEFT$ (In.line$, LEN(In.line$) - 1)
CASE ELSE
In.Line$ = In.line$ + CHR$(C)
END SELECT
BOUCLE jusqu'à LEN(In.line$) > ou Lin.length (C = Car.ret et LEN(In.line$) > 0) ou C > 255 ou transporteur = False
RETOUR
' -------------------------------------------------------------------------
' Dtrlow
Dtrlow :
IMPRESSION #Mod.dem, « ATH0 »
Pause GOSUB
IMPRESSION #Mod.dem, « ATZ »
Pause GOSUB
RETOUR
' --------------------------------------------------------------------------
' Dtrhi
Dtrhi :
IMPRESSION #Mod.dem, « ATE0M0S0 = 1 & C1 "
Pause GOSUB
RETOUR
' ----------------------------------------------------------
« Téléchargez le fichier
file.Download :
Dload.Item$ = ""
FAIRE en UCASE$(Dload.item$) <> "0"
Idtsconnectionmanagercache100.UseFile$ = « dir.fil »
GOSUB File.display
GOSUB Clear.garbage
GOSUB Gchar
Dload.Item$ = UCASE$(CHR$(C))
Tout en Dload.item$ < = Dload.item$ "Z" > = « A »
APPEL Lout (« S’il vous plaît ouvrez votre tampon maintenant, puis appuyez sur n’importe quelle touche! », True)
GOSUB File.display
GOSUB Clear.garbage
GOSUB Gchar
Idtsconnectionmanagercache100.UseFile$ = « \ul\dload » + CHR$(C)
GOSUB File.display
APPEL Lout (« S’il vous plaît fermer votre tampon maintenant, puis appuyez sur n’importe quelle touche! », True)
GOSUB Clear.garbage
GOSUB Gchar
BOUCLE
IF transporteur = False ou Char.timeout THEN EXIT DO
BOUCLE
RETOUR
' ----------------------------------------------------------
« bulletin d’affichage
Bulletins :
Bullet.Item$ = ""
FAIRE en UCASE$(Bullet.item$) <> "Q"
Idtsconnectionmanagercache100.UseFile$ = « poster »
GOSUB File.display
APPEL Lout ("entrez le choix:", False)
GOSUB Clear.garbage
GOSUB Gchar
Bullet.Item$ = UCASE$(CHR$(C))
APPEL Lout ("", True)
FAIRE en C > 48 et C < 57
Idtsconnectionmanagercache100.UseFile$ = Idtsconnectionmanagercache100.UseFile$ + Bullet.item$
GOSUB File.display
C = 256
BOUCLE
IF transporteur = False ou Char.timeout THEN EXIT DO
BOUCLE
RETOUR
' ----------------------------------------------------------
« nouvelle routine de l’utilisateur
New.User :
Idtsconnectionmanagercache100.UseFile$ = « newuser »
GOSUB File.display
APPEL Lout ("Veuillez entrer un mot de passe unique:", False)
GOSUB Gline
APPEL Lout ("", True)
Pass.in$ = In.line$
PROCHE #4
TUER « userfile.old »
Le nom « userfile » comme « userfile.old »
OPEN "O", #6, "userfile"
Statut = 4
PRINT #6, Q$ ; Log.Name$ ; Q$ ; ","; Q$ ; Pass.in$ ; Q$ ; ","; Statut ; ","; Q$ ; Time.in$ ; Q$
PROCHE #6
OPEN « I », #7, « userfile.old »
OPEN "A", #8, "userfile"
FAITES TOUT EN EOF(7) PAS
ENTRÉE #7$, $ B, C, D$
PRINT #8, Q$ ; a$ ; Q$ ; ","; Q$ ; B$ ; Q$ ; ","; C ; ","; Q$ ; D$ ; Q$
Si un$ = « END » THEN EXIT DO
BOUCLE
PROCHE #7
FERMER #8
RETOUR
' ---------------------------------------------------------
' file.display
File.Display :
OUVRIR « I », #3, Idtsconnectionmanagercache100.UseFile$
TOUT EN EOF(3) PAS
LINE INPUT #3, data.in$
APPEL de Lout ($data.in, True)
WEND
PROCHE #3
RETOUR
' =========================================================
' La boucle principale
'
« C’est là le « BBS » commence en fait.
'
The.main.Loop :
Redémarrer :
VOIR IMPRIMER
GOSUB Dtrlow
GOSUB Dtrhi
CLS
IMPRIMER
LOCALISER 2, 30 : Imprimer "version BBS lizzyied 0,001"
IMPRIMER
Wait.for.Ring :
FAIRE
C = 256
TROUVER 3, 30
DATE D’IMPRESSION $; " "; $ DE L’HEURE
LOCALISER 4, 30
PRINT "Rs232:" ; INP(RS232.port)
GOSUB Carchek
BOUCLE jusqu'à Carrier
' -----------------------------------------------------
« commencer
Mainloop :
VOIR IMPRIMER 6 À 25
GOSUB Clear.garbage
IMPRIMER
' -----------------------------------------------------
' en-tête
Idtsconnectionmanagercache100.UseFile$ = « prelog »
GOSUB File.display
' -----------------------------------------------------
« ouverture de session
ouverture de session :
Time.in$ = temps$
Juridique = False
APPEL Lout ("Veuillez entrer votre nom:", False)
GOSUB Gline
Log.Name$ = In.line$
APPEL Lout ("", True)
PROCHE #4
OUVRIR le « I », #4, « userfile »
FAITES TOUT EN EOF(4) PAS
ENTRÉE #4, Name.in$, Pass.in$, statut, commencer$
IF UCASE$(Name.in$) = UCASE$(Log.name$) ou Name.in$ = « END » THEN EXIT DO
BOUCLE
IF Name.in$ = « END » THEN
GOSUB New.user
D’AUTRE
POUR xdummy = 1 à 3
APPEL Lout ("mot de passe:", False)
GOSUB Gline
Pass.Word$ = ""
Pass.Word$ = In.line$
APPEL Lout ("", True)
IF Pass.word$ = Pass.in$ THEN
SORTIE POUR
Else if ((Pass.word$ <> Pass.in$) et (xdummy > 3)) puis
violent = 1
Fermeture de session GOTO
END IF
Xdummy suivante
END IF
PROCHE #4
' -----------------------------------------------------
« principal
menu.Item$ = ""
FAIRE en UCASE$(menu.item$) <> "G"
Idtsconnectionmanagercache100.UseFile$ = « post2 »
GOSUB File.display
APPEL Lout ("", True)
APPEL Lout ("votre choix:", False)
GOSUB Clear.garbage
GOSUB Gchar
menu.Item$ = UCASE$(CHR$(C))
APPEL Lout ("", True)
SELECT CASE menu.item$
CASE « D »
GOSUB file.download
AFFAIRE « B »
Bulletins de GOSUB
CASE « G »
violent = 0
END SELECT
IF transporteur = False ou Char.timeout THEN EXIT DO
BOUCLE
' -----------------------------------------------------
"pied de page
Idtsconnectionmanagercache100.UseFile$ = « épilogue »
GOSUB File.display
' -----------------------------------------------------
« mettre en pause
Pause :
POUR x = 1 à 4000
NEXT x
RETOUR
' -----------------------------------------------------
« fermeture de session
Fermeture de session :
OPEN « append », #5, « worklog »
PRINT #5, Name.in$, Pass.word$, Time.in$, TIME$, violent
PROCHE #5
a$ = « Déconnexion »
APPEL de Lout (a$, True)
a$ = "+++"
APPEL de Lout (a$, True)
T = TIMER
FAIRE
BOUCLE jusqu'à TIMER > 4 + T
IMPRESSION « rotation de DTR faible »
GOSUB Dtrlow
APPEL delay(2)
IMPRIMER « Bringing DTR haute »
GOSUB Dtrhi
APPEL delay(2)
RETOUR
' ------------------------------------------------------
Carchek :
CC = (INP(Rs232.port) et Cdmask)
IF CC = 128 PUIS
Transporteur = True
D’AUTRE
Transporteur = False
END IF
RETOUR
' ------------------------------------------------------
Clear.garbage :
SI CE N’EST EOF(1) PUIS
FAIRE
Clizzyied$ = $ d’entrée (1, #Mod.dem)
BOUCLE jusqu'à EOF(Mod.dem)
END IF
RETOUR
' ------------------------------------------------------
end.of.job :
OPEN « append », #5, « worklog »
PRINT #5, « Fin de l’utilisation », $ de l’heure, DATE$
PROCHE #5
FERMER
RETOUR
' ===========================================================================
VOID delay (Secs)
' ------------------------------------------------
« délai - attendre tant de secondes
délai (en secondes) :
T1 = TIMER
FAIRE
BOUCLE jusqu'à minuterie > 40 + T1
END SUB
VOID flush (temps)
' ----------------------------------------------------
« Rincer - tampon
T = TIMER
FAIRE
Si ce n’est EOF(Mod.dem) puis
Dummy$ = INPUT$(LOF(Mod.dem), #Mod.dem)
END IF
BOUCLE jusqu'à minuterie > T + temps
END SUB
VOID Lout (l$, Cr)
' ---------------------------------------------------
« lout - sortie ligne
POUR j = 1 TO LEN(l$)
G = ASC (MID$ ($l, j, 1))
IMPRESSION #Mod.dem, CHR$(G) ;
IMPRESSION #Console, CHR$(G) ;
J NEXT
IF Cr puis
IMPRESSION #Mod.dem, Car.ret$ ; Lfeed$
IMPRESSION #Console, Car.ret$ ;
END IF
END SUB
[/ code]