Legacy nätverk med linux. (9 / 10 steg)
Steg 9: Bulletin board system.
[code]
COMMON delad Car.ret, Car.ret$, Lfeed, Lfeed$, Mod.dem, konsol
DEKLARERA SUB fördröjning (SEK!)
DEKLARERA SUB Lout (l$, sp!)
CONST False = 0
CONST sant = -1
' ****************************************************************************
"Lizzybbs version 0.00001
"main.loop skriven av computothought
"några data ingång rutiner lånat från dumbbs programmet
"Senast uppdaterad 02/06/95
Start.program:
GOSUB hushållning
SAMTIDIGT inte gjort
GOSUB The.main.loop
WEND
GOSUB end.of.job
SLUTET
' *****************************************************************************
"Subrutiner
' -----------------------------------------------------------------------------
städning:
CLS
STÄNG
= 0
Cdmask = & H80
Carrier = 0
"Status hamnar bör vara Com1 = 3fe och Com2 = 2fe (? f8 + 6)
Rs232.Port = & H3FE: "& H3F8 + 6
Mod.dem = 1
Console = 2
Port$ = "COM1:"
Baud$ = "300",
Flow$ = "N, 8, 1": ", DS0"
Minuter = 60
Char.wait.Time = 4 * minuter
Char.Grace.Time = 1 * minut
Lin.length = 40
Q$ = CHR$(34)
Sätta en klocka på $ = CHR$(7)
Car.ret = 13
Car.ret$ = CHR$(Car.ret)
Lfeed = 10
Lfeed$ = CHR$(Lfeed)
' ------------------------------------------------
"select.baud - Välj baudhastighet
Com.spec$ = Port$ + Baud$ + flöde$
' ----------------------------------------------
"öppna kommunikationslinjer
Öppna Com.spec$ för RANDOM som #Mod.dem
GOSUB paus
Öppna "scrn:" för produktionen som #Console
SKRIV UT
' ---------------------------------------------
"Starta om loggfilen arbete
Öppna "append", #5, "worklog"
Skriv ut #5, "Början av jobb", tiden$, DATE$
NÄRA #5
RETURNERA
' ------------------------------------------------
"gchar - få ett tecken
Gchar:
Char.timeout = False
Charet = 0
T = TIMER
GÖRA
OM inte EOF(Mod.dem) sedan
Clizzyied$ = ingång$ (1, #Mod.dem)
C = ASC(Clizzyied$)
Skriv ut #Mod.dem, CHR$(C);
OM C <> 8 sedan
Skriv ut #Console, CHR$(C);
ANNAT
Skriv ut #Console, CHR$(29);
SLUT OM
Charet = 1
SLUT OM
GOSUB Carchek
LOOP tills TIMER > T + Char.wait.time eller Charet = 1 eller bärare = False
OM TIMER > T + Char.wait.time sedan
en$ = Car.ret$ + Lfeed$ + Bell$ + Bell$
en$ = en$ + "Denna BBS kommer att hänga om du inte trycker på en tangent."
Ring Lout (en$, True)
Brott = 2
Char.timeout = sant
C = 256
SLUT OM
RETURNERA
' ----------------------------------------------------
"gline - få en linje
Gline:
In.line$ = ""
GOSUB Clear.garbage
GÖRA
GOSUB Gchar
VÄLJ ÄRENDE C
FALLET är > 255, Car.ret
REM
FALLET 29, 8
In.line$ = vänster$ (In.line$, LEN(In.line$) - 1)
FALLET ANNAT
In.Line$ = In.line$ + CHR$(C)
END SELECT
LOOP tills LEN(In.line$) > Lin.length eller (C = Car.ret och LEN(In.line$) > 0) eller C > 255 eller bärare = False
RETURNERA
' -------------------------------------------------------------------------
"Dtrlow
Dtrlow:
Skriv ut #Mod.dem, "ATH0"
GOSUB paus
Skriv ut #Mod.dem, "ATZ"
GOSUB paus
RETURNERA
' --------------------------------------------------------------------------
"Dtrhi
Dtrhi:
Skriv ut #Mod.dem, "ATE0M0S0 = 1 & C1"
GOSUB paus
RETURNERA
' ----------------------------------------------------------
' arkivera data överför
File.Download:
Dload.item$ = ""
GÖRA medan UCASE$(Dload.item$) <> "0"
Usefile$ = "dir.fil"
GOSUB File.display
GOSUB Clear.garbage
GOSUB Gchar
Dload.item$ = UCASE$(CHR$(C))
GÖRA medan Dload.item$ < = "Z" och Dload.item$ > = "A"
SAMTAL Lout ("Vänligen öppna din buffert nu, då pressa någon nyckel!", sant)
GOSUB File.display
GOSUB Clear.garbage
GOSUB Gchar
Usefile$ = "\ul\dload" + CHR$(C)
GOSUB File.display
SAMTAL Lout ("Vänligen stäng din buffert nu, då pressa någon nyckel!", sant)
GOSUB Clear.garbage
GOSUB Gchar
LOOP
OM transportören = falskt eller Char.timeout sedan EXIT gör
LOOP
RETURNERA
' ----------------------------------------------------------
' bulletin display
bulletiner:
Bullet.item$ = ""
GÖRA medan UCASE$(Bullet.item$) <> "Q"
Usefile$ = "affisch"
GOSUB File.display
SAMTAL Lout ("mata in Val:", falskt)
GOSUB Clear.garbage
GOSUB Gchar
Bullet.item$ = UCASE$(CHR$(C))
SAMTAL Lout ("", sant)
GÖRA medan C > 48 och C < 57
Usefile$ = Usefile$ + Bullet.item$
GOSUB File.display
C = 256
LOOP
OM transportören = falskt eller Char.timeout sedan EXIT gör
LOOP
RETURNERA
' ----------------------------------------------------------
"ny användare rutin
New.User:
Usefile$ = "ny användare"
GOSUB File.display
SAMTAL Lout ("Skriv in ett unikt lösenord:", falskt)
GOSUB Gline
SAMTAL Lout ("", sant)
Pass.in$ = In.line$
NÄRA #4
DÖDA "userfile.old"
NAMNET "userfile" som "userfile.old"
Öppna "O", #6, "userfile"
Status = 4
SKRIV UT #6, Q$; Log.Name$; Q$; ","; Q$; Pass.in$; Q$; ","; Status; ","; Q$; Time.in$; Q$
NÄRA #6
Öppna "I", #7, "userfile.old"
Öppna "A", #8, "userfile"
GÖRA MEDAN INTE EOF(7)
INPUT #7, a$, B$, C, D$
SKRIV UT #8, $ Q; en$; Q$; ","; Q$; B$; Q$; ","; C; ","; Q$; D$; Q$
OM en$ = EXIT gör sedan "Slutet"
LOOP
NÄRA #7
NÄRA #8
RETURNERA
' ---------------------------------------------------------
"file.display
File.display:
Öppna "I", #3, Usefile$
SAMTIDIGT INTE EOF(3)
LINE INPUT #3, data.in$
Ring Lout (data.in$, True)
WEND
NÄRA #3
RETURNERA
' =========================================================
"Den viktigaste loopen
'
"Det är här"BBS"faktiskt börjar.
'
The.main.loop:
Starta om:
VISA SKRIV UT
GOSUB Dtrlow
GOSUB Dtrhi
CLS
SKRIV UT
Leta upp 2, 30: PRINT "lizzyied BBS version 0,001"
SKRIV UT
Wait.for.ring:
GÖRA
C = 256
LETA UPP 3, 30
UTSKRIFTSDATUMET$; " "; TID$
LETA UPP 4, 30
PRINT "Rs232:"; INP(Rs232.Port)
GOSUB Carchek
LOOP tills transportören
' -----------------------------------------------------
"starta
Mainloop:
VISA SKRIV UT 6 TILL 25
GOSUB Clear.garbage
SKRIV UT
' -----------------------------------------------------
"huvudet
Usefile$ = "prelog"
GOSUB File.display
' -----------------------------------------------------
"inloggning
inloggning:
Time.in$ = tid$
Juridiska = False
SAMTAL Lout ("Skriv in ditt namn:", falskt)
GOSUB Gline
Log.Name$ = In.line$
SAMTAL Lout ("", sant)
NÄRA #4
Öppna "I", #4, "userfile"
GÖRA MEDAN INTE EOF(4)
INPUT #4, Name.in$, Pass.in$, Status, starta$
OM UCASE$(Name.in$) = UCASE$(Log.name$) eller Name.in$ = "Slutet" sedan EXIT gör
LOOP
OM Name.in$ = "Slutet" då
GOSUB New.user
ANNAT
FÖR xdummy = 1 till 3
SAMTAL Lout ("lösenord:", falskt)
GOSUB Gline
Pass.Word$ = ""
Pass.Word$ = In.line$
SAMTAL Lout ("", sant)
OM Pass.word$ = Pass.in$ sedan
UTGÅNG FÖR
ELSEIF ((Pass.word$ <> Pass.in$) och (xdummy > 3)) sedan
bryter mot = 1
Gå till utloggning
SLUT OM
Nästa xdummy
SLUT OM
NÄRA #4
' -----------------------------------------------------
"främsta
MENU.item$ = ""
GÖRA medan UCASE$(menu.item$) <> "G"
Usefile$ = "post2"
GOSUB File.display
SAMTAL Lout ("", sant)
SAMTAL Lout ("ditt val:", falskt)
GOSUB Clear.garbage
GOSUB Gchar
MENU.item$ = UCASE$(CHR$(C))
SAMTAL Lout ("", sant)
SELECT CASE menu.item$
FALLET "D"
GOSUB file.download
FALLET "B"
GOSUB bulletiner
FALLET "G"
bryter mot = 0
END SELECT
OM transportören = falskt eller Char.timeout sedan EXIT gör
LOOP
' -----------------------------------------------------
"sidfot
Usefile$ = "epilog"
GOSUB File.display
' -----------------------------------------------------
"pausa
paus:
FÖR x = 1-4000
Nästa x
RETURNERA
' -----------------------------------------------------
"logga ut
Utloggning:
Öppna "append", #5, "worklog"
Tryck #5, Name.in$, Pass.word$, Time.in$, tid$, bryter mot
NÄRA #5
a$ = "Logga ut"
Ring Lout (en$, True)
a$ = "+++"
Ring Lout (en$, True)
T = TIMER
GÖRA
LOOP tills TIMER > 4 + T
PRINT "roterande DTR låg"
GOSUB Dtrlow
KALLA delay(2)
Skriva ut "Bringing DTR hög"
GOSUB Dtrhi
KALLA delay(2)
RETURNERA
' ------------------------------------------------------
Carchek:
CC = (INP(Rs232.port) och Cdmask)
OM CC = 128 DÅ
Carrier = sant
ANNAT
Carrier = False
SLUT OM
RETURNERA
' ------------------------------------------------------
Clear.Garbage:
OM INTE EOF(1) SEDAN
GÖRA
Clizzyied$ = ingång$ (1, #Mod.dem)
LOOP tills EOF(Mod.dem)
SLUT OM
RETURNERA
' ------------------------------------------------------
End.of.job:
Öppna "append", #5, "worklog"
Skriv ut #5, "Slutet av användning", tiden$, DATE$
NÄRA #5
STÄNG
RETURNERA
' ===========================================================================
SUB fördröjning (SEK)
' ------------------------------------------------
"dröjsmål - vänta så många sekunder
Delay (SEK):
T1 = TIMER
GÖRA
LOOP tills TIMER > 40 + T1
END SUB
SUB spola (tid)
' ----------------------------------------------------
"spola - spola buffert
T = TIMER
GÖRA
OM inte EOF(Mod.dem) sedan
Dummy$ = INPUT$(LOF(Mod.dem), #Mod.dem)
SLUT OM
LOOP tills TIMER > T + tid
END SUB
SUB Lout (l$, sp)
' ---------------------------------------------------
"lout - linjeutgång
FÖR j = 1 till LEN(l$)
G = ASC (mitten av$ (l$, j, 1))
Skriv ut #Mod.dem, CHR$(G);
Skriv ut #Console, CHR$(G);
Nästa j
OM HP sedan
Skriv ut #Mod.dem, Car.ret$; Lfeed$
Skriv ut #Console, Car.ret$;
SLUT OM
END SUB
[/code]