Initial Commit

This commit is contained in:
Mario Fetka 2024-04-29 20:44:47 +02:00
parent bfa91cbe29
commit 47818eed57
125 changed files with 17197 additions and 0 deletions

594
dbp/menus/account.mnu Normal file
View File

@ -0,0 +1,594 @@
Account change
s10
00010000000000000000
|CL|09|17 ± |15Account Settings for |$R55|UH|16|CR
|CR|09Command (Q/Quit) |08-> |07
0
0
|09(|10A|09) |03Address |08-> |07|UA
A
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
1
0
|09(|10B|09) |03City/State |08-> |07|UC
B
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
2
0
|09(|10C|09) |03Zip Code |08-> |07|UZ
C
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
3
0
|09(|10D|09) |03Home Phone |08-> |07|UP
D
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
4
0
|09(|10E|09) |03Data Phone |08-> |07|UD
E
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
5
0
|09(|10F|09) |03E-mail Address |08-> |07|UK
F
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
22
0
|09(|10G|09) |03Password |08-> |12[not shown]
G
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
11
0
|09(|10H|09) |03Screen Length |08-> |07|US
H
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
10
0
|09(|10I|09) |03Graphics Mode |08-> |07|TE
I
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
9
0
|09(|10J|09) |03Date Format |08-> |07|UF
J
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
8
0
|09(|10K|09) |03Language |08-> |07|UL
K
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
14
0
|09(|10L|09) |03Message Editor Type |08-> |07|UE
L
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
15
0
|09(|10M|09) |03Quote Window In Editor |08-> |07|UQ
M
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
27
0
|09(|10N|09) |03Message Reader Type |08-> |07|UJ
N
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
20
0
|09(|10O|09) |03Start At Message Index |08-> |07|ML
O
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
21
0
|09(|10P|09) |03Start At E-mail Index |08-> |07|UM
P
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
28
0
|09(|10R|09) |03File Listing Type |08-> |07|UB
R
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
17
0
|09(|10S|09) |03Full Screen Node Chat |08-> |07|CM
S
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
29
0
|09(|10T|09) |03Node Msg Availability |08-> |07|AV
T
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
18
0
Q
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GO
main
0

165
dbp/menus/autosig.mnu Normal file
View File

@ -0,0 +1,165 @@
Edit auto signature menu
s10
00031000000000000000
5
|09AutoSig |01[|10|AS|01]|09: |01(|07V|01)|09iew, |01(|07E|01)|09dit, |01(|07T|01)|09oggle, or |01(|07Q|01)|09uit |08-> |07
0
0
EVERY
10100000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
GT
|CL|09Your current signature: |CR|CR|07
0
AV
0
V
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
GO
autosig
0
E
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
AE
0
T
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
AT
0
Q
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
GO
message
0

159
dbp/menus/bbslist.mnu Normal file
View File

@ -0,0 +1,159 @@
BBS list menu
s10
00031000000000000000
5
|09BBS List: |01(|07A|01) |09Add, |01(|07V|01)|09iew, |01(|07E|01)|09xtended, |01(|07D|01)|09ownload, |01(|07Q|01)|09uit:
0
0
A
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
BA
bbslist
0
V
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
BS
bbslist
0
E
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
BL
bbslist;search
0
D
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
GX
bbslist bbslist
0
Q
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
GO
main
0

327
dbp/menus/demos.mnu Normal file
View File

@ -0,0 +1,327 @@
Demos of various things
00010000000000000000
11
|16|CL|14Demos Menu|CR
|CR|09Selection|03: |11
0
0
0 0 0 0
|09(|10A|09) |03ANSI Gallery Demo
A
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
GA
themes/default/text
0
|09(|10F|09) |03File Viewer Demo
F
10000000000000000000
0
0
0
7
0
0
0
0
0
0
0
0
0
0
1
GV
ansiview;5mooth-mist25 /cols=132
0
|09(|10J|09) |03MPL Blackjack Game
J
10000000000000000000
0
0
0
6
0
0
0
0
0
0
0
0
0
0
1
GX
blackjack
0
|09(|10M|09) |03Simple MPL Demo from 1998
M
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
GX
mpldemo
0
|09(|10Y|09) |03Mystic Python Demo
Y
10000000000000000000
0
0
0
8
0
0
0
0
0
0
0
0
0
0
1
GY
testpython
0
|09(|10?|09) |03Help System Demo
?
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
G?
helpdemo;ansihelp;INDEX
0
|09(|101|09) |03LightBar/Prompt Menu Demo
1
10000000000000000000
0
0
0
10
0
0
0
0
0
0
0
0
0
0
1
GO
testlbprompt
0
|09(|102|09) |03LightBar Menu with Timers Demo
2
10000000000000000000
0
0
0
9
0
0
0
0
0
0
0
0
0
0
1
GO
testlightbar
0
|09(|103|09) |03Test Lightbar/Grid menu
|07Quit to Main Menu
|15Quit to Main Menu
3
10000000000000000000
0
0
0
11
0
0
0
0
0
0
0
0
0
0
1
GO
testgrid
0
LINEFEED
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
0
|09(|10Q|09) |03Quit to Main Menu
|07Quit to Main Menu
|15Quit to Main Menu
Q
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
GO
main
0

159
dbp/menus/doors.mnu Normal file
View File

@ -0,0 +1,159 @@
Example doors/games menu
s10
00031000000000000000
5
|DFdoorhdr
|CR|09Command |08-> |09
0
0
|09(|10J|09) |03MPL BlackJack
J
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
GX
blackjack
0
|09(|101|09) |03Example Door 1
1
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
DC
c:\bbs\mydoor\mydoor.bat
0
|09(|102|09) |03Example Door 2
2
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
DD
0
LINEFEED
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
GO
main
0
|09(|10Q|09) |03Quit to Main Menu
Q
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
GO
main
0

756
dbp/menus/file.mnu Normal file
View File

@ -0,0 +1,756 @@
File base menu
s10
00031000000000000000
27
|DFfilehdr
|CR|09Group|08....|09: |15|FG|CR|09Area|08.....|09: |15|FB|CR|09Command |08->
0
0
0 0 0 0 0 0
Previous file area
[
10200000000000000000
0
0
0
24
0
0
0
0
0
0
0
0
0
0
1
FA
-
0
Previous group
{
10200000000000000000
0
0
0
25
0
0
0
0
0
0
0
0
0
0
1
FG
-
0
Next file area
]
10200000000000000000
0
0
0
23
0
0
0
0
0
0
0
0
0
0
1
FA
+
0
Next group
}
10200000000000000000
0
0
0
26
0
0
0
0
0
0
0
0
0
0
1
FG
+
0
LINEFEED
10000000000000000000
0
0
0
20
0
0
0
0
0
0
0
0
0
0
0
|09(|10A|09) |03Area Change
A
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
FA
0
|09(|10J|09) |03Join Group
J
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
FG
0
|09(|10D|09) |03Download Files
D
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
FD
0
|09(|10U|09) |03Upload Files
U
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
FU
0
|09(|10L|09) |03List Files
L
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
FL
0
|09(|10I|09) |03File Index Lister
|07File Index Lister
|15File Index Lister
I
10000000000000000000
0
0
0
27
0
0
0
0
0
0
0
0
0
0
1
FI
0
|09(|10N|09) |03New Files Scan
N
10000000000000000000
0
0
0
6
0
0
0
0
0
0
0
0
0
0
1
GO
fnewscan
0
|09(|10E|09) |03Edit Batch Queue
E
10000000000000000000
0
0
0
7
0
0
0
0
0
0
0
0
0
0
1
GO
fqueue
0
|09(|10S|09) |03Search for Files
S
10000000000000000000
0
0
0
8
0
0
0
0
0
0
0
0
0
0
1
FS
0
|09(|10F|09) |03Download File List
F
10000000000000000000
0
0
0
9
0
0
0
0
0
0
0
0
0
0
1
GO
flist
0
|09(|10V|09) |03View An Archive
V
10000000000000000000
0
0
0
10
0
0
0
0
0
0
0
0
0
0
1
FV
0
|09(|10P|09) |03Set New Scan Date
P
10000000000000000000
0
0
0
11
0
0
0
0
0
0
0
0
0
0
1
FP
0
|09(|10Z|09) |03Set Scanned Bases
Z
10000000000000000000
0
0
0
12
0
0
0
0
0
0
0
0
0
0
1
FZ
0
LINEFEED
10000000000000000000
0
0
0
22
0
0
0
0
0
0
0
0
0
0
1
GO
main
0
|09(|10Q|09) |03Quit to Main
Q
10000000000000000000
0
0
0
13
0
0
0
0
0
0
0
0
0
0
1
GO
main
0
|CR|12Sysop Commands|CR
LINEFEED
s255
10000000000000000000
0
0
0
14
0
0
0
0
0
0
0
0
0
0
0
|09(|12/U|09) |03Mass Upload
/U
s255
10000000000000000000
0
0
0
15
0
0
0
0
0
0
0
0
0
0
1
F1
s255
0
|09(|12/E|09) |03File List Editor
/E
s255
10000000000000000000
0
0
0
16
0
0
0
0
0
0
0
0
0
0
1
F2
s255
0
|09(|12/F|09) |03File Base Editor
/F
s255
10000000000000000000
0
0
0
17
0
0
0
0
0
0
0
0
0
0
1
*F
s255
0
|09(|12/J|09) |03File Group Editor
/J
s255
10000000000000000000
0
0
0
18
0
0
0
0
0
0
0
0
0
0
1
*R
s255
0
|09(|12/*|09) |03SysOp Menu
/*
s255
10000000000000000000
0
0
0
19
0
0
0
0
0
0
0
0
0
0
1
GO
s255
sysop
0

113
dbp/menus/flist.mnu Normal file
View File

@ -0,0 +1,113 @@
Download file list menu
s10
00031000000000000000
3
|01[|10þ|01] |09File List: |01(|07A|01)|09ll Files, |01(|07N|01)|09ew Files, |01(|07Q|01)|09uit:
0
0
A
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
FF
/allgroups
0
GO
file
0
N
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
2
FF
/new /allgroups
0
GO
file
0
Q
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
GO
file
0

148
dbp/menus/fnewscan.mnu Normal file
View File

@ -0,0 +1,148 @@
Scan for new files menu
s10
00031000000000000000
4
|01[|10þ|01] |09New Scan: |01(|07C|01)|09urrent Area, |01(|07G|01)|09roup, |01(|07A|01)|09ll, |01(|07Q|01)|09uit |08-> |07
0
0
C
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
FN
C
0
GO
file
0
G
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
2
FN
G
0
GO
file
0
A
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
2
FN
A
0
GO
file
0
Q
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
GO
file
0

188
dbp/menus/fqueue.mnu Normal file
View File

@ -0,0 +1,188 @@
File queue editor menu
s10
00031000000000000000
6
|01[|10þ|01] |09Queue: |01(|07R|01)|09e-list, |01(|07A|01)|09dd, |01(|07D|01)|09elete, |01(|07C|01)|09lear, |01(|07Q|01)|09uit |08-> |07
0
0
EVERY
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
QL
0
R
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
GT
0
A
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
QA
0
C
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
QC
0
D
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
QD
0
Q
10000000000000000000
0
0
0
6
0
0
0
0
0
0
0
0
0
0
1
GO
file
0

101
dbp/menus/goodbye.mnu Normal file
View File

@ -0,0 +1,101 @@
Logoff menu
s10
00011000000000000000
3
|CL|CR|09Do you want to log off?|CR
|CR|09Command |08-> |07
0
0
|09(|10Y|09)|03es - Disconnect Me
Y
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
GH
0
|09(|10N|09)|03o - Return to Main Menu
N
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
GO
main
0
|09(|10C|09)|03omment - Send Comment to SysOp
C
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
MW
/To:SysOp
0

727
dbp/menus/main.mnu Normal file
View File

@ -0,0 +1,727 @@
Main menu
s10
00031000000000000000
38
|DFmainhdr
|CR|09Command |08-> |09
0
0
0 0 0 0 0 0
|09(|10A|09) |03Account Settings
A
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
GO
account
0
|09(|10M|09) |03Message Menu
M
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
GO
message
0
|09(|10F|09) |03File Areas
F
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
GO
file
0
|09(|10D|09) |03Door Games
D
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
GO
doors
0
|09(|10S|09) |03System Bulletins
S
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
GX
bulletin bulletin bullet
0
|09(|10C|09) |03Comment to SysOp
C
10000000000000000000
0
0
0
6
0
0
0
0
0
0
0
0
0
0
1
MW
/to:sysop
0
|09(|10L|09) |03Last 10 Callers
L
10000000000000000000
0
0
0
7
0
0
0
0
0
0
0
0
0
0
1
GL
0
|09(|10O|09) |03One Liners
O
10000000000000000000
0
0
0
8
0
0
0
0
0
0
0
0
0
0
1
GN
0
|09(|10V|09) |03Voting Booth
V
10000000000000000000
0
0
0
9
0
0
0
0
0
0
0
0
0
0
1
GO
vote
0
|09(|10U|09) |03User Listing
U
10000000000000000000
0
0
0
10
0
0
0
0
0
0
0
0
0
0
1
GU
search
0
|09(|10B|09) |03BBS Listing
B
10000000000000000000
0
0
0
11
0
0
0
0
0
0
0
0
0
0
1
GO
bbslist
0
|09(|10P|09) |03Page SysOp
P
10000000000000000000
0
0
0
12
0
0
0
0
0
0
0
0
0
0
1
GP
0
|09(|10T|09) |03Time Bank
T
10000000000000000000
0
0
0
13
0
0
0
0
0
0
0
0
0
0
1
GO
timebank
0
|09(|10@|09) |03Usage Graph
@
10000000000000000000
0
0
0
18
0
0
0
0
0
0
0
0
0
0
1
GX
usage
0
|09(|10!|09) |03Demos
!
10000000000000000000
0
0
0
31
0
0
0
0
0
0
0
0
0
0
1
GO
demos
0
|09(|10X|09) |03Multi Relay Chat
|07Multi Relay Chat
|15Multi Relay Chat
X
10000000000000000000
0
0
0
38
0
0
0
0
0
0
0
0
0
0
1
GX
mrc_client
0
LINEFEED
10000000000000000000
0
0
0
33
0
0
0
0
0
0
0
0
0
0
0
|09(|10G|09) |03Goodbye
G
10000000000000000000
0
0
0
32
0
0
0
0
0
0
0
0
0
0
1
GO
goodbye
0
LINEFEED
10000000000000000000
0
0
0
23
0
0
0
0
0
0
0
0
0
0
0
|09(|10/N|09) |03Node Chat
/N
10000000000000000000
0
0
0
24
0
0
0
0
0
0
0
0
0
0
1
NC
0
|09(|10/W|09) |03Who's Online
/W
10000000000000000000
0
0
0
25
0
0
0
0
0
0
0
0
0
0
1
NW
0
|09(|10/S|09) |03Send Node Message
/S
10000000000000000000
0
0
0
26
0
0
0
0
0
0
0
0
0
0
1
NS
0
|09(|10/P|09)|03 Page User for Chat
/P
10000000000000000000
0
0
0
27
0
0
0
0
0
0
0
0
0
0
1
NP
0
|09(|10/G|09) |03Goodbye FAST
/G
10000000000000000000
0
0
0
28
0
0
0
0
0
0
0
0
0
0
1
GI
0
|09(|12/*|09) |03SysOp Menu
/*
s255
10000000000000000000
0
0
0
29
0
0
0
0
0
0
0
0
0
0
1
GO
s255
sysop
0

101
dbp/menus/matrix.mnu Normal file
View File

@ -0,0 +1,101 @@
Example Matrix menu
00010000000000000000
4
Matrix Menu
|CR|14Matrix Login Menu|CR
|CR|09Command: |XX
0
0
|09(|10A|09) |03Apply for Access
A
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
XA
0
|09(|10L|09) |03Login
L
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
XL
0
|09(|10!|09) |03Disconnect
!
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
GH
0

872
dbp/menus/message.mnu Normal file
View File

@ -0,0 +1,872 @@
Message base menu
s10
00031000000000000000
32
|DFmsghdr
|CR|09Group|08....|09: |15|MG|CR|09Area|08.....|09: |15|MB|CR|09Command |08-> |09
0
0
Previous message area
[
10200000000000000000
0
0
0
31
0
0
0
0
0
0
0
0
0
0
1
MA
-
0
Previous message group
{
10200000000000000000
0
0
0
30
0
0
0
0
0
0
0
0
0
0
1
MG
-
0
Next message area
]
10200000000000000000
0
0
0
29
0
0
0
0
0
0
0
0
0
0
1
MA
+
0
Next message group
}
10200000000000000000
0
0
0
28
0
0
0
0
0
0
0
0
0
0
1
MG
+
0
|09(|13I|09) |03Indexed Message Reader
I
10000000000000000000
0
0
0
25
0
0
0
0
0
0
0
0
0
0
1
MI
0
LINEFEED
10000000000000000000
0
0
0
24
0
0
0
0
0
0
0
0
0
0
0
|09(|10A|09) |03Area Change
A
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
MA
0
|09(|10J|09) |03Join Group
J
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
MG
0
|09(|10R|09) |03Read Messages
R
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
MR
0
|09(|10P|09) |03Post Message
P
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
MP
0
|09(|10N|09) |03New Message Scan
N
10000000000000000000
0
0
0
6
0
0
0
0
0
0
0
0
0
0
1
GO
mnewscan
0
|09(|10K|09) |03Message Quickscan
K
10000000000000000000
0
0
0
7
0
0
0
0
0
0
0
0
0
0
2
GT
|CR
0
MQ
0
|09(|10F|09) |03Find Messages
F
10000000000000000000
0
0
0
8
0
0
0
0
0
0
0
0
0
0
1
GO
msearch
0
|09(|10G|09) |03Global Personal Scan
G
10000000000000000000
0
0
0
9
0
0
0
0
0
0
0
0
0
0
1
GO
personalscan
0
|09(|10S|09) |03Auto Signature
S
10000000000000000000
0
0
0
10
0
0
0
0
0
0
0
0
0
0
1
GO
autosig
0
|09(|10D|09) |03Set Newscan Date
D
10000000000000000000
0
0
0
11
0
0
0
0
0
0
0
0
0
0
1
MD
0
|09(|10V|09) |03View Outbound E-mail
V
10000000000000000000
0
0
0
12
0
0
0
0
0
0
0
0
0
0
1
MV
0
|09(|10Z|09) |03Set Scanned Bases
Z
10000000000000000000
0
0
0
13
0
0
0
0
0
0
0
0
0
0
1
MZ
0
|09(|10O|09) |03Offline Mail
O
10000000000000000000
0
0
0
14
0
0
0
0
0
0
0
0
0
0
1
GO
qwk
0
|09(|10B|09) |03Nodelist Browser
B
10000000000000000000
0
0
0
15
0
0
0
0
0
0
0
0
0
0
1
ML
0
|09(|10E|09) |03Resume Draft Messages
E
10000000000000000000
0
0
0
32
0
0
0
0
0
0
0
0
0
0
1
MF
0
|09(|10C|09) |03Check for E-mail
C
10000000000000000000
0
0
0
16
0
0
0
0
0
0
0
0
0
0
1
MC
0
|09(|10W|09) |03Write E-mail
W
10000000000000000000
0
0
0
17
0
0
0
0
0
0
0
0
0
0
1
MW
0
LINEFEED
10000000000000000000
0
0
0
27
0
0
0
0
0
0
0
0
0
0
0
|09(|10Q|09) |03Quit to Main Menu
|07Quit to Main Menu
|15Quit to Main Menu
Q
10000000000000000000
0
0
0
26
0
0
0
0
0
0
0
0
0
0
1
GO
main
0
|CR|12Sysop Commands|CR
LINEFEED
s255
10000000000000000000
0
0
0
19
0
0
0
0
0
0
0
0
0
0
0
|09(|12/M|09) |03Mass E-mail
/M
s255
10000000000000000000
0
0
0
20
0
0
0
0
0
0
0
0
0
0
1
MM
s255
0
|09(|12/E|09) |03Edit Message Bases
/E
s255
10000000000000000000
0
0
0
21
0
0
0
0
0
0
0
0
0
0
1
*M
s255
0
|09(|12/J|09) |03Edit Message Group
/J
s255
10000000000000000000
0
0
0
22
0
0
0
0
0
0
0
0
0
0
1
*G
s255
0
|09(|12/*|09) |03SysOp Menu
/*
s255
10000000000000000000
0
0
0
23
0
0
0
0
0
0
0
0
0
0
1
GO
s255
sysop
0

195
dbp/menus/mnewscan.mnu Normal file
View File

@ -0,0 +1,195 @@
Message newscan menu
s10
00031000000000000000
5
|01[|10þ|01] |09New Scan: |01(|07C|01)|09urrent Area, |01(|07G|01)|09roup, |01(|07A|01)|09ll Groups, |01(|07P|01)|09ersonal, |01(|07Q|01)|09uit: |07
0
0
C
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
MR
N
0
GO
message
0
G
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
3
GT
|CL
0
MN
0
GO
message
0
A
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
3
GT
|CL
0
MN
/G
0
GO
message
0
P
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
2
MN
/P
0
GO
message
0
Q
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
GO
message
0

148
dbp/menus/msearch.mnu Normal file
View File

@ -0,0 +1,148 @@
Message search menu
s10
00031000000000000000
4
|01[|10ţ|01] |09Msg Search: |01(|07C|01)|09urrent Area, |01(|07G|01)|09roup, |01(|07A|01)|09ll Groups, |01(|07Q|01)|09uit: |07
0
0
C
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
MS
C
0
GO
message
0
G
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
2
MS
G
0
GO
message
0
A
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
2
MS
A
0
GO
message
0
Q
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
GO
message
0

78
dbp/menus/newinfo.mnu Normal file
View File

@ -0,0 +1,78 @@
New account review menu
00030000000000000000
2
|CR|09Select ->
newinfo
0
0
ENTER
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
GO
main
0
!
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
2
GT
|CL|07Please connect later if you wish to make an account.
0
GI
0

View File

@ -0,0 +1,79 @@
New scan all personal msgs
00030000000000000000
|CR|14New Menu Header|CR
|CR|09Selection|03: |11
0
0
Perform personal new message scan
Remove /LIST if you want it to show the message bases
instead of actual messages (on the MQ command below)
FIRSTCMD
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
7
GT
|CR|12Scanning for new personal messages...|CR|CR
0
MQ
/YOU /NOREAD /NOFOOT /LIST
0
-R
0
0
GT
!OY
|15There are no new messages.|CR|CR|PA
0
-Y
OY
|CR|12You have |15|&3 |12new personal message(s): Read now? |11
0
MN
OK
/P /G /NOREAD
0
GO
message
0

67
dbp/menus/prelogin.mnu Normal file
View File

@ -0,0 +1,67 @@
Default Login sequence menu
s10
00031000000000000000
1
Menu Header
Command:
0
0
0 0 0 0
Can replace MC (check email) with a personalscan-like menu
if you want a global new personal message scan instead of
just e-mail
FIRSTCMD
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
5
NS
!OI
0;|&1 has logged into node |&2.
0
GX
bulletin bulletin bullet check
0
MC
0
MF
/scan
0
GO
main
0

286
dbp/menus/qwk.mnu Normal file
View File

@ -0,0 +1,286 @@
Offline mail menu
s10
00011000000000000000
|DFqwkhdr
|CR|09Command |08->
0
0
|09(|10E|09) |03Use Extended (QWKE) Packets |08-> |10|QE
E
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
33
0
|09(|10A|09) |03Archive Type |08-> |10|QA
A
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
31
0
|09(|10I|09) |03Include New Files List |08-> |10|QL
I
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
30
0
LINEFEED
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
|09(|10S|09) |03Set QWK Scanned Bases
S
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
OS
/allgroups
0
LINEFEED
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
|09(|10D|09) |03Download QWK/QWKE Packet
D
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
OD
/allgroups
0
|09(|10U|09) |03Upload REP Packet
U
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
OU
0
LINEFEED
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
|09(|10Q|09) |03Quit to Message Menu
Q
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GO
message
0

205
dbp/menus/qwknetwork.mnu Normal file
View File

@ -0,0 +1,205 @@
QWK Network Menu
s10
00011000000000000000
|DFqwkhdr
|CR|09Command |08->
0
0
|09(|10A|09) |03QWK Packet Archive Type |08-> |10|QA
A
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
31
0
|09(|10E|09) |03Extended (QWKE) Packets |08-> |10|QE
E
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GE
33
0
LINEFEED
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
|09(|10S|09) |03Set QWK Scanned Bases
S
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
OS
/ALLGROUPS /QWKNET
0
|09(|10D|09) |03Set LastExport Pointers
D
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
MD
/ALL
0
LINEFEED
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
|09(|10X|09) |03Logoff
X
10000000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
1
GH
0

472
dbp/menus/sysop.mnu Normal file
View File

@ -0,0 +1,472 @@
Sysop menu
s10
00031000000000000000
16
|DFsysophdr
|CR|09Command |08-> |07
0
0
|09(|10!|09) |03BBS Statistics
!
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
G1
0
|09(|10D|09) |03Mystic-DOS Shell
D
s255
10000000000000000000
0
0
0
16
0
0
0
0
0
0
0
0
0
0
1
*D
s255
0
LINEFEED
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
0
|09(|10A|09) |03Archive Configuration
A
s255
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
*A
s255
0
|09(|10E|09) |03Event Editor
E
s255
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
*E
s255
0
|09(|10F|09) |03File Base Editor
F
s255
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
*F
s255
0
|09(|10G|09) |03Message Group Editor
G
s255
10000000000000000000
0
0
0
6
0
0
0
0
0
0
0
0
0
0
1
*G
s255
0
|09(|10R|09) |03File Group Editor
R
s255
10000000000000000000
0
0
0
7
0
0
0
0
0
0
0
0
0
0
1
*R
s255
0
|09(|10L|09) |03Security Level Editor
L
s255
10000000000000000000
0
0
0
8
0
0
0
0
0
0
0
0
0
0
1
*L
s255
0
|09(|10M|09) |03Message Base Editor
M
s255
10000000000000000000
0
0
0
9
0
0
0
0
0
0
0
0
0
0
1
*M
s255
0
|09(|10S|09) |03System Configuration
S
s255
10000000000000000000
0
0
0
10
0
0
0
0
0
0
0
0
0
0
1
*S
s255
0
|09(|10U|09) |03User Editor
U
s255
10000000000000000000
0
0
0
11
0
0
0
0
0
0
0
0
0
0
1
*U
s255
0
|09(|10V|09) |03Voting Booth Editor
V
s255
10000000000000000000
0
0
0
12
0
0
0
0
0
0
0
0
0
0
1
*V
s255
0
|09(|10#|09) |03Menu Editor
#
s255
10000000000000000000
0
0
0
13
0
0
0
0
0
0
0
0
0
0
1
*#
s255
0
|09(|10P|09) |03Protocol Editor
P
s255
10000000000000000000
0
0
0
14
0
0
0
0
0
0
0
0
0
0
1
*P
s255
0
|09(|10Q|09) |03Quit to Main Menu
Q
10000000000000000000
0
0
0
15
0
0
0
0
0
0
0
0
0
0
1
GO
main
0

130
dbp/menus/testgrid.mnu Normal file
View File

@ -0,0 +1,130 @@
Test Lightbar/Grid menu
02030000000000000000
4
|CL|09Test Lightbar/Grid Menu|CR
|[X01|[Y06|09Command|01: |11
1
8
|07 Option |141
|15|17 Option |141 |16
1
10000000000000000000
0
5
3
2
0
4
0
3
0
0
0
0
0
0
1
GT
|10Selected option 1: Press a key|PN
0
|07 Option |142
|15|17 Option |142 |16
2
10000000000000000000
0
40
3
3
0
1
2
0
0
0
0
0
0
0
1
GT
|10Selected option 2: Press a key|PN
0
|07 Option |143
|15|17 Option |143 |16
3
10000000000000000000
0
5
4
4
2
0
0
1
0
0
0
0
0
0
1
GT
|10Selected option 3: Press a key|PN
0
|07 |14QUIT|07 to Main Menu
|14|17 QUIT|15 to Main Menu |16
QUIT
10000000000000000000
0
40
4
1
3
0
4
0
0
0
0
0
0
0
1
GO
main
0

188
dbp/menus/testlbprompt.mnu Normal file
View File

@ -0,0 +1,188 @@
Test of LightBar/Prompt menu
03000000000000000000
6
|CR|09Prompt Menu|03: |11
0
0
FIRSTCMD
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
GT
|CR|12Use arrow keys or type hotkeys to see prompt menu in action!|CR
0
|09(|10?|09) |03Help
|03Show a list of commands for this menu
|14|17 ? |15Help |16
?
10000000000000000000
0
1
0
2
0
0
0
0
0
0
0
0
0
0
1
-G
2
0
|09(|10D|09) |03Display Text
|03Displays a line of text for the heck of it
|14|17 D|15isplay Text |16
D
10000000000000000000
0
1
0
3
0
0
0
0
0
0
0
0
0
0
1
GT
|CR|12This is a test!|CR
0
|09(|10USER|09) |03User List
|03List or search users on this system
|14|17 USER|15 List |16
USER
10000000000000000000
0
1
0
4
0
0
0
0
0
0
0
0
0
0
1
GU
0
|09(|10WHO|09) |03Who's Online
|03Show all users logging into the BBS system
|14|17 WHO|15s Online |16
WHO
10000000000000000000
0
1
0
5
0
0
0
0
0
0
0
0
0
0
1
NW
0
|09(|10Q|09) |03Quit to Demo Menu
|03Select this to quit to demo menu
|14|17 Q|15uit to Demo |16
Q
10000000000000000000
0
1
0
6
0
0
0
0
0
0
0
0
0
0
1
GO
demos
0

293
dbp/menus/testlightbar.mnu Normal file
View File

@ -0,0 +1,293 @@
Test lightbar menu functions
11130000000000000000
10
|CL|15Test lightbar menu |08[ ]
|[X01|[Y06|09Selection|03: |11
0
0
1;21;1;30;1;0;250;|08.|07.|15. |07Hey |12|UH|07, menus can have a |15scrolling m|12ar|04q|12ue|15e |07too |15.|07.
Timer event every 3 seconds
TIMER
00000000000000000000
3
0
0
1
0
0
0
0
0
0
0
0
0
0
1
GT
|[X01|[Y08|12This menu command is ran every 3 seconds.
0
Timer event only once after 6 seconds
TIMER
01000000000000000000
6
0
0
2
0
0
0
0
0
0
0
0
0
0
1
GT
|[X01|[Y09|10This is ran once per menu load after 6 seconds.
0
Timer event once per redraw at 6 seconds
TIMER
02000000000000000000
6
0
0
3
0
0
0
0
0
0
0
0
0
0
2
GT
|[X01|[Y10This is displayed once per menu redraw at 6 seconds.
0
GT
|[X01|[Y11|15And this is stacked with the last menu command
0
Timer event displays every 10 seconds
TIMER
00000000000000000000
10
0
0
4
0
0
0
0
0
0
0
0
0
0
2
GT
|[X01|[Y13|09This menu will move you back to the demo menu after 60 seconds!
0
GT
|[X01|[Y14|10But only if you don't use the WHO command. WHO resets the counter using -I
0
Every 15 seconds
TIMER
00000000000000000000
15
0
0
5
0
0
0
0
0
0
0
0
0
0
1
GT
|[X01|[Y16|15|17You can move and type WHILE the event commands are executed!|16
0
Change marque text at 30 seconds
TIMER
01000000000000000000
30
0
0
10
0
0
0
0
0
0
0
0
0
0
1
-M
/add |14HEY LOOK! |07The marque text changed after |1530 seconds.|07.|08.
0
Go to demo menu after 60 seconds
TIMER
10000000000000000000
60
0
0
6
0
0
0
0
0
0
0
0
0
0
1
GO
demos
0
|07 (WHO) Who's online
|15|17> (WHO) Who's online |16
WHO
10000000000000000000
0
1
3
7
0
0
0
0
0
0
0
0
0
0
2
NW
0
-I
0
0
|07 (QUIT) Quit to demo menu
|15|17> (QUIT) Quit to demo menu |16
QUIT
10000000000000000000
0
1
4
8
0
0
0
0
0
0
0
0
0
0
1
GO
demos
0

101
dbp/menus/timebank.mnu Normal file
View File

@ -0,0 +1,101 @@
Timebank menu
s10
00011000000000000000
3
|DFbankhdr
|CR|09Command |08-> |07
0
0
|09(|10D|09) |03Deposit Time
D
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
TD
0
|09(|10W|09) |03Withdraw Time
W
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
TW
0
|09(|10Q|09) |03Quit to Main
Q
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
GO
main
0

188
dbp/menus/vote.mnu Normal file
View File

@ -0,0 +1,188 @@
Voting booth menu
s10
00021000000000000000
6
|DFvotehdr
|CR|09Command |08-> |07
0
0
|09(|10A|09) |03Add New Question
A
10000000000000000000
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
VA
0
|09(|10N|09) |03Vote On All New Questions
N
10000000000000000000
0
0
0
2
0
0
0
0
0
0
0
0
0
0
1
VN
0
|09(|10V|09) |03Vote On A Question
V
10000000000000000000
0
0
0
3
0
0
0
0
0
0
0
0
0
0
1
VV
0
|09(|10R|09) |03Results Of A Question
R
10000000000000000000
0
0
0
4
0
0
0
0
0
0
0
0
0
0
1
VR
0
|09(|12D|09) |03Delete Question
D
s255
10000000000000000000
0
0
0
5
0
0
0
0
0
0
0
0
0
0
1
VD
main
0
|09(|10Q|09) |03Quit to Main Menu
Q
10000000000000000000
0
0
0
6
0
0
0
0
0
0
0
0
0
0
1
GO
main
0

1090
dbp/prompts.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,99 @@
// ==========================================================================
// NEWUSERAPP.MPS : Sample new user process MPL program
//
// If newuserapp.mpx exists in the theme's script directory, it will be ran
// instead of the normal New User process. You must make sure you scan for
// duplicate user names, and other things like that which the BBS would
// normally do during this process. At the start of the program, you must
// call GetThisUser to load the new user data into the USER variables.
// Before exiting the program, you must call PutThisUser to store the USER
// variables back into the new user data.
//
// Note: To use this program, you must rename it to newuserapp.mps and
// compile it with MIDE or MPLC.
// ==========================================================================
Uses
User
Procedure GetAlias;
Var
Str : String[30];
Begin
Repeat
Write ('Enter your alias: ');
Str := StripLow(StripB(Input(30, 30, 11, ''), ' '));
If (Str = '') or (Str2Int(Str) > 0) Then
WriteLn ('Invalid user name')
Else
If IsUser(Str) Then
WriteLn ('Account already exists')
Else
Break;
Until False;
UserAlias := Str;
End;
Procedure GetRealName;
Var
Str : String[30];
Begin
Repeat
Write ('Enter your real name: ');
Str := StripLow(StripB(Input(30, 30, 11, ''), ' '));
If (Pos(' ', Str) = 0) or (Str2Int(Str) > 0) Then
WriteLn ('Enter first AND last name')
Else
If IsUser(Str) Then
WriteLn ('Account already exists')
Else
Break;
Until False;
UserName := Str;
End;
Procedure GetPassword;
Var
Str1 : String[25];
Str2 : String[25];
Begin
Repeat
Repeat
Write ('Enter your password: ');
Str1 := Input(25, 25, 16, '');
If ValidPW(Str1) <> 0 Then
WriteLn ('Password violates password policy')
Else
Break;
Until False;
Write ('Verify your password: ');
Str2 := Input(25, 25, 16, '');
If Str1 <> Str2 Then
WriteLn ('Passwords do not match.')
Else
Break;
Until False;
SetPW (Str1);
End;
Begin
GetThisUser;
GetAlias;
GetRealName;
GetPassword;
PutThisUser;
End.

View File

@ -0,0 +1,57 @@
// Auto create MPL for RLOGIN auto-creation example
// ================================================
//
// This would be renamed to connect.mps which is executed as soon as a
// connection comes in, even before graphics detection.
//
// By default this script will create a user automatically if AutoCreate is
// set to TRUE below, or just push them immediately through to the new user
// application if set to FALSE.
//
// Security below defines the level used for the created user. Ideally you
// would probably want to create them with a specific security level and then
// you could redirect them to their own menu system which would be completely
// independant from the BBS.
Const
EnableRLOGIN = True; // If True, process RLOGIN users for autocreate
EnableSSH = False; // If True, process SSH users for autocreate
AutoCreate = True; // Set True to autocreate or False to send to new
// user application.
StartMenu = ''; // Menu to start users at (Blank for default)
Security = 0; // Security level to use for created users or 0
// to use the default new user security level
Begin
If ((ServerType = 1 and EnableRLOGIN) or (ServerType = 2 and EnableSSH)) and
(UserLoginName <> '') and (UserLoginPW <> '') Then Begin
// This is connection from RLOGIN or SSH, so lets see if the user exists.
// Other manipulation or validation of the User ID or password could be
// done here too as needed.
If Not IsUser(UserLoginName) Then Begin
// User does not exist, so we can either set "UserLoginNew" to true to
// push the user directly to the new user application, or we could
// create the user and automatically push them through.
If AutoCreate Then Begin
Var Cmd : String = 'mystic -newuser handle="' + UserLoginName + '" "pass=' + UserLoginPW + '"';
If (Security > 0) and (Security < 250) Then
Cmd := Cmd + ' level=' + Int2Str(Security);
If StartMenu <> '' Then
Cmd := Cmd + ' menu=' + StartMenu;
If OSType = 1 or OSType = 2 Then
Cmd := './' + Cmd + ' /dev/null 2>&1';
SysopLog ('Auto creating user via RLOGIN: ' + UserLoginName);
MenuCmd('DD', Cmd);
End Else
UserLoginNew := True;
End;
End;
End.

184
dbp/scripts/automessage.mps Normal file
View File

@ -0,0 +1,184 @@
// AUTOMESSAGE : Basic auto-message MPL for Mystic BBS
// ===================================================
//
// Options: <NONE> Show message and prompt to change message
// SHOW Only show message, then show a pause prompt
// SHOWNOPAUSE Same as SHOW but does not send PausePrompt
// CHANGE Only change message and nothing else
//
// The auto message has been designed so that you can just execute it with no
// options, and it will display and allow the user to change the message. It
// also gives you the show and change options separately, so you can build
// your own Automessage menu with the menu system, if you choose to, and that
// will give you some additional security options and display options.
//
// Example:
//
// Menu Command: GX (Execute MPL)
// Optional Data: automessage show
//
// Prompts can be changed below. The header prompt can have &1 = Msg by,
// &2 = Msg date, &3 = Msg time.
Uses
USER;
Const
MaxLines = 6; // up to 25
MaxColumns = 79; // up to 79
// Sent as the auto message header
HeaderPrompt = '|16|CL|11Auto-Message by |15|&1 |11on |15|&2:|CR|03';
// Sent before each line of text of the actual auto message
MiddlePrompt = '';
// Sent when there is no defined auto message yet
NonePrompt = 'An auto message has not been set yet.';
// Used as the prompt prompt when using the SHOW command
PausePrompt = '|CR|PA';
// Prompt used to give option to change the message or continue
ChangePrompt = '|CR|01[|11C|01]|09hange Message, or |01[|11ENTER|01]|09 to Continue: ';
// If its the User who wrote the auto message, they can edit this prompt
// be be displayed instead of ChangePrompt
OwnerPrompt = '|CR|01[|11C|01]|09hange Message, |01[|11E|01]|09dit or |01[|11ENTER|01]|09 to Continue: ';
/////////////////////////////////////////////////////////////////////////////
// DO NOT EDIT EXCEPT FOR THE VALUES ABOVE //
/////////////////////////////////////////////////////////////////////////////
Var
Text : Array[1..25] of String[79];
TextDate : String[8];
TextTime : String[8];
TextFrom : String[40];
TextLines : Byte;
Procedure ReadData;
Var
F : File;
Begin
fAssign (F, JustPath(ProgName) + 'automessage.dat', 66);
fReset (F);
TextFrom := 'Unknown';
TextDate := DateStr(DateTime, 1);
TextTime := TimeStr(DateTime, False);
TextLines := 0;
If IoResult = 0 Then Begin
For TextLines := 1 to 25 Do
Text[TextLines] := '';
TextLines := 0;
fReadLn(F, TextFrom);
fReadLn(F, TextDate);
fReadLn(F, TextTime);
While Not fEOF(F) Do Begin
TextLines := TextLines + 1;
fReadLn (F, Text[TextLines]);
End;
fClose(F);
End;
SetPromptInfo(1, TextFrom);
SetPromptInfo(2, TextDate);
SetPromptInfo(3, TextTime);
End;
Procedure Show (DoPause: Boolean);
Var
Count : Byte;
Begin
WriteLn (HeaderPrompt);
If TextLines = 0 Then
WriteLn(NonePrompt)
Else
For Count := 1 to TextLines Do
WriteLn (MiddlePrompt + Text[Count]);
If DoPause Then
Write(PausePrompt);
End;
Procedure Change;
Var
Prompt : String;
Cmds : String;
Ch : Char;
Lines : Integer;
Subject : String = 'Auto-Message';
Count : Word;
F : File;
Begin
GetThisUser;
If Upper(TextFrom) <> 'ANONYMOUS' and Upper(TextFrom) <> 'UNKNOWN' and TextFrom = UserAlias Then Begin
Prompt := OwnerPrompt;
Cmds := 'CQE' + #13;
End Else Begin
Prompt := ChangePrompt
Cmds := 'CQ' + #13;
End;
Repeat
Write (Prompt);
Ch := OneKey(Cmds, True);
Case Ch of
'Q',
#13 : Break;
'E',
'C' : Begin
If Ch = 'E' Then Begin
For Count := 1 to TextLines Do
MsgEditSet (Count, Text[Count]);
Lines := TextLines;
End Else
Lines := 0;
SetPromptInfo(1, Subject);
If MsgEditor (0, Lines, MaxColumns, MaxLines, False, 'msg_editor', Subject) Then Begin
fAssign (F, JustPath(ProgName) + 'automessage.dat', 66);
fReWrite (F);
fWriteLn (F, UserAlias);
fWriteLn (F, DateStr(DateTime, 1));
fWriteLn (F, TimeStr(DateTime, False));
For Count := 1 to Lines Do
fWriteLn (F, MsgEditGet(Count));
fClose (F);
End;
ReadData;
Show(False);
End;
End;
Until False;
End;
Begin
ReadData;
Case Upper(ParamStr(1)) of
'SHOWNOPAUSE' : Show(False);
'SHOW' : Show(True);
'CHANGE' : Change;
Else
Show(False);
Change;
End;
End.

154
dbp/scripts/bbslist.mps Normal file
View File

@ -0,0 +1,154 @@
// -------------------------------------------------------------------------
// BBSLIST.MPS : BBS list creator for Mystic BBS software v1.07+
// -------------------------------------------------------------------------
// This program will export the BBS list data to a text file, and allow the
// user to download the created text file.
//
// The command line option specifies the base name of the BBS list to go along
// with the same parameters of the BBS list menu commands:
//
// bbslist [bbslist name] IE "bbslist bbslist"
//
// -------------------------------------------------------------------------
Uses
CFG,
USER
Var
ListFile : File;
ListName : String
OutFile : File;
OutName : String
bbs_cType : Byte
bbs_Phone : String
bbs_Telnet : String
bbs_Name : String
bbs_Location : String
bbs_Sysop : String
bbs_Baud : String
bbs_Software : String
bbs_Deleted : Boolean
bbs_AddedBy : String
bbs_Verified : LongInt
bbs_Extra1 : LongInt
bbs_Extra2 : Integer
Total : Integer
Temp : String
Begin
If ParamCount <> 1 Then Begin
WriteLn ('Invalid command line option.');
WriteLn ('');
WriteLn ('Usage: BBSLIST [bbs list id]');
WriteLn ('|CR|PA');
Halt
End
GetThisUser
ListName := CfgDataPath + ParamStr(1) + '.bbi';
OutName := CfgSysPath + 'temp' + Int2Str(NodeNum) + PathChar + 'bbslist.txt';
If Not FileExist(ListName) Then Begin
WriteLn ('|CR|12There are no entries in the BBS list.');
Halt;
End;
If Not InputYN('|CR|12Download the BBS list? ') Then
Halt
Write ('|CR|14Creating BBS list ... ')
fAssign (ListFile, ListName, 66);
fReset (ListFile);
If IoResult <> 0 Then Begin
WriteLn('Unable to find BBS list data');
Halt;
End;
fAssign (OutFile, OutName, 66);
fReWrite (OutFile);
fWriteLn (OutFile, '')
fWriteLn (OutFile, '.-------------------------------------------.')
fWriteLn (OutFile, '| BBS listing created on ' + DateStr(DateTime, UserDateType) + ' at ' + TimeStr(DateTime, True) + ' |')
fWriteLn (OutFile, '`-------------------------------------------''')
fWriteLn (OutFile, '')
Total := 0;
While Not fEof(ListFile) Do Begin
fRead (ListFile, bbs_cType, 1)
fRead (ListFile, bbs_Phone, 16)
fRead (ListFile, bbs_Telnet, 41)
fRead (ListFile, bbs_Name, 31)
fRead (ListFile, bbs_Location, 26)
fRead (ListFile, bbs_Sysop, 31)
fRead (ListFile, bbs_Baud, 7)
fRead (ListFile, bbs_Software, 11)
fRead (ListFile, bbs_Deleted, 1)
fRead (ListFile, bbs_AddedBy, 31)
fRead (ListFile, bbs_Verified, 4)
fRead (ListFile, bbs_Extra1, 4)
fRead (ListFile, bbs_Extra2, 2)
If Not bbs_Deleted Then Begin
Total := Total + 1
fWriteLn (OutFile, ' BBS Name: ' + bbs_Name)
If bbs_cType = 0 Then Begin
fWriteLn (OutFile, ' Accessible By: Dialup')
fWriteLn (OutFile, ' Phone Number: ' + bbs_Phone)
fWriteLn (OutFile, ' Max Baud Rate: ' + bbs_Baud)
End
If bbs_cType = 1 Then Begin
fWriteLn (OutFile, ' Accessible By: Telnet')
fWriteLn (OutFile, ' Telnet: ' + bbs_Telnet)
End
If bbs_cType = 2 Then Begin
fWriteLn (OutFile, ' Accessible By: Dialup & Telnet')
fWriteLn (OutFile, ' Phone Number: ' + bbs_Phone)
fWriteLn (OutFile, ' Max Baud Rate: ' + bbs_Baud)
fWriteLn (OutFile, ' Telnet: ' + bbs_Telnet)
End
fWriteLn (OutFile, ' Sysop Name: ' + bbs_Sysop)
fWriteLn (OutFile, ' Location: ' + bbs_Location)
fWriteLn (OutFile, ' BBS Software: ' + bbs_Software)
fWriteLn (OutFile, ' Last Verified: ' + DateStr(bbs_Verified, UserDateType))
fWriteLn (OutFile, '')
fWriteLn (OutFile, '----------------------------------------------------------')
fWriteLn (OutFile, '')
End
End;
fWriteLn (OutFile, 'Total BBSes listed: ' + Int2Str(Total))
fClose (ListFile)
fClose (OutFile)
WriteLn ('Done.')
If Local Then Begin
If InputYN ('|CR|12Local mode: Save list to file? |11') Then Begin
Write ('|CR|03Enter full path and filename for BBS list|CR|09:')
Temp := Input (60, 60, 12, CfgSysPath + 'bbslist.txt')
If Temp <> '' Then Begin
Write ('|CR|14Saving: |15' + Temp + '|14: ')
If FileCopy(OutName, Temp) Then
WriteLn ('OK')
Else
WriteLn ('ERROR')
End
End
End Else
MenuCmd ('F3', OutName)
FileErase (OutName)
End;

22
dbp/scripts/blackjack.ans Normal file
View File

@ -0,0 +1,22 @@
ワワワワワワワワ ワワワーイ ワワワワワワ ワワワワワ ワワ ワワワワ ワワワ ワワワワワワ ワワワワワ ワワ ワワワワ ワ
M ワワ ゚ロロー゙ロー ゙イロン ーロ゚ ゙ロー゙ロ ゙ロー アロン ゙ロロン ーロ゚ ゙ロー゙ロ ゙ロアーgj!ン
 Y ゙ロ ゙ロン゙ロ ワワ ロン゙ロ ゙ロ ゙イー゙ロ ゙ロン ワワ ーロン ロン゙ロ ゙ロ ゙ロー゙ロ ゙ロン イ
 S ゙ロ ワロ゚ ゙ロ ーロロワ ゙ロ ロン ゙ロ ゙ロ ゙ロ ワロ゚ ワロロ ロン ゙ロ ロン ゙ロ ゙ロ ゙ロ ワロ゚ ー
 T ゙ロ ゚ロワ ロ ロンア ロン ゙ロ ゙ロ ゚ ゙ロ ゚ロワ ゙ロ ーロン ロン ゙ロ ゙ロー ゚ ゙ロ ゚ロワ ー
 I ゙イー ゙ン゙ワ ロン ゙ロ ゚゚゚ロンーロン ゙ワ ゙ロー ゙ロン ゙ロ ワロン゙ロア゚゚゚ロンアロン ゙ワ ゙イ ゙ロン ー
 C ゚゙ロ゚゚゚゚゚ ゚゚゚゚ロン゚゚゚゚ ゚゚゚゚゚゚゚゚゚゚゚゚゚゚ ゚゚゚ ゙ロイ゚゚゚゚゚゚゚ ゚゚゚゚゚゚゚゚゚゚゚゚゚゚ ゚゚゚ ー
 ー ゚゚゚゚ ゚゚゚゚ ー
 ノトトトトトトトトヒトトトトトトトトヒトトトトトトトトヒトトトトトトトトヒトトトトトトトトサ ノトトトトトトトトトトトトトトトトトトトトトトトトトトサ 
 ウ ンウ ンウ ンウ ンウ ンウ ウイアー Dealer:ーアイウー
 ウ ンウ ンウ ンウ ンウ ンウ ネトトトトトトトトトトトトトトトトトトトトトトトトトトシロ
 ウ ンウ ンウ ンウ ンウ ンウ ロロ゚゚ロロ
 ネトトトトトトトトハトトトトトトトトハトトトトトトトトハトトトトトトトトハトトトトトトトトシ ロン゙ロ
 ロン゙ロ
 ローーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーロ ロロワワロロ
 ーノトトトトトトトトヒトトトトトトトトヒトトトトトトトトヒトトトトトトトトヒトトトトトトトトサー ノトトトトトトトトトトトトトトトトトトトトトトトトトトサロ
 ーウロンウロンウロンウロンウロンウー ウイアー You:ーアイウー
 ーウロンウロンウロンウロンウロンウー フヘトトトトトトトトトトトトトトトトトトトトトトトトヘケー
 ーウロンウロンウロンウロンウロンウー ウイアー Cash $ ーアイウー
 ーネトトトトトトトトハトトトトトトトトハトトトトトトトトハトトトトトトトトハトトトトトトトトシー ウイアー Wager : ーアイウー
゙ローーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーロロネトトトトトトトトトトトトトトトトトトトトトトトトトトシン
 ゚

629
dbp/scripts/blackjack.mps Normal file
View File

@ -0,0 +1,629 @@
// ==========================================================================
// BLACKJACK.MPS
//
// This is a simple BlackJack game that I wrote to test out MPL features
// about a year or two ago. I decided to port it to the later MPL version
// for the same purposes.
//
// Changelog:
// - Added an improved AI for the dealer. He's a lot less predictable and
// makes more logical decisions now.
// - When the player busts, the dealers hidden card is now shown. This is
// just for people curious if they would have won by standing.
// - Fixed a few display bugs
// - Now saves your money between sessions
// - Added Top 10 list
// - Added command line option RESET to reset scores
// - Added command line option TOP10 to show top 10 and exit
// - No longer allows negative numbers to be a Wager.
// ==========================================================================
Uses
User;
Const
Version = '1.4';
CashStart = 1000;
CardJack = 11;
CardQueen = 12;
CardKing = 13;
CardAce = 14;
SuitClub = 1;
SuitSpade = 2;
SuitHeart = 3;
SuitDiamond = 4;
Type
PlayerRec = Record
UserID : LongInt;
Name : String[30];
Cash : LongInt;
LastOn : LongInt;
End;
Type
TopTenRec = Record
User : String[35];
Cash : LongInt;
Date : LongInt;
End;
Type
CardRec = Record
Suit : Byte;
Card : Byte;
End;
Var
DataPath : String;
Deck : Array[1..52] of CardRec;
Player : PlayerRec;
PlayerNumber : LongInt = -1;
Wager : LongInt;
Player_Score : Byte;
Player_Cards : Byte;
Dealer_Score : Byte;
Dealer_Hidden : Byte;
Dealer_Cards : Byte;
Dealer_Aces : Byte;
Procedure LoadPlayer;
Var
F : File;
T : PlayerRec;
Begin
GetThisUser;
PlayerNumber := -1;
Player.UserID := UserIndex;
Player.Cash := CashStart;
fAssign (F, DataPath + 'blackjack.ply', 66);
fReset (F);
If IoResult <> 0 Then fReWrite(F);
While Not fEof(F) Do Begin
fReadRec (F, T);
If T.UserID = UserIndex Then Begin
Player := T;
PlayerNumber := fPos(F) / SizeOf(Player);
Break;
End;
End;
fClose (F);
Player.LastOn := DateTime;
Player.Name := UserAlias;
End;
Procedure SavePlayer;
Var
F : File;
Begin
fAssign (F, DataPath + 'blackjack.ply', 66);
fReset (F);
If PlayerNumber <> -1 Then
fSeek (F, SizeOf(Player) * (PlayerNumber - 1));
Else
fSeek (F, fSize(F));
fWriteRec (F, Player);
fClose (F);
End;
Procedure ExecuteTopTen;
Var
TopList : Array[1..10] of TopTenRec;
Count1 : Byte;
Count2 : Byte;
Count3 : Byte;
F : File;
OnePerson : PlayerRec;
Begin
Write ('|16|CL|10Sorting top scores...');
For Count1 := 1 to 10 Do Begin
TopList[Count1].User := 'None';
TopList[Count1].Cash := 0;
TopList[Count1].Date := 0;
End;
fAssign (F, DataPath + 'blackjack.ply', 66);
fReset (F);
If IoResult = 0 Then
While Not fEof(F) Do Begin
fReadRec (F, OnePerson);
For Count2 := 1 to 10 Do
If TopList[Count2].Cash <= OnePerson.Cash Then Begin
For Count3 := 10 DownTo Count2 + 1 Do
TopList[Count3] := TopList[Count3 - 1]
TopList[Count2].Cash := OnePerson.Cash;
TopList[Count2].User := OnePerson.Name;
TopList[Count2].Date := OnePerson.LastOn;
Break;
End;
End;
ClrScr;
GotoXY (21, 3);
Write ('|07Mystic BlackJack - Top 10 Money Holders');
GotoXY (5, 6);
Write ('## User Date Cash');
GotoXY (5, 7);
Write ('|02' + strRep(#196, 68) + '|10');
For Count1 := 1 to 10 Do Begin
GotoXY (5, 7 + Count1);
Write (PadLT(Int2Str(Count1), 2, ' '));
GotoXY (9, 7 + Count1);
Write (TopList[Count1].User);
GotoXY (42, 7 + Count1);
Write (DateStr(TopList[Count1].Date, 1));
GotoXY (53, 7 + Count1);
Write (PadLT(strComma(TopList[Count1].Cash), 20, ' '));
End;
GotoXY (5, 18);
Write ('|02' + strRep(#196, 68));
GotoXY (26, 20);
Write ('|02Press |08[|15ENTER|08] |02to continue|PN');
End;
Procedure DeckCreate;
Var
Suits,
Numbers,
Index : Byte;
Begin
Index := 1;
For Suits := 1 to 4 Do
For Numbers := 2 to CardAce Do Begin
Deck[Index].Suit := Suits;
Deck[Index].Card := Numbers;
Index := Index + 1;
End;
End;
Procedure DeckShuffle;
Var
OneCard : CardRec;
Shuffle,
CardNum1,
CardNum2 : Byte;
Begin
For Shuffle := 1 to 200 Do Begin
CardNum1 := Random(51) + 1;
CardNum2 := Random(51) + 1;
OneCard := Deck[CardNum1];
Deck[CardNum1] := Deck[CardNum2];
Deck[CardNum2] := OneCard;
End;
End;
Function GetCardNumber (Num: Byte) : String;
Var
Res,
Color : String[3];
Begin
Case Deck[Num].Card of
1..10 : Res := PadLT(Int2Str(Deck[Num].Card), 2, ' ');
CardJack : Res := ' J';
CardQueen : Res := ' Q';
CardKing : Res := ' K';
CardAce : Res := ' A';
End;
Case Deck[Num].Suit of
SuitClub : GetCardNumber := '|08' + Res + #05;
SuitSpade : GetCardNumber := '|08' + Res + #06;
SuitHeart : GetCardNumber := '|04' + Res + #03;
SuitDiamond : GetCardNumber := '|04' + Res + #04;
End
End
Procedure DrawCard (X, Y, Showing, Num: Byte);
Var
Str : String;
Begin
If Y = 1 Then Y := 17 Else Y := 10;
X := (X - 1) * 9 + 5;
Str := GetCardNumber(Num);
Case Showing of
1 : Begin
GotoXY (X, Y);
Write ('|23' + Str + ' ');
GotoXY (X, Y + 1);
Write (' ');
GotoXY (X, Y + 2);
Write (' ' + Str + '|16');
End;
2 : Begin
GotoXY (X, Y);
Write ('|07|20° °° °');
GotoXY (X, Y + 1);
Write ('° °° °');
GotoXY (X, Y + 2);
Write ('° °° °|16');
End;
Else
GotoXY (X, Y);
Write ('|00|16 ');
GotoXY (X, Y + 1);
Write (' ');
GotoXY (X, Y + 2);
Write (' |07');
End;
End;
Procedure Print (Str1, Str2: String);
Begin
GotoXY (54, 13);
Write (strRep(' ', 23));
GotoXY (54, 13);
Write (Str1);
GotoXY (54, 14);
Write (strRep(' ', 23));
GotoXY (54, 14);
Write (Str2);
End
Procedure GetNewCard (Dealer: Boolean);
Var
Count,
Value,
Aces : Byte;
Begin
Aces := 0;
Dealer_Aces := 0;
If Dealer Then Begin
Dealer_Score := 0;
Dealer_Cards := Dealer_Cards + 1;
DrawCard (Dealer_Cards, 2, 1, Dealer_Cards + 5);
For Count := 1 to Dealer_Cards Do Begin
Value := Deck[Count + 5].Card;
If Value = CardAce Then Begin
Value := 11;
Dealer_Aces := Dealer_Aces + 1;
End Else
If Value > 10 Then
Value := 10;
Dealer_Score := Dealer_Score + Value;
End;
If Dealer_Score > 21 And Dealer_Aces > 0 Then Begin
Repeat
Dealer_Score := Dealer_Score - 10;
Dealer_Aces := Dealer_Aces - 1;
Until Dealer_Score < 22 or Dealer_Aces = 0;
If Deck[6].Card = CardAce And Dealer_Aces = 0 Then
Dealer_Hidden := 1;
End;
End Else Begin
Player_Score := 0;
Player_Cards := Player_Cards + 1;
DrawCard (Player_Cards, 1, 1, Player_Cards);
For Count := 1 to Player_Cards Do Begin
Value := Deck[Count].Card;
If Value = CardAce Then Begin
Value := 11;
Aces := Aces + 1;
End Else
If Value > 10 Then
Value := 10;
Player_Score := Player_Score + Value;
End;
If Player_Score > 21 Then
While Player_Score > 21 And Aces > 0 Do Begin
Player_Score := Player_Score - 10;
Aces := Aces - 1;
End;
End;
End;
Procedure DrawCash
Begin
GotoXY (64, 19);
Write ('|15|17' + PadRT(strComma(Player.Cash), 10, ' ') + '|16');
End;
Procedure UpdateScores;
Begin
GotoXY (65, 10);
Write ('|15' + Int2Str(Dealer_Score - Dealer_Hidden));
GotoXY (65, 17);
Write (Int2Str(Player_Score));
End
Procedure Initialize;
Procedure EraseInput;
Begin
GotoXY (64, 20);
Write ('|17 |16');
GotoXY (64, 20);
End;
Var
X,
Y : Byte;
Begin
If Player.Cash = 0 Then Begin
Print ('|15No cash|07? |10House loans ya', '|07$|15' + strComma(CashStart) + '|07. |12Press a key');
Player.Cash := CashStart;
ReadKey;
End;
Print (' |12|16Shuffling deck...', '');
DeckShuffle;
For Y := 1 to 2 Do
For X := 1 to 5 Do
DrawCard(X, Y, 3, 1);
GotoXY (65, 10);
Write (' ');
GotoXY (65, 17);
Write (' ');
DrawCash;
Print (' |15|16Enter your wager:', ' |02(|14$|15' + Int2Str(Player.Cash) + ' |14max|02)|14|17');
EraseInput;
Write('|17');
Wager := Abs(Str2Int(Input(10, 10, 1, '')));
If Wager > Player.Cash Then Wager := 0;
If Wager = 0 Then Begin
EraseInput;
Exit;
End;
Dealer_Cards := 1;
Player_Cards := 0;
Dealer_Hidden := Deck[6].Card;
If Dealer_Hidden = CardAce Then
Dealer_Hidden := 11
Else
If Dealer_Hidden > 10 Then
Dealer_Hidden := 10
DrawCard(1, 2, 2, 6)
GetNewCard(False);
GetNewCard(False);
GetNewCard(True);
UpdateScores;
End;
Procedure AdjustScore (Mode: Byte);
Begin
Case Mode of
0 : Begin
Player.Cash := Player.Cash - Wager;
If Player.Cash < 0 Then Player.Cash := 0;
End;
1 : Begin
Player.Cash := Player.Cash + Wager;
If Player.Cash > 99999999 Then Player.Cash := 99999999;
End;
End;
DrawCash;
End;
Var
Ch : Char;
GoForIt : Boolean;
Begin
ClrScr;
If Graphics = 0 Then Begin
WriteLn ('Sorry, this game requires ANSI graphics.|CR|PA');
Halt;
End;
DataPath := JustPath(ProgName);
If Upper(ParamStr(1)) = 'TOP10' Then Begin
ExecuteTopTen;
Halt;
End;
If Upper(ParamStr(1)) = 'RESET' Then Begin
If InputYN('|CR|12Reset blackjack scores? ') Then Begin
FileErase(DataPath + 'blackjack.ply');
WriteLn ('|CRScores have been reset|CR|CR|PA');
End;
Halt;
End;
Randomize;
DeckCreate;
LoadPlayer;
DispFile (DataPath + 'blackjack')
WriteXY (12, 23, 8, 'Mystic BlackJack v' + Version + ' Code: g00r00 Art: Grymmjack');
DrawCash;
Repeat
Print (' |15Want to play a game?', ' |10(|14Y|02/|14N|10)|08: |07')
If OneKey('YN', False) = 'N' Then Break;
Initialize;
If Wager = 0 Then Continue;
If Dealer_Score = 21 Then
If Deck[6].Card = CardJack or Deck[7].Card = CardJack Then
If Deck[6].Suit = SuitClub or Deck[7].Suit = SuitClub or Deck[6].Suit = SuitSpade or Deck[7].Suit = SuitSpade Then Begin
DrawCard (1, 2, 1, 6);
Dealer_Hidden := 0;
AdjustScore(0);
UpdateScores;
Print (' |12Dealer has Black Jack', ' Press any key.');
ReadKey
Continue;
End
If Player_Score = 21 Then
If Deck[1].Card = CardJack or Deck[2].Card = CardJack Then
If Deck[1].Suit = SuitClub or Deck[2].Suit = SuitClub or Deck[1].Suit = SuitSpade or Deck[2].Suit = SuitSpade Then Begin
Print (' |12Player has Black Jack', ' Press any key.');
AdjustScore(1);
ReadKey;
Continue;
End;
Repeat
If Player_Cards < 5 Then Begin
Print ('|10[|14H|10]|07it, |10[|14S|10]|07tand, |10[|14Q|10]|07uit', '|08: |07');
Ch := OneKey('HSQ', False);
End Else
Ch := 'S'
Case Ch of
'Q' : Begin
AdjustScore(0);
Break;
End;
'H' : Begin
GetNewCard(False);
UpdateScores;
If Player_Score > 21 Then Begin
AdjustScore(0);
DrawCard(1,2,1,6); // show dealer hidden card
Print (' |12Player busted', ' Press a key.');
ReadKey;
Break;
End;
// Dealer AI Rules for Hit
// <16 = 100%
// 16 = 50% (100 with ace as 1)
// 17 = 25% ( 50 with ace as 1)
// 18 = 10% ( 25 with ace as 1)
// >18 = 0%
Case Dealer_Score of
1..
15 : GoForIt := True;
16 : If Dealer_Aces = 0 Then
GoForIt := Random(1) = 0
Else
GoForIt := True;
17 : If Dealer_Aces = 0 Then
GoForIt := Random(3) = 0
Else
GoForIt := Random(1) = 0;
18 : If Dealer_Aces = 0 Then
GoForIt := Random(9) = 0
Else
GoForIt := Random(3) = 0;
Else
GoForIt := False; // Dealer decides to stand
End;
If GoForIt Then Begin
GetNewCard(True);
UpdateScores;
If Dealer_Score > 21 Then Begin
DrawCard (1, 2, 1, 6);
Dealer_Hidden := 0;
AdjustScore(1);
UpdateScores;
Print(' |12Dealer busted', ' Press a key.');
ReadKey;
Break;
End;
End;
End;
'S' : Begin
DrawCard (1, 2, 1, 6);
Dealer_Hidden := 0;
UpdateScores;
While Dealer_Score < Player_Score and Dealer_Score < 22 and Dealer_Cards < 5 Do Begin
GetNewCard(True);
UpdateScores;
End
If Dealer_Score > 21 Then Begin
AdjustScore(1);
Print(' |12Dealer busted', ' Press a key.');
ReadKey;
End Else
If Player_Score > 21 Then Begin
AdjustScore(0);
Print(' |12Player busted', ' Press a key.');
ReadKey;
End Else
If Player_Score > Dealer_Score Then Begin
AdjustScore(1);
Print(' |12Player wins!', ' Press a key.');
ReadKey;
End Else
If Dealer_Score > Player_Score Then Begin
AdjustScore(0);
Print(' |12Dealer wins!', ' Press a key.');
ReadKey;
End Else Begin
AdjustScore(2);
Print(' |12Push. No winner.', ' Press a key.');
ReadKey;
End;
Break;
End;
End;
Until False;
Until False;
SavePlayer;
ExecuteTopTen;
End.

611
dbp/scripts/blackjack.ms Normal file
View File

@ -0,0 +1,611 @@
Const
Version = '1.4';
CashStart = 1000;
CardJack = 11;
CardQueen = 12;
CardKing = 13;
CardAce = 14;
SuitClub = 1;
SuitSpade = 2;
SuitHeart = 3;
SuitDiamond = 4;
Type
PlayerRec = Record
UserID : LongInt;
Name : String[40];
Cash : LongInt;
LastOn : LongInt;
End;
Type
TopTenRec = Record
User : String[35];
Cash : LongInt;
Date : LongInt;
End;
Type
CardRec = Record
Suit : Byte;
Card : Byte;
End;
Var
DataPath : String;
Deck : Array[1..52] of CardRec;
Player : PlayerRec;
PlayerNumber : LongInt = -1;
Wager : LongInt;
Player_Score : Byte;
Player_Cards : Byte;
Dealer_Score : Byte;
Dealer_Hidden : Byte;
Dealer_Cards : Byte;
Dealer_Aces : Byte;
Procedure LoadPlayer;
Var
// F : File;
T : PlayerRec;
Begin
//GetThisUser;
PlayerNumber := -1;
Player.UserID := 1; // UserIndex;
Player.Cash := CashStart;
//fAssign (F, DataPath + 'blackjack.ply', 66);
//fReset (F);
//If IoResult <> 0 Then fReWrite(F);
// While Not fEof(F) Do Begin
//fReadRec (F, T);
//If T.UserID = UserIndex Then Begin
// Player := T;
// PlayerNumber := fPos(F) / SizeOf(Player);
//Break;
//End;
//End;
// fClose (F);
//Player.LastOn := DateTime;
Player.Name := 'Test User'; //UserAlias;
End;
Procedure SavePlayer;
//Var
// F : File;
Begin
(*
fAssign (F, DataPath + 'blackjack.ply', 66);
fReset (F);
If PlayerNumber <> -1 Then
fSeek (F, SizeOf(Player) * (PlayerNumber - 1));
Else
fSeek (F, fSize(F));
fWriteRec (F, Player);
fClose (F);
*)
End;
(*
Procedure ExecuteTopTen;
Var
TopList : Array[1..10] of TopTenRec;
Count1 : Byte;
Count2 : Byte;
Count3 : Byte;
F : File;
OnePerson : PlayerRec;
Begin
Write ('|16|CL|10Sorting top scores...');
For Count1 := 1 to 10 Do Begin
TopList[Count1].User := 'None';
TopList[Count1].Cash := 0;
TopList[Count1].Date := 0;
End;
fAssign (F, DataPath + 'blackjack.ply', 66);
fReset (F);
If IoResult = 0 Then
While Not fEof(F) Do Begin
fReadRec (F, OnePerson);
For Count2 := 1 to 10 Do
If TopList[Count2].Cash <= OnePerson.Cash Then Begin
For Count3 := 10 DownTo Count2 + 1 Do
TopList[Count3] := TopList[Count3 - 1]
TopList[Count2].Cash := OnePerson.Cash;
TopList[Count2].User := OnePerson.Name;
TopList[Count2].Date := OnePerson.LastOn;
Break;
End;
End;
ClrScr;
GotoXY (21, 3);
Write ('|07Mystic BlackJack - Top 10 Money Holders');
GotoXY (5, 6);
Write ('## User Date Cash');
GotoXY (5, 7);
Write ('|02' + strRep(#196, 68) + '|10');
For Count1 := 1 to 10 Do Begin
GotoXY (5, 7 + Count1);
Write (PadLT(Int2Str(Count1), 2, ' '));
GotoXY (9, 7 + Count1);
Write (TopList[Count1].User);
GotoXY (42, 7 + Count1);
Write (DateStr(TopList[Count1].Date, 1));
GotoXY (53, 7 + Count1);
Write (PadLT(strComma(TopList[Count1].Cash), 20, ' '));
End;
GotoXY (5, 18);
Write ('|02' + strRep(#196, 68));
GotoXY (26, 20);
Write ('|02Press |08[|15ENTER|08] |02to continue|PN');
End;
*)
Procedure DeckCreate;
Var
Suits,
Numbers,
Index : Byte;
Begin
Index := 1;
For Suits := 1 to 4 Do
For Numbers := 2 to CardAce Do Begin
Deck[Index].Suit := Suits;
Deck[Index].Card := Numbers;
Index := Index + 1;
End;
End;
Procedure DeckShuffle;
Var
OneCard : CardRec;
Shuffle,
CardNum1,
CardNum2 : Byte;
Begin
For Shuffle := 1 to 200 Do Begin
CardNum1 := Random(51) + 1;
CardNum2 := Random(51) + 1;
OneCard := Deck[CardNum1];
Deck[CardNum1] := Deck[CardNum2];
Deck[CardNum2] := OneCard;
End;
End;
Function GetCardNumber (Num: Byte) : String;
Var
Res,
Color : String[3];
Begin
Case Deck[Num].Card of
1..10 : Res := PadLeft(Int2Str(Deck[Num].Card), 2, ' ');
CardJack : Res := ' J';
CardQueen : Res := ' Q';
CardKing : Res := ' K';
CardAce : Res := ' A';
End;
Case Deck[Num].Suit of
SuitClub : Result := '|08' + Res + #05;
SuitSpade : Result := '|08' + Res + #06;
SuitHeart : Result := '|04' + Res + #03;
SuitDiamond : Result := '|04' + Res + #04;
End;
End;
Procedure DrawCard (X, Y, Showing, Num: Byte);
Var
Str : String;
Begin
If Y = 1 Then Y := 17 Else Y := 10;
X := (X - 1) * 9 + 5;
Str := GetCardNumber(Num);
Case Showing of
1 : Begin
GotoXY (X, Y);
Write ('|23' + Str + ' ');
GotoXY (X, Y + 1);
Write (' ');
GotoXY (X, Y + 2);
Write (' ' + Str + '|16');
End;
2 : Begin
GotoXY (X, Y);
Write ('|07|20° °° °');
GotoXY (X, Y + 1);
Write ('° °° °');
GotoXY (X, Y + 2);
Write ('° °° °|16');
End;
Else
Begin
GotoXY (X, Y);
Write ('|00|16 ');
GotoXY (X, Y + 1);
Write (' ');
GotoXY (X, Y + 2);
Write (' |07');
End;
End;
End;
Procedure PrintInfo (Str1, Str2: String);
Begin
GotoXY (54, 13);
Write (strRep(' ', 23));
GotoXY (54, 13);
Write (Str1);
GotoXY (54, 14);
Write (strRep(' ', 23));
GotoXY (54, 14);
Write (Str2);
End;
Procedure GetNewCard (Dealer: Boolean);
Var
Count,
Value,
Aces : Byte;
Begin
Aces := 0;
Dealer_Aces := 0;
If Dealer Then Begin
Dealer_Score := 0;
Dealer_Cards := Dealer_Cards + 1;
DrawCard (Dealer_Cards, 2, 1, Dealer_Cards + 5);
For Count := 1 to Dealer_Cards Do Begin
Value := Deck[Count + 5].Card;
If Value = CardAce Then Begin
Value := 11;
Dealer_Aces := Dealer_Aces + 1;
End Else
If Value > 10 Then
Value := 10;
Dealer_Score := Dealer_Score + Value;
End;
If (Dealer_Score > 21) and (Dealer_Aces > 0) Then Begin
Repeat
Dealer_Score := Dealer_Score - 10;
Dealer_Aces := Dealer_Aces - 1;
Until (Dealer_Score < 22) or (Dealer_Aces = 0);
If (Deck[6].Card = CardAce) And (Dealer_Aces = 0) Then
Dealer_Hidden := 1;
End;
End Else Begin
Player_Score := 0;
Player_Cards := Player_Cards + 1;
DrawCard (Player_Cards, 1, 1, Player_Cards);
For Count := 1 to Player_Cards Do Begin
Value := Deck[Count].Card;
If Value = CardAce Then Begin
Value := 11;
Aces := Aces + 1;
End Else
If Value > 10 Then
Value := 10;
Player_Score := Player_Score + Value;
End;
If Player_Score > 21 Then
While (Player_Score > 21) And (Aces > 0) Do Begin
Player_Score := Player_Score - 10;
Aces := Aces - 1;
End;
End;
End;
Procedure DrawCash;
Begin
GotoXY (64, 19);
Write ('|15|17' + PadRight(Comma(Player.Cash), 10, ' ') + '|16');
End;
Procedure UpdateScores;
Begin
GotoXY (65, 10);
Write ('|15' + Int2Str(Dealer_Score - Dealer_Hidden));
GotoXY (65, 17);
Write (Int2Str(Player_Score));
End;
Procedure Initialize;
Procedure EraseInput;
Begin
GotoXY (64, 20);
Write ('|17 |16');
GotoXY (64, 20);
End;
Var
X,
Y : Byte;
Begin
If Player.Cash = 0 Then Begin
PrintInfo ('|15No cash|07? |10House loans ya', '|07$|15' + Comma(CashStart) + '|07. |12Press a key');
Player.Cash := CashStart;
ReadKey;
End;
PrintInfo (' |12|16Shuffling deck...', '');
DeckShuffle;
For Y := 1 to 2 Do
For X := 1 to 5 Do
DrawCard(X, Y, 3, 1);
GotoXY (65, 10);
Write (' ');
GotoXY (65, 17);
Write (' ');
DrawCash;
PrintInfo (' |15|16Enter your wager:', ' |02(|14$|15' + Int2Str(Player.Cash) + ' |14max|02)|14|17');
EraseInput;
Write('|17');
Wager := Abs(Str2Int(Input(10, 10, 1, '')));
If Wager > Player.Cash Then Wager := 0;
If Wager = 0 Then Begin
EraseInput;
Exit;
End;
Dealer_Cards := 1;
Player_Cards := 0;
Dealer_Hidden := Deck[6].Card;
If Dealer_Hidden = CardAce Then
Dealer_Hidden := 11
Else
If Dealer_Hidden > 10 Then
Dealer_Hidden := 10;
DrawCard(1, 2, 2, 6);
GetNewCard(False);
GetNewCard(False);
GetNewCard(True);
UpdateScores;
End;
Procedure AdjustScore (Mode: Byte);
Begin
Case Mode of
0 : Begin
Player.Cash := Player.Cash - Wager;
If Player.Cash < 0 Then Player.Cash := 0;
End;
1 : Begin
Player.Cash := Player.Cash + Wager;
If Player.Cash > 99999999 Then Player.Cash := 99999999;
End;
End;
DrawCash;
End;
Var
Ch : Char;
GoForIt : Boolean;
Begin
ClrScr;
If Graphics = 0 Then Begin
WriteLn ('Sorry, this game requires ANSI graphics.|CR|PA');
Halt;
End;
DataPath := ExtractPath(ScriptName);
(*
If Upper(ParamStr(1)) = 'TOP10' Then Begin
ExecuteTopTen;
Halt;
End;
*)
(*
If Upper(ParamStr(1)) = 'RESET' Then Begin
If InputYN('|CR|12Reset blackjack scores? ') Then Begin
FileErase(DataPath + 'blackjack.ply');
WriteLn ('|CRScores have been reset|CR|CR|PA');
End;
Halt;
End;
*)
Randomize;
DeckCreate;
LoadPlayer;
ShowFile (DataPath + 'blackjack');
WriteXY (12, 23, 8, 'Mystic BlackJack v' + Version + ' Code: g00r00 Art: Grymmjack');
DrawCash;
Repeat
PrintInfo (' |15Want to play a game?', ' |10(|14Y|02/|14N|10)|08: |07');
If OneKey('YN', '', False) = 'N' Then Break;
Initialize;
If Wager = 0 Then Continue;
If Dealer_Score = 21 Then
If (Deck[6].Card = CardJack) or (Deck[7].Card = CardJack) Then
If (Deck[6].Suit = SuitClub) or (Deck[7].Suit = SuitClub) or (Deck[6].Suit = SuitSpade) or (Deck[7].Suit = SuitSpade) Then Begin
DrawCard (1, 2, 1, 6);
Dealer_Hidden := 0;
AdjustScore(0);
UpdateScores;
PrintInfo (' |12Dealer has Black Jack', ' Press any key.');
ReadKey;
Continue;
End;
If Player_Score = 21 Then
If (Deck[1].Card = CardJack) or (Deck[2].Card = CardJack) Then
If (Deck[1].Suit = SuitClub) or (Deck[2].Suit = SuitClub) or (Deck[1].Suit = SuitSpade) or (Deck[2].Suit = SuitSpade) Then Begin
PrintInfo (' |12Player has Black Jack', ' Press any key.');
AdjustScore(1);
ReadKey;
Continue;
End;
Repeat
If Player_Cards < 5 Then Begin
PrintInfo ('|10[|14H|10]|07it, |10[|14S|10]|07tand, |10[|14Q|10]|07uit', '|08: |07');
Ch := OneKey('HSQ', '', False);
End Else
Ch := 'S';
Case Ch of
'Q' : Begin
AdjustScore(0);
Break;
End;
'H' : Begin
GetNewCard(False);
UpdateScores;
If Player_Score > 21 Then Begin
AdjustScore(0);
DrawCard(1,2,1,6); // show dealer hidden card
PrintInfo (' |12Player busted', ' Press a key.');
ReadKey;
Break;
End;
// Dealer AI Rules for Hit
// <16 = 100%
// 16 = 50% (100 with ace as 1)
// 17 = 25% ( 50 with ace as 1)
// 18 = 10% ( 25 with ace as 1)
// >18 = 0%
Case Dealer_Score of
1..
15 : GoForIt := True;
16 : If Dealer_Aces = 0 Then
GoForIt := Random(1) = 0
Else
GoForIt := True;
17 : If Dealer_Aces = 0 Then
GoForIt := Random(3) = 0
Else
GoForIt := Random(1) = 0;
18 : If Dealer_Aces = 0 Then
GoForIt := Random(9) = 0
Else
GoForIt := Random(3) = 0;
Else
GoForIt := False; // Dealer decides to stand
End;
If GoForIt Then Begin
GetNewCard(True);
UpdateScores;
If Dealer_Score > 21 Then Begin
DrawCard (1, 2, 1, 6);
Dealer_Hidden := 0;
AdjustScore(1);
UpdateScores;
PrintInfo (' |12Dealer busted', ' Press a key.');
ReadKey;
Break;
End;
End;
End;
'S' : Begin
DrawCard (1, 2, 1, 6);
Dealer_Hidden := 0;
UpdateScores;
While (Dealer_Score < Player_Score) and (Dealer_Score < 22) and (Dealer_Cards < 5) Do Begin
GetNewCard(True);
UpdateScores;
End;
If Dealer_Score > 21 Then Begin
AdjustScore(1);
PrintInfo (' |12Dealer busted', ' Press a key.');
ReadKey;
End Else
If Player_Score > 21 Then Begin
AdjustScore(0);
PrintInfo (' |12Player busted', ' Press a key.');
ReadKey;
End Else
If Player_Score > Dealer_Score Then Begin
AdjustScore(1);
PrintInfo (' |12Player wins!', ' Press a key.');
ReadKey;
End Else
If Dealer_Score > Player_Score Then Begin
AdjustScore(0);
PrintInfo (' |12Dealer wins!', ' Press a key.');
ReadKey;
End Else Begin
AdjustScore(2);
PrintInfo (' |12Push. No winner.', ' Press a key.');
ReadKey;
End;
Break;
End;
End;
Until Shutdown;
Until Shutdown;
SavePlayer;
//ExecuteTopTen;
End.

128
dbp/scripts/bulletin.mps Normal file
View File

@ -0,0 +1,128 @@
// ---------------------------------------------------------------------------
// BULLETIN.MPS: Bulletin Menu Script for Mystic BBS v1.12+
// ---------------------------------------------------------------------------
// This MPL program creates a simple bulletin menu. The following parameters
// must be passed when running this script:
//
// BULLETIN [menu name] [base bulletin name] [check]
//
// The first option [menu name] passes the name of the bulletin menu to
// display. For example, if the text "BULLETIN" is passed, the script will
// display the display file "BULLETIN.XXX" as the menu.
//
// The second option [base bulletin name] is the base bulletin name for each
// actual bulletin. This can be no longer than 6 characters in length. For
// example, if "BULLET" was passed as the base bulletin name, when the user
// types in "1" and hits enter, the script will display BULLET1.XXX
//
// The next command line is optional. If you supply the option "CHECK", the
// script will check for updated bulletins since the user's last call, then
// prompt them to read the bulletins if there are new bulletins available.
// This is handy to put as an FIRSTCMD command during the login somewhere,
// as the default Mystic BBS installation does.
//
// Feel free to make any modifications to this code that you want!
//
// ---------------------------------------------------------------------------
Uses CFG
Uses USER
Var
CheckNew : Boolean
MenuName : String
Prefix : String
Done : Boolean
InStr : String
NewNum : Byte
NewStr : String
Procedure Scan_New_Bulletins (Root: String)
Begin
NewStr := '';
NewNum := 0;
FindFirst (Root + PreFix + '*.*', 63);
While DosError = 0 Do Begin
If DirTime > UserLastOn And Upper(Copy(DirName, 1, Pos('.', DirName) - 1)) <> 'BULLETIN' Then Begin
InStr := Copy(DirName, 7, Pos('.', DirName) - 7) + ' '
If Pos(InStr, NewStr) = 0 Then Begin
NewStr := NewStr + InStr;
NewNum := NewNum + 1;
End
End
FindNext;
End;
FindClose;
End;
Begin
If ParamCount < 2 Then Begin
WriteLn ('|CRERROR (BULLETIN.MPS): Invalid command line');
Halt;
End;
GetThisUser;
MenuName := ParamStr(1);
Prefix := ParamStr(2);
CheckNew := False;
Done := False;
If ParamCount > 2 Then
If Upper(ParamStr(3)) = 'CHECK' Then
CheckNew := True
// Scan in theme's text directory for new bulletins
Scan_New_Bulletins(CfgTextPath);
// If theme has a configured fallback theme, scan that theme for new
// bulletins too
If CfgTextFB <> '' Then
Scan_New_Bulletins(CfgThemePath + CfgTextFB + PathChar + 'text' + PathChar);
// If theme is configured to fallback to default configured theme, scan that
// directory for new bulletins
If CfgTFallBack Then
Scan_New_Bulletins(cfgThemePath + CfgDefTheme + PathChar + 'text' + PathChar);
If NewNum = 0 Then
NewStr := 'None'
If CheckNew Then Begin
If NewNum = 0 Then Begin
WriteLn ('|CL|01[|10þ|01] |09There are no new bulletins.')
Halt
End Else
If Not InputYN('|CL|01[|10þ|01] |09New bulletins: |15' + Int2Str(NewNum) + '|09 Read them now? ') Then
Halt
End;
DispFile (MenuName)
Repeat
WriteLn ('|CR|09New Bulletins |08-> |07' + NewStr)
Write ('|09Command (?/List) |08-> |07')
InStr := Input(4, 4, 12, '')
If InStr = '?' Then
DispFile (MenuName)
Else
If InStr = 'Q' Then
Done := True
Else
If InStr = '' Then
DispFile (MenuName)
Else
If Not DispFile (PreFix + InStr) Then
WriteLn ('|CRERROR: Bulletin not found.')
Until Done
End

View File

@ -0,0 +1,59 @@
# ------------------------------------------
# Phenom Productions Presents...
# mod: Day In History v1.0
# author: Smooth <Phenom>
# date created: May 24, 2022
# ------------------------------------------
import mystic_bbs as bbs;
from mystic_bbs import *
from bs4 import BeautifulSoup
import requests
from unidecode import unidecode
from datetime import date
import time
dataSrc = requests.get('https://www.timeanddate.com/on-this-day/')
soup = BeautifulSoup(dataSrc.content, 'html.parser')
today = date.today()
def getNumEnding():
dayStr = today.strftime('%d')
if dayStr[-1] == '1' and len(dayStr)==1:
return 'st'
elif dayStr[-1] == '2':
return 'nd'
elif dayStr[-1] == '3':
return 'rd'
else:
return 'th'
def generateEventList():
writeln('|CL')
writeln(' |08-|03---|10-|03--|10-|03-|10--------- ------------------------------------ ------ -- - ')
writeln(' |18|15>> |10Day In History v1.0 |00>>|16|02>> |15by |11Smooth |03<|15PHEN0M|03>')
writeln(' |08-|03--|10--|03---|10-|03-|10----- --- -------------------------------- ------ -- - ')
writeln(' |20|00>>|16 |13On |14THIS DAY|13, These |14EVENTS |13Happened... |04:: |14' + today.strftime('%B') + ' ' + today.strftime('%d') + getNumEnding() + '|04 ::')
writeln(' |08-|03--|10--|03---|10-|03-|10--|03--- |10--- ---------------------------- ------ -- - ')
writeln('')
index = 1
events = soup.find_all("h3", class_="otd-title")
for event in events:
writeln(' |11' +event.text.strip()[0:4] + ' |03<|08:|03> |15' + unidecode(event.text.strip()[5::]))
writeln('')
if index == 5:
break
index += 1
writeln(' |08-|03---|10-|03--|10-|03-|10-----|03-|10--------------------------------------- --- --- -- - ')
writeln(' |20|00>>|16 |15Generated on ' + today.strftime('%B %d|07,|15 %Y') + ' at ' + time.strftime('%I|07:|15%M %p'))
writeln(' |08-|03---|10-|03--|10-|03-|10-----|03-|10--------------------------------------- --- --- -- - ')
writeln('|PA')
if __name__ == '__main__':
generateEventList()

118
dbp/scripts/filelist.mpy Normal file
View File

@ -0,0 +1,118 @@
###################################################
# Simple File Listing Example using Mystic Python #
###################################################
# List files in the user's current file base
from mystic_bbs import *
# filelist flags
file_offline = int("01")
file_invalid = int("02")
file_deleted = int("04")
file_failed = int("08")
file_free = int("10")
file_hatched = int("20")
# Load the current user and then load their current file base
# but fail if they have not selected a file base
user = getuser(0)
fbase = getfbaseid(user["fbase"])
if fbase is None:
writeln ("|CRYou have not selected a file base yet!|CR|CR|PA")
quit()
# Open the file list then check to make sure its open before reading
# data from it
flist = fl_open(fbase["filename"]);
if flist is None:
writeln("Cannot open file listing. Press a key|PN")
quit()
done = False
# Seek to the first file in the list and loop while a file is found calling
# next after each file so the next one will be loaded. Seek should always be
# called before cycling through the list
fl_seek(flist, 0, True)
while fl_found(flist) and not done and not shutdown():
# Load the file information into a dictionary and then get the file
# description
fileinfo = fl_getfile(flist)
filedesc = fl_getdesc(flist)
# Show the file
writeln("|CL|14File #" + str(fileinfo["number"]) + " of " + str(fileinfo["total"]))
writeln("")
writeln("|09File: |11" + fileinfo["filename"])
writeln("|09Date: " + datestr(dated2u(fileinfo["date"]), "NNN DD YYYY HH:II:SS"))
writeln("Size: " + str(fileinfo["size"]))
writeln("DLs : " + str(fileinfo["dls"]))
writeln("ULer: " + fileinfo["ulname"])
flags = ""
if fileinfo["flags"] & file_offline:
flags = flags + "OFFLINE "
if fileinfo["flags"] & file_invalid:
flags = flags + "INVALID "
if fileinfo["flags"] & file_deleted:
flags = flags + "DELETED "
if fileinfo["flags"] & file_failed:
flags = flags + "FAILED "
if fileinfo["flags"] & file_free:
flags = flags + "FREE "
if fileinfo["flags"] & file_hatched:
flags = flags + "HATCHED "
if flags == "":
flags = "NONE"
writeln("Flag: |13" + flags)
writeln("")
writeln("|14Description (" + str(fileinfo["lines"]) + " lines):")
writeln("|03")
# only print up to the first 10 lines so we can fit it on the screen
for line in range(min(fileinfo["lines"], 10)):
writeln(filedesc[line])
writeln("")
write("|16|09File List: (|11A|09)gain, (|11P|09)revious, (|11ENTER|09) Next, (|11Q|09) to Quit: |14")
ch = onekey(chr(13) + 'APQ', True);
if ch == 'A':
# do nothing here so it redisplays the same file
pass
elif ch == 'P':
fl_prev(flist)
elif ch == 'Q':
done = True
break
else:
fl_next(flist);
# Close the file list and report that we're done
fl_close(flist)
writeln("|CR|12Program complete: Press a key|PN");

9
dbp/scripts/mailread.mps Normal file
View File

@ -0,0 +1,9 @@
// Very basic MPL program to execute from command line.
//
// This loads the ANSI message reader for you, and then will log off after,
// allowing Mystic to be used similar to something like GoldEd.
Begin
MenuCmd('MI', '');
End.

12
dbp/scripts/menucmd.mps Normal file
View File

@ -0,0 +1,12 @@
// Very basic MPL program designed to execute a menu command from a prompt
// or from command line.
Var
Cmd : String[2];
Data : String;
Begin
Cmd := Upper(Copy(ProgParams, 1, 2));
Data := Copy(ProgParams, 4, Length(ProgParams));
MenuCmd(Cmd, Data);
End.

289
dbp/scripts/mpldemo.mps Normal file
View File

@ -0,0 +1,289 @@
// ---------------------------------------------------------------------------
// MPLDEMO.MPS : Mystic Programming Language (MPL) Demonstration Program
// ---------------------------------------------------------------------------
// Written by g00r00 for Mystic BBS Version 1.07. Feel free to do whatever
// you want with this source code! This is just something quick I put
// together. Updated for Mystic 1.10
// ---------------------------------------------------------------------------
USES CFG;
USES USER;
Procedure FadeWrite (X, Y: Byte; S: String);
Begin
GotoXY (X, Y);
Write ('|08' + S);
BufFlush;
Delay (250);
GotoXY (X, Y);
Write ('|07' + S);
BufFlush;
Delay (250);
GotoXY (X, Y);
Write ('|15' + S);
BufFlush;
Delay (250);
GotoXY (X, Y);
Write ('|07' + S);
BufFlush;
End;
Procedure Draw_M (X: Byte);
Begin
GotoXY (X - 1, 9);
Write (' |17|09²|16|01ÛÛÛßÛßÛ');
GotoXY (X - 1, 10);
Write (' |17|09±|16|01ÛÛÛ Û');
GotoXY (X - 1, 11);
Write (' |01ÛÛÛÛ Û');
BufFlush;
End;
Procedure Draw_P (Y: Byte)
Begin
GotoXY (39, Y - 1);
Write (' ');
GotoXY (39, Y);
Write ('|09|17²|01|16ÛÛÛßÛ');
GotoXY (39, Y + 1);
Write ('|09|17±|01|16ÛÛÛÜÛ');
GotoXY (39, Y + 2);
Write ('ÛÛÛÛ');
BufFlush;
End;
Procedure Draw_L (X : Byte)
Begin
GotoXY (X, 9);
Write ('|09|17²|01|16ÛÛÛ ');
GotoXY (X, 10);
Write ('|09|17±|01|16ÛÛÛ ');
GotoXY (X, 11);
Write ('ÛÛÛÛÜÛ ');
BufFlush;
End;
Procedure Draw_Animated_Intro;
Var
Count : Byte;
Begin
ClrScr;
For Count := 2 to 30 Do Begin
Draw_M(Count);
Delay(5);
End;
For Count := 1 to 9 Do Begin
Draw_P(Count);
Delay(20);
End;
For Count := 74 DownTo 46 Do Begin
Draw_L(Count);
Delay(5);
End;
FadeWrite (24, 13, 'The Mystic BBS Programming Language');
FadeWrite (34, 15, 'Press Any Key');
Write ('|PN');
End;
Procedure DrawHeader;
Begin
WriteLn ('|CL');
WriteLn (' |09|17²|01|16ÛÛÛßÛßÛ |09|17²|01|16ÛÛÛßÛ |09|17²|01|16ÛÛÛ');
WriteLn (' |09|17±|01|16ÛÛÛ Û |09|17±|01|16ÛÛÛÜÛ |09|17±|01|16ÛÛÛ');
WriteLn (' ÛÛÛÛ Û |11y s t i c |01ÛÛÛÛ |11r o g r a m m i n g |01ÛÛÛÛÜÛ |11a n g u a g e');
WriteLn (' |09ÄÄÄÄÄÄ |01ß |09ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|07');
WriteLn ('');
End;
Procedure InputDemo;
Var
Str : String;
Begin
DrawHeader;
WriteLn (' This demonstrates some of the types of input functions which');
WriteLn (' are available within the Mystic Programming Language.|CR');
Write (' |09Regular input ') Str := Input(30, 30, 11, '');
Write (' |09Caps input ') Str := Input(30, 30, 12, '');
Write (' |09Proper input ') Str := Input(30, 30, 13, '');
Write (' |09Phone input ') Str := Input(12, 12, 14, '');
Write (' |09Date input ') Str := Input(8, 8, 15, '');
Write (' |09Password input ') Str := Input(20, 20, 16, '');
WriteLn ('|CR |07Text can also be pushed into the input buffer:|CR');
Write ('|09 Regular Input ') Str := Input(30, 30, 11, 'Default Text');
WriteLn ('|CR |07Input can be used without the input field:|CR');
Write ('|09 Regular Input |11') Str := Input(30, 30, 1, 'Default Text');
DrawHeader;
WriteLn ('|07 The input functions also make full use of ANSI editing. Arrow');
WriteLn (' keys can be used to move around the field, as well as the HOME,');
WriteLn (' END, DEL, and CTRL-Y keys. Up arrow restores previously entered text!');
WriteLn ('|CR Text longer than the input box can be entered in both ANSI and');
WriteLn (' non-ansi terminal modes. For example: Type more than 30 characters');
WriteLn (' below, while experimenting with the other ANSI editing functions');
WriteLn (' mentioned above.');
Write ('|CR |09Scroll Input ') Str := Input(30, 255, 11, '');
Write ('|CR |PA');
End;
Procedure UserListingHeader;
Begin
DrawHeader;
WriteLn (' User Name Location SecLev Sex');
WriteLn (' ------------------------------------------------------------------');
End;
Procedure UserListing;
Var
Count : Word = 1;
Begin
UserListingHeader;
While GetUser(Count) Do Begin
WriteLn (' ' + PadRT(UserAlias, 25, ' ') + ' ' + PadRT(UserAddress, 25, ' ') + ' ' +
PadLT(Int2Str(UserSec), 6, ' ') + ' ' + UserSex);
If Count % 10 = 0 Then Begin
Write (' Continue? (Y/N): ');
Case OneKey('YN', True) of
'Y' : UserListingHeader;
'N' : Break;
End;
End;
Count := Count + 1;
End;
WriteLn ('|CR Total of |15' + Int2Str(Count - 1) + ' |07users listed.|CR');
Write (' |PA');
End;
Procedure PlayNumberGame;
Var
GuessNum : Byte;
Answer,
Temp : Integer;
Begin
DrawHeader;
WriteLn (' |12Choose a number between 1 and 1000. You have 10 guesses.')
GuessNum := 0;
Answer := Random(999) + 1;
Repeat
GuessNum := GuessNum + 1;
Write ('|CR|03 Guess #' + Int2Str(GuessNum) + ': ');
Temp := Str2Int(Input(4, 4, 12, ''))
If Temp > Answer Then
WriteLn ('|CR |07The number is less than ' + Int2Str(Temp))
Else
If Temp < Answer Then
WriteLn ('|CR |07The number is greater than ' + Int2Str(Temp))
Else
GuessNum := 10;
Until GuessNum = 10;
If Temp = Answer Then
WriteLn ('|CR |12You won! The number was: ' + Int2Str(Answer))
Else
WriteLn ('|CR |12You lost. The number was: ' + Int2Str(Answer));
Write ('|CR |PA');
End;
Function MainMenu : Byte;
Var
Ch : Char;
Done : Boolean = False;
Bar : Byte = 1;
Ops : Array[1..4] of String[20];
Begin
DrawHeader;
WriteLn (' The Mystic BBS Programming Language (MPL for short) allows for the');
WriteLn (' ultimate in flexibility. With it''s Pascal-like syntax, the MPL');
WriteLn (' provides an easy and flexible way to modify internal Mystic BBS');
WriteLn (' functions, or even create your own online games! Check it out!');
WriteLn ('|09|CR |$D66Ä|CR');
WriteLn (' |09(|101|09) |03Input demo |08-> |07See some example input functions');
WriteLn (' |09(|102|09) |03User listing |08-> |07See a list of user accounts');
WriteLn (' |09(|103|09) |03Number game |08-> |07Play a simple number game');
WriteLn (' |09(|10Q|09) |03Quit Demo |08-> |07Return to the BBS menu');
WriteLn ('|09|CR |$D66Ä');
Write (' |07Select an option with arrow keys, or enter option number ');
Ops[1] := 'Input demo';
Ops[2] := 'User listing';
Ops[3] := 'Number game';
Ops[4] := 'Quit Demo';
Repeat
If Graphics > 0 Then Begin
GotoXY (12, 13 + Bar);
Write ('|01|23 ' + Ops[Bar] + ' |16');
End;
Ch := ReadKey;
If Graphics > 0 and IsArrow Then Begin
GotoXY (12, 13 + Bar);
Write ('|03 ' + Ops[Bar] + ' ');
Case Ch of
#72 : If Bar > 1 Then Bar := Bar - 1;
#80 : If Bar < 4 Then Bar := Bar + 1;
End;
End Else
Case Upper(Ch) of
#13 : If Graphics > 0 Then Begin
MainMenu := Bar;
Done := True;
End;
'Q' : Begin
MainMenu := 4;
Done := True;
End;
Else
If Str2Int(Ch) > 0 And Str2Int(Ch) < 4 Then Begin
MainMenu := Str2Int(Ch);
Done := True;
End;
End;
Until Done;
End;
Begin
Draw_Animated_Intro;
Repeat
Case MainMenu of
1 : InputDemo;
2 : UserListing;
3 : PlayNumberGame;
4 : Break;
End;
Until False;
GotoXY (1, 20);
End.

475
dbp/scripts/mpltest.mps Normal file
View File

@ -0,0 +1,475 @@
// Comment test
/*
Comment test! /* comments */ (* comments *)
// more comments
*/
(*
comment test (* embedded comments *) /* embedded comments */
// more comments
*)
procedure testcase;
var
number : longint;
num2 : longint;
num3 : longint;
num4 : real;
ch1 : char;
str1 : string[20];
begin
write ('Testing CASE statement... ')
number := 73;
num2 := 13;
num3 := -1;
num4 := 12.12;
ch1 := 'A';
str1 := 'hello';
case number of
68 : begin
writeln('number is 68!');
end
69 : writeln('number is 69!');
70, 71 : writeln('number is 70 or 71');
72..80 : begin
case num2 of
10 : writeln('num2 = 10');
11 : begin
writeln('num2 = 11');
end;
13 : case num3 of
-1: begin
case num4 of
12.12: begin
case ch1 of
'A' : case str1 of
'hello' : writeln('PASSED');
end;
end;
end;
end;
end;
end;
else
writeln('num2 is something else');
end;
end;
else
writeln('number is not found!');
end;
end;
procedure testnumbers;
var
num1,
num2 : longint;
num3 : array[1..10] of byte;
num4 : array[1..10, 1..10, 1..10] of byte;
num5 : longint;
begin
write ('Testing NUMBERS... ');
num1 := 2 + 12 * 2;
num2 := -10;
num3[1] := 50;
num4[1,1,1] := (6 - 1) + 5 * 4;
num5 := 10 % 2 ^ 3; // 2 to 3rd is 8, 10 modulus 8 = 2
// floating point, mods, powers, PEDMAS, etc...
if (num2 = -10) and (num1 = 26) and (num2 = -10) and (num3[1] = 50) and
(num4[1,1,1] = 25) and (num5 = 2) then
writeln('PASSED')
else
writeln('FAILED');
end;
procedure testrecords;
type
testrec = record // total 502 bytes:
x : byte;
y : byte;
d : array[1..10,1..5] of string[9];
end;
var
test : array[1..2] of testrec;
test1 : testrec;
test2 : testrec;
passed : boolean = false;
begin
Write ('Testing RECORDS... ');
test[1].d[10,5] := 'test1';
test[2].x := 1;
test[2].y := 2;
test[2].d[1,1] := 'hi';
test[2].d[2,1] := 'hello'
if (test[1].d[10,5][1] = 't') and (test[2].x = 1) and (test[2].y = 2) and
(test[2].d[1,1] = 'hi') and (test[2].d[2,1] = 'hello') then
passed := true;
if passed then begin
test1.x := 1;
test1.y := 2;
test1.d[1,1] := 'hi';
test1.d[2,1] := 'hello';
test2 := test1;
test[1] := test2;
passed := (test1.x = test2.x) and (test1.y = test2.y) and
(test1.d[1,1] = test2.d[1,1]) and (test1.d[2,1] = test2.d[2,1]) and
(test[1].x = test2.x) and (test[1].y = test2.y);
end;
if passed then
writeln ('PASSED')
else
writeln ('FAILED');
end;
procedure testprocedures;
procedure testproc1;
procedure testproc2
begin
WriteLn ('PASSED')
end;
begin
testproc2
end;
begin
Write ('Testing PROCEDURES... ');
testproc1;
end;
procedure testrecursive (loop:byte)
begin
If loop = 255 then
write('Testing RECURSIVE...');
loop := loop - 1;
if loop > 1 then
testrecursive(loop)
else
writeln('PASSED')
end;
procedure testfunctions;
function testfunc1 (p1,p2:byte; p3:string) : byte;
begin
if (p1 <> 10) or (p2 <> 5) or (p3 <> 'hello') then
testfunc1 := 5
else
testfunc1 := 10;
end;
{$syntax iplc}
func testfunc2 : string {
testfunc2 = "ok"
}
{$syntax pascal}
begin
Write ('Testing FUNCTIONS... ');
if (testfunc1(10, 5, 'hello') = 10) and (testfunc2 = 'ok') then
writeln ('PASSED')
else
writeln ('FAILED')
end;
procedure testvarpassing;
procedure testit (var str: string);
begin
str := str + ' world';
end;
var
str : string;
begin
write ('Testing VARPASSING... ');
str := 'hello';
testit(str);
if str = 'hello world' then
writeln ('PASSED')
else
writeln ('FAILED');
end;
procedure teststringindex;
var
str : string;
begin
write ('Testing STRING IDX...');
str := 'hello world';
str[6] := #33;
if (str[1] = str[1]) and (str[2] = #101) and (str[6] = '!') then
writeln ('PASSED')
else
writeln ('FAILED')
end;
procedure testloops;
var
count1 : byte;
count2 : byte;
count3 : byte;
count4 : byte;
count5 : byte;
loop1 : byte;
loop2 : byte;
begin
Write ('Testing LOOPS...');
count1 := 0;
while count1 < 100 do begin
count1 := count1 + 1;
if count1 < 5 then continue;
if count1 < 5 then writeln('FAIL');
if count1 = 10 then break;
end;
count2 := 0;
repeat
count2 := count2 + 1;
if count2 < 5 then continue;
if count2 < 5 then writeln('FAIL');
if count2 = 10 then break;
until count2 = 100;
for count3 := 1 to 100 do begin
if count3 < 5 then continue;
if count3 < 5 then writeln('FAIL');
if count3 = 10 then break;
end;
loop1 := 0;
for count4 := 1 to 10 do begin
count4 := 10;
loop1 := loop1 + 1;
end;
loop2 := 0;
for count5 := 10 downto 1 do begin
count5 := 1;
loop2 := loop2 + 1;
end;
if (count1 = 10) and (count2 = 10) and (count3 = 10) and (count4 = 10) and
(loop1 = 1) and (count5 = 1) and (loop2 = 1) then
writeln ('PASSED')
else
writeln ('FAILED');
end;
procedure testconsts;
const
const1 = 'hello';
const2 = true;
const3 = 555;
const4 = 'A';
var
str1 : string;
bol1 : boolean;
ch1 : char;
num1 : longint;
ok1 : boolean;
ok2 : boolean;
ok3 : boolean;
ok4 : boolean;
begin
write ('Testing CONSTS...');
ok1 := false;
ok2 := false;
ok3 := false;
ok4 := false;
str1 := 'hello';
bol1 := true;
num1 := 555;
ch1 := 'A'
case str1 of
const1 : ok1 := true;
end;
case bol1 of
const2 : ok2 := true;
end;
case num1 of
const3 : ok3 := true;
end;
case ch1 of
const4 : ok4 := true;
end;
if ok1 and ok2 and ok3 and ok4 then
writeln ('PASSED')
else
writeln ('FAILED')
end;
procedure testsyntaxparsing;
{$syntax iplc} // Iniquity-like syntax for the oldskool or maybe C-heads
// been thinking about moving it to be closer to javascript
// than IPL?
proc testiplc {
@ byte test1, test2, test3 = 10;
write ("PASS");
@ string anywhere = "we can do this wherever..."
}
{$syntax pascal}
procedure testpascal;
var
test1, test2, test3 : byte = 10; // not a pascal standard!
begin
writeln('ED');
var anywhere : string = 'wait! pascal doesn''t allow this!';
end;
begin
write ('Testing SYNTAX... ');
testiplc;
testpascal;
end;
procedure testfileio;
const
fmReadWriteDenyNone = 66;
var
f : file;
b : array[1..11] of Char;
s : string[20];
l : longint;
begin
write ('Testing FILEIO... ');
// file IO is completely random. no text/file crap like in pascal
// but it operates very close to pascal, just easier. splitting the
// fOpen into fassign/frewrite/freset allows us to not have to open
// and close files constantly to reset or recreate it as in MPL 1.
// And doing away with raw numbers and adding a File type makes things
// much more manageable (and gives us virtually unlimited files)
fassign (f, 'testmps.dat', fmReadWriteDenyNone);
frewrite (f);
fwriteln (f, 'Hello world');
freset (f);
fread (f, b[1], 11);
freset (f);
freadln (f, s);
freset (f);
fseek (f, fsize(f));
if not feof(f) or fpos(f) <> fsize(f) then begin
writeln('FAILED');
fclose(f);
exit;
end;
fclose (f);
if fileexist('testmps.dat') then fileerase('testmps.dat');
if ioresult <> 0 or fileexist('testmps.dat') then begin
writeln('FAILED');
exit;
end;
// we can read data directly in to char arrays or strings as if it were
// a char array. no problems with reading non-pascal structs.
if b[1] = 'H' and b[2] = 'e' and b[3] = 'l' and s = 'Hello world' then
writeln('PASSED')
else
writeln('FAILED');
end;
procedure testrecordfileIO;
type
myuserrecord = record
username : string[30];
somevalue : array[1..5] of byte;
end;
var
f : file;
u : myuserrecord;
a : byte;
begin
Write ('Testing RECORDFILEIO... ');
u.username := 'testuser';
for a := 1 to 5 do
u.somevalue[a] := 1;
fassign (f, 'testmps.dat', 66);
frewrite (f);
fwriterec (f, u);
fillchar(u, sizeof(u), #0);
freset (f);
freadrec (f, u);
fclose (f);
if fileexist('testmps.dat') then fileerase('testmps.dat');
if (u.username = 'testuser') and (u.somevalue[1] = 1) and (u.somevalue[2] = 1) and
(u.somevalue[3] = 1) and (u.somevalue[4] = 1) and (u.somevalue[5] = 1) then
writeln('PASSED')
else
writeln('FAILED');
end;
begin
writeln ('|07|16|CLMystic BBS Programming Language Test Module');
writeln ('');
testcase;
testnumbers;
testrecords;
testprocedures;
testfunctions;
testrecursive(255);
testvarpassing;
teststringindex;
testloops;
testconsts;
testsyntaxparsing;
testfileio;
testrecordfileio;
writeln('|CRAll tests complete. Press a key.|PN');
end

1674
dbp/scripts/mrc_client.mps Normal file

File diff suppressed because it is too large Load Diff

112
dbp/scripts/mrc_stat1.mps Normal file
View File

@ -0,0 +1,112 @@
// ::::: __________________________________________________________________ :::::
// : ____\ ._ ____ _____ __. ____ ___ _______ .__ ______ .__ _____ .__ _. /____ :
// __\ .___! _\__/__ / _|__ / _/_____ __| \ gRK __|_ \ __ |_ \ !___. /__
// \ ! ___/ |/ /___/ | \__\ ._/ __\/ \ \___/ |/ \/ \_./ \___ ! /
// /__ (___ /\____\____|\ ____| / /___|\ ______. ____\|\ ___) __\
// /____ \_/ ___________ \_/ __ |__/ _______ \_/ ____ |___/ _____ \_/ ____\
// : /________________________________________________________________\ :
// ::::: + p H E N O M p R O D U C T I O N S + :::::
// ==============================================================================
//
// -----------------------------------------
// - modName: mrcstatus applet sample -
// - majorVersion: 1 -
// - minorVersion: 1 -
// - author: StackFault -
// - publisher: Phenom Productions -
// - website: https://www.phenomprod.com -
// - email: stackfault@bottomlessabyss.net -
// - bbs: bbs.bottomlessabyss.net:2023 -
// -----------------------------------------
//
// **********************************************************************
// Sample applet for MRC stats to use in the BBS
// This is a bit more advanced and will require some modding knowledge
// **********************************************************************
//
// Displays the status of the server to the users and some other stats
// Requires mrc_client.py v1.2.9
//
// You can play with the ansi file provided to give it the look you want
// It's just an example so you know how to integrate it together
//
// The applet does not PAUSE since it can be used to overlay on an existing
// menu, so if you want to use it as a distinct menu item, you will have to
// add a pause after executing it.
//
// To display this applet in your menu:
// 1. Add a new menu entry to your desired menu.
// 2. Set Hotkey to 'AFTER' by pressing CTRL-L on the Hotkey field
// 3. Set your menu command to 'GX' and use 'mrc_stat1' as data
//
// NOTE: The sample applet will display at X1, Y1 by default, to change that
// you will have to edit the ANSI file and the *LocAttr variables below.
//
// Your new applet should now be shown on your menu screen.
//
Uses Cfg
Var SvrQueuePath : String = CfgDataPath + 'mrc' // Align with mrc_client.py config
// Location of each items
Var StateLocAttr : String = '|[X03|[Y03|16' // Location of State text
Var BBSesLocAttr : String = '|[X02|[Y05|16|15' // Location of BBSes count
Var RoomsLocAttr : String = '|[X08|[Y05|16|15' // Location of Rooms count
Var UsersLocAttr : String = '|[X14|[Y05|16|15' // Location of Users count
Var LevelLocAttr : String = '|[X21|[Y05|16|15' // Location of Activity Level
// Activity Level Strings
Var ActivityBar : Array[1..4] of String[6]
// Look of the state text
Var Offline : String = '|20|15 OFFLINE |16' // Text for offline status
Var Online : String = '|18|01 ON-LINE |16' // Text for online status
Var State : String = Offline
Var BBSes, Rooms, Users, Level : Integer = 0
Begin
Var F1:File
Var F:String = SvrQueuePath + PathChar + 'mrcstats.dat'
Var L:String = ''
// Activity Meter display
// Now allows to display completely different string/level
ActivityBar[1] := '|08NUL' // No Activity
ActivityBar[2] := '|14LOW' // Low
ActivityBar[3] := '|10MED' // Moderate
ActivityBar[4] := '|12HI ' // High
// Read the stats file from mrc_client.py
// Do not read if older than 120 seconds
FindFirst(F, 66)
If DirTime + 120 > DateTime Then
Begin
FAssign(F1, F, 66)
FReset(F1)
FReadLn (F1, L)
FClose(F1)
End
FindClose
// Fetch the stats from the file
If Length(L) > 0 and WordCount(L, ' ') > 3 Then
Begin
BBSes := Str2Int(WordGet(1, L, ' '))
Rooms := Str2Int(WordGet(2, L, ' '))
Users := Str2Int(WordGet(3, L, ' '))
Level := Str2Int(WordGet(4, L, ' '))
If BBSes > 0 Then
State := Online
End
// Draw the applet
Write('|[X01|[Y01|16|DFmrcstat.ans|')
Write(StateLocAttr+State)
Write(BBSesLocAttr+PadCT(Int2Str(BBSes) ,5, ' '))
Write(RoomsLocAttr+PadCT(Int2Str(Rooms), 5, ' '))
Write(UsersLocAttr+PadCT(Int2Str(Users), 5, ' '))
Write(LevelLocAttr+ActivityBar[Level+1])
Write('|[X01|[Y24')
End

109
dbp/scripts/mrc_stat2.mps Normal file
View File

@ -0,0 +1,109 @@
// ::::: __________________________________________________________________ :::::
// : ____\ ._ ____ _____ __. ____ ___ _______ .__ ______ .__ _____ .__ _. /____ :
// __\ .___! _\__/__ / _|__ / _/_____ __| \ gRK __|_ \ __ |_ \ !___. /__
// \ ! ___/ |/ /___/ | \__\ ._/ __\/ \ \___/ |/ \/ \_./ \___ ! /
// /__ (___ /\____\____|\ ____| / /___|\ ______. ____\|\ ___) __\
// /____ \_/ ___________ \_/ __ |__/ _______ \_/ ____ |___/ _____ \_/ ____\
// : /________________________________________________________________\ :
// ::::: + p H E N O M p R O D U C T I O N S + :::::
// ==============================================================================
//
// -----------------------------------------
// - modName: mrcstatus bar sample -
// - majorVersion: 1 -
// - minorVersion: 1 -
// - author: StackFault -
// - publisher: Phenom Productions -
// - website: https://www.phenomprod.com -
// - email: stackfault@bottomlessabyss.net -
// - bbs: bbs.bottomlessabyss.net:2023 -
// -----------------------------------------
//
// **********************************************************************
// Sample applet for MRC stats to use in the BBS
// This is a bit more advanced and will require some modding knowledge
// **********************************************************************
//
// Displays the status of the server to the users and some other stats.
// Requires mrc_client.py v1.2.7
//
// To display this applet in your menu:
// 1. Add a new menu entry to your desired menu.
// 2. Set Hotkey to 'AFTER' by pressing CTRL-L on the Hotkey field
// 3. Set your menu command to 'GX' and use 'mrc_stat2' as data
//
// Your new applet should now be shown on your menu screen.
Uses Cfg
Var SvrQueuePath : String = CfgDataPath + 'mrc' // Align with mrc_client.py config
// Location of each items
Var BarLocAttr : String = '|[X32|[Y02|16' // Location of Bar text
Var StateLocAttr : String = '|[X36|[Y02|16' // Location of State text
Var BBSesLocAttr : String = '|[X49|[Y02|16|15' // Location of BBSes count
Var RoomsLocAttr : String = '|[X58|[Y02|16|15' // Location of Rooms count
Var UsersLocAttr : String = '|[X67|[Y02|16|15' // Location of Users count
Var LevelLocAttr : String = '|[X76|[Y02|16|15' // Location of Activity Level
// Define the Bar look and text
Var BarText : String = '|15M|11RC|08[ ] ' +
'|15B|11BS|03|08[ ] ' +
'|15R|11ms|08[ ] ' +
'|15U|11sr|08[ ] ' +
'|15A|11ct|08[ ]|07'
// Activity Level Strings
Var ActivityBar : Array[1..4] of String[6]
// Look of the state text
Var Offline : String = '|12OFFLINE|16' // Text for offline status
Var Online : String = '|10ON-LINE|16' // Text for online status
Var State : String = Offline
Var BBSes, Rooms, Users, Level : Integer = 0
Begin
Var F1:File
Var F:String = SvrQueuePath + PathChar + 'mrcstats.dat'
Var L:String = ''
// Activity Meter display
// Now allows to display completely different string/level
ActivityBar[1] := '|07NUL' // No Activity
ActivityBar[2] := '|14LOW' // Low
ActivityBar[3] := '|10MED' // Moderate
ActivityBar[4] := '|12HI ' // High
// Read the stats file from mrc_client.py
// Do not read if older than 120 seconds
FindFirst(F, 66)
If DirTime + 120 > DateTime Then
Begin
FAssign(F1, F, 66)
FReset(F1)
FReadLn (F1, L)
FClose(F1)
End
FindClose
// Fetch the stats from the file
If Length(L) > 0 and WordCount(L, ' ') > 3 Then
Begin
BBSes := Str2Int(WordGet(1, L, ' '))
Rooms := Str2Int(WordGet(2, L, ' '))
Users := Str2Int(WordGet(3, L, ' '))
Level := Str2Int(WordGet(4, L, ' '))
If BBSes > 0 Then
State := Online
End
// Draw the applet
Write(BarLocAttr+BarText)
Write(StateLocAttr+State)
Write(BBSesLocAttr+PadCT(Int2Str(BBSes) ,3, ' '))
Write(RoomsLocAttr+PadCT(Int2Str(Rooms), 3, ' '))
Write(UsersLocAttr+PadCT(Int2Str(Users), 3, ' '))
Write(LevelLocAttr+ActivityBar[Level+1])
Write('|[X01|[Y24')
End

114
dbp/scripts/msgread.mpy Normal file
View File

@ -0,0 +1,114 @@
#####################################################
# Simple Message Reader Example using Mystic Python #
#####################################################
# Reads messages in the user's current message base
# With a pause prompt and basic navigation
from mystic_bbs import *
# Load the current user and then load their current message base
# but fail if they have not selected a message base
user = getuser(0)
mbase = getmbaseid(user["mbase"])
if mbase is None:
writeln ("|CRYou have not selected a message base yet!|CR|CR|PA")
quit()
# Open the message base then check to make sure its open before reading
# data from it
msg = msg_open(mbase["path"] + mbase["filename"]);
if msg is None:
quit()
done = False
# Seek to the first message in the base and loop while a message
# is found, calling msg_next after each message so the next one
# will be loaded. Seek must be called first even if reading
# from the first message.
msg_seek(msg, 0)
while msg_found(msg) and not done and not shutdown():
# Load the message header information into a dictionary
# and the message text into a list. The message header
# must be loaded before the message text will be accessible
msghdr = msg_gethdr(msg)
msgtext = msg_gettxt(msg)
# Show the message header, setting a line counter that can
# be used to pause the screen
writeln("|16|CL|15Msg#: " + str(msghdr["number"]) + " of " + str(msghdr["highmsg"]))
writeln("|14From: " + msghdr["from"]);
writeln("|13 To: " + msghdr["to"]);
writeln("|11Subj: " + msghdr["subj"]);
writeln("|09-------------------------------------------------------------------------------|07");
pausecount = 4
# loop through each line in the message (list) and pause when
# we get more than 23 lines
for line in msgtext:
# before printing a line check if we need to pause
if pausecount >= 23:
pausecount = 1
write("|14*PAUSE* Continue? (|15Y|14)es, (|15N|14)o, (|15Q|14)uit: |07")
ch = onekey(chr(13) + 'YNQ', False)
# after getting input, erase the pause prompt then process the input
backspace(wherex(), True)
if ch == 'Q':
done = True
break
elif ch == 'N':
break
# increase pause counter and send a line of message text
# unless it is a kludge line:
if (line == "") or (line != "" and line[0] != chr(1)):
pausecount += 1
writeln(line)
# At end of message, so lets give a prompt if we didn't get a quit
# from the pause prompt:
if not done:
write("|CR|16|09MSG READER: (|11A|09)gain, (|11P|09)revious, (|11ENTER|09) Next, (|11Q|09) to Quit: ")
ch = onekey(chr(13) + 'APQ', True);
if ch == 'A':
# do nothing here so it redisplays the same msg
pass
elif ch == 'P':
if msghdr["number"] != 1:
msg_prev(msg)
elif ch == 'Q':
done = True
break
else:
msg_next(msg);
# Close the message base and report that we're done
msg_close(msg)
writeln("|CR|12Program complete: Press a key|PN");

37
dbp/scripts/onlyonce.mps Normal file
View File

@ -0,0 +1,37 @@
// ONLYONCE.MPS: Display a file only if it has been updated since the users
// last login. Written by g00r00
// Usage:
// Menu command: GX
// Data: onlyonce myfile
//
// The above example will display myfile.XXX from current text directory
// only if it has been updated since the users last login
Uses
CFG,
USER;
Var
FN : String;
Begin
GetThisUser;
FN := JustFileName(ParamStr(1));
If Pos(PathChar, ParamStr(1)) = 0 Then
FN := CfgTextPath + FN;
FindFirst (FN + '.*', 0);
While DosError = 0 Do Begin
If DirTime > DateU2D(UserLastOn) Then Begin
DispFile(FN);
Break;
End;
FindNext
End;
FindClose;
End.

144
dbp/scripts/rumors.mps Normal file
View File

@ -0,0 +1,144 @@
// ==========================================================================
// File: RUMORS.MPS
// Desc: Rumors engine for Mystic BBS v1.10
// Author: g00r00
// ==========================================================================
//
// INSTALLATION:
//
// 1) Copy RUMORS.MPS into its own directory or your scripts path and
// compile it with MPLC or MIDE
//
// 2) For each menu you want to display rumors on, you must edit with the
// MCFG -> Menu Editor and add the following menu command:
//
// HotKey: EVERY
// Command: GX (Execute MPL)
// Data: rumors show
//
// Note that if you have it in a path other than the scripts path, then
// you will have to specify that in the Data field above. For example
// <path>rumors show
//
// This MPL will create a rumors.dat file in the same directory where
// you have located the compiled MPX.
//
// 3) When rumors show is ran, it generates a rumor and stores it into
// the &1 MCI code. Therefore, you will need to edit your menu prompt
// or ANSI to include |&1 into it where you want it to display the rumor
//
// If for some reason to are auto executing other functions which use
// PromptInfo MCI codes (specially &1) you will want to add your EVERY
// execution of this MPL program AFTER those, so that the last value
// assigned to the MCI code was done by the rumor engine.
//
// 4) There are options in addition to the SHOW command in which you can
// use to add other functionality to your BBS. They are:
//
// ADD : Allows adding of a rumor to the rumor database. The database
// keeps the 50 most currently added rumors.
//
// EXAMPLE:
//
// Hotkey: A
// Command: GX (Execute MPL)
// Data: rumors add
//
// CUSTOMIZATION:
//
// If you wish to customize the prompts used in the Rumors, you can do
// so by changing the PromptAdd and PromptSave values set below. Do
// whatever you want with this. It was developed to demonstration IPLC
// which is one of MPL's alternative syntax options.
//
// ==========================================================================
{$syntax iplc}
const
// Prompts used
PromptAdd = "|CR|15E|07n|08ter |07y|08our |07r|08umor|CR:|07"
PromptSave = "|CR|15S|07a|08ve |07t|08his |07r|08umor? |XX"
// max number of characters for a rumor
rumorSize = 78;
proc rumoradd {
@ string str
@ string(50) data
@ byte datasize, count
@ file f
write(promptadd)
str = input(rumorSize, rumorSize, 1, "")
if str == "" exit
if !inputyn(promptsave) exit
fassign (f, justpath(progname) + "rumors.dat", 2)
freset (f);
if ioresult != 0 frewrite(f);
while !feof(f) && datasize < 50 {
datasize = datasize + 1
freadln(f, data(datasize))
}
fclose(f)
if datasize == 50 {
for count = 1 to 49
data(count) = data(count+1)
} else
datasize = datasize + 1
data(datasize) = str
frewrite(f)
for count = 1 to datasize
fwriteln(f, data(count));
fclose(f)
}
proc rumorshow {
@ string(50) data
@ byte datasize, count
@ file f
fassign (f, justpath(progname) + "rumors.dat", 2)
freset (f)
if ioresult != 0 exit
while !feof(f) && datasize < 50 {
datasize = datasize + 1
freadln(f, data(datasize))
}
count = random(datasize) + 1
datasize = 0
freset(f)
while datasize != count {
datasize = datasize + 1
freadln(f, data(datasize))
}
fclose(f)
setpromptinfo(1, data(datasize))
}
{
@ string options = upper(progparams);
if pos("ADD", options) > 0
rumoradd()
else
if pos("SHOW", options) > 0
rumorshow()
else
writeln("RUMORS: Invalid option: press a key|PN")
}

90
dbp/scripts/testbox.mps Normal file
View File

@ -0,0 +1,90 @@
// =========================================================================
// TESTBOX.MPS : MPL example of using the ANSI box class functions
// =========================================================================
Procedure SetBoxDefaults (Handle: LongInt; Header: String);
Begin
// Mystic boxes default to the grey 3D style boxes used in the
// configuration, but you can change all aspects of them if you want
// to using the functions below.
If Header <> '' Then
BoxHeader (Handle, // Box class handle
0, // Header justify (0=center, 1=left, 2=right)
31, // Header attribute
Header); // Header text
// Available Box Frame types:
//
// 1 = ÚÄ¿³³ÀÄÙ
// 2 = ÉÍ»ººÈͼ
// 3 = ÖÄ·ººÓĽ
// 4 = Õ͸³³Ô;
// 5 = ÛßÛÛÛÛÜÛ
// 6 = ÛßÜÛÛßÜÛ
// 7 =
// 8 = .-.||`-'
// Box shadows (if enabled) will actually read the characters under them
// and shade them using the shadow attribute.
BoxOptions (Handle, // Box class handle
2, // Box frame type (1-8)
False, // Use "3D" box shading effect
8, // Box attribute
8, // Box 3D effect attr1 (if on)
8, // Box 3D effect attr2 (if on)
8, // Box 3D effect attr3 (if on)
True, // Use box shadowing
112); // Box shadow attribute
End;
Var
BoxHandle : LongInt;
Begin
PurgeInput;
ClrScr;
WriteXY (20, 5, 12, 'This is a line of text that will have a window');
WriteXY (20, 6, 12, 'drawn over top of it. Press a key to draw a box');
ReadKey;
ClassCreate (BoxHandle, 'box');
BoxOpen (BoxHandle, // Box class handle
20, // top X corner of box
5, // top Y corner of box
60, // bottom X corner of box
10); // bottom Y corner of box
WriteXY (1, 1, 15, 'Press any key to close the box');
WriteXY (1, 2, 15, 'The screen contents under the box will be restored!');
ReadKey;
// Closing a box will restore what was "under" it on the screen before the
// box was created. You do not HAVE to close boxes if you dont want to.
BoxClose (BoxHandle);
WriteXY (1, 11, 11, 'Now lets change the box values. Press a key');
ReadKey;
// Now lets change the defaults to the box and open another one
SetBoxDefaults (BoxHandle, ' My Window Header ');
BoxOpen (BoxHandle, 20, 5, 60, 10);
ReadKey;
BoxClose (BoxHandle);
ClassFree (BoxHandle);
WriteXY (1, 14, 10, 'Pretty cool huh? Press a key to exit.');
ReadKey;
End.

54
dbp/scripts/testinput.mps Normal file
View File

@ -0,0 +1,54 @@
// =========================================================================
// TESTINPUT : MPL example of using the ANSI input and box classes
// =========================================================================
Var
Box : LongInt;
In : LongInt;
InPos : Byte = 1;
Str : String = 'Input default';
Str2 : String = '';
Num : LongInt = 1;
Begin
PurgeInput;
ClassCreate (Box, 'box');
ClassCreate (In, 'input');
BoxHeader (Box, 0, 31, ' Input Demo ');
InputOptions (In, // Input class handle
31, // Attribute of inputted text
25, // Attribute to use for field input filler
#176, // Character to use for field input filler
#9, // Input will exit on these "low" ascii characters
// TAB
#72 + #80, // Exit on these extended characters
'*'); // Password input echo character
BoxOpen (Box, 20, 5, 60, 12);
Repeat
WriteXY (22, 7, 112, 'String Input > ' + PadRT(Str, 22, ' '));
WriteXY (22, 8, 112, 'Number Input > ' + PadRT(Int2Str(Num), 5, ' '));
WriteXY (22, 9, 112, 'Password > ' + PadRT(strRep('*', Length(Str2)), 22, ' '));
WriteXY (37, 11, 112, ' DONE ');
Case InPos of
1 : Str := InputString (In, 37, 7, 22, 22, 1, Str);
2 : Num := InputNumber (In, 37, 8, 5, 5, 1, 65000, Num);
3 : Str2 := InputString (In, 37, 9, 22, 22, 4, Str2);
4 : If InputEnter (In, 37, 11, 6, ' DONE ') Then Break;
End;
Case InputExit(In) of
#09,
#80 : If InPos < 4 Then InPos := InPos + 1 Else InPos := 1;
#72 : If InPos > 1 Then InPos := InPos - 1 Else InPos := 4;
End;
Until False;
BoxClose (Box);
ClassFree (Box);
ClassFree (In);
End.

View File

@ -0,0 +1,15 @@
import mystic_bbs as bbs;
bbs.writeln ("Number of parameters..: " + str(bbs.param_count()))
bbs.writeln ("Full command line.....: " + bbs.param_str())
bbs.writeln ("Script name...........: " + bbs.param_str(0))
bbs.writeln ("|CRParameters (param_str):|CR")
count = 0
while count <= bbs.param_count():
bbs.writeln (" Param #" + str(count) + ": " + bbs.param_str(count))
count = count + 1
bbs.writeln("|CR|PA")

5
dbp/scripts/testpy3.mpy Normal file
View File

@ -0,0 +1,5 @@
import mystic_bbs as bbs
import sqlite3
bbs.writeln("Hello from Python 3")
bbs.writeln("|PA")

142
dbp/scripts/testpython.mpy Normal file
View File

@ -0,0 +1,142 @@
##############################################################
## INITIALIZE BBS FUNCTIONS AND DEFINE ANY GLOBAL VARIABLES ##
##############################################################
from mystic_bbs import *
KEY_UP = chr(72) # Some keyboard code defines returned by input functions
KEY_DOWN = chr(80)
KEY_ESCAPE = chr(27)
KEY_ENTER = chr(13)
KEY_TAB = chr(9)
KEY_LEFT = chr(75)
KEY_RIGHT = chr(77)
user_deleted = int("00000004") # user deleted flag from records.pas
thisuser = getuser(0); # read the currently logged in user into thisuser
################################
## CUSTOM FUNCTION: USER LIST ##
################################
def show_user_list():
writeln("|15|16|CL|17 Python Demonstration Program > User Listing|$X79 |16|CR")
count = 1
user = getuser(count)
shown = 0
while not user is None:
if not user["flags"] & user_deleted:
writeln(user["handle"])
shown = shown + 1
count = count + 1
user = getuser(count)
write("|CR|14Listed |15" + str(shown) + " |14user(s)|CR|CR|PA")
################################
## CUSTOM FUNCTION: BOX DEMO ##
################################
def do_box_demo():
box = box_options()
box["header"] = " Demo Box "
box["restore"] = False
writeln(str(box["attr1"]) + "|PN")
#box_open (box, 20, 3, 60, 9)
#box_close (box)
#################################
## CUSTOM FUNCTION: INPUT DEMO ##
#################################
def do_input_demo():
writeln("|15|16|CL|17 Python Demonstration Program > Input Demo|$X79 |16")
write('|CR|09Type a string: ');
input = getstr(11, 40, 120, "Default");
writeln("|CR|13Enter characters and press |05[|15ESCAPE|15|05] |13when done:|07|CR")
while not shutdown():
char, extended = getkey();
if extended:
if char == KEY_UP:
writeln("you pressed up arrow");
elif char == KEY_DOWN:
writeln("you pressed down arrow");
elif char == KEY_LEFT:
writeln("you pressed left arrow");
elif char == KEY_RIGHT:
writeln("you pressed right arrow");
else:
writeln("You pressed extended key #" + str(ord(char)))
else:
if char == KEY_ESCAPE:
writeln("you pressed ESCAPE");
break;
elif char == KEY_ENTER:
writeln("you pressed enter");
elif char == KEY_TAB:
writeln("you pressed tab");
else:
writeln("you pressed character " + char);
################################
## CUSTOM FUNCTION: MAIN MENU ##
################################
def show_main_menu():
while not shutdown():
writeln("|15|16|CL|17 Python Demonstration Program > Main Menu|$X79 |16")
writeln("|CR|15Hello, |14" + thisuser["handle"] + " #" + str(thisuser["id"]) + "|15! Please select one of the following options:|CR")
writeln(" |09(|11I|09) Input Demo")
writeln(" |09(|11U|09) User List")
write ("|CREnter option (|11Q|09/|11Quit|09): |11")
# get one character input using defined list of valid keys
char = onekey("IQU", True)
if char == "I":
do_input_demo()
if char == "Q":
break
if char == "U":
show_user_list()
###################################
## PROGRAM EXECUTION BEGINS HERE ##
###################################
show_main_menu()
writeln("|CR|14Demo complete! |PA");

23
dbp/scripts/tetris.ans Normal file
View File

@ -0,0 +1,23 @@
アアロロロロロロローロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロローイ゚゚゚゚イロロロロロロロロイロロロロロロイア
ー゚゚゚゚゚゚゚゚゚゚゚゚イ゚イロイ゚゚゚゚゚゚゚゚イ゚゚゚゚゚゚゚゚゚゚゚゚イロロー゚゚゚゚゚゚゚゚゚ロー゚ワワイー ワ゚イロロイ゚゚゚゚゚゚゚゚イーロイ
ロ イーワロ ア ーアーワワ アー ワーアイロロイ ンイーワロ ア ーアーワワ インワーアイロロロイワ アンアーーロイ゚ イ゚ ワワーロローロロー ロロロ
ロア゙゚イ ーイー ー ーロ ーロイワイワワ ア゙゚イ ーイー ー ーロ アーロイロイ゚イ イイ ア゚ ワワワイ ア ゙アイアー ーーア ロロロ
ロイワワワ ワワワワ ーワ゚゚゚ン  ロ゚゚゚ア アイ ワワ ワワワワ ーワ゚゚゚ン アイロ゚ ワイ゚ー アイアイロロ ゙イ゚゚イワワイワワ ワイロロ
ロロロロイン゙ローイ イロロロイワ ゚ワワイワワイー ーン゙イン゙ローイ イロロロイワ イロロン゚イイワワア インイーイロンアー ゚゚゚゚アーイロイ ロロロ
ロロロイロ ゙イロロア イロロロイ ゙イーア ア アロ ロ ゙イロロア イロロロイ ロイロイ ロ ー ワ ゙アイロ゚ーイ ワワイロロワイロロ゚ ロロロ
ロロロロロイー ゚イ イロイロロロイ ゚゚゚゚゚゚゚゚ ワイロイー ゚イ イロイロロロワワワワワイア ーーーー イ ワワワワイロワワワワワワワワワワワイロロー
イロロロロローイワワイロロロロロロローロロロイーロロロロロロロロローワワイロロロロロロイロロロイロイ アイイー ゚ワーロロロロローロロfiロローロロロロローア
 ーロ イ イア゚゚アワイ ーア ー
 イ゚゚゚゚゚゚゚゚゚゚イ゚イ ゚゚゚イ イン゙ー  ー
ーlevelア ア ーン゙イ   move block
ー ン゙   drop block
 lines ー ン゙ z x  rotate block
ロ scoreロ ン゙イ  
イワイ ン゙ esc exit tetris 
ロイロロロロロー ロ ロロロロロイワロロ ン゙ー  
ン゙  
ロ ン゙
ン゙
ー アン゙イ
ア ー ーン゙ロ
゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚イ゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚゚

644
dbp/scripts/tetris.ms Normal file
View File

@ -0,0 +1,644 @@
// Ported from Iniquity's Turbo Pascal source code to Mystic Script
// Original code by Mike Fricker port by g00r00 as proof of concept for Mystic Script
Program Tetris;
Const
maxGridY = 50;
maxGridX = 40;
maxPlayer = 2;
maxPtY = 5;
maxPtX = 5;
maxShape = 7;
maxLevel = 18;
Type
PGrid = ^TGrid;
TGrid = Array[1..MaxGridY] of Array[1..MaxGridX] of Byte;
TPlayer = Record
Local : Boolean;
Name : String[36];
Grid : pGrid;
Idx : array[1..maxGridY] of Byte;
gXp : Byte;
gYp : Byte;
gXs : Byte;
gYs : Byte;
gYl : Byte;
curB : Byte;
curF : Byte;
bX : Integer;
bY : Integer;
Lines : Word;
Level : Byte;
Score : LongInt;
nShape : Byte;
lastM : Double;
End;
TShape = Array[1..4] of Array[1..maxPtY] of Array[1..maxPtX] of Byte;
Const
sPts : Array[1..maxShape] of Byte = [4,6,6,5,6,5,5];
S : Array[1..maxShape] of TShape =
[[[[0,0,1,0,0],
[0,0,1,0,0], { Û }
[0,0,1,0,0], { Û }
[0,0,1,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[0,1,1,1,1], { ßßßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,0,1,0,0], { Û }
[0,0,1,0,0], { ß }
[0,0,1,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[1,1,1,1,0], { ßßßß }
[0,0,0,0,0], { }
[0,0,0,0,0]]],
[[[0,0,1,0,0],
[0,0,1,0,0], { Û }
[0,1,1,0,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,0,1,1,1], { ßßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[0,0,1,1,0], { Ûß }
[0,0,1,0,0], { ß }
[0,0,1,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[1,1,1,0,0], { ßßÛ }
[0,0,1,0,0], { }
[0,0,0,0,0]]],
[[[0,0,1,0,0],
[0,0,1,0,0], { Û }
[0,0,1,1,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[0,0,1,1,1], { Ûßß }
[0,0,1,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[0,1,1,0,0], { ßÛ }
[0,0,1,0,0], { ß }
[0,0,1,0,0]],
[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[1,1,1,0,0], { ßßß }
[0,0,0,0,0], { }
[0,0,0,0,0]]],
[[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,1,1,1,0], { ßßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,0,1,1,0], { Ûß }
[0,0,1,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[0,1,1,1,0], { ßÛß }
[0,0,1,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,1,1,0,0], { ßÛ }
[0,0,1,0,0], { }
[0,0,0,0,0]]],
[[[0,0,0,0,0],
[0,1,1,0,0], { ÜÜ }
[0,1,1,0,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,1,1,0,0], { ÜÜ }
[0,1,1,0,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,1,1,0,0], { ÜÜ }
[0,1,1,0,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,1,1,0,0], { ÜÜ }
[0,1,1,0,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]]],
[[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,0,1,1,0], { ßÛ }
[0,0,0,1,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[0,0,1,1,0], { ÜÛß }
[0,1,1,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,1,0,0,0], { Ü }
[0,1,1,0,0], { ßÛ }
[0,0,1,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,0,0,0], { }
[0,0,1,1,0], { ÜÛß }
[0,1,1,0,0], { }
[0,0,0,0,0]]],
[[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,1,1,0,0], { Ûß }
[0,1,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,1,1,0,0], { ÜÜ }
[0,0,1,1,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,0,1,0,0], { Ü }
[0,1,1,0,0], { Ûß }
[0,1,0,0,0], { }
[0,0,0,0,0]],
[[0,0,0,0,0],
[0,1,1,0,0], { ÜÜ }
[0,0,1,1,0], { ßß }
[0,0,0,0,0], { }
[0,0,0,0,0]]]];
Lev : Array[1..maxLevel] of Record T: Single; L: Word; End =
[[0.60,0],
[0.55,10],
[0.50,20],
[0.45,30],
[0.40,40],
[0.32,50],
[0.30,60],
[0.27,70],
[0.23,80],
[0.20,90],
[0.18,100],
[0.15,110],
[0.13,120],
[0.10,130],
[0.08,150],
[0.05,160],
[0.04,175],
[0.02,200]];
function dtTimer : Single;
var
year,
month,
day,
yr,
dayofweek,
hour,
minute,
second,
sec100 : Word;
begin
GetDate(year, month, day, dayofweek);
GetTime(hour, minute, second, sec100);
result := (day*24*60*60) + ((hour*60*60) + (minute*60) + (second) + (sec100 * 0.01));
end;
function dtRealDiff(before, after : Single) : Single;
begin
if after > before then
result := after-before
else
result := 0;
end;
type
tColorRec = record
Fore : Byte;
Back : Byte;
Blink : Boolean;
end;
var
P : array[1..maxPlayer] of tPlayer;
numP, q : Byte;
itdone, Ans : Boolean;
iCh : Char;
sfPos, sfPos2: array[1..30] of record
Ok : Boolean;
X, Y : Byte;
C : tColorRec;
end;
procedure itWriteScore(n : Byte);
begin
GotoXY (11, 15);
Write('|11' + Comma(P[n].Score) + '|09');
end;
procedure itWriteLines(n : Byte);
begin
GotoXY (11, 14);
Write('|11' + int2str(P[n].Lines) + '|09');
end;
procedure itWriteLevel(n : Byte);
begin
GotoXY(11, 12);
Write('|11' + int2str(P[n].Level) + '|09');
end;
procedure itDrawBlock(n : Byte; Erase : Boolean);
var z, x, y, yp : Integer; top : Boolean; ch : Char;
begin
//oSetColRec(sfPos[1].C);
with P[n] do
begin
for x := 1 to maxPtX do for y := 1 to maxPtY do if s[curB,curF,y,x] = 1 then
begin
yp := Idx[bY+y-1];
top := Odd(bY+y-1);
GotoXY(gXp+bX+x-2,gYp+yp-1);
if Erase then Grid^[bY+y-1,bX+x-1] := 0 else
begin
if Grid^[bY+y-1,bX+x-1] = 1 then itDone := True;
Grid^[bY+y-1,bX+x-1] := 1;
end;
if top then
begin
if (Grid^[bY+y-1,bX+x-1] = 1) and (Grid^[bY+y,bX+x-1] = 1) then ch := 'Û' else
if (Grid^[bY+y-1,bX+x-1] = 1) and (Grid^[bY+y,bX+x-1] = 0) then ch := 'ß' else
if (Grid^[bY+y-1,bX+x-1] = 0) and (Grid^[bY+y,bX+x-1] = 1) then ch := 'Ü' else
ch := ' ';
end else
begin
if (Grid^[bY+y-2,bX+x-1] = 1) and (Grid^[bY+y-1,bX+x-1] = 1) then ch := 'Û' else
if (Grid^[bY+y-2,bX+x-1] = 1) and (Grid^[bY+y-1,bX+x-1] = 0) then ch := 'ß' else
if (Grid^[bY+y-2,bX+x-1] = 0) and (Grid^[bY+y-1,bX+x-1] = 1) then ch := 'Ü' else
ch := ' ';
end;
WriteRaw(Ch);
end;
end;
flush;
end;
procedure itUpdateLine(n, l : Byte);
var x : Integer; top : Boolean; ch : Char;
begin
//oSetColRec(sfPos[1].C);
top := Odd(l);
with P[n] do
begin
GotoXY(gXp,gYp+Idx[l]-1);
for x := 1 to gXs do
begin
if top then
begin
if (Grid^[l,x] = 1) and (Grid^[l+1,x] = 1) then ch := 'Û' else
if (Grid^[l,x] = 1) and (Grid^[l+1,x] = 0) then ch := 'ß' else
if (Grid^[l,x] = 0) and (Grid^[l+1,x] = 1) then ch := 'Ü' else
ch := ' ';
end else
begin
if (Grid^[l-1,x] = 1) and (Grid^[l,x] = 1) then ch := 'Û' else
if (Grid^[l-1,x] = 1) and (Grid^[l,x] = 0) then ch := 'ß' else
if (Grid^[l-1,x] = 0) and (Grid^[l,x] = 1) then ch := 'Ü' else
ch := ' ';
end;
WriteRaw(Ch);
end;
end;
flush;
end;
procedure itNewBlock(n : Byte);
begin
with P[n] do
begin
curB := nShape;
nShape := Random(maxShape)+1;
curF := Random(4)+1;
bX := Random(gXs-4)+1;
bY := 1;
lastM := dtTimer;
end;
itDrawBlock(n,False);
end;
function itZapLine(n, l : Byte) : Boolean;
var ok : Boolean; z : Byte;
begin
result := False;
if (l < 1) or (l > P[n].gYs) then Exit;
ok := True;
for z := 1 to P[n].gXs do if P[n].Grid^[l,z] = 0 then ok := False;
result := ok;
end;
function itLineEmpty(n, l : Byte) : Boolean;
var ok : Boolean; z : Byte;
begin
result := False;
if (l < 1) or (l > P[n].gYs) then Exit;
ok := True;
for z := 1 to P[n].gXs do if P[n].Grid^[l,z] = 1 then ok := False;
result := ok;
end;
procedure itCheckLines(n : Byte);
var y, x, b, l : Byte;
begin
with P[n] do
begin
Inc(Score,sPts[curB]);
itWriteScore(n);
l := 0;
for y := 1 to maxPtY do if itZapLine(n,bY+y-1) then
begin
Inc(l);
for b := bY+y-1 downto 2 do Grid^[b] := Grid^[b-1];
for x := 1 to gXs do Grid^[1,x] := 0;
b := bY+y-1;
Inc(Lines);
itWriteLines(n);
end;
if l > 0 then
begin
for y := 1 to b do itUpdateLine(n,y);
Inc(Score,(l*l)*Level*100);
//oBeep;
itWriteScore(n);
if (Level < maxLevel) and (Lines >= Lev[Level+1].l) then
begin
Inc(Level);
itWriteLevel(n);
//oBeep;
//oBeep;
end;
end;
end;
end;
procedure itMoveDown(n : Byte);
var ny, x, y : Integer; stop : boolean;
begin
with P[n] do
begin
ny := bY+1;
stop := False;
for x := 1 to maxPtX do for y := 1 to maxPtY do
if (s[curB,curF,y,x] <> 0) and
(((Grid^[ny+y-1,bX+x-1] = 1) and
(not ((y < 5) and (S[curB,curF,y+1,x] = 1)))) or
(ny+y-1 > gYs)) then stop := True;
if not stop then
begin
itDrawBlock(n,True);
bY := bY+1;
itDrawBlock(n,False);
end else
begin
itCheckLines(n);
itNewBlock(n);
end;
end;
end;
procedure itFastDown(n : Byte);
var ny, x, y, oy : Integer; stop : boolean;
begin
with P[n] do
begin
stop := False;
oy := bY;
repeat
ny := oY+1;
for x := 1 to maxPtX do for y := 1 to maxPtY do
if (s[curB,curF,y,x] <> 0) and
(((Grid^[ny+y-1,bX+x-1] = 1) and
(not ((y < 5) and (S[curB,curF,y+1,x] = 1)))) or
(ny+y-1 > gYs)) then stop := True;
if not Stop then oY := oY+1;
until stop;
itDrawBlock(n,True);
bY := oY;
itDrawBlock(n,False);
itCheckLines(n);
itNewBlock(n);
end;
end;
procedure itMoveRight(n : Byte);
var nx, x, y : Integer; ok : Boolean;
begin
with P[n] do
begin
nx := bX+1;
ok := True;
for x := 1 to maxPtX do for y := 1 to maxPtY do
if (s[curB,curF,y,x] <> 0) and
(((Grid^[bY+y-1,nx+x-1] = 1) and
(not ((x < 5) and (S[curB,curF,y,x+1] = 1)))) or
(nx+x-1 > gXs)) then ok := False;
if ok then
begin
itDrawBlock(n,True);
bX := bX+1;
itDrawBlock(n,False);
end;
end;
end;
procedure itMoveLeft(n : Byte);
var nx, x, y : Integer; ok : Boolean;
begin
with P[n] do
begin
nx := bX-1;
ok := True;
for x := 1 to maxPtX do
for y := 1 to maxPtY do
if (s[curB,curF,y,x] <> 0) and ((nx+x-1 < 1) or ((Grid^[bY+y-1,nx+x-1] = 1) and (not ((x > 1) and (S[curB,curF,y,x-1] = 1))))) then
ok := False;
if ok then begin
itDrawBlock(n,True);
bX := bX-1;
itDrawBlock(n,False);
end;
end;
end;
procedure itRotate(n : Byte; add : Integer);
var nf, x, y : Integer; ok : Boolean;
begin
with P[n] do
begin
nf := curF+add;
if nf < 1 then nf := 4 else if nf > 4 then nf := 1;
ok := True;
for x := 1 to maxPtX do for y := 1 to maxPtY do
if (s[curB,nf,y,x] <> 0) and
((bX+x-1 < 1) or
(bX+x-1 > gXs) or (bY+y-1 > gYs) or
((Grid^[bY+y-1,bX+x-1] = 1) and
(not (S[curB,curF,y,x] = 1)))) then ok := False;
if ok then
begin
itDrawBlock(n,True);
curF := nf;
itDrawBlock(n,False);
end;
end;
end;
procedure itPlayTetris;
begin
Write('|[0');
ans := showfile(extractpath(scriptname) + 'tetris');
sfpos[1].x := 29;
sfpos[1].y := 11;
sfpos[2].x := 50;
sfpos[2].y := 22;
FillChar(P,SizeOf(P),#0);
itDone := False;
numP := 1;
with P[1] do begin
Name := 'Test user';
New(Grid);
FillChar(Grid^,SizeOf(Grid^),#0);
gYl := 0;
gXp := sfPos[1].X;
gYp := sfPos[1].Y;
gXs := sfPos[2].X-gXp+1;
gYs := sfPos[2].Y-gYp+1;
gYs := gYs*2;
if Odd(gYs) then
Dec(gYs);
Local := True;
for q := 1 to gYs do begin
if Local then Inc(gYl);
Local := not Local;
Idx[q] := gYl;
end;
curB := 1;
curF := 1;
bX := 1;
bY := 1;
Lines := 0;
Score := 0;
Level := 1;
nShape := Random(maxShape)+1;
Local := True;
end;
itWriteLevel(1);
itWriteLines(1);
itWriteScore(1);
itNewBlock(1);
repeat
iCh := InKey(25);
If iCh <> #255 Then Begin
if isExtended then begin
case iCh of
keyDown : itFastDown(1);
keyLeft : itMoveLeft(1);
keyRight: itMoveRight(1);
keyUp : itRotate(1,1);
end;
end else
case UpCase(iCh) of
' ','W','X','5' : itRotate(1,1);
#13,'2','S' : itFastDown(1);
'Z' : itRotate(1,-1);
'4','A' : itMoveLeft(1);
'6','D' : itMoveRight(1);
'0' : itMoveDown(1);
#27 : itDone := True;
end;
end;
for q := 1 to numP do with P[q] do begin
if dtRealDiff(lastM,dtTimer) > Lev[Level].t then begin
itMoveDown(q);
lastM := dtTimer;
end;
end;
until (Shutdown) or (itDone);
Write('|[1');
with P[1] do begin
Dispose(Grid);
end;
//sfGotoPos(maxPos);
//logWrite('Played Tetris ['+St(P[1].Lines)+' lines, '+Stc(P[1].Score)+
//' points; level '+St(P[1].Level)+']');
//itAddHiScore;
End;
begin
itPlayTetris;
end.

561
dbp/scripts/to-prmpt.mps Normal file
View File

@ -0,0 +1,561 @@
// .-------------------------.
// | TO-PRMPT.MPS : UPDATE 3 |===============================================
// `-------------------------'
//
// This mod is a lightbar prompt replacement for standard message reading,
// standard file listing, standard e-mail reader, and the pause y/n/c
// prompt.
//
// See installation section for more details.
//
// -------------------------------------------------------------------------
// BACKGROUND
// -------------------------------------------------------------------------
//
// This mod is was originally written for use with Mystic BBS v1.07.3 by
// Testoverride, based on some demo MPL code written by g00r00.
//
// It has been updated for Mystic BBS 1.10+ by g00r00, and released without
// Testoverride's assistance. This is not an intentional thing, but TO has
// been missing lately, so given the circumstances that it was based off of
// g00r00's code, we feel it's okay to go forward with this release.
//
// You are free to modify and do whatever you'd like to with this code, but
// please if you do make significant changes please let the original authors
// know so that we can include it into our release if it is worthwhile.
//
// The original authors contact info follows:
//
// Testoverride - testoverride@comcast.net (unconfirmed)
// g00r00 - mysticbbs@gmail.com
//
// --------------------------------------------------------------------------
// INSTALLATION
// --------------------------------------------------------------------------
//
// Replace the following prompts with the following data if you want to
// replace them with TO-PRMPT lightbar prompt functionality (exclude quotes):
//
// Message reading prompts: Set Prompt #116 to "!to-prmpt MESSAGE"
// Set Prompt #213 to "!to-prmpt MESSAGE"
// E-mail reading prompt : Set Prompt #115 to "!to-prmpt EMAIL"
// File Listing prompt : Set Prompt #044 to "!to-prmpt FILE"
// YNC Pause prompt : Set Prompt #132 to "!to-prmpt PAUSE"
// Msg Editor prompt : Set Prompt #354 to "!to-prmpt EDITOR"
//
// When you have changed the prompts, you must compile them again with
// MAKETHEME, or if you changed them inside the internal prompt editor, the
// theme prompts file will usually be compiled for you.
//
// --------------------------------------------------------------------------
// New updates for 1.10:
// --------------------------------------------------------------------------
//
// - Converted to new MPL 1.10
// - Changed the s255 ACS check to use the message owner MCI code instead
// - Added the 'H' command to the message reader prompt (set lastread)
// - Added the 'M' command to the message reader prompt (move message)
// - Added the 'F' command to the message reader prompt (forward)
// - Added the FS editor prompt option
// - Some conversions of IF statements to CASE statements for code clarity
//
// ===========================================================================
Var
Selection : Byte;
Function EditPromptMenu : Byte
Var
Ch : Char;
Done : Boolean;
Bar : Byte;
Cmd : Array[1..7] of String[80];
Xpos : Array[1..7] of String[80];
Begin
Done := False
Bar := 1
Xpos[1] := '|[X14'
Xpos[2] := '|[X20'
Xpos[3] := '|[X27'
Xpos[4] := '|[X34'
Xpos[5] := '|[X44'
Xpos[6] := '|[X52'
Xpos[7] := '|[X59'
Cmd[1] := ' |15S|07ave '
Cmd[2] := ' |15Q|07uote '
Cmd[3] := ' |15A|07bort '
Cmd[4] := ' |15C|07ontinue '
Cmd[5] := ' |15U|07pload '
Cmd[6] := ' |15T|07itle '
Cmd[7] := ' |15H|07elp '
Repeat
If Graphics > 0 Then
Write ('|15|17' + Xpos[Bar]+stripmci(Cmd[Bar]) + '|00|16');
Ch := ReadKey
If Graphics > 0 and IsArrow Then Begin
Write (Xpos[bar] + Cmd[Bar] + '|00|16');
If Ord(Ch) = 75 Then Begin
If Bar > 1 Then
Bar := Bar - 1
End Else
If Ord(Ch) = 77 Then Begin
If Bar < 7 Then
Bar := Bar + 1
End
End Else
If Ch = #13 and Graphics > 0 Then Begin
EditPromptMenu := Bar
Done := True
End Else
If Upper(Ch) = 'S' Then Begin
EditPromptMenu := 1
Done := True
End Else
If Upper(Ch) = 'Q' Then Begin
EditPromptMenu := 2
Done := True
End Else
If Upper(Ch) = 'A' Then Begin
EditPromptMenu := 3
Done := True
End Else
If Upper(Ch) = 'C' Then Begin
EditPromptMenu := 4
Done := True
End Else
If Upper(Ch) = 'U' Then Begin
EditPromptMenu := 5
Done := True
End Else
If Upper(Ch) = 'T' Then Begin
EditPromptMenu := 6
Done := True
End Else
If Upper(Ch) = 'H' Then Begin
EditPromptMenu := 7
Done := True
End
Until Done
End
Function FPromptMenu : Byte
Var
Ch : Char;
Done : Boolean;
Bar : Byte;
Cmd : Array[1..5] of String[80];
Xpos : Array[1..5] of String[80];
Begin
Done := False
Bar := 1
Xpos[1] := '|[X38'
Xpos[2] := '|[X44'
Xpos[3] := '|[X54'
Xpos[4] := '|[X60'
Xpos[5] := '|[X66'
Cmd[1] := ' |15N|07ext '
Cmd[2] := ' |15P|07revious '
Cmd[3] := ' |15F|07lag '
Cmd[4] := ' |15V|07iew '
Cmd[5] := ' |15Q|07uit '
Repeat
If Graphics > 0 Then
Write ('|15|17' + Xpos[Bar]+stripmci(Cmd[Bar]) + '|00|16');
Ch := ReadKey
If Graphics > 0 and IsArrow Then Begin
Write (Xpos[bar] + Cmd[Bar] + '|00|16');
If Ord(Ch) = 75 Then Begin
If Bar > 1 Then
Bar := Bar - 1
End Else
If Ord(Ch) = 77 Then Begin
If Bar < 5 Then
Bar := Bar + 1
End
End Else
If Ch = #13 and Graphics > 0 Then Begin
FPromptMenu := Bar
Done := True
End Else
If Upper(Ch) = 'N' Then Begin
FPromptMenu := 1
Done := True
End Else
If Upper(Ch) = 'P' Then Begin
FPromptMenu := 2
Done := True
End Else
If Upper(Ch) = 'F' Then Begin
FPromptMenu := 3
Done := True
End Else
If Upper(Ch) = 'V' Then Begin
FPromptMenu := 4
Done := True
End Else
If Upper(Ch) = 'Q' Then Begin
FPromptMenu := 5
Done := True
End
Until Done
End
Function EPromptMenu : Byte
Var
Ch : Char;
Done : Boolean;
Bar : Byte;
Cmd : Array[1..7] of String[80];
Xpos : Array[1..7] of String[80];
Begin
Done := False
Bar := 1
Xpos[1] := '|[X22'
Xpos[2] := '|[X28'
Xpos[3] := '|[X38'
Xpos[4] := '|[X45'
Xpos[5] := '|[X52'
Xpos[6] := '|[X58'
Xpos[7] := '|[X66'
Cmd[1] := ' |15N|07ext '
Cmd[2] := ' |15P|07revious '
Cmd[3] := ' |15A|07gain '
Cmd[4] := ' |15R|07eply '
Cmd[5] := ' |15J|07ump '
Cmd[6] := ' |15D|07elete '
Cmd[7] := ' |15Q|07uit '
Repeat
If Graphics > 0 Then
Write ('|15|17' + Xpos[bar]+stripmci(Cmd[Bar]) + '|00|16')
Ch := ReadKey
If Graphics > 0 and IsArrow Then Begin
Write (Xpos[bar]+Cmd[Bar] + '|00|16')
If Ord(Ch) = 75 Then Begin
If Bar > 1 Then Bar := Bar - 1
End Else
If Ord(Ch) = 77 Then Begin
If Bar < 7 Then Bar := Bar + 1
End
End Else Begin
If Ch = Chr(13) and Graphics > 0 Then Begin
EPromptMenu := Bar
Done := True
End Else
If Upper(Ch) = 'N' Then Begin
EPromptMenu := 1
Done := True
End Else
If Upper(Ch) = 'P' Then Begin
EPromptMenu := 2
Done := True
End Else
If Upper(Ch) = 'A' Then Begin
EPromptMenu := 3
Done := True
End Else
If Upper(Ch) = 'R' Then Begin
EPromptMenu := 4
Done := True
End Else
If Upper(Ch) = 'J' Then Begin
EPromptMenu := 5
Done := True
End Else
If Upper(Ch) = 'D' Then Begin
EPromptMenu := 6
Done := True
End Else
If Upper(Ch) = 'Q' Then Begin
EPromptMenu := 7
Done := True
End Else
If Upper(Ch) = 'X' Then Begin
stuffkey(ch)
Done := True
End Else
If Upper(Ch) = '?' Then Begin
stuffkey(ch)
Done := True
End Else
If Upper(Ch) = 'L' Then Begin
stuffkey(ch)
Done := True
End
End
Until Done
End
Function MPromptMenu : Byte;
Var
Done : Boolean;
Ch : Char
Bar : Byte
Cmd : Array[1..6] of String[80]
Xpos : Array[1..6] of String[80]
Begin
Bar := 1;
Xpos[1] := '|[X36'
Xpos[2] := '|[X42'
Xpos[3] := '|[X52'
Xpos[4] := '|[X59'
Xpos[5] := '|[X66'
Xpos[6] := '|[X72'
Cmd[1] := ' |15N|07ext|00|16 '
Cmd[2] := ' |15P|07revious|00|16 '
Cmd[3] := ' |15A|07gain|00|16 '
Cmd[4] := ' |15R|07eply|00|16 '
Cmd[5] := ' |15J|07ump|00|16 '
Cmd[6] := ' |15Q|07uit|00|16 '
Repeat
If Graphics > 0 Then
Write ('|15|17' + Xpos[bar]+stripmci(Cmd[Bar]) + '|00|16');
Ch := Upper(ReadKey);
If Graphics > 0 and IsArrow Then Begin
Write (Xpos[bar]+Cmd[Bar] + '|00|16');
Case Ch of
#75 : If Bar > 1 Then Bar := Bar - 1;
#77 : If Bar < 6 Then Bar := Bar + 1;
End
End Else Begin
Case Ch of
#13 : If Graphics > 0 Then Begin
MPromptMenu := Bar;
Done := True;
End;
'N' : Begin
MPromptMenu := 1;
Done := True;
End;
'P' : Begin
MPromptMenu := 2;
Done := True;
End;
'A' : Begin
MPromptMenu := 3;
Done := True;
End;
'R' : Begin
MPromptMenu := 4;
Done := True;
End;
'J' : Begin
MPromptMenu := 5;
Done := True;
End;
'Q' : Begin
MPromptMenu := 6;
Done := True;
End;
Else
If (Pos(Ch, 'MEFD') > 0 And ACS('OM')) OR (Pos(Ch, 'X?[]HITGL') > 0) Then Begin
StuffKey(Ch);
Break;
End;
End;
End;
Until Done;
End;
Function PPromptMenu : Byte
Var
Ch : Char
Done : Boolean
Bar : Byte
Cmd : Array[1..3] of String[80];
Xpos : Array[1..3] of String[80];
Begin
Done := False
Bar := 1
Xpos[1] := '|[X21'
Xpos[2] := '|[X26'
Xpos[3] := '|[X30'
Cmd[1] := ' |15Y|07es '
Cmd[2] := ' |15N|07o '
Cmd[3] := ' |15C|07ontinuous '
Repeat
If Graphics > 0 Then
Write ('|15|17' + XPos[Bar] + StripMCI(Cmd[Bar]) + '|00|16')
Ch := ReadKey
If Graphics > 0 and IsArrow Then Begin
Write (XPos[Bar] + Cmd[Bar] + '|00|16')
If Ord(Ch) = 75 Then Begin
If Bar > 1 Then Bar := Bar - 1
End Else
If Ord(Ch) = 77 Then Begin
If Bar < 3 Then Bar := Bar + 1
End
End Else
If Ch = #13 and Graphics > 0 Then Begin
PPromptMenu := Bar
Done := True
End Else
If Upper(Ch) = 'Y' Then Begin
PPromptMenu := 1
Done := True
End Else
If Upper(Ch) = 'N' Then Begin
PPromptMenu := 2
Done := True
End Else
If Upper(Ch) = 'C' Then Begin
PPromptMenu := 3
Done := True
End
Until Done
End
Procedure MESSAGE
Begin
Write ('|CR|08>>|07 Reading messages |15|$L04|&5 |07of |15|$R04|&6 |08// |15N|09ext |15P|07revious |15A|07gain |15R|07eply |15J|07ump |15Q|07uit |00')
Selection := MPromptMenu
MoveX(1);
TextColor(7);
ClrEOL;
Case Selection of
1 : stuffkey('N');
2 : stuffkey('P');
3 : stuffkey('A');
4 : stuffkey('R');
5 : stuffkey('J');
6 : stuffkey('Q');
End;
End
Procedure DOPAUSE
Var
SavedX : Byte;
Begin
Write ('|08>> |07Paused |08- |07More|08 // |15Y|09es |15N|07o |15C|07ontinuous |00');
SavedX := WhereX;
Selection := PPromptMenu
If Selection = 1 Then
stuffkey('Y')
Else
If Selection = 2 Then
stuffkey('N')
Else
If Selection = 3 Then
stuffkey('C')
Write('|[X' + PadLT(Int2Str(SavedX), 2, '0'));
End
Procedure Email
Begin
Write ('|CR|08>> |07Reading e-mail |08// |15N|09ext |15P|07revious |15A|07gain |15R|07eply |15J|07ump |15D|07elete |15Q|07uit |00')
Selection := EPromptMenu
If Selection = 1 Then
stuffkey('N')
Else
If Selection = 2 Then
stuffkey('P')
Else
If Selection = 3 Then
stuffkey('A')
Else
If Selection = 4 Then
stuffkey('R')
Else
If Selection = 5 Then
stuffkey('J')
Else
If Selection = 6 Then
stuffkey('D')
Else
If Selection = 7 Then
stuffkey('Q')
End
Procedure Editor;
Begin
Write ('|CR|08<< |07Editor |08// |15S|07ave |15Q|07uote |15A|07bort |15C|07ontinue |15U|07pload |15T|07itle |15H|07elp |08>>');
Case EditPromptMenu of
1 : stuffKey('S');
2 : stuffKey('Q');
3 : stuffKey('A');
4 : stuffKey('C');
5 : stuffKey('U');
6 : stuffKey('T');
7 : stuffKey('H');
End;
End;
Procedure File
Begin
Write ('|CR|08[|07|$R31|FB|08] |08// |15N|07ext |15P|07revious |15F|07lag |15V|07iew |15Q|07uit |08>>')
Selection := FPromptMenu
If Selection = 1 Then
stuffkey('N')
Else
If Selection = 2 Then
stuffkey('P')
Else
If Selection = 3 Then
stuffkey('F')
Else
If Selection = 4 Then
stuffkey('V')
Else
If Selection = 5 Then
stuffkey('Q')
End
Const
FailStr = '|CRUSAGE: to-prmpt [ MESSAGE | FILE | EMAIL | PAUSE | EDITOR ]|CR|CR|PA';
Begin
AllowArrow := True;
If ParamCount < 1 Then
WriteLn(FailStr)
Else
Case Upper(ParamStr(1)) of
'MESSAGE': MESSAGE;
'FILE' : FILE;
'EMAIL' : EMAIL;
'PAUSE' : DOPAUSE;
'EDITOR' : EDITOR;
Else
WriteLn(FailStr);
End;
End.

264
dbp/scripts/usage.mps Normal file
View File

@ -0,0 +1,264 @@
// ==========================================================================
// USAGE.MPS : On the fly usage graph calculation for Mystic BBS v1.10+
// Author : g00r00
// Version : 1.1
// License : Part of with Mystic BBS distribution / GPL repository
// --------------------------------------------------------------------------
//
// This MPL calculates a monthly, weekly and hourly usage graph based on the
// BBS history datafile. Simply copy it to the scripts directory, compile it
// and execute it from your menu with the GX menu command (optional data
// 'usage').
//
// If the MPL program is executed without any optional data, it will allow
// the user to tab through the different graphs. Additionally, the following
// optional command data options can be used:
//
// MONTHLY - Display monthly graph and exit immediately
// WEEKLY - Display weekly graph and exit immediately
// HOURLY - Display hourly graph and exit immediately
//
// Example:
//
// Menu Command: GX (Execute MPL Program)
// Optional Data: usage weekly
//
// ==========================================================================
Uses CFG
Const
fmRWDN = 66;
Type
RecHistory = Record // From records.pas 1.10
Date : LongInt;
Emails : Word;
Posts : Word;
Downloads : Word;
Uploads : Word;
DownloadKB : LongInt;
UploadKB : LongInt;
Calls : LongInt;
NewUsers : Word;
Telnet : Word;
FTP : Word;
POP3 : Word;
SMTP : Word;
NNTP : Word;
HTTP : Word;
Hourly : Array[1..24] of Byte;
Reserved : Array[1..2] of Byte;
End;
Var
Days : LongInt;
Calls : LongInt;
Month : Array[1..12] of Cardinal;
Week : Array[1..7] of Cardinal;
Hour : Array[1..24] of Cardinal;
Procedure DrawBar (XPos, bSize, Value: Byte);
Var
Temp : Byte;
Begin
For Temp := 1 to Value Do
WriteXY (XPos, 18 - Temp, 1, strRep(#219, bSize));
End;
Procedure DisplayMonthly;
Var
Count : Byte;
Count2 : Byte;
Begin
WriteLn ('|CL|09|17 ' + #176 + ' |15Monthly Usage Graph ' + PadLT(strComma(Days) + '|07 days, |15' + strComma(Calls) + ' |07calls ', 63, ' ') + '|09' + #176 + ' |16');
GotoXY (6, 18);
For Count := 1 to 12 Do
Write ('|08' + #196 + #196 + #196 + ' ');
WriteXY (6, 19, 14, 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec');
WriteXY (2, 21, 08, strRep(#196, 78));
For Count := 1 to 12 Do
For Count2 := 15 DownTo 1 Do Begin
GotoXY (Count * 6, 2 + Count2);
Write (#250 + #250 + #250);
End;
For Count := 1 to 12 Do
DrawBar (6 * Count, 3, Month[Count]);
End;
Procedure DisplayWeekly;
Var
Count : Byte;
Count2 : Byte;
Begin
WriteLn ('|CL|09|17 ' + #176 + ' |15Weekly Usage Graph ' + PadLT(strComma(Days) + '|07 days, |15' + strComma(Calls) + ' |07calls ', 64, ' ') + '|09' + #176 + ' |16');
For Count := 0 to 6 Do Begin
GotoXY (4 + (Count * 11), 18);
Write ('|08' + strRep(#196, 8));
End;
WriteXY ( 4, 19, 14, ' Sunday Monday Tuesday Wednesday Thursday Friday Saturday');
WriteXY ( 2, 21, 08, strRep(#196, 78));
For Count := 0 to 6 Do
For Count2 := 15 DownTo 1 Do Begin
GotoXY (4 + (Count * 11), 2 + Count2);
Write (strRep(#250, 8));
End;
For Count := 1 to 7 Do
DrawBar (4 + ((Count - 1) * 11), 8, Week[Count]);
End;
Procedure DisplayHourly;
Var
Count : Integer;
Count2 : Integer;
Begin
WriteLn ('|CL|09|17 ' + #176 + ' |15Hourly Usage Graph ' + PadLT(strComma(Days) + '|07 days, |15' + strComma(Calls) + ' |07calls ', 64, ' ') + '|09' + #176 + ' |16');
GotoXY (5, 18);
For Count := 1 to 24 Do
Write ('|08' + #196 + #196 + ' ');
WriteXY ( 5, 19, 14, '12 01 02 03 04 05 06 07 08 09 10 11 12 01 02 03 04 05 06 07 08 09 10 11');
WriteXY ( 5, 20, 09, 'AM');
WriteXY (41, 20, 09, 'PM');
WriteXY ( 2, 21, 08, strRep(#196, 78));
For Count := 1 to 24 Do
For Count2 := 15 DownTo 1 Do Begin
GotoXY (5 + ((Count - 1) * 3), Count2 + 2);
Write ('|08' + #250 + #250);
End;
For Count := 1 to 24 Do
DrawBar (5 + ((Count - 1) * 3), 2, Hour[Count]);
End;
Procedure CalculateHistory;
Var
HistFile : LongInt;
OneDay : RecHistory;
TempLong : Cardinal;
TempReal : Real;
Count : LongInt;
Highest : Cardinal;
Begin
ClassCreate(HistFile, 'File');
If Not FileOpen(HistFile, CfgDataPath + 'history.dat', SizeOf(OneDay), 1, 66) Then Begin
ClassFree(HistFile);
Exit;
End;
If FileSize(HistFile) = 0 Then Begin
ClassFree(HistFile);
WriteLn ('|CRNo BBS history to calculate|CR|CR|PA');
Halt;
End;
Days := FileSize(HistFile);
WriteLn ('|16|CL|15Calculating usage for last ' + strComma(Days) + ' days...');
While Not FileEOF(HistFile) Do Begin
FileRead (Histfile, OneDay);
Calls := Calls + OneDay.Calls;
TempLong := Str2Int(Copy(DateStr(OneDay.Date, 1), 1, 2));
Month[TempLong] := Month[TempLong] + OneDay.Calls;
TempLong := DayOfWeek(OneDay.Date) + 1;
Week[TempLong] := Week[TempLong] + OneDay.Calls;
For Count := 1 to 24 Do
Hour[Count] := Hour[Count] + OneDay.Hourly[Count];
End;
ClassFree(HistFile);
Highest := 0;
For Count := 1 to 12 Do
If Month[Count] > Highest Then
Highest := Month[Count];
For Count := 1 to 12 Do
If Month[Count] > 0 Then Begin
TempReal := (Month[Count] / Highest * 100);
Month[Count] := TempReal / 7 + 1;
End;
Highest := 0;
For Count := 1 to 7 Do
If Week[Count] > Highest Then
Highest := Week[Count];
For Count := 1 to 7 Do
If Week[Count] > 0 Then Begin
TempReal := (Week[Count] / Highest * 100);
Week[Count] := TempReal / 7 + 1;
End;
Highest := 0;
For Count := 1 to 24 Do
If Hour[Count] > Highest Then
Highest := Hour[Count];
For Count := 1 to 24 Do
If Hour[Count] > 0 Then Begin
TempReal := (Hour[Count] / Highest * 100);
Hour[Count] := TempReal / 7 + 1;
End;
End;
Var
ShowMode : Byte;
Begin
If Graphics = 0 Then Begin
WriteLn ('|CRSorry, usage graphs require ANSI graphics|CR|CR|PA');
Exit;
End;
CalculateHistory;
If ParamCount > 0 Then Begin
Case Upper(ParamStr(1)) of
'MONTHLY' : DisplayMonthly;
'WEEKLY' : DisplayWeekly;
'HOURLY' : DisplayHourly;
Else
WriteLn ('USAGE.MPS: Invalid command line option.|PN');
End;
End Else Begin
ShowMode := 1;
Repeat
Case ShowMode of
1 : DisplayHourly;
2 : DisplayWeekly;
3 : DisplayMonthly;
End;
WriteXYPipe (22, 23, 7, 0, 'Press |08[|15TAB|08] |07for more or |08[|15ENTER|08] |07to Quit');
Case OneKey(#09 + #13 + #27, False) of
#09 : If ShowMode < 3 Then ShowMode := ShowMode + 1 Else ShowMode := 1;
#13,
#27 : Break;
End;
Until False;
End;
End

View File

@ -0,0 +1,58 @@

<34>
<34><6D> <34><6D><EFBFBD><EFBFBD><EFBFBD> <34><34>
<37><74><34><6D><EFBFBD><34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><6D><EFBFBD><EFBFBD>
<37><74><EFBFBD> <34><31><6D><EFBFBD> <34><6D><EFBFBD><35><6D> <35> <34><6D><34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><6D> <34><6D>
<37><74> <34><6D><EFBFBD> <34><34><6D> <34> <34><35> <35><6D><35><34><74><EFBFBD><EFBFBD><EFBFBD>߱<74><34><6D><EFBFBD><EFBFBD><34> <34> <34>
<34><6D> <34>  <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><35><6D><34><74><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><74> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<37><74><34><6D><EFBFBD><34> <34> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><6D><EFBFBD><35><6D><35> <34> <34> <20><><EFBFBD><36><43> <20><><EFBFBD> <34><6D><EFBFBD><EFBFBD><EFBFBD><34> <34> <34>
<37><74><EFBFBD>  ߲<34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܲ<EFBFBD><DCB2> <35><6D><37><37><74><EFBFBD><EFBFBD> <34><6D> <20><><EFBFBD><EFBFBD>  <20><><34> <34> <34>
 <37>  <34><6D><EFBFBD><34><6D><EFBFBD> <34> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><6D><EFBFBD> <34><6D><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><30><43><EFBFBD><EFBFBD> <37><74><EFBFBD><EFBFBD><EFBFBD> <34><34><6D><EFBFBD>  <20><><EFBFBD><EFBFBD> <34><74>
<39> <37> <34> <34><6D><EFBFBD><EFBFBD> ܲ<><DCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܰ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><37><74> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><38><43>۰ <34><74><EFBFBD>ܰ<43><DCB0> <20> <34><6D> <34> <34>
<38>  <37> <37><34><6D><EFBFBD><31> <20><> <34><6D><37><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><6D><EFBFBD><32><43><EFBFBD><EFBFBD><EFBFBD> ۲<39>߱<EFBFBD><34><6D><EFBFBD><EFBFBD><EFBFBD> <34> <34>
<39><43>  <20><><EFBFBD><EFBFBD><EFBFBD><31> <20><><EFBFBD><EFBFBD> <34><6D><EFBFBD> <33><6D><35><43>߰ <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><74><EFBFBD><33><6D><30><6D><EFBFBD> <34> <20> <34><6D><EFBFBD> <34> <34>
<30><43> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <33><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <33><6D><EFBFBD><EFBFBD> <37><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <34><6D><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۲<EFBFBD><DBB2> <34><74><EFBFBD> <33><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <33><6D><30><6D>  <34><6D><EFBFBD> <34> <34>
<39><43> <34><6D><36> <33> <20><><EFBFBD> <33><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><39><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20> <33><6D><EFBFBD><33><6D><EFBFBD> <20><><EFBFBD> <33><6D><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34> <37> <34>
<34><6D><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><33><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۲ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><39><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><33><6D><EFBFBD> <33><6D><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <33><30><6D><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><36> <36> <36>
<34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><33><6D><EFBFBD><30><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <33><34><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><31><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><33><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <33><36><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34> <37> <34>
 <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>߱<EFBFBD><DFB1><33><36><33><6D><EFBFBD><EFBFBD><EFBFBD><30><33> <20><><EFBFBD><EFBFBD><EFBFBD> <33><6D> <20><><36><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><36><30><6D> <20>ܲ <20><><36><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><36><30><33> <20><><EFBFBD><EFBFBD><EFBFBD> <33><6D> <20><><36><30><36><30><6D><EFBFBD><EFBFBD> <37> <37> <34>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><6D><EFBFBD><EFBFBD> <20><36><6D><30><6D> <34><37><6D><EFBFBD><36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30> <36><6D><EFBFBD><33><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><36><6D><EFBFBD><EFBFBD><30><6D><EFBFBD> <20> <20><36><6D><EFBFBD> <34><37><6D> <34><37><6D><36><6D><EFBFBD><EFBFBD><30><6D><EFBFBD> <20><36><30><6D> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><36><6D><EFBFBD><EFBFBD><33><6D><EFBFBD><34> <33><6D><EFBFBD> <20><><36><6D><EFBFBD><EFBFBD><30><6D><EFBFBD> <20><37><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><6D>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><36><6D>  <20><34><6D><EFBFBD><36><34><6D><36><6D><EFBFBD><EFBFBD><34><6D> <20><><36><37><6D><36><6D><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><33><6D><36> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <34>
<36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <36><6D><EFBFBD><EFBFBD><EFBFBD> <20><30><6D><EFBFBD><36>  <36> <30><36><6D><EFBFBD><EFBFBD> <36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <36><6D><EFBFBD><EFBFBD> <36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37><6D><36>
<34><6D><EFBFBD><EFBFBD><EFBFBD> <20> <20> <20> <20> <37><6D><36><6D> <20><><EFBFBD><EFBFBD><EFBFBD>۲ <20><><EFBFBD><36><34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><36><6D> <34> <20><><36><6D><34><36><6D> <36> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><36> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><36><6D><EFBFBD><34><36> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <34>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20> <20> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ܰ  <20><><34><6D><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><36> <36><6D> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <34>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>_<EFBFBD>_<EFBFBD>_<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><37><34> <20><> <20><37><6D><36> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>  <34> <34><6D><36> <36> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><37><36> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>۲ <34>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37><36><6D><EFBFBD><EFBFBD><30><6D> <20><36><6D><EFBFBD><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37><6D><EFBFBD><EFBFBD><30><31> ۲<6D><DBB2><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><36><30> <32><6D><EFBFBD><EFBFBD><30> <34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ۲<32><6D><36><6D><EFBFBD><EFBFBD><30><6D><EFBFBD><EFBFBD><EFBFBD><36><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30><6D><EFBFBD><36><6D><EFBFBD><30>
<34><37><36><6D><EFBFBD><EFBFBD>۲<EFBFBD><30><6D><EFBFBD><36><6D><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <32><6D> <20><><EFBFBD><37><6D><EFBFBD><EFBFBD>߲<EFBFBD><31><37>۱<30><36><30><39><43><EFBFBD><EFBFBD><35><43>۲<30><6D><EFBFBD><37><6D><30><6D><34> ۲<30><32><6D><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37>ܲ<EFBFBD><DCB2><EFBFBD><30><6D><37><6D><EFBFBD><EFBFBD><EFBFBD><36><6D><30>
<34><39><43><36>߱<EFBFBD><DFB1><EFBFBD><EFBFBD><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><32><6D><EFBFBD><EFBFBD><30><30><6D> <34><6D> <20><31><37><6D><EFBFBD><36><6D><30> <20><><38><43><EFBFBD>ܲ <20><><36><30><6D><EFBFBD><EFBFBD><37><6D><EFBFBD><30><6D> <20><><36><32><6D><EFBFBD><30><6D><EFBFBD><EFBFBD><37><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30><6D> <20><><32><6D><EFBFBD><36><6D><30> <20><>
<34><74><EFBFBD><EFBFBD> <20><><32><30><6D><EFBFBD>۲<EFBFBD><DBB2><EFBFBD> <20><><EFBFBD><36>ݰ<30> <20><><37><6D><30>۲<EFBFBD> <34><6D><EFBFBD><EFBFBD><EFBFBD><31><31><6D> <20><36><6D><EFBFBD><30> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><36><6D><EFBFBD><30><30><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><36><37><6D><30><6D><37><6D><EFBFBD><EFBFBD>۲<6D><31><43><36><6D><37><6D><30><6D><EFBFBD>
<34><74><EFBFBD> <20><37><6D><30><36><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><36><30><37><6D><EFBFBD><EFBFBD><EFBFBD><30><30><6D> <34> <34> <34><6D><EFBFBD><EFBFBD><EFBFBD><31><31><6D><34><6D> <20><36><37><30><6D><EFBFBD> <20><><EFBFBD><EFBFBD><37><6D><EFBFBD><36><6D><30> <30><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37><6D><30><6D><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܰ <20><36><37><6D><EFBFBD><30>
<34><74> <20><37><6D><30><6D><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><37><6D><EFBFBD><EFBFBD><30><6D><EFBFBD><EFBFBD><37><6D><EFBFBD><30> <34><74><EFBFBD> <34><6D> <37><74><EFBFBD> <34><6D> <31> <34> <20><36><6D><EFBFBD><30> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><37><30><37><6D><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><35><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><35><43><EFBFBD><36><37><6D><30> <34><74>
<37><43><37><6D><30><37><6D><EFBFBD><30><37><6D><EFBFBD><EFBFBD><30><37><6D><EFBFBD><EFBFBD><30><6D><36><30><6D><EFBFBD> <20> <34><74><EFBFBD><EFBFBD> <34><37>  <37><34><6D>ܰ<31><34>  <36><30> <20><><EFBFBD><37><6D>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30><6D><37><6D><30><6D><38><43><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><37><43><30><30> <34>
<34><74> <30><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37><6D><EFBFBD><30><6D><30><6D><EFBFBD><EFBFBD> <30><6D><30><6D><EFBFBD><EFBFBD><EFBFBD> <34><74><EFBFBD><EFBFBD> <37><74><EFBFBD><EFBFBD>  <31> <34><34> <20> <20><> <20><37><6D><EFBFBD><EFBFBD><EFBFBD><30><6D> <30><6D><EFBFBD><EFBFBD> <30><30><6D> <35><35><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><36><43><EFBFBD><30><30><6D> <34><74><EFBFBD>
<34><74><EFBFBD> <30><6D><37><6D><EFBFBD><EFBFBD><30><30><6D><EFBFBD> <34><74><EFBFBD><EFBFBD><EFBFBD> <30><6D><30><6D><EFBFBD><EFBFBD><34><74><EFBFBD> <34>߱<31><38><43><EFBFBD><30><6D><EFBFBD><30><6D><EFBFBD> <31><6D><EFBFBD><EFBFBD><EFBFBD><30> <37><35><6D><30><6D><EFBFBD><30><6D><EFBFBD> <30><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30><6D><EFBFBD><EFBFBD><30><6D> <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><74><EFBFBD><EFBFBD> <30><37><30><6D><34><31><30><6D><EFBFBD> <37><74> <31><6D><EFBFBD><EFBFBD> <37><74><35><31><35>  <31><35><30><37><6D><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>   <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<34><74><EFBFBD><EFBFBD><EFBFBD><34><74> <20><30><6D><34> <37><74> <20><><EFBFBD><33><31> <20> <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <35><6D> <35><31><6D> <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <30><6D><30><6D><EFBFBD><EFBFBD><EFBFBD> <34><74>
<34><74><EFBFBD> <30><6D><35><34><37><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><33>ݰ <34><74> <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><31><6D><EFBFBD> <35><6D><35> <20><> <20><><EFBFBD> <30><30><6D>۱ 5m<LEGACY>
<34><74> <35><34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <31> <31><37><74> <20> <20><><33><31>۱ <20><> <34><74> <35><37><35><6D><35><6D><EFBFBD><EFBFBD> <20><31><30>
<34><74> <35><35> <34><74><37> <31>߲<31> <34> <31> <31><37><74> <30><74><31><6D><EFBFBD><EFBFBD><33><6D><EFBFBD><EFBFBD><31><6D><EFBFBD>߰<EFBFBD> <35><37><35><35><6D><37><43>
<34> <35><30>   <34> <31><6D><EFBFBD><EFBFBD> <34> <31> <31><31><6D><37><74> <30><74><31><6D><EFBFBD><EFBFBD><33><6D><31><6D><EFBFBD><EFBFBD><EFBFBD> <37><74> <31><6D><35><34><74><37><6D><EFBFBD><EFBFBD><EFBFBD><34><74> <34><74><37><6D> <20> <34><74><EFBFBD><EFBFBD><EFBFBD> <34><74>
<34><74><EFBFBD><34><34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><31><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><37><74> <37> <20><33><6D><EFBFBD><EFBFBD><EFBFBD><31> <37><74><EFBFBD> <31><6D><EFBFBD> <31><6D><34><74><EFBFBD><EFBFBD><31><6D><34> <34><74><EFBFBD><31><6D><34><34> <31><6D><EFBFBD><34><74>  <34>
<34><74> <31><6D><34><74><31><6D> <31><6D><31>ܱ<31><6D><EFBFBD> <31><34><31><31><6D><EFBFBD><34><74><31><6D><EFBFBD><EFBFBD><EFBFBD><37><31><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><31><6D><33><6D><31><31><6D><EFBFBD><EFBFBD> <34><74><EFBFBD><37><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><74><EFBFBD><37><31><6D><EFBFBD><34><34><74><31><6D><34><74><31><6D><31><6D><EFBFBD><EFBFBD><31><34><30>
<31><6D><34><31><37><31>۲<EFBFBD><31><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߱<6D><32>  <34> <20>  <33><33><6D> <20> <20><><EFBFBD><EFBFBD> <31><6D><EFBFBD><EFBFBD><EFBFBD>߰  <37><6D>    <31><6D><EFBFBD><EFBFBD><EFBFBD> <20> <31>۲<EFBFBD> <31><6D><EFBFBD><EFBFBD><EFBFBD>
 <31><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><74><31><6D><31><6D><34><74><31><6D> <34><31><34><74> <31><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><74><EFBFBD><EFBFBD> <20><><EFBFBD> <31> <33><6D>  <20><><EFBFBD><EFBFBD><EFBFBD> <31><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>::<37> ::  ::  <31><6D><EFBFBD>:: <20><> <31><6D><EFBFBD><EFBFBD> <31><6D>
<31><6D><EFBFBD> <34><74><EFBFBD><EFBFBD><EFBFBD><34> <31><6D><37><31><6D>۲<EFBFBD><DBB2> <34><74><36><6D>  <34><74> <20><><EFBFBD><EFBFBD><EFBFBD>  <33><6D>  <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34>  <31><6D> ߰<6D> <31><6D><31><6D><EFBFBD>
<31><6D><36><6D><31><6D><31><6D><EFBFBD><EFBFBD><EFBFBD>  <20><><31><36><6D><31><6D><34><74><EFBFBD><31><34><31><6D><35><6D><EFBFBD><EFBFBD><EFBFBD><31> <33><6D> <37><6D><EFBFBD><34> <31><6D><EFBFBD><EFBFBD> <34>  <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <34><37><6D><34> <34><31><34><74><31><31><6D><31><34><31><34>
 <20><31><6D><34><31><34>  <20><> <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  <31><6D><EFBFBD> <33><34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <35><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><35><6D><30><6D><EFBFBD><EFBFBD> <20><><EFBFBD>  <34><74> <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<34><74> <20><><EFBFBD><EFBFBD> <35><31><6D><EFBFBD><EFBFBD><35> <20>: <20><><EFBFBD><35> <34><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 <35><6D><31><6D><35><43><EFBFBD><EFBFBD><35>
 <20> <20><> <20><>
 <20> <20><><EFBFBD><EFBFBD><EFBFBD>
<35><31>߲<EFBFBD><35>
<31><43><EFBFBD><35>
<30><43>
 <31><6D><35>
<31><35>
 <20>
<35>
COMNTThe Whole Shabang Logo for Mistigris 25th Anniversary by Smooth.SAUCE00Mistigris Shabang Smooth Legacy Krew 20191124.4<01>9IBM VGA

17
dbp/text/amsghlp1.asc Normal file
View File

@ -0,0 +1,17 @@
|CL|07Message Index Help
------------------
Up Arrow = Move up in message list
Down arrow = Move down in message list
Right arrow = Move to the next page
Left arrow = Move to the previous page
Ctrl-R = Move to the next page
Ctrl-C = Move to the previous page
Enter = Read highlighted message
Escape = Quit Reading
N = Goto next base in scan (*)
(*) Only during a scan on multiple message bases. When reading a single
base, this command will act the same as the ESCAPE key.
|PA

22
dbp/text/amsghlp2.asc Normal file
View File

@ -0,0 +1,22 @@
|15|16|CL|POFull-Screen Message Reading Help
|07Use arrow/home/end/page up/page down keys to navigate around a single
message. You can also use ENTER to move down a page or to the next message
if you are at the end of a message. The left/right arrow keys can be used
to move to previous and next messages, while pressing ESCAPE will exit.
|15The following hot-key commands are also available:
|07(|15A|07) Show Message Again (|15G|07) Goto Next Base in Scan
|07(|15I|07) Ignore Remaining Messages (|15J|07) Jump to a Message
|07(|15N|07) Next Message (|15P|07) Previous Message
|07(|15R|07) Reply to Message (|15T|07) Toggle NewScan Setting
|07(|15X|07) Export Message (|10L|07) Lightbar Message List
|07(|15[|07) Previous Message in Thread (|15]|07) Next Message in Thread
|12Message Owner Options:
|07(|14D|07) Delete Message (|14F|07) Forward Message
|07(|14E|07) Edit Message (|14M|07) Move Message
|PA

1
dbp/text/ansichat.ans Normal file
View File

@ -0,0 +1 @@
|CL<34><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<31><34> <20><34><31> <20><34><34> <20><34><31><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<31><37><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><31><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<31><34> <20><34><31> <20><34><34> <20><34><31><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<31><37><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37> <30><34><31><37><30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><34><31><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|!1|!2|!3|!4|!5|!6|!7|!8|&1|&2|!0|!9mins left

20
dbp/text/ansieditor.ans Normal file
View File

@ -0,0 +1,20 @@

ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ANSI Editor Help ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º º
º ESCAPE Select Attribute / Quick menu º
º CTRL+A Select Attribute / Quick menu º
º CTRL+B Block Operations º
º CTRL+F Jump to first column of line º
º CTRL+G Jump to last column of line º
º CTRL+I Insert Tab (5 spaces) º
º CTRL+K Cut the current line of text º
º CTRL+O Open a new file for editing º
º CTRL+S Save the curent file to disk º
º CTRL+U Uncut/paste the cut buffer º
º CTRL+V Toggle Insert/Overwrite Mode º
º CTRL+Y Delete Line º
º º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ Press a key ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ

1
dbp/text/ansiflst.ans Normal file
View File

@ -0,0 +1 @@
|CLレトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソウ ア File Listing ウタトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトルトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト|$L40|FB|!1|!2|!3|!4

1
dbp/text/ansihelp.ans Normal file
View File

@ -0,0 +1 @@
|CL Mystic BBS Online Help ESC/Quit レトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウウタトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル|[X02|[Y03|!1|[X79|[Y22|!2

1
dbp/text/ansimlst.ans Normal file
View File

@ -0,0 +1 @@
|CLレトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソウ ア Message Index Listing |$L40|MB ウタトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル##SubjectFromToトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト(Arrows)Move(ESC)Quit(ENTER)Read(G)GotoNextBase(?)Help|!1|!2|!3

1
dbp/text/ansimrd.ans Normal file
View File

@ -0,0 +1 @@
|CLFrom:|$R40|&1Msg#:|&5of|&6To:|$R40|&2MsgDate:|&4 |&0Subj:|$R40|&3Referto:|&7Stat:|$R40|&9SeeAlso:|&8トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトReading:?forHelp|!1|!2|MB

1
dbp/text/ansitele.ans Normal file
View File

@ -0,0 +1 @@
|CLレトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソウ ア Multinode Teleconference ウタトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトルChannel->/?forHelpTopic->トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト|!4|!5|!1|!2|!3

1
dbp/text/ansitext.ans Normal file
View File

@ -0,0 +1 @@
|CLÚÄÄÄÄ[úúúMysticBBSTextEditorúúú]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[úúúCtrl-ZSaveúúúú[]úúú]ÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ|!3|!1|!2

24
dbp/text/ansiview.ans Normal file
View File

@ -0,0 +1,24 @@
 ー ANSI Viewer 
レトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウ Title [] Group [] Cols [ ] ウ
ウ Author []Lines [ ] ウ
チトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトチ
トトト[]トトトトト ?/Help トトトトト[] % トトト

121
dbp/text/ansiview.ini Normal file
View File

@ -0,0 +1,121 @@
; ANSIVIEW.INI
; ============
;
; This template defines the configuration for ANSI viewer
[Options]
description = ANSI File Viewer
; Display file and help file. Blank help file will disable help
display_file = ansiview
help_file = ansiview_help
; Default values for render column size and baud
columns = 80
baud = 38400
[Coords]
; X,Y,Attribute
; Contains the top X/Y location of the listing window
; Attribute is the color used as default color for each line's filler
Coord1 = 1,6,7
; Contains the bottom X/Y location of the listing window
Coord2 = 79,23,7
[Percent]
; Percentage bar for Y axis
; Use a percentage bar meter?
active = true
; 0 = horizontal filled, 1 = vertical filled, 2 = horizontal position, 3 = vertical position
bar_format = 0
; length of bar in characters
bar_length = 20
; X location of meter
location_X = 50
; Y location of meter
location_Y = 24
; low/bg character of meter (ASCII character number)
low_char = 176
; low/bg attribute of meter (FG + BG * 16)
low_attr = 1
; high/fg character of meter (ASCII character number)
high_char = 219
; high/fg attribute of meter (FG + BG * 16)
high_attr = 9
[Percent2]
; Percentage bar for X axis
; Use a percentage bar meter?
active = true
; 0 = horizontal filled, 1 = vertical filled, 2 = horizontal position, 3 = vertical position
bar_format = 2
; length of bar in characters
bar_length = 25
; X location of meter
location_X = 5
; Y location of meter
location_Y = 24
; low/bg character of meter (ASCII character number)
low_char = 176
; low/bg attribute of meter (FG + BG * 16)
low_attr = 1
; high/fg character of meter (ASCII character number)
high_char = 219
; high/fg attribute of meter (FG + BG * 16)
high_attr = 9
[Prompts]
; Text used for each author field if no author data is founddir
str1 = Unknown
; Display information
; &1 = filename
; &2 = title
; &3 = author
; &4 = group
; &5 = number of lines in file
; &6 = current viewing columns
; &7 = default baud rate
; Display file information (shown on full redraw)
str2 = |[X25|[Y01|15|17|$L54|&1|16|[X11|[Y03|$R24|&2|[X44|&4|[X73|&6|[Y04|[X11|&3|[X73|&5
; Display percentage of file viewed
; &1 = percent
str3 = |[X72|[Y24|16|11|$L03|&1
; Input baud rate prompt
str4 = |#X#2# Enter Display Baud Rate (0/None) #20#10#65#13#|[X39|[Y12
; Input render column size prompt
str5 = |#X#2# Render Column Size (40-160) #24#10#61#13#|[X41|[Y12

View File

@ -0,0 +1,23 @@
 ° ANSI Viewer Help Press any key to Exit 
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³³
³ MOVEMENT³
³³
³ ARROWS Scroll in any direction (up, down, left, right)³
³ PAGE UP Scroll one page up³
³ PAGE DN Scroll one page down³
³HOME Move to start of display file³
³END Move to end of display file³
³ INSERT Scroll one page to the right³
³ DELETE Scroll one page to the left³
³TAB Scroll to the next page in file (scroll right/down)³
³ ENTER Scroll one page down³
³³
³ COMMANDS³
³³
³ SPACE Display file as scroller (with baud emulation, SPACE to abort) ³
³ CTRL+R Change column size used to render the display file and redraw ³
³ ESCAPE Exit the ANSI viewer³
³³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|PN

24
dbp/text/archive_view.ans Normal file
View File

@ -0,0 +1,24 @@
 ー Viewing
 Files............:Compressed Size....:
Directories......:Decompressed Size..:
 ー Path
レ File Name トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト Size トトト Date トトト Time トソ
テトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトエ
ウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル

124
dbp/text/archive_view.ini Normal file
View File

@ -0,0 +1,124 @@
; ARCHIVE_VIEWER.INI
; ==================
;
; Configuration options for Mystic's ANSI archive viewer
[Options]
description = Full screen ANSI Archive Viewer
; If set to non-blank, pressing CTRL+Z will display this help file
help_file = archive_viewer_help.ans
; ANSI viewer template to use when viewing files
viewer = ansiview
; If the current directory is longer than this length in characters, it will
; be trimmed and prefixed with "..."
dir_len = 70
; This is the size of the search input field, if the user searches for a
; string longer than this, Mystic will scroll their input.
search_len = 15
; custom date format using Mystic's date string formatting
custom_date = DD NNN YYYY
; file size suffixes each separated by a space:
; gigabyte megabyte kilobyte bytes
size_info = |07gb |07mb |07kb |07b
[Coords]
; Contains the top/left X and Y location of the listing window
; and the background attribute (used when clearing the window when needed)
Coord1 = 2,9,7
; Contains the bottom/right X and Y location of the listing window
Coord2 = 78,21,A
; X, Y coordinates and attribute for search text
Coord3 = 14,23,15
[Percent]
; Use a percentage bar meter?
active = true
; 0 = horizontal, 1 = vertical
bar_format = 1
; length of bar in characters
bar_length = 13
; X location of meter
location_X = 79
; Y location of meter
location_Y = 9
; low/bg character of meter (ASCII character number)
low_char = 176
; low/bg attribute of meter (FG + BG * 16)
low_attr = 1
; high/fg character of meter (ASCII character number)
high_char = 219
; high/fg attribute of meter (FG + BG * 16)
high_attr = 9
[Prompts]
; show archive name
; &1=archive name
; &2=total files
; &3=total dirs
; &4=compressed size
; &5=compressed size abbrivated
; &6=decompressed size
; &7=decompressed size abbrivated
str1 = |[X12|[Y01|17|14|&1|16|[X22|[Y03|15|&2|[X22|[Y04|&3|[X68|[Y03|15|&5|[X68|[Y04|15|&7
; Show current directory
; &1 = directory name or / for root
str2 = |[X09|[Y06|17|14|$R70|&1|16
; selected and deselected text prompts:
; &1 = file/dir name
; &2 = file size in bytes
; &3 = file size in abbreviated format (1.00MB)
; &4 = file date in users selected date format
; &5 = time
; &6 = file date in custom date format
; non selected file display
str3 = |16|15|$R48|&1 |15|$L08|&3 |09|&6 |&5 |XX
; non selected directory display
str4 = |16|07|$R48|&1 |12<DIR> |09|&6 |&5 |XX
; selected file display
str5 = |17|15|$R48|&1 |15|$L08|&3 |09|&6 |&5 |XX
; selected directory display
str6 = |17|07|$R48|&1 |12<DIR> |09|&6 |&5 |XX
; displayed when browsing the list (should erase the text search area)
str7 = |[X03|[Y23|16|07Type to Search |15ESCAPE|08/|07Previous Directory |15CTRL|08/|15D |07Download |15ENTER|08/|07View
; displayed when beginning to search
str8 = |[X03|[Y23|16|07Searching|08: |15CTRL|08/|15A |07Search Again |15CTRL|08/|15Y |07or Move to Reset
; displayed on startup when creating the virtual directory structure
str9 = |#I#1#10# Info #Generating virtual archive disk, please wait#

7
dbp/text/bankhdr.asc Normal file
View File

@ -0,0 +1,7 @@
|16|07|CL
|01ßÛÛÛÛß|07 |01ßßßß|07 |17|09²|16|01ÛÛßÛßÛ|07 |17|09²|16|01ÛÛÛßß
|07 |17|09±|16|01ÛÛÛ|07 |17|09±|16|01ÛÛÛ|07 |17|09±|16|01ÛÛ |07 |01Û|07 |17|09±|16|01ÛÛÛÜ|07 |17|09
|16|07 |17|09°|16|01ÛÛÛ|07 |17|09°|16|01ÛÛÛ|07 |01ÛÛÛ Û|07 |01ÛÛÛÛÜÜ
|10A|02llowed |10I|02n |10B|02ank|10 |08->|07 |$R08|SB|10 |07 |10 A|02mount In Bank|07 |08->|07 |$R08|TB|10 T|02ime|10 L|02eft|10 |08->|10 |07|TL

16
dbp/text/bullet1.asc Normal file
View File

@ -0,0 +1,16 @@
|16|CL
|17|09²|16|01ÛÛÛßßÛ |17|09²|16|01ÛÛÛ Û |17|09²|16|01ÛÛÛ |17|09²|16|01ÛÛÛ |17|09²|16|01ÛÛÛßß ßÛÛÛÛß ßßßß |17|09²|16|01ÛÛÛ Û
|17|09±|16|01ÛÛÛÜÜß |17|09±|16|01ÛÛÛ Û |17|09±|16|01ÛÛÛ |17|09±|16|01ÛÛÛ |17|09±|16|01ÛÛÛÜ |17|09±|16|01ÛÛ|17 |16|07 |17|09±|16|01ÛÛ|17 |16|07 |17|09±|16|01ÛÛÛßÜÛ |17
|16ÛÛÛÛÜÜÛ ÛÛÛÛÜÛ ÛÛÛÛÜÜ ÛÛÛÛÜÜ ÛÛÛÛÜÜ |17|09°|16|01ÛÛ|17 |16|07 |17|09°|16|01Û|17 |16|07 |01ÛÛÛÛ Û
|03Subject: |13Welcome To Mystic BBS Software|07
Welcome to Mystic BBS software! You've just stumbled upon one of the most
widely available and flexible BBS packages ever. With native versions for
Windows, Linux, and Mac OSX, Mystic not only offers features not found
anywhere else, but flexibility in your choice of operating systems.
With Mystic, everything can be modified. With a little know how and some
creativity, Mystic can be your tool to create the most unique BBS experience
ever. Whether you want to run a file server, a large chat based system, a
message-based BBS, or gaming, Mystic can be your solution.

15
dbp/text/bullet2.asc Normal file
View File

@ -0,0 +1,15 @@
|16|CL
|17|09²|16|01ÛÛÛßßÛ |17|09²|16|01ÛÛÛ Û |17|09²|16|01ÛÛÛ |17|09²|16|01ÛÛÛ |17|09²|16|01ÛÛÛßß ßÛÛÛÛß ßßßß |17|09²|16|01ÛÛÛ Û
|17|09±|16|01ÛÛÛÜÜß |17|09±|16|01ÛÛÛ Û |17|09±|16|01ÛÛÛ |17|09±|16|01ÛÛÛ |17|09±|16|01ÛÛÛÜ |17|09±|16|01ÛÛ|17 |16|07 |17|09±|16|01ÛÛ|17 |16|07 |17|09±|16|01ÛÛÛßÜÛ |17
|16ÛÛÛÛÜÜÛ ÛÛÛÛÜÛ ÛÛÛÛÜÜ ÛÛÛÛÜÜ ÛÛÛÛÜÜ |17|09°|16|01ÛÛ|17 |16|07 |17|09°|16|01Û|17 |16|07 |01ÛÛÛÛ Û
|03Subject: |13About This Bulletin Menu|07
This bulletin program was written with Mystic's Programming Language and
can be found as BULLETIN.MPS in the SCRIPTS directory. The source code is
freely available and can be modified for your personal use only.
While being a fairly simple program, the bulletin addon allows for a good
deal of flexibility - allowing for multiple bulletin menus, bulletin new
scanning, etc. The source code contains more details on how to setup
multiple bulletin menus, and more.

8
dbp/text/bulletin.asc Normal file
View File

@ -0,0 +1,8 @@
|16|CL
|17|09²|16|01ÛÛÛßßÛ |17|09²|16|01ÛÛÛ Û |17|09²|16|01ÛÛÛ |17|09²|16|01ÛÛÛ |17|09²|16|01ÛÛÛßß ßÛÛÛÛß ßßßß |17|09²|16|01ÛÛÛ Û
|17|09±|16|01ÛÛÛÜÜß |17|09±|16|01ÛÛÛ Û |17|09±|16|01ÛÛÛ |17|09±|16|01ÛÛÛ |17|09±|16|01ÛÛÛÜ |17|09±|16|01ÛÛ|17 |16|07 |17|09±|16|01ÛÛ|17 |16|07 |17|09±|16|01ÛÛÛßÜÛ |17
|16ÛÛÛÛÜÜÛ ÛÛÛÛÜÛ ÛÛÛÛÜÜ ÛÛÛÛÜÜ ÛÛÛÛÜÜ |17|09°|16|01ÛÛ|17 |16|07 |17|09°|16|01Û|17 |16|07 |01ÛÛÛÛ Û
|09( |101 |09) |03Welcome To Mystic BBS Software
|09( |102 |09) |03About This Bulletin Menu
|09( |10Q |09) |03Quit to Main Menu

2
dbp/text/closed.asc Normal file
View File

@ -0,0 +1,2 @@
Sorry, this system is currently closed.

5
dbp/text/doorhdr.asc Normal file
View File

@ -0,0 +1,5 @@
|16|CL
|17|09В|16|01лллппл|07 |17|09В|16|01лллпл|07 |17|09В|16|01лллплпл|07 |17|09В|16|01лллпп|07 |17|09Б|16|01ппппп
|17|09Б|16|01ллл мм|07 |17|09Б|16|01лллмл|07 |17|09Б|16|01ллл|07 |01л|07 |01л|07 |17|09Б|16|01лллм|07 |01пп|17 |16л|17 |16|07 |17|09
|16|01ллллммл|07 |01лллл|07 |01л|07 |01лллл|07 |01л|07 |01ллллмм|07 |17|01 |16м|17 |16лл|17 |16

6
dbp/text/emailhlp.asc Normal file
View File

@ -0,0 +1,6 @@
|03(|11A|03) Read Again (|11N|03) Next Message
|03(|11P|03) Previous Message (|11R|03) Reply to Message
|03(|11J|03) Jump to Message (|11X|03) Download Message
|03(|11L|03) List Messages (|14D|03) Delete Message
|03(|11Q|03) Quit

10
dbp/text/feedback.asc Normal file
View File

@ -0,0 +1,10 @@
|16|CL|07|09ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|01¿
|09³|17 ± |15New User Application Feedback |16|01³
|09À|01ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|07 You must now send an e-mail to the System Operator. This is mostly just
to let us know that there is a new account on our system. You could use this
message to introduce yourself, tell us what your looking for on our BBS, etc.
|01ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|07|PA

23
dbp/text/file_index.ans Normal file
View File

@ -0,0 +1,23 @@
 ー File Base Listings
レトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウ  N  Area Description Files New Last Upload ウ
テトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトエ
ウ
ウ
ウ
ウ
ウ
ウ
ウ
ウ
ウ
ウ
ウ
ウ
ウ
テトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトエ
Tagged:Search Textウ
Showing:>ウ
テトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトエ
ウウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル

205
dbp/text/file_index.ini Normal file
View File

@ -0,0 +1,205 @@
; FILE_INDEX.INI
; ==============
; Configuration options for Mystic's ANSI file index lister
[Info]
description = File Base Index Lister
display_file = file_index
help_file = file_index_help
[Options]
; Show all groups in the list (or just current group when off)
all_groups = true
; View mode on startup:
; 0=all bases, 1=subscribed bases, 2=unsubscribed bases
view_mode = 1
; ACTION MODE: What to do when enter is pressed on a base
; 0 = list files
; 1 = change area
; 2 = toggle newscan
; Note when action mode is not set to list files, users will not be able
; to tag file bases, or change view with CTRL+V
action_mode = 0
; Add a blank line between groups
show_gaps = true
; When generating by groups, a group can be excluded from the list by
; listing the unique ID number here separated by commas
; (ex exclude_groups=1,7)
; exclude_groups=1
; Sort by base name (true) or display in order appearing in base editor (false)
sort = true
; Sort bases by group and use division separators between groups
show_divs = true
; Move file bases with new files at the top of each category list
new_at_top = true
; If there are bases with new files, automatically move the lightbar to
; highlight them on startup and after listing files
snap_new = true
; upload date format
date_format = DD NNN YYYY
; subscribed OFF text (new scan)
scan_off = OFF
; subscribed ON text (new scan)
scan_on = ON
[Coords]
; Contains the top/left X and Y location of the area listing
; window.
Coord1 = 3,5,A
; Contains the bottom/right X and Y location of the area listing
; window
Coord2 = 78,17,A
; Contains the X/Y position and attribute of the area search text
Coord3 = 56,20,15
[Percent]
; Use a percentage bar meter?
active = true
; 0 = horizontal, 1 = vertical
bar_format = 1
; length of bar in characters
bar_length = 13
; X location of meter
location_X = 79
; Y location of meter
location_Y = 5
; low/bg character of meter (ASCII character number)
low_char = 176
; low/bg attribute of meter (FG + BG * 16)
low_attr = 8
; high/fg character of meter (ASCII character number)
high_char = 219
; high/fg attribute of meter (FG + BG * 16)
high_attr = 9
[Prompts]
; The following codes can be used in all lightbar prompts:
; &1=file base name &2=network description
; &3=total files &4=new files
; &5=last upload &6=# of tagged bases
; NON SELECTED PROMPTS 1-4
; No new messages
str1 = |07 |$R39|&1 |$L09|&3 |$L07|&4 |09|&5
; No new message but base is tagged
str2 = |14 |$R39|&1 |$L09|&3 |$L07|&4 |09|&5
; New messages
str3 = |15 NEW |$R39|&1 |$L09|&3 |$L07|&4 |09|&5
; New messages and base is tagged
str4 = |15 NEW |14|$R39|&1 |$L09|&3 |$L07|&4 |09|&5
; SELECTED PROMPTS 4-8
; No new messages
str5 = |07|17 |$R39|&1 |$L09|&3 |$L07|&4 |09|&5|16
; No new message but base is tagged
str6 = |14|17 |$R39|&1 |$L09|&3 |$L07|&4 |09|&5|16
; New messages
str7 = |15|17 NEW |$R39|&1 |$L09|&3 |$L07|&4 |09|&5|16
; New messages and base is tagged
str8 = |15|17 NEW |14|$R39|&1 |$L09|&3 |$L07|&4 |09|&5|16
; displayed while browsing the list
str9 = |[Y22|[X17|07Select base, type to search, or |15CTRL-Z|07 for help
; displayed while searching the list
str10 = |[Y22|[X17|07|15CTRL-A |07to search again, |15CTRL-Y |07or move to reset
; When group dividers are on, this is the dividing prompt (&1=Group name)
str11 = |09Ä |14|&1 |09|$X77Ä
; Shown when the index is calculating message base stats on startup
; or when CTRL-R is used to recalculate statistics
str12 = |#I#1#10# Info #Calculating file base statistics, please wait#
; Display number of tagged bases (blank to disable)
str13 = |[X17|[Y19|15|&6 base(s)|$X30 |XX
; Showing: ALL BASES
str14 = |[X17|[Y20|15|16All File Bases |XX
; Showing: New scan flagged
str15 = |[X17|[Y20|15|16Subscribed Bases |XX
; Showing: Bases NOT flagged for new scan
str16 = |[X17|[Y20|15|16Unsubscribed Bases
; Select view type prompt
str17 = ASU |#V#2#26#9# View Mode #-,S-All Subscribed Bases,U-All Unsubscribed Bases,A-All File Bases,-#
; Add bases to subscription list &1=# of bases?
str18 = |#Y#2#10#Confirm#Add |&1 base(s) to subscription list?#
; Delete bases from subscription list &1=# of bases?
str19 = |#Y#2#10#Confirm#Remove |&1 base(s) from subscription list?#
; Catch up? &1=# of bases?
str20 = |#Y#2#10#Confirm#Catch up new file stats for |&1 base(s)?#
; If show gaps is on, this is the line shown between groups
str21 = |$X78 |XX
; Shown when running in "all groups" mode
str22 = |[X69|[Y01|15|17All Groups
; Shown when running in current group mode
str23 = |[X49|[Y01|15|17|$L30|FG

View File

@ -0,0 +1,23 @@
 ° File Base Index Help Press Any Key to Exit
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³³
³ MOVEMENT AND SEARCHING³
³³
³ Use the arrow/page keys to select a file base, or a scroll wheel or mouse ³
³ click when using a compatible terminal such as NetRunner. Searching for ³
³ file bases can be done by simply typing text to search for at any time. ³
³³
³ COMMANDS³
³³
³ ENTER Select and list files in the highlighted file base³
³TAB Tag a file base for further actions³
³ ESCAPE Quit back to the BBS menus³
³ CTRL+S Subscribe to the highlighted or tagged file bases³
³ CTRL+U Unsubscribe from the highlighted or tagged file bases³
³ CTRL+V Toggle between showing all, subscribed, or unsubscribed bases³
³ CTRL+C Update/catch up new file scan for highlighted or tagged bases³
³ CTRL+N Jump to next base in the list with new files³
³ CTRL+R Recalculate file base statistics and redraw listing³
³ CTRL+Z Shows this help file³
³³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ|PN

5
dbp/text/filehdr.asc Normal file
View File

@ -0,0 +1,5 @@
|16|CL|07
|17|09В|16|01лллпп пппп |17|09В|16|01ллл |17|09В|16|01лллпп |17|09В|16|01ппппп
|17|09Б|16|01лллм ллл|17|09А|16|07 |17|09Б|16|01ллл |17|09Б|16|01лллм пплллл |17
|16лллл ллл|17|09Б|16|07 |01ллллмм ллллмм ммлллл|16|07

14
dbp/text/flisthlp.ans Normal file
View File

@ -0,0 +1,14 @@
|11|17ÉÍ|00|23 HELP |11|17ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»|16
|17º|07|17 ENTER ... View extended information on highlighted file |11º|16
|17º|07|17 SPACE ... Flag highlighted file for download |11º|16
|17º|07|17 CTRL-E ... Previous file (or use up arrow key) |11º|16
|17º|07|17 CTRL-X ... Next file (or use down arrow key) |11º|16
|17º|07|17 CTRL-R ... Previous page (or use Page Up key) |11º|16
|17º|07|17 CTRL-C ... Next page (or use Page Down key) |11º|16
|17º|07|17 V ... View contents of an archive |11º|16
|17º|07|17 N ... Scan next base (during new scan and search) |11º|16
|17º|07|17 ESC ... Quit file list (abort new scan and search) |11º|16
|17ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ|16
|17º |14--- HIT ANY KEY TO RETURN --- |11º|16
|17ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ|07|16
|PN

18
dbp/text/fsearch.asc Normal file
View File

@ -0,0 +1,18 @@
|07|16|CL|09ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³|17 ± |15File Search: Boolean Text Matching |01|16³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|03Search by typing in a word or phrase. All searches are case insensitive and
will target both the file name and description.
You can optionally perform complex boolean searches using any combination of
parenthesis, |11AND|03 |11OR|03 and |11NOT|09 |03boolean operators|09 |03(|11&|03=|11AND|09 |11||03=|11OR !|03=|11NOT|03)
|09 Search text|01:|09 |11Mystic BBS
|09 |03This search will search for files containing "Mystic BBS"
|09 Search text|01:|09 |11(mystic|telegard)!renegade
|03The above example uses boolean operators to search for any file
|03that contains "mystic" OR "telegard"|09 |03but does NOT contain "renegade"

23
dbp/text/gallery.ans Normal file
View File

@ -0,0 +1,23 @@
[?7h ー ANSI Gallery ESCAPE/Quit CTRL+Z/Help 
Path:
レ FileName トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト Group トトトトトト Artist トトトトトトソ
ウ
ウ
ウ
タトトル

125
dbp/text/gallery.ini Normal file
View File

@ -0,0 +1,125 @@
; GALLERY.INI
; ===========
;
; This template defines the configuration for ANSI gallery
[Options]
description = ANSI Gallery
; Display file and help file. Blank or missing help file will disable help
; otherwise CTRL+Z will show help file
display_file = gallery
;help_file = gallery_help
; Viewer template to use when viewing a file or disable to display using
; traditional display file
use_viewer = true
view_template = ansiview
; Path size for display
; If longer than this, the path will be prefixed with "..."
path_size = 70
; Search size
; Length of characters shown in search field before it scrolls
search_size = 20
; Date format used for file date/time
date_format = DD NNN YYYY
; Size format used for translated filesize
size_info = |07gb |07mb |07kb |07b
; If true, always exit when escape is pressed or false to move
; to previous directory and only exit if in root directory
escape_exit = false
; Checking every single file for SAUCE can really slow down reading in a
; directory with a lot of files so you can disable sauce always here or
; as needed via the menu command options. Viewer will always use SAUCE
; to font change and adapt to custom screen sizes even when this is disabled
no_sauce = false
[Coords]
; X,Y,Attribute
; Contains the top X/Y location of the listing window
; Attribute is the color used as default color for filler
Coord1 = 2,6,7
; Contains the bottom X/Y location of the listing window
Coord2 = 78,22,7
; Contains X/Y coordinates and attribute for search field/text
Coord3 = 15,23,15
[Percent]
; Percentage bar for Y axis
; Use a percentage bar meter?
active = true
; 0 = horizontal filled, 1 = vertical filled, 2 = horizontal position, 3 = vertical position
bar_format = 1
; length of bar in characters
bar_length = 17
; X location of meter
location_X = 79
; Y location of meter
location_Y = 6
; low/bg character of meter (ASCII character number)
low_char = 176
; low/bg attribute of meter (FG + BG * 16)
low_attr = 1
; high/fg character of meter (ASCII character number)
high_char = 219
; high/fg attribute of meter (FG + BG * 16)
high_attr = 9
[Prompts]
; Lightbar prompts
; &1=Filename &2=Title &3=Author &4=Group &5=Font &6=Columns
; &7=Lines &8=Size(B) &9=Size(T) &A=Date
; File selection no sauce (str1=off, str2=selected)
str1 = |07|16 |$R49|&1 Unknown Unknown |XX
str2 = |15|17 |$R49|&1 Unknown Unknown |16
; File selection with sauce (str3=off, str4=selected)
str3 = |07|16 |$R49|&1 |09|$R12|&4 |$R12|&3 |XX
str4 = |15|17 |$R49|&1 |$R12|&4 |$R12|&3 |16
; Directory selection (str5=off, str6=selected)
str5 = |15|16 |$R49|&1 |04<|12DIRECTORY|04> |XX
str6 = |15|17 |$R49|&1 |04<|12DIRECTORY|04> |16
; Draw current path and stats
; &1=Path &2=Total files &3=Total directories
str7 = |15|[X08|[Y03|$R70|&1
; Displayed while browsing the list with no search text, this erases
; the area which the search text would be while searching
str8 = |[Y23|[X03|01|$D75Ä
; Displayed while searching the list
str9 = |[Y23|[X03 |15S|07earching|08:|$D22 |[X47 |01[|09Ctrl+A|01] |15A|07gain |01[|09Ctrl+Y|01] |15R|07eset |XX

86
dbp/text/helpdemo.hlp Normal file
View File

@ -0,0 +1,86 @@
<keyword> INDEX
|03ÜÜ|19|11Ü°|16|03ßß ß Þ þ
Ü|19|11Üß|16|03ß|07 |23|00²|16|03Þ|19|11ÜÜ|16±°|07 |23|11 |00MYSTIC BBS HELP INDEX |16
|03Þ|19|11Û±|16|07 |03Ü|19|11ÜÛÛ|16ßß|19|15Û|11Û|15ÛÛ|11Û|15°|00²|16|07 |08ù-ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄúÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ù
|19|11ÛÛ|16|03Ý ±|19|11²|16°|07 |03ÜÜ|07 <link=!mpldemo> Execute MPL </link> |08³ |07<link=HELP>Help System Commands</link>
|03°|19|11²²|16|03Ý ²|19|11°° |16|03° ßß|11±ß|19Û²°|16|03° |07Editing Commands |08³ |07Configuration Options
|03±|19|11°°|16|03Ü ß|19 |16± Þ|19|11°±²ÛÛÛ±|16|03±
|03ßÛÜÜÜÜÜ ßßßßß|19|11ßß|16|03ß |08ù-ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ù
|07 |03ßßÛ|19|01°|17|03²|16|07 |03ÞÛ²°
|10ABOUT THIS HELP DEMO
|08ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|07This demo is to test the HTML-like markup help system within Mystic BBS.
These help files can contain several sections of pipe color embedded text
and provides the ability to link between them using the cursor and extended
keys to navigate. Links can also execute MPL programs and menu commands as
well.
|08ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
<end>
<keyword> ABOUT
This is the about section. There is no previous link so press backspace to
go back to the previous topic!
<end>
<keyword> HELP
This is the help system test stuff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<link=@PREV>PREVIOUS</link> (or press backspace)
<end>

46
dbp/text/logoff.ans Normal file
View File

@ -0,0 +1,46 @@
|PO|16|CL
ワワワロロワワワワロ ワロロロワ ワワワ ゙ロロ
ワワワ ゙ロロ ワワワ ロロロ ゙ロロロロロロロロロ ロロロロン ゙ロロロロロンロロロ ロロン
゙ロロロ ロロン ゙ロロロロ ゙ロロ ゙ロロロ゙ロロン ゚ロロ ゙ロンロロロ ロロ゚ ゚ロロ゙ロロ゙ロロ
゙ロロロ゙ロロ ゚ロロンロロン゙ロロン゚ ロロロ ゚゚゚゚゚゚゙ロロワ~ワロロ ロロ ゙ロロンロロ ゚゚ ロロロロロロ
ロロロロロロ ゙ロロ ゙ロロ ロロン ロロロ ワワ ゙ロロ゚ロロロ ゙ロロロロロロロ゙ロン ワヷロロロロロン
ロロロロロロンロロロロロロロンロロン ワヷロロロロロ ロロ゚ ロロンロロロ ロロロンロロワロロロンロロンロロロ
゙ロロンロロロ゙ロン ロロロ゙ロロロロロ゙ロロロロロ ロロロワロロロ゙ロロン ゙ロロロ゙ロロロロ゚゙ロロン゙ロロン
゙ロロン゙ロロンロ ゙ロロンロロロ゚゚゙ロ゚゚゚゚゚ロロ ロ゚゚ ゚゚ ゚゚゚ ゙ロロン
゙ロロン ワワ゚゙
ワワワワ゚゚゚゚ワ ワ゚゚゚゚ワン
ロンン.゙゚ワロロロロワ゚゚ワロロロロワ゚ワン
゙ロ゙...ンンロロロロロロロンロロロロロロロロ゙ロワン
゙ロ゙...ン゙ロロロロロロロ゙ロロロロロロロロン゚゚ロワワン
ロント ゙ロロロロロロロンロロロロロロロロロロ゙ロワ ロロロワン
゙ロロ゚ロロロ ロロロンロロロ ロロロロロロ゙ンロンロロロロントン
ワワ゚゚ ワロワロロロロロロロンロロロロロロロロロロ゙ロ゙ンロロロロ \ン
ロ゚ワロンロロロロロワワワヷロロロロロロロ゙ロロロロロロロロンロロ゙ンロロロンン
゙ロロロ゚゙ロロロ゙ロ ワワロロロロロロロロロンンロロロロロロロンロロロロロロロロ゙ロン゙ンロワワヷ
゚゚ワロン゚゚ワロロロロロロロロロロロロロロ゙ロワ゚ロロロロ゚ワワ゚ロロロロ゚ワロロ ロンロロロロロ゙
゙ロロ゚ワ ワン゚゚ロロロロロロロロロロロロ゙ロロロワワワワ゚ロ゚ロワワワワロロ゚ロ゙ロンロロロロロン ゙
゚ワロロンロワロ゚ワ゚゚ロロロロ゚゚ ゚゚ ゚ロロロロロ゚゚゚ロロロロロロ゚ ゙ワロロンロロロロロン ゙
゙ロロ゚ワロロ'..ンロロワンワワロ ロロロ ロロロロロ゙
゚ワロンロロウ..゙ロロロンロロロン゙ロロウロロロロロン ゙
ロロ ロワト ン゙ロロンロロロン゙ンロ゙ロロロロロ ン
゙ロン゙ ゚゚゚ワワ ゚゚゚ ゚゚ロ゙ンロロロロロロ ン
゚ ン ンワロロロワワワ ワ ゚ンロロロロロロン ン
ン ゙゙ロロロロロロロロロロロワワワ ワ ロヷ ゙゙ロロロロロ ン
ン ン゚ロロロロ゚゚゚ロロロロロロロロロワ ンロ ンンロロロロン ン
゙ ゙ワロロロワワ゚゚ロロロロロ゚  ロロ゙ロンロ゙ロロロロ ン
゙ /\゙ロロロロロロロロワワワワワロロ゙ ロンロ ゙゙ロロロロ゙ ゙
゙ロ゚ロロロロロロロロロロロロロロン ンロ ゙ロロロンロン ゙
゙ワ゚゚゚゚ワ゚ロロロロロロロロロン ロンロ ロロロ゙ロロ ゙
ワワ ワロロワ ワロロロロロロロロワ゚゚ロワロ゚ワロ゙ ロ゙ロ ン゙ロロンロロロン゙
ワワヷロロロ゙ロ゚ロンロ゙ロロ゙ロロロロロロロロロロロワワワロロロ゙ ロ゙ロ ンロロロンロロロ ゙
ロロロロ゙ン゙ロンン ロンロンロロロロロロロロロロロロロロロロロロロン ロ゙ ゙ロロロワ゚ン゚゚
゙ロロ トロ ロンン゙ロンロロロロン゚゚゚ ロロロロロロロロロロロロロロロロロ゙ロロロンロ ゙ロロロロロワワ
゙ロロロロ゙ン゙ロンロロロ゙ンロロロン ゙ロロロ<EFBE9B>ロロロロロロロロロロロロ゙ロロ゙ンロ ゙ロロロロロロロロロロン
゚゚ロロンロロロ ゚゚ワロン゙ロ゚゚ロロロロロロロロロロロロロロン ロロンンロ ンワ゚ロロロンロ ゚゚゚
ロロロロ ゚゚ ゚゚゚゚ロロロロロロロロ゚゚ンロロロロ゙ ゙ロンロンロン゚
゚゚゚ ワワワワワワワワワワロロロ゙ ロロワンン ゚ロロン゚
゙ロロワレ゚ロロワ゚ロロロワロロロロロロロロロ゚ワロロロワ゚ ゚ ゚ワロワ DH ワロワ
゚ロ゚ロワロワワ゚゚ ゚ロロロロロロロロロロンロ゚ワワワワ゚ワ゚ワロロロロロロロワワワワロロロロ
ワ゚ワロ゚ワロロ゙ロロロロロロロロロロロロロロロロロ゙ンワワワワワワ゚ンロロワ゚ロロワ゚ロロワワ゚ロ゚
゙ロ゙ロロ゙ロロロンロロロロロロロロロロロロロロロロロ゙ロロロロロロロロンロロロロンロロロンロロロン
゚ ゚゚ ゚ロロ゚ ゚ロロロロロ゚ ゚ロロロ゚ ゚ロロロロロロ゚ ゚ロロロ ゚ロロ ゚ロロ

5
dbp/text/mainhdr.asc Normal file
View File

@ -0,0 +1,5 @@
|16|07|CL
|17|09В|16|01лллплпл |17|09В|16|01лллпл пппп |17|09В|16|01ллл л
|17|09Б|16|01ллл л |17|09Б|16|01лллмл ллл|17|09Б|16|07 |17|09Б|16|01лллпмл |17 |15|$L04|TL |09mins
|16|01лллл л лллл л ллл|17|09В|16|07 |01лллл л
|16|07

23
dbp/text/mrchelp.ans Normal file
View File

@ -0,0 +1,23 @@
[?7h|PO
 MULTI RELAY CHAT COMMANDS 
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³Û/BÛ<text>ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛBroadcastÛmessageÛtoÛallÛchannelsÛÛÛÛ³
³Û/CLSÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛClearsÛwindowÛandÛscrollbackÛtextÛÛÛÛ³
³Û/MSGÛorÛ/MÛ<user>Û<text>ÛÛÛÛSendsÛaÛprivateÛmessageÛÛÛÛÛÛÛÛÛÛÛÛÛÛ³
³Û/TELLÛorÛ/TÛ<user>Û<text>ÛÛÛSendsÛaÛprivateÛmessageÛÛÛÛÛÛÛÛÛÛÛÛÛÛ³
³Û/TOPICÛ<text>ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛSetÛtheÛTOPICÛofÛtheÛcurrentÛchannelÛ³
³Û/WHOÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛListÛallÛusersÛonÛcurrentÛBBSÛsystemÛ³
³Û/MEÛ<text>ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛPerformÛanÛactionÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ³
³Û/JOINÛ<channel>ÛÛÛÛÛÛÛÛÛÛÛÛÛJoinÛaÛnewÛchannelÛ[name]ÛÛÛÛÛÛÛÛÛÛÛÛ³
³Û/SCROLLÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛEnterÛscrollbackÛmodeÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ³
³Û/QÛorÛ/QUITÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛLeave/QuitÛMultiÛRelayÛChatÛÛÛÛÛÛÛÛÛÛ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Ù/WHOONÙÙÙÙÙÙListÛallÛusers+bbsÙÙÙ/ROOMSÙÙÙÙÙÙÙListÙallÙroomsÙÙÙÙÙ³
³Ù/BBSESÙÙÙÙÙÙListÙallÙBBS'sÙÙÙÙÙÙÙ/USERSÙÙÙÙÙÙÙListÙallÙusersÙÙÙÙÙ³
³Ù/CHANNELÙÙÙÙListÙchannelÙusersÙÙÙ/INFOÙÙÙÙÙÙÙÙShowÙinfoÙonÙBBSÙÙÙ³
³Ù/CHATTERSÙÙÙListÙallÙusers+roomÙÙ/DLCHATLOGÙÙÙDownloadÙchatÙlogÙÙ³
³Ù/CHANGESÙÙÙÙListÙofÙchangesÛÛÛÛÛÛ/HELPÛÛÛÛÛÛÛÛShowÛserverÛhelpÛÛÛ³
³Ù/VERSIONÙÙÙÙCheckÙclientÛandÛserverÛversionsÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙ³
³Ù/SETÙÙÙÙÙÙÙÙSetÙvariousÙfieldsÙtoÙyourÙaccountÙ(/SETÙHELP)ÙÙÙÙÙÙÙ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|PN

20
dbp/text/mrcmain.ans Normal file
View File

@ -0,0 +1,20 @@
|CLþÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Multi Relay Chat ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄþ³ Room >>> |!4|[X80³³Topic >>> |!5|[X72/? Help ³þÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄþ|!1
|!2
þÄ[Latencyú000ms]Ä[Chattersú00]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[Bufferú000/000]Ä[MRC]Ä[ ]Äþ
|!3|[X01|[Y01

23
dbp/text/mrcscrl.ans Normal file
View File

@ -0,0 +1,23 @@
|CLトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト Scrollback Buffer トトトトトトトトトトトトトトトトトトトトトトトトトトトトト-|!1
|!2
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
Move (Up/Down) Page Up (Ctrl-R) Page Down (Ctrl-C) ESC to QUIT|[Y01|[X01

6
dbp/text/mrcstat.ans Normal file
View File

@ -0,0 +1,6 @@
レトトトトトトトトトトトトトトトトトトトトトトトソ
MRC Chat Status ウ
ウ ウ
BBS ウ Rms ウ Usr ウ Act ウ 
ウ ウ ウ ウ ウ
タトトトトトトトトトトトトトトトトトトトトトトトル

23
dbp/text/msg_editor.ans Normal file
View File

@ -0,0 +1,23 @@
 ー Full Screen Message Editor  Press Escape for Menu
レトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウ To[] Insert Mode [] ウ
ウ Subject [] Spell Check [] ウ
チトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトチ
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト

View File

@ -0,0 +1,35 @@
 ー Full Screen Message Editor  Press Escape for Menu 
レトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウ To [ ] Insert Mode [ ] ウ
ウ Subject [ ] Spell Check [ ] ウ
チトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトチ
トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト

View File

@ -0,0 +1,157 @@
; MSG_EDITOR.INI
; ==============
; Configuration options for Mystic's full screen editor
[Options]
; Description of template
description = Full Screen Message Editor
; attributes calculated as foreground + (background * 16)
; so 15 + (1 * 16) = 31 (white color 15 on blue color 1 background)
text_attr = 7
num_attr = 11
sym_attr = 8
caps_attr = 15
quote_attr = 9
spell_attr = 12
; spell check box style
spell_style = 2
; Automatically suggest correct words while typing? If this is disabled it
; will not affect the automatic spell checking while typing, or the ability
; for users to press CTRL+W to get a list of suggested words.
auto_suggest = true
; Calculating suggested words is a very intensive process, and on some slower
; processors such as the original Pi, it can take a second to complete. This
; option causes the auto suggest to kick in only when a key has not been
; pressed for half of a second. When off, words will be suggested in real
; time which may provide a better feel, but this can be very processor
; intensive particularly on lower end systems.
suggest_delay = true
[Coords]
; All Coords follow the X,Y,A format
; Contains the top/left X and Y location of the editing window
Coord1 = 1,6,0
; Contains the bottom/right X and Y location of the editing window
Coord2 = 132,34,0
; The bottom Y position of the message text window when in quote mode
Coord3 = 0,12,0
; Contains the top Y position of the scrolling quote window and attribute
; or normal quote text
Coord4 = 0,15,7
; Contains the buttom Y position of the scroll quote window and attribute
; of highlighted text
Coord5 = 0,22,27
; Contains the Y position and attribute of the auto suggestion word list
; generated as you type. This will take up the entire line.
Coord6 = 1,36,7
[Prompts]
; Print To: field prompt &1 = To
str1 = |08|[X12|[Y03|$D96.|15|[X13|[Y03|&1
; Print Subject field &2 = Subject
str2 = |08|[X12|[Y04|$D96.|15|[X13|[Y04|$T42|&2
; Insert mode update ON
str3 = |08|[X124|[Y03.....|15|[X124ON
; Insert mode update OFF
str4 = |08|[X124|[Y03.....|15|[X124OFF
; (END) string
str5 = |16|08|$D52 ----- END OF MESSAGE -----|[K
; No quote data string
str6 = |#B#2#10#Status#No quote data available#
; Command prompt (Shown on Escape, / or CTRL+Z)
; First word contains the hotkeys, followed by the actual prompt that will be displayed
str7 = ?ACDHQSBUFT |#V#2#54#9# Editor Commands #C-Continue Message,S-Save Message,F-Save as Draft,A-Abort Message,Q-Quote Message,D-Draw Mode,T-Tagline Settings,U-Upload Content,B-Change Subject,H-Help,/-#
; Command Prompt Help (When ? is pressed in str7 command prompt)
str8 = |DFmsg_editor_help|
; Cannot abort a forced message
str9 = |#B#2#10#Note#Cannot abort a forced message#
; Abort message Y/N prompt
str10 = |#Y#2#10#Confirm#Abort message?#
; Change subject prompt
str11 = |#X#2# Message Subject #9#10#72#12#|[X11|[Y11
; No access to upload message content
str12 = |#B#2#10#Note#You do not have access to upload message content#
; Message upload "File Name:" prompt
str13 = |CR|09File Name|CR:
; Spell checking status ON
str14 = |08|[X124|[Y04.....|15|[X124ON
; Spell checking status OFF
str15 = |08|[X124|[Y04.....|15|[X124OFF
; Displayed before making on-the-fly word suggestions (blank to disable)
str16 = |[Y35|[X04 |11CTRL|03+|11W |11Ä|09Ä
; Displayed on no word suggest (ie, to erase str16) (blank to disable)
str17 = |[Y35|[X04|09ÄÄ|01Ä|09ÄÄ|01ÄÄÄÄÄ
; Save as draft message confirmation Y/N
str18 = |#Y#2#10#Confirm#Save as draft message?#
; Tagline Settings
str19 = SDGP |#V#2#44#9# Tagline Mode #-,S-Select a Tagline when saving,D-Do not ask for a Tagline,G-Automatically apply Global Tagline,P-Automatically apply Personal Tagline,-#
; Tagline mode: Displayed on redraw when "Select when saving" mode is set
str20 =
; Tagline mode: Displayed on redraw when taglines are disabled
str21 =
; Tagline mode: Displayed on redraw when "Auto apply Global tagline" mode is set
str22 =
; Tagline mode: Displayed on redraw when "Auto apply Personal tagline" is set
str23 =

159
dbp/text/msg_editor.ini Normal file
View File

@ -0,0 +1,159 @@
; MSG_EDITOR.INI
; ==============
; Configuration options for Mystic's full screen editor
[Options]
; Description of template
description = Full Screen Message Editor
; attributes calculated as foreground + (background * 16)
; so 15 + (1 * 16) = 31 (white color 15 on blue color 1 background)
text_attr = 7
num_attr = 11
sym_attr = 8
caps_attr = 15
quote_attr = 9
spell_attr = 12
; spell check box style
spell_style = 2
; Automatically suggest correct words while typing? If this is disabled it
; will not affect the automatic spell checking while typing, or the ability
; for users to press CTRL+W to get a list of suggested words.
auto_suggest = true
; Calculating suggested words is a very intensive process, and on some slower
; processors such as the original Pi, it can take a second to complete. This
; option causes the auto suggest to kick in only when a key has not been
; pressed for half of a second. When off, words will be suggested in real
; time which may provide a better feel, but this can be very processor
; intensive particularly on lower end systems.
suggest_delay = true
[Coords]
; All Coords follow the X,Y,A format
; Contains the top/left X and Y location of the editing window
Coord1 = 1,6,0
; Contains the bottom/right X and Y location of the editing window
Coord2 = 79,22,0
; The bottom Y position of the message text window when in quote mode
Coord3 = 0,12,0
; Contains the top Y position of the scrolling quote window and attribute
; or normal quote text
Coord4 = 0,15,7
; Contains the buttom Y position of the scroll quote window and attribute
; of highlighted text
Coord5 = 0,22,27
; Contains the Y position and attribute of the auto suggestion word list
; generated as you type. This will take up the entire line.
Coord6 = 1,24,7
[Prompts]
; Print To: field prompt &1 = To
str1 = |08|[X12|[Y03|$D44.|15|[X13|[Y03|&1
; Print Subject field &2 = Subject
str2 = |08|[X12|[Y04|$D44.|15|[X13|[Y04|$T42|&2
; Insert mode update ON
str3 = |08|[X72|[Y03.....|15|[X73|[Y03ON
; Insert mode update OFF
str4 = |08|[X72|[Y03.....|15|[X73|[Y03OFF
; (END) string
str5 = |16|08|$D32- END OF MESSAGE |$D31-
; No quote data string
str6 = |#B#2#10#Status#No quote data available#
; Command prompt (Shown on Escape, / or CTRL+Z)
; First word contains the hotkeys, followed by the actual prompt that will be displayed
str7 = ?ACDHQSBUFT |#V#2#28#7# Editor Commands #C-Continue Message,S-Save Message,F-Save as Draft,A-Abort Message,Q-Quote Message,D-Draw Mode,T-Tagline Settings,U-Upload Content,B-Change Subject,H-Help,/-#
; Command Prompt Help (When ? is pressed in str7 command prompt)
str8 = |DFmsg_editor_help|
; Cannot abort a forced message
str9 = |#B#2#10#Note#Cannot abort a forced message#
; Abort message Y/N prompt
str10 = |#Y#2#10#Confirm#Abort message?#
; Change subject prompt
str11 = |#X#2# Message Subject #9#10#72#12#|[X11|[Y11
; No access to upload message content
str12 = |#B#2#10#Note#You do not have access to upload message content#
; Message upload "File Name:" prompt
str13 = |CR|09File Name|CR:
; Spell checking status ON
str14 = |08|[X72|[Y04.....|15|[X73|[Y04ON
; Spell checking status OFF
str15 = |08|[X72|[Y04.....|15|[X73|[Y04OFF
; Displayed before making on-the-fly word suggestions (blank to disable)
str16 = |[Y23|[X04 |11CTRL|03+|11W |11Ä|09Ä
; Displayed on no word suggest (ie, to erase str15) (blank to disable)
str17 = |[Y23|[X04|09ÄÄ|01Ä|09ÄÄ|01ÄÄÄÄÄ
; Save as draft message confirmation Y/N
str18 = |#Y#2#10#Confirm#Save as draft message?#
; Tagline Settings
str19 = SDGP |#V#2#20#8# Tagline Mode #-,S-Select a Tagline when saving,D-Do not ask for a Tagline,G-Automatically apply Global Tagline,P-Automatically apply Personal Tagline,-#
; Tagline mode: Displayed on redraw when "Select when saving" mode is set
str20 =
; Tagline mode: Displayed on redraw when taglines are disabled
str21 =
; Tagline mode: Displayed on redraw when "Auto apply Global tagline" mode is set
str22 =
; Tagline mode: Displayed on redraw when "Auto apply Personal tagline" is set
str23 =

View File

@ -0,0 +1,22 @@
 ° Message Editor Help Press any key to exit
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³³
³MESSAGE EDITING COMMANDS³
³³
³[^B] Reformat Paragraph at Cursor [^O] Show this help file³
³[^I] Insert tab space[^Q] Enter quote mode³
³[^K] Cut current line of text[^V] Toggle insert/overwrite³
³[^U] Paste previously cut text[^Y] Delete current line³
³³
³[^T] Toggle ANSI Drawing Mode[^W] Spell check under cursor³
³³
³BASIC MOVEMENT COMMANDS³
³³
³UP/^ELEFT/^SPGUP/^RHOME/^F³
³DOWN/^XRIGHT/^DPGDN/^CEND/^G³
³³
³³
³Enter / on a new line, or ESCAPE, or CTRL-Z for additional commands³
³³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|PN

Some files were not shown because too many files have changed in this diff Show More