diff --git a/dbp/menus/account.mnu b/dbp/menus/account.mnu new file mode 100644 index 0000000..145a0b8 --- /dev/null +++ b/dbp/menus/account.mnu @@ -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 + + diff --git a/dbp/menus/autosig.mnu b/dbp/menus/autosig.mnu new file mode 100644 index 0000000..83b8de2 --- /dev/null +++ b/dbp/menus/autosig.mnu @@ -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 + + diff --git a/dbp/menus/bbslist.mnu b/dbp/menus/bbslist.mnu new file mode 100644 index 0000000..a172041 --- /dev/null +++ b/dbp/menus/bbslist.mnu @@ -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 + + diff --git a/dbp/menus/demos.mnu b/dbp/menus/demos.mnu new file mode 100644 index 0000000..f9d1019 --- /dev/null +++ b/dbp/menus/demos.mnu @@ -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 + + diff --git a/dbp/menus/doors.mnu b/dbp/menus/doors.mnu new file mode 100644 index 0000000..51927ce --- /dev/null +++ b/dbp/menus/doors.mnu @@ -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 + + diff --git a/dbp/menus/file.mnu b/dbp/menus/file.mnu new file mode 100644 index 0000000..a589d2a --- /dev/null +++ b/dbp/menus/file.mnu @@ -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 + + diff --git a/dbp/menus/flist.mnu b/dbp/menus/flist.mnu new file mode 100644 index 0000000..2c160e0 --- /dev/null +++ b/dbp/menus/flist.mnu @@ -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 + + diff --git a/dbp/menus/fnewscan.mnu b/dbp/menus/fnewscan.mnu new file mode 100644 index 0000000..eea2759 --- /dev/null +++ b/dbp/menus/fnewscan.mnu @@ -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 + + diff --git a/dbp/menus/fqueue.mnu b/dbp/menus/fqueue.mnu new file mode 100644 index 0000000..9e42221 --- /dev/null +++ b/dbp/menus/fqueue.mnu @@ -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 + + diff --git a/dbp/menus/goodbye.mnu b/dbp/menus/goodbye.mnu new file mode 100644 index 0000000..a209034 --- /dev/null +++ b/dbp/menus/goodbye.mnu @@ -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 + + diff --git a/dbp/menus/main.mnu b/dbp/menus/main.mnu new file mode 100644 index 0000000..465f766 --- /dev/null +++ b/dbp/menus/main.mnu @@ -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 + + diff --git a/dbp/menus/matrix.mnu b/dbp/menus/matrix.mnu new file mode 100644 index 0000000..f527be8 --- /dev/null +++ b/dbp/menus/matrix.mnu @@ -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 + + diff --git a/dbp/menus/message.mnu b/dbp/menus/message.mnu new file mode 100644 index 0000000..bdfb048 --- /dev/null +++ b/dbp/menus/message.mnu @@ -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 + + diff --git a/dbp/menus/mnewscan.mnu b/dbp/menus/mnewscan.mnu new file mode 100644 index 0000000..2ced5e7 --- /dev/null +++ b/dbp/menus/mnewscan.mnu @@ -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 + + diff --git a/dbp/menus/msearch.mnu b/dbp/menus/msearch.mnu new file mode 100644 index 0000000..7d71306 --- /dev/null +++ b/dbp/menus/msearch.mnu @@ -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 + + diff --git a/dbp/menus/newinfo.mnu b/dbp/menus/newinfo.mnu new file mode 100644 index 0000000..ca38718 --- /dev/null +++ b/dbp/menus/newinfo.mnu @@ -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 + + diff --git a/dbp/menus/personalscan.mnu b/dbp/menus/personalscan.mnu new file mode 100644 index 0000000..30ebd96 --- /dev/null +++ b/dbp/menus/personalscan.mnu @@ -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 + + diff --git a/dbp/menus/prelogin.mnu b/dbp/menus/prelogin.mnu new file mode 100644 index 0000000..349447c --- /dev/null +++ b/dbp/menus/prelogin.mnu @@ -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 + + diff --git a/dbp/menus/qwk.mnu b/dbp/menus/qwk.mnu new file mode 100644 index 0000000..f5f77cc --- /dev/null +++ b/dbp/menus/qwk.mnu @@ -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 + + diff --git a/dbp/menus/qwknetwork.mnu b/dbp/menus/qwknetwork.mnu new file mode 100644 index 0000000..4f598e8 --- /dev/null +++ b/dbp/menus/qwknetwork.mnu @@ -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 + + diff --git a/dbp/menus/sysop.mnu b/dbp/menus/sysop.mnu new file mode 100644 index 0000000..7a38ab0 --- /dev/null +++ b/dbp/menus/sysop.mnu @@ -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 + + diff --git a/dbp/menus/testgrid.mnu b/dbp/menus/testgrid.mnu new file mode 100644 index 0000000..c9f83aa --- /dev/null +++ b/dbp/menus/testgrid.mnu @@ -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 + + diff --git a/dbp/menus/testlbprompt.mnu b/dbp/menus/testlbprompt.mnu new file mode 100644 index 0000000..2873e6c --- /dev/null +++ b/dbp/menus/testlbprompt.mnu @@ -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 + + diff --git a/dbp/menus/testlightbar.mnu b/dbp/menus/testlightbar.mnu new file mode 100644 index 0000000..5c46975 --- /dev/null +++ b/dbp/menus/testlightbar.mnu @@ -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 + + diff --git a/dbp/menus/timebank.mnu b/dbp/menus/timebank.mnu new file mode 100644 index 0000000..26ce489 --- /dev/null +++ b/dbp/menus/timebank.mnu @@ -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 + + diff --git a/dbp/menus/vote.mnu b/dbp/menus/vote.mnu new file mode 100644 index 0000000..aff0cc0 --- /dev/null +++ b/dbp/menus/vote.mnu @@ -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 + + diff --git a/dbp/prompts.txt b/dbp/prompts.txt new file mode 100644 index 0000000..465caea --- /dev/null +++ b/dbp/prompts.txt @@ -0,0 +1,1090 @@ +; &1=Login attempt &2=Allowed attempts &3=Remaining attempts +000 |DFpreuser||CR|01[|10ž|01] |09Gib deinen Benutzernamen ein: |XX +; Log in as new user prompt +001 |CR|12Create an account with this BBS? |11 +; Standard user login: User's password +002 |CR|01[|10ž|01] |09Enter your password: |XX +; Standard user login: Invalid PW +003 |CR|12Invalid password. +; Displayed IMMEDATELY when a user connects if the password is set +004 |CRSystem Password: |XX +; New user password prompt +005 |CRNew User Password: |XX +; New user login: first and last name prompt +006 |01[|10ž|01] |09Enter your full REAL name -> |XX +; Displayed if user doesn't enter a two word name. +007 |CR|12Please enter your first AND last name!|CR +; Displayed if user enters a new user name that already exists. +008 |CR|12User already exists.|CR +; New user login: Enter your handle/alias prompt +009 |01[|10ž|01] |09Enter your alias/handle -> |XX +; New user login: Enter your address prompt +010 |CR|03Enter your street address.|CR|09: +; New user login: Enter your city/state +011 |CR|03Enter your city & state.|CR|09: +; New user login: Enter your ZIP code +012 |CR|03Enter your postal code: #####|CR|09: +; New user login: Enter your home phone number +013 |CR|03Enter your home phone number:|CR|09: +; New user login: Enter your data phone number +014 |CR|03Enter your data phone number:|CR|09: +; New user login: Enter your birthdate. +015 |01[|10ž|01] |09Enter your birthdate |01[|10|UF|01]|09 -> |XX +; New user login: Gender M)ale, F)emale, U)ndisclosed +016 |01[|10ž|01] |01[|10M|01]|09ale, |01[|10F|01]|09emale, |01[|10U|01]|09ndisclosed -> |XX +; New user login: Password prompt +017 |DFprepass||CR|01[|10ž|01] |09Password -> |XX +; Displayed if user enters a password not compliant with policy +; &1=min length &2=min caps &3=min nums &4=min symbols +018 |CR|12Password not compliant. Must have a minimum of:|CR|CR |&1 characters|CR |&2 capital letters|CR |&3 numbers|CR |&4 symbols|CR|CR|PA +; New user login: PW verification prompt +019 |01[|10ž|01] |09Again -> |XX +; New user login: Passwords do not match +020 |CR|12Passwords do not match!|DE|DE|DE +; New user login: Saving/creating new user account +021 |CR|01[|10ž|01] |09Saving new account information|01... +; System pause prompt +022 |16|15ž|07ž|08ž|09|17Ż|15 Pause |09Ž|16|08ž|07ž|15ž +; Chat call - reason for chat +023 |CR|14Why do you wish to chat with the Sysop?|CR|09: +; Paging Sysop text +024 |CRPaging SysOp +; Paging Sysop status +025 . +; Displayed when sysop breaks into chat mode +026 |CR|10Chat mode engaged...|CR|14 +; Displayed when sysop exits chat mode +027 |CL|01[|10ž|01] |09Chat mode complete. Press |01[|10ENTER|01] |09to continue|01... +; Displayed when sysop isn't available for chat. +028 |CR|12Sysop unavailable for chat!|CR|CR|PA +; User list header +029 |CL|CR |09Ś|$D73Ä|01æ|CR |09³|17 ± |15User Listing|$D58 |16|01³|CR |09Ą|01|$D73ÄŁ|CR |10U|02ser |10N|02ame|07|$D19 |10L|02ocation|07 |10S|02ex/|10A|02ge |10L|02ast|10O|02n|CR |09|$D73Ä +; User list format: +; &1 = Alias &3 = Last on &2 = City &4 = gender &5 = sec lvl &6 = Address +; &7 = Age &8 = email &9 = usernote &0 = opt1 &A = opt2 &B = opt3 +030 |07|$R27|&1 |$R27|&2 |&4 |$L02|&7 |&3 +; User list footer &1 = Total # of users listed +031 |09|$D73Ä|CR |01[|10ž|01] |09Users: |07|$R46|&1 |PA +; User list search string +032 |CR|01[|10ž|01] |09Enter Search String |01(|07Enter|01/|07All|01)|09: |XX +; File base list header +033 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15File Base Listing|$L56|FG |01|16³|CR|09Ą|01|$D77ÄŁ|CR |10A|02rea |10F|02ile |10B|02ase |10N|02ame |10A|02rea |10F|02ile |10B|02ase |10N|02ame|CR |09|$D77Ä +; File base listing format: +; &1 = File Base # &2 = File Base Name &3 = Files in Base +034 |15|$L05|&1 |07|$R32|&2 +; File upload testing FAILED text +035 Failed +; File base listing prompt. +036 |09|$D77Ä|CR |01[|10ž|01] |09Select file base |01[|10?|01/|10List|01]|09: |XX +; Displayed if there are no available file bases +037 |CR|12There are no available file bases +; Displayed if user hasn't selected a file base +038 |CR|12You must select a file base first! +; Displayed if user doesn't meet access requirements for a file list. +039 |CR|12You do not have access to list files here! +; Displayed if there are no files in the selected file base. +040 |CR|12There are no files in this base|DE|DE|DE +; File listing header +041 |CL|09Ś|$D77Äæ|CR³|17 ± |15File Listing|$L61|FB |16|01³|CR|09Ą|01|$D77ÄŁ +; Standard file list: #/filename: +; &1 = filenum, &2 = filename, &3 = tag char &4 = size &5 = date &6 = DLs +042 |16|07|&1|12|&3|15|$R57|&2 |09|$L07|&4 |&5 +; Standard file list: description/info +; &1 = size, &2 = date, &3 = DLs, &4 = desc, &5 = uploader +043 |16|07|$D29 |&4 +; File listing pause prompt +; &1 = total files &1 = current file +044 |16|CR|01[|10ž|01] |09Pause: |01(|07N|01)|09ext, |01(|07P|01)|09rev, |01(|07F|01)|09lag, |01(|07V|01)|09iew, or |01(|07Q|01)|09uit? |07 +; Standard file list, ext desc: &4 = description +045 |16|07|$D29 |&4 +; Displayed when batch queue is full +046 |CR|15Batch queue is full! +; Add file to batch queue "File Name" prompt +047 |CR|09File Name|CR: +; Displayed when user tries to queue/download an offline file +048 |CR|12File is marked as offline! +; Displayed if file is already in batch queue +049 |CR|15File is already in queue +; File added to batch: +; &1 = file name &2 = file size +050 |CR|15|&1 |08(|07|&2 bytes|08) |07added to queue. +; File not found +051 |CR|15File not found.|DE|DE|DE +; Displayed if batch queue is empty +052 |CL |15There are no files in your batch queue +; &1 = number of files in batch queue +053 |CR |09Delete which |01(|071|01-|07|&1|01)|09: |XX +; Batch removed from queue &1 = Filename &2 = Size +054 |CR|15|&1 |08(|07|&2 bytes|15|08) |07removed from queue. +; File upload PASSED text +055 Passed +; Batch queue list header +056 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Batch Queue Editor|$D56 |16|01³|CR|09Ą|01|$D77ÄŁ|CR |10#|02# |10F|02ile |10N|02ame|07|$D50 |10S|02ize |10D|02L |10T|02ime|CR |09|$D77Ä +; Batch queue list format: +; &1 = file # &2 = file name &3 = file size &4 = est mins &5 = est secs +057 |07|$L02|&1 |15|$R51|&2 |09|$L11|&3 |12|$L03|&4|04m |12|$L02|&5|04s +; SX = Max downloads per day SK = Nax download K per day +058 |CR|12Your downloads per day limit would be exceeded. +; Batch queue has been cleared. +059 |CR |12Batch queue is now empty.|DE|DE|DE +; new user: Use FSE quote window? +060 |CR|12Use full screen editor quote window? |11 +; Protocol list prompt &1=Hotkey &2=Description +061 |14[|15|&1|14] |&2 +; Protocol select prompt +062 |CR|14Select Protocol [|15Q/Quit|14]: |XX +063 |CR|12Cannot transfer files in local mode!|DE|DE|DE +064 |01[|10ž|01] |09Search all file groups? |11 +; Press ENTER to start file transfer &1=selected protocol +; First word is input chars, followed by display text +065 SQ |CR|09Press |01[|15ENTER|01/|15S|01]|09tart or |01[|15ESCAPE|01/|15Q|01]|09uit your |15|&1 |09transfer: |XX +; Disconnect after download? +066 |CR|12Disconnect after file transfer? |11 +; Disconneting in 10 seconds, press a key to abort +067 |CR|09Disconnecting in 10 seconds: Press a key to abort. +; No access to upload to a base +068 |CR|12You do not have access to upload here!|CR|CR|PA +; Displayed when an invalid filename is entered during the file upload comman +069 |CR|12Illegal filename.|DE|DE|DE +070 |CR|14Searching for duplicate files ... |XX +071 None found. +; File description input header. &1 = Max description lines. &2 = filename +072 |CR|11Enter Description. |&1 Lines Max. Blank Line Ends. +; Archive list header (see 169-171) +073 |CL|15Available Archive Formats:|CR|CR|10#|02# |10D|02escription |10E|02xt|CR|09|$D30Ä +; Archive selected string +074 |CR|07Archive type set to: |15|&1|07.|DE +075 |CR|14Thanks for your upload, |UH!|CR|CR|PA +076 |CR|12You do not have access to download here! +077 |CR|01[|10ž|01] |09Searching|01... +; File Information: +; &1 = filename &2 = file size &3 = uploaders name +; &4 = update date &5 = downloads &6 = est mins &7 = est secs +078 |CR|03File Name |08-> |14|&1|CR|03File Size |08-> |09|&2|CR|03Uploaded by |08-> |10|&3|CR|03Uploaded on |08-> |11|&4|CR|03Downloads |08-> |12|&5|CR|03Download Time |08-> |13|&6 |03min |13|&7 |03sec|CR +; Batch Queue Info: +; &1 = files in batch &2 = batch size &3 = est. mins &4 = est. secs +079 |CR|03Files in Batch |08-> |14|&1|CR|03Batch Size |08-> |10|&2|CR|03Estimated Time |08-> |11|&3 min |&4 seconds +080 |CR|12Cannot upload to a CD-ROM file base.|DE|DE|DE +081 |CR|12Sorry, there is not enough disk space for uploads. +; Coping from slow media device prompt &1 = filename +082 |CR|14Copying |15|&1 |14from slow media device... +; Upload Successful: &1 = file name +083 |CR|12ž |11|&1 |03found.|CR +; Upload Failed: &1 = file name +084 |CR|12ž |11|&1 |03skipped.|CR +085 |CR|12Download queued files? |11 +086 |CR|12Scan all file bases for new files? |11 +; &1 = File Base Name +087 |CL|03Scanning: |14|&1|03... +088 |15No new files found.|DE|DE|DE +089 |15New files scan completed.|DE|DE|DE +090 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15QWK Scan Settings|$L56|MG |01|16³|CR|09Ą|01|$D77ÄŁ +091 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15New Scan Settings|$L56|MG |01|16³|CR|09Ą|01|$D77ÄŁ +092 |10 #|02# |10S|02can |10M|02essage |10B|02ase |10N|02ame |10#|02# |10S|02can |10M|02essage |10B|02ase |10N|02ame|CR |09|$D77Ä +; Message base New/QWK Scan format: +; &1 = base number &2 = base name &3 = scan base? (Yes or No) +093 |07|$R04|&1|15|$R03|&3 |07|$R29|&2 +094 |CR|12There are no available message bases! +; Message base new and qwk scan toggle prompt: +095 Toggle: |09[|11#-#,#|09], Select [|11A|09]dd All, [|11R|09]emove All, [|11?|09/|11List|09]: |XX +; For strings 096 - 099: &1 = message base name +096 |CR |11|&1 will NOT be scanned in QWK packets!|CR +097 |CR |11|&1 will be scanned in QWK packets!|CR +098 |CR |11|&1 will NOT be scanned in new message scan!|CR +099 |CR |11|&1 will be scanned in new message scan!|CR +100 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Message Base Listing|$L53|MG |01|16³|CR|09Ą|01|$D77ÄŁ|CR |10A|02rea |10M|02essage |10B|02ase |10N|02ame |10A|02rea |10M|02essage |10B|02ase |10N|02ame|CR |09|$D77Ä +; Message base format list: +; &1 = base number &2 = base name &3 = total messages +101 |15|$L05|&1 |07|$R32|&2 +102 |09|$D77Ä |CR |09Select Message Base |01[|10?|01/|10List|01]|09: |XX +103 UNUSED +; Message base "To" input default value +104 All +105 |CR|12You don't have access to post here! +106 |CR|12Use the full screen editor? |11 +107 |01[|10ž|01] |09Saving Message|01... +; Send Private message. &1 = Message TO +108 |CR|07Sending private message to |15|&1|07. +109 |CR|15Message aborted... +110 |CR|12You must select a message base first! +111 |CR|12You don't have access to read in this base! +; Message reading: select read mode +112 |CR|07(|14F|07)|15orward, |07(|14N|07)|15ew, |07(|14B|07)|15y You, |07(|14Y|07)|15ours, |07(|14S|07)|15earch, |07(|14Q|07)|15uit? |XX +113 |15No messages found. +114 |CR|12There are no messages in |MB.|DE|DE|DE +; E-mail reader prompt +115 |CR|09(|11A|09)gain, (|11P|09)revious, (|11N|09)ext, (|11R|09)eply, (|11D|09)elete, (|11J|09)ump, (|11Q|09)uit? |14 +; Message read prompt. &1 = Current Msg # &2 = Total Messages +116 |CR|01[|09|&1 of |&2|01] |09Reading Messages (|10?|09/|10Help|09): |11 +117 |CR|12Delete this mail? |11 +118 |CR|15End of messages. +; Post message TO: +119 |CR|09To: |XX +; post message SUBJ: +120 |CR|09Subject: |XX +; Files still in batch. &1 = # of files +121 |CR|14There are |15|&1 |14file(s) in your batch queue.|CR|CR|12Download them now? |11 +122 |09Saved +123 |CL|01[|10ž|01] |09Searching for new electronic mail...|DE|CR +124 |CL|01[|10ž|01] |09No new electronic mail waiting...|DE|DE +; Electronic mail list header +125 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Electronic Mail|$D59 |16|01³|CR|09Ą|01|$D77ÄŁ|CR |10#|02## |10F|02rom|07 |10S|02ubject|07 |10D|02ate|CR |09|$D77Ä +; Electronic mail list format: +; &1 = email number &2 = email from +; &3 = email subject &4 = email date +126 |07|$R05|&1|15|$R32|&2|10|$R32|&3|11|&4 +; Read new email? &1 = total &2 = unread +127 |01|$D77Ä |CR |01[|10ž|01] |09You have |11|&1 |09messages (|11|&2 |09unread|09). Read them now? |11 +; First message in thread prompt +128 |CR|11This is the first message in the thread. +; User lockout message. +129 |CR|12You have been locked out from this BBS. Do not call back.|CR|CR|PA +130 |03Scanning |15|MB|03... +131 |CL|15New message scan completed.|DE|DE|DE +; More Prompt Y)es N)o C)ontinuous +; First word defines the hotkeys +132 YNC |16|01[|10ž|01] |09More: |01(|07Y|01)|09es, |01(|07N|01)|09o, |01(|07C|01)|09ontinuous? |XX +133 |CR|12|16WARNING: |14System event approaching in |15|NE |14minutes!|CR|PA +134 |CR|12|16WARNING: You only have |TL minutes remaining! +135 |CR|12Sorry, you have no time left for today.|CR +136 |16|CR|CR|14Connection closed due to inactivity. +137 |CR|14System Event: Disconnecting. +; Who's online list header +138 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Who's Online|$D62 |01|16³|CR|09Ą|01|$D77ÄŁ|CR |10N|02ode |10U|02ser |10A|02ction|CR|09 |$D77Ä +; Who's online list format: +; &1 = node number &2 = user name &3 = action &4 = location +; &5 = connection type &6 = gender &7 = age &8 = available? +139 |07|$R05|&1 |15|$R26|&2 |12|&3 +; Who's online list footer +140 |09|$D77Ä|CR |PA +; Last callers list header &1 = Number of callers in list +141 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Last |&1 Callers |$D45 |$L06|TC total |01|16³|CR|09Ą|01|$D77ÄŁ|CR |10U|02ser|$D24 |10L|02ocation|$D19 |10N|02ode |10D|02ate |10T|02ime|CR |09|$D77Ä +; Last 10 callers list format: +; &1=Name &2=Node &3=Location &4=Date &5=Time &6=ConType &7=Caller# +; &8=Addr &9=Note &0=Email &A-&C=Opt 1-3 &D=Calls &E=TimeOn +142 |15|$R27|&1 |07|$R25|&3 |$L04|&2 |&4 |&5 +; Last callers footer +143 |09 |$D77Ä|CR|PA +; Message from another node: +; &1 = Message from &2 = Node user is logged in to. +144 |16|CL|09|17 ° |15Message from |14|&1 |15on node |14|&2|$X79 |03|16|CR +; Message from another node footer. First word contains input keys, followed +145 RC |CR|09Node Message: |01[|10R|01]|09eply, |01[|10C|01]|09hat, or |01[|10ENTER|01/|10Continue|01]|09: |15 +146 |CR|09Send message to which node |01[|10?|01/|10List|01]|09: |XX +147 |CR|12No one is logged in on that node! +; Send message to node prompt: +; &1 = receiver's name &2 = receiver's node number +148 |CR|07Enter messsage for |15|&1 |07on node |15|&2|07: +149 |CR|12You don't have access to this menu!|CR|CR|PA +; Connection type text (6 words: local, telnet, rlogin, ssh, modem, other) +150 LOCAL TELNET RLOGIN SSH MODEM OTHER +151 |CR|09Enter your current password: |XX +152 |CR|11(|031|08) |09MM/DD/YY|CR|11(|032|08) |09DD/MM/YY|CR|11(|033|08) |09YY/DD/MM|CR|CRDate Format |08-> |07 +153 |CR|01[|10ž|01] |09Enter terminal lines: |XX +154 |CR|11(|030|08) |09Ascii (No Color)|CR|11(|031|08) |09Ansi (Color)|CR|CR|09Graphics Mode |08-> |07 +; User name search +; &1 = User's Name +155 |12Do you mean |&1? |11 +156 |CR|15User not found.|DE|DE|DE +157 |CR|12You've reached your calls per day limit. Call back tomorrow!|CR|CR|PA +; Line message editor: No quote data available +158 |CR|15No quote data available... +159 |CR|09Enter first line to quote: |XX +160 |09Enter last line to quote : |XX +; Email reply: not valid user. &1=username +161 |CR|11|&1 is not a valid user on this system. +; &1 = maximum length of each line &2 = maximum number of lines +162 |CR |14Enter Your Text Now. Enter /? for Help. (|&1 Chars/Line, |&2 Lines Max) +163 |09[ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ:ÄÄÄÄ]|03 +164 |CR|12Save text? |11 +; Line editor "backing up to line". &1 = new line number +165 |15Backing up to line |&1.|03 +; Line editor "command" prompt. +166 |CR|09Command |01[|10?|01/|10Help|01]|09: |XX +; Line editor "command" prompt help +167 |CR|03(|11A|03)bort Message (|11C|03)ontinue Message (|11U|03)pload Message|CR(|11Q|03)uote Message (|11S|03)ave Message (|11H|03)elp|CR(|11T|03)itle Change +168 |CR|12Abort message? |11 +169 |CR|12There are no available archivers!|CR|CR|PA +; Archive list format: +; &1 = archive number &2 = archive name &3 = archive extension +170 |15|$R02|&1 |10|$R22|&2 |11|&3 +171 |09|$D30Ä|CR|01[|10ž|01] |09Select Archive #: |XX +172 |CR|09Deposit how many minutes |01[|100|01-|10|TL|01]|09: |XX +173 |CR|09Withdraw how many minutes |01[|100|01-|10|TB|01]|09: |XX +; Message group list header +174 |CL|CR|$D13 |09Ś|$D54Ä|01æ|CR|$D13 |09³|17 ± |15Message Groups|$D37 |16|01³|CR|$D13 |09Ą|01|$D54ÄŁ|CR|$D14 |10#|02# |10M|02essage |10G|02roup |10N|02ame|07|$D24 |02A|10reas|CR|$D14 |09|$D54Ä +; Message group list format +; &1 = Group number &2 = Group name &3 = Total Areas in Group +175 |$D14 |07|$R04|&1 |15|$R41|&2 |12|&3 +176 |CR|12There are no available message groups. +; Message group list prompt +177 |$D14 |09|$D54Ä|CR|$D14 |01[|10ž|01] |09Select Message Group |01[|10Enter|01/|101|01]|09: |XX +178 |CR|12Send E-mail to the Sysop? |11 +; 179-180 are System broadcast messages header/footer +; &1 = User who sent system broadcast +; &2 = Node Number +179 |16|CL|09|17 ° |15System Notification|$X79 |03|16|CR|CR +180 |CR|PA +; nodechat text: &1 = user name &2 = node number &3 = node color (low) +; &4 = node color (hi) +181 |&3<|&4|&1|&3> |07 +; Theme select header +182 |CR|14Available themes:|CR +; Theme select format: +; &1 = Theme number &2 = Theme description +183 |10|&1 |08..... |07|&2 +; Theme select footer +184 |CR|09Select your theme |01[|10Enter|01/|10Default|01]: |09 +; Theme file does not exist +185 |CR|12Error loading valid theme configuration. +; Displayed if user's theme does not exist. +186 |CR|12Selected theme not available. Using default theme.|CR|CR|PA +; new user: use full screen node chat? +187 |CR|12Use full screen node chat? |11 +; One Liner header +188 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15One Liners|$D64 |01|16³|CR|09Ą|01|$D77ÄŁ|CR +; One liner prompt +189 |CR |09|$D77Ä|CR |01[|10ž|01] |09Add to the one liners? |11 +190 |CR|01[|10ž|01] |09Enter your one liner:|CR +191 |CR|12Unable to view archive. +; Archive view header &1 = Filename +192 |16|CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Viewing Contents of Archive|$L46|&1 |16|01³|CR|09Ą|01|$D77ÄŁ|CR |10F|02ile |10N|02ame|07|$D48 |10S|02ize |10D|02ate |10T|02ime|CR |09|$D77Ä +; Archive view format +; &1 = File Name &2 = File Size &3 = File Date &4 = File Time +193 |07|$R49|&1 |$L11|&2 |&3 |&4 +; Archive view footer +194 |09|$D77Ä|CR +; File mask search prompt +195 |CR|09Enter File Mask (Enter for All):|CR +; File search prompt +196 |CR|09Enter text to search for:|CR: +; Search all file bases? +197 |CR|01[|10ž|01] |09Search all file bases ? |11 +; File search completed +198 |CL|15File search completed.|DE|DE|DE +199 |CR|11This is the last message in the thread. +; Select scanned file bases header +200 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15File Scan Settings|$L55|FG |01|16³|CR|09Ą|01|$D77ÄŁ|CR |10#|02# |10S|02can |10F|02ile |10B|02ase |10N|02ame |10#|02# |10S|02can |10F|02ile |10B|02ase |10N|02ame|CR |09|$D77Ä +; Select scanned file bases display format +; &1 = File base number &2 = File base name &3 = Scan? (Yes or No) +201 |07|$R04|&1|15|$R03|&3 |07|$R29|&2 +; Select scanned file bases prompt +202 Toggle: |09[|11#-#,#|09], Select [|11A|09]dd All, [|11R|09]emove All, [|11?|09/|11List|09]: |XX +; &1 = File base name +203 |CR |11|&1 will NOT be scanned in new file scan!|CR +; &1 = File base name +204 |CR |11|&1 will be scanned in new file scan!|CR +; Displayed if file already exists when user trys to upload. +205 File already exists.|DE|DE|DE +; Displayed before running uploads processor +206 |12ž |03Testing file for errors : |XX +; File description input line. &1 = Line number +207 |09: +; Default file description if none entered/found. +208 No Description +; Displayed if the user reaches the max time allowed in time bank! +209 |CR|12You are only allowed to store |SB minutes in the time bank! +; Displayed if user tries to deposit all their remaining time. +210 |CR|12You must keep at least 5 minutes of time left. +; &1 = UL/DL ratio: (1:|&1) +; Exceeded UL/DL ratio: RD = Download ratio RK = Download K ratio +211 |CR|12Your upload/download ratio would be exceeded. +; Lightbar file list: Access to file denied. +212 |12File is not available.|PN +; Read Message personal prompt. &1 = Current Msg # &2 = Total Messages +213 |CR|01[|09|&1 of |&2|01] |09Reading Messages (|10?|09/|10Help|09): |11 +; File group list header +214 |CL|CR|$D13 |09Ś|$D54Ä|01æ|CR|$D13 |09³|17 ± |15File Groups|$D40 |16|01³|CR|$D13 |09Ą|01|$D54ÄŁ|CR|$D14 |10#|02# |10F|02ile |10G|02roup |10N|02ame|07|$D29 |02A|10reas|CR|$D14 |09|$D54Ä +; File group list format +; &1 = Group number &2 = Group name &3 = Total areas in group +215 |$D14 |07|$R04|&1 |15|$R43|&2 |12|&3 +; Displayed if there are no available file groups +216 |CR|12There are no available file groups. +; File group list prompt +217 |$D14 |09|$D54Ä|CR|$D14 |01[|10ž|01] |09Select File Group |01[|10Enter|01/|101|01]|09: |XX +; nodechat private text: &1 = user name +218 |02<|10|&1 |02private|02> |07 +; Displayed when creating a new files list +219 |CL|CR|$D10 |09Ś|$D58Ä|01æ|CR|$D10 |09³|17 ± |15Creating text listing of new files NEWFILES.TXT |16|01³|CR|$D10 |09Ą|01|$D58ÄŁ +; Displayed when creating an all files list +220 |CL|CR|$D10 |09Ś|$D58Ä|01æ|CR|$D10 |09³|17 ± |15Creating text listing of all files ALLFILES.TXT |16|01³|CR|$D10 |09Ą|01|$D58ÄŁ +; File list compiler header +221 |$D11 |10F|02ile |10B|02ase |10N|02ame|$D30 |10F|02iles |10A|02dded|CR|$D11 |09|$D58Ä +; File list compiler Working text +222 |$D11 |01[|10ž|01] |09Working|01... +; File list compiler status format +; &1 = File Base Name &2 = File Size &3 = # of files added to list +223 |$D11 |07|$R42|&1 |$L06|&2 |$L06|&3 +; Display when a user does not have access to download a file. +224 |CR|12You do not have access to download this file. +; File list compiler footer +225 |$D11 |09|$D58Ä +; nodechat: info/status text +226 |08- |07 +; Compress file list prompt +227 |$D11 |01[|10ž|01] |09Compress list with |QA? |11 +; QWK Download: No Messages +228 |09|$D77Ä|CR |15No new messages found.|DE|DE|DE +; nodechat action text: &1 = user name +229 |13* |&1 |XX +; QWK process list header +230 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Preparing QWK Mail Packet|$D49 |16|01³|CR|09Ą|01|$D77ÄŁ|CR |10#|02### |10M|02essage |10B|02ase |10N|02ame|07|$D25 |10Q|02WK |10N|02ame|07 |10M|02sgs |10A|02dded|CR |09|$D77Ä +; QWK "working" text +231 |01[|10ž|01] |09Working|01... +; QWK process list format +; &1 = Base Number &2 = Base Name &3 = QWK Name +; &4 = # of Msgs &5 = # of Message Added +232 |07|$L04|&1 |$R40|&2 |$R13|&3 |$L06|&4 |$L06|&5 +; QWK process list footer +; &1 = Total messages in packet &2 = Total # of bases processed +233 |09|$D77Ä|CR |01[|10ž|01] |07|&1 |09messages in |07|&2 |09bases +; Displayed when compressing QWK packet +234 |CR |01[|10ž|01] |09Creating |11|QA |09archive... +; Displayed when a QWK packet is created locally +235 |CR |12Moving packet into local .QWK directory... +; Update last read pointers? +236 |CR |01[|10ž|01] |09Update last read pointers? |11 +; Node chat scroll mode back +237 |15Scrollback: (Up/Down) Move (Ctrl-R) Page Up (Ctrl-C) Page Down (ESC) Quit +238 |CR|12Your .REP packet was not found.|CR|CR|PA +; Displayed if the wrong QWK packet is uploaded +239 |CR|12Your .REP packet is not for this BBS.|CR|PA +; Processing QWK reply packet +240 |CR|01[|10ž|01] |09Processing QWK reply packet|01: |XX +; Voting booth header +241 |CL|08|$D79Ä|CR|14Voting Booth |12(* = New Question)|CR|08|$D79Ä +; Voting booth question list format +; &1 = Question # &2 = Question Text &3 = New Question? +242 |12|&3 |09(|10|$R02|&1|09) |03|$R71|&2 +; There are no voting questions. +243 |12Sorry, there are no voting questions. +; Voting booth prompt &1 = Total number of questions +244 |08|$D79Ä|CR|09Vote on which question (1-|&1, or Enter/Quit): |XX +; Voting on question header &1 = Question +245 |CL|08|$D79Ä|CR|14Question: (* = Current Vote)|CR|12|&1|CR|08|$D79Ä +; Voting on question list format +; &1 = Answer # &2 = Answer text &3 = Current Answer? +246 |12|&3 |09(|10|$R02|&1|09) |03|&2 +; Voting prompt +247 |08|$D79Ä|CR|09Vote for which answer (Enter/Quit): |XX +; See voting results? +248 |CR|12See results? |11 +; Vote Result Header +; &1 = Question &2 = Total Votes for this Question +249 |CL|08|$D79Ä|CR|14Results for Question: (|&2 votes)|CR|12|&1|CR|08|$D79Ä|CR |15#|07#|$D43 |15V|07otes |15P|07ercentage|CR|08|$D79Ä +; Vote Result list format +; &1 = Answer # &2 = Answer Text &3 = Votes on this question +; &4 = Percentage &5 = Percentage Bar (20 chars long) +250 |09(|10|$R02|&1|09) |03|$R40|&2 |12|$R05|&3 |15|$L03|&4% |&5|16 +; Vote Result Footer +251 |08|$D79Ä|CR|PA +; text +252 +; Enter your answer prompt +253 |CR|09Enter your response: |XX +254 |CR|14This is a forced question. You must answer it to continue.|CR|CR|PA +255 |CR|09Enter new file scan date |01[|10|UF|01]|09: |XX +256 |CR|12Set this date for all file bases? |11 +; &1 = Date of the updated new scan. +257 |CR|07New scan date set to [|15|&1|07].|DE|DE|DE +258 |CRDetecting terminal emulation: |XX +259 |TE detected. +; Short BBS list header +260 |CR|07Õ|08Ķ[ |15B|07BS |15N|07ame |08]Ķ|07ĶĶĶĶĶĶĶĶĶĶĶ|08Ķ[ |15T|07ype |08]|07Ķ|08Ķ[ |15A|07ddress |08/ |15P|07hone |08]Ķ|07ĶĶĶĶĶĶĶ|08Ķ[ |15S|07oftware |08]Ķ|07ø +; Short BBS list format +; &1 = bbs name &2 = type &3 = phone/addr &4 = software +261 |08³ |14|$R25|&1 |09|$R06|&2 |10|$R30|&3 |12|$R10|&4 |08³ +; Short BBS list footer +262 |07ŌĶ|08ĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ|07ĶĶ¾ +263 |08|$D79Ä|CR|09Results for which question? (Enter/Quit): |XX +; Extended BBS list header +264 |CR|14Extended BBS listing: +; Extended BBS list information +; &1 = bbs name &2 = type &3 = telnet &4 = software &5 = location +; &6 = sysop name &7 = baud &8 = added by &9 = phone &0 = verified +265 |CR|03BBS Name : |11|&1|CR|03BBS Type : |11|&2|CR|03Telnet Address : |11|&3|CR|03Phone Number : |11|&9|CR|03Max Baud Rates : |11|&7|CR|03Location : |11|&5|CR|03Sysop Name : |11|&6|CR|03Software : |11|&4 +; verify bbs? +266 |CR|12Verify that this BBS is still online? |11 +; Extended BBS list prompt +267 |CR|09(Enter) to Continue, (D)elete, (V)erify, or (Q)uit? |XX +; Who's Online: blank listing. |&1 = Node number +268 |07|$R05|&1 Waiting for connection +; Matrix login: Create a BBS account? +269 |CR|12Apply for a BBS account? |11 +; Matrix login: Matrix password prompt. |&1 = Matrix password +270 |CR|14Matrix password is |15|&1|14.|CR|CR|PA +; Matrix login: Your account is not validated. +271 |CR|14Sorry, your account has not been validated.|CR|CR|PA +; Matrix login: Enter matrix password +272 |CR|14Enter matrix password: |XX +; Matrix login: Enter account name prompt +273 |CR|03Account name |09: |XX +; Matrix login: enter account password prompt +274 |CR|03Account password|09: |XX +; Add question to voting booth question +275 |CR|12Add a question to the voting booth? |11 +; Maximum of 20 voting questions text +276 |CR|14Sorry, there is a maximum of 20 voting questions. +; Enter new question +277 |CR|03Enter new question (Enter/Quit)|CR|09: +; Enter choices now. Max 15. +278 |CR|10Enter choices now. There are a maximum of 15 choices for each question.|CREnter a blank line when done.|CR +; Choice #. &1 = Choice number +279 |09Choice #|&1: |XX +; Allow users to add answers? +280 |CR|12Allow users to add their own answers? |11 +; Save this question? +281 |CR|12Save this voting question? |11 +; Move message to where? +282 |CR|09Move to which base (|10?|09/|10List|09): |XX +; Add BBS list: enter phone number +283 |03Enter BBS phone number: |XX +; Add BBS list: enter BBS name +284 |03Enter BBS Name : |XX +; Add BBS list: enter BBS location +285 |03Enter Location of BBS : |XX +; Add BBS list: enter sysop name +286 |03Enter Sysop Name : |XX +; Add BBS list: enter max baud rate +287 |03Enter Max Baud Rate : |XX +; Add BBS list: enter BBS software +288 |03Enter BBS Software : |XX +; File base is mandatory +289 |CR |11|FB is marked as mandatory scanning.|CR +; Save this BBS entry +290 |CR|12Save this entry to the BBS list? |11 +; There are no entries in BBS list. +291 |CR|12There are no entries in the BBS list. +; BBS list: enter text to search for +292 |CR|09Enter search text or (ENTER) for All: |XX +; Matrix login: Invalid PW +293 |CR|12Invalid password. +294 |CR|12Delete this BBS from the list? |11 +295 |CR|12You did not add this BBS entry. +; editing message display +296 |16|CL|09|17 ° |15Message Editing |$X79 |16|CR|CR|09(|11A|09) |03To: |11|&1|CR|09(|11B|09) |03Subject: |11|&2|CR|09(|11C|09) |03Sent: |11|&3|CR|CR|09Edit option (|11!|09) Edit text, (|11Q|09)uit? |11 +; editing message to +297 |CR|09To: |XX +; editing message net address +298 |CR|09Enter destination address: |XX +; editing message subject +299 |CR|09Subject: |XX +; editing message save changes +300 |CR|12Save changes to message? |11 +; delete autosig? +301 |CR|12Delete auto signature? |11 +302 |CR|11|MB is marked as mandatory reading|CR +; Editor type prompt +303 |CR|11(|030|08) |14Line Editor|CR|11(|031|08) |14Full Screen Editor|CR|11(|032|08) |14Ask|CR|CR|15E|10d|02itor |15T|10y|02pe|15: |15 +; Archive view command prompt (download access allowed) +304 |CR |01[|10ž|01] |09Archive View: |01(|07R|01)|09e-list, |01(|07V|01)|09iew File, |01(|07D|01)|09ownload File or |01(|07Q|01)|09uit: |15 +; Archive view, file not found +305 |12File not found. +; Viewing text file &1 = Filename +306 |16|CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Viewing Contents of File|$L49|&1 |16|01³|CR|09Ą|01|$D77ÄŁ|CR|07 +; Line editor forced message cannot abort +307 |CR|11This is a forced message. You cannot abort it.|CR|CR|PA +308 |CR|12Invisible login? |11 +309 |CR|12Sorry, this user name is not acceptable. +; Message search: search text input +310 |DFmsgsearch||CR|09Enter text to search for: |11 +; Message search completed +311 |CL|15Message search completed.|DE|DE|DE +; Lightbar file list: DL limit is exceeded. +312 |12Your download per day limit would be exceeded.|PN +; Lightbar file list: DL ratio is exceeded. +313 |12Your download ratio would be exceeded.|PN +; Lightbar file list: Batch queue is full. +314 |12Your batch queue is full.|PN +; Ask for character translation (DOS CP437 or UTF8) +; &1 = Detected terminal type (or Unknown) +315 |CR|14[|150|14] MS-DOS CP437|CR[|151|14] UTF-8|CR|CRSelect Terminal Codepage [|15Enter = CP437|14]: |XX +; Lightbar Y/N: YES text +316 |09|17 Y|15es |09|16 N|15o |16 +; Lightbar Y/N: NO text +317 |09 Y|15es |09|17 N|15o |16 +; Moving message. &1=base name +318 |CR|14Moving message to |15|&1|14... +; nodechat broadcast text: &1 = user name +319 |05<|13|&1 |05broadcast> |07 +; File list type prompt +320 |CR|11(|030|08) |14Normal |15: |10View file lists page by page|CR|11(|031|08) |14LightBar |15: |10Scroll through lists with arrow keys|CR|CR|15S|10ele|02ct |15F|10il|02e |15L|10is|02t |15T|10yp|02e: |15 +; ASCII graphics not supported for BBS login. +321 Sorry, this BBS does not support ASCII graphics. +; ANSI graphics not supported for BBS login. +322 Sorry, this BBS does not support ANSI graphics. +; Lightbar file list prompt +323 |01(|07Space|01) |09Flag |01(|07N|01) |09Next Base |01(|07V|01) |09View |01(|07ESC|01) |09Quit |01(|07?|01) |09Help +; Lightbar file list: View archive +324 |12Unable to view archive.|PN +325 |CR|12Sorry, this emulation is not supported by your selected theme. +326 |CR|09Export to Filename|CR: +327 |CR|11Message exported to |&1. +; Archive view command prompt (download access not allowed) +328 |CR |01[|10ž|01] |09Archive View: |01(|07R|01)|09e-list, |01(|07V|01)|09iew File, or |01(|07Q|01)|09uit: |15 +; Displayed when an invalid filename is entered in Download of archive viewer +329 |CR|12Illegal filename. +; Add to BBS list: telnet +330 |03Enter Telnet Address : |XX +; Start at message index in email? (lightbar msg reader) +331 |CR|12Start at e-mail message index? |11 +; Teleconference user list +332 |CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Users currently in Teleconference|$D41 |01|16³|CR|09Ą|01|$D77ÄŁ|CR |10U|02ser|$D28 |10R|02oom |10T|02opic|CR |09|$D77Ä +; Teleconference user list format +; &1 = User's Name &2 = User's node number &3 = Room number &4 = Room name +333 |15|$R31|&1 |08(|07|$R02|&3|08) |12|&4 +; Jump to which message prompt. &1 = Current Message &2 = Total messages +334 |CR|09Jump to which message? (1-|&2): |XX +335 |CR|01[|10ž|01] |09Use signature in posted messages? |11 +336 |03You have not defined an auto-signature yet.|CR +; One Liners list format. &1 = Text &2 = Poster Name &3 = Initials +337 |07 |$R61|&1 |$L15|&2 +; Reading forward prompt &1 = Total messages in base +338 |CR|03Begin reading at (|111|03-|11|&1|03)|12: |XX +; Lightbar file list prompt (SYSOP) +339 |01(|07Space|01) |09Flag |01(|07E|01) |09Edit |01(|07N|01) |09Next |01(|07V|01) |09View |01(|07ESC|01) |09Quit |01(|07?|01) |09Help +; Lightbar file list uploaders name &1 = user name &3 = downloads +340 |$D34 |07+ Uploader: |&1 +; Line editor quote mode: &1 = line number &2 = line text +341 |10|&1|02: |11|$R74|&2 +; Netmail destination address (if no nodelist data) +342 |CR|09Enter destination netmail address: |XX +; Upload file name prompt +343 |CR|09File Name|CR: +; Download file name prompt +344 |CR|09File Name|CR: +; User status: user logging in +345 Logging In +; User status: Browsing Menus +346 Browsing Menus +; User status: Teleconference +347 Teleconference +; User status: Reading messages +348 Reading messages +; User status: Posting message +349 Posting message +; User status: Listing files +350 Listing files +; User status: Transfering files +351 Transfering files +; Line editor: Message upload "File Name:" prompt +352 |CR|09File Name|CR: +; Archive view "File Name:" prompt +353 |CR|09File Name|CR: +; TELNET/RLOGIN: Connecting prompt &1 = address &2 = port +354 |CR|08> |07Escape sequence is |08|15CTRL+|15]|08.|CR|08> |07Connecting to |15|&1 |07port |15|&2|08.|CR +; TELNET/RLOGIN: Connected successfully +355 |08> |07Connected. +; TELNET/RLOGIN: Unable to connect +356 |08> |12Unable to connect: Press a key|PN +; file list tagging prompt +357 |CR|01[|10ž|01] |09Add which file number to batch |01(|07Enter|01/|07Quit|01)|09: |XX +; file list view prompt +358 |CR|01[|10ž|01] |09View contents of which file number |01(|07Enter|01/|07Quit|01)|09: |XX +; Protocol List Header +359 |CR|14Available Protocols:|CR +; NodeMsg reply &1=from &2=node# +360 |CR|07Sending reply to |15|&1 |07on node |15|&2|07: +; Add BBS list connection type +361 |CR|09Accessible by (D)ialup, (T)elnet, (B)oth: |XX +; Add BBS: BBS already exists +362 |CR|12BBS already exists in list! +; Msg xport: local export path +363 |CR|09Enter full path/filename to export to:|CR|XX +; info edit: address +364 |CR|03Enter your street address.|CR|09: +; info edit: city/state +365 |CR|03Enter your city & state.|CR|09: +; info edit: zipcode +366 |CR|03Enter your postal code: #####|CR|09: +; info edit: home phone +367 |CR|03Enter yours home phone number:|CR|09: +; info edit: data phone +368 |CR|03Enter your data phone number:|CR|09: +; info edit: bday +369 |CR|03Enter your date of birth (|UF):|CR|09: +; info edit: gender +370 |CR|09Are you (M)ale or (F)emale? |XX +; info edit: date format +371 |CR|11(|031|08) |09MM/DD/YY|CR|11(|032|08) |09DD/MM/YY|CR|11(|033|08) |09YY/DD/MM|CR|CRDate Format |08-> |07 +372 |CR|09Enter terminal lines: |XX +; info edit: editor type +373 |CR|11(|030|08) |14Line Editor|CR|11(|031|08) |14Full Screen Editor|CR|11(|032|08) |14Ask|CR|CR|15E|10d|02itor |15T|10y|02pe|15: |15 +; info edit: file list type +374 |CR|11(|030|08) |14Normal |15: |10View file lists page by page|CR|11(|031|08) |14LightBar |15: |10Scroll through lists with arrow keys|CR|CR|15S|10ele|02ct |15F|10il|02e |15L|10is|02t |15T|10yp|02e: |15 +; Login prompt: User enters a username found in trashcan.dat +375 |CR|12That user name is unacceptible. +; Processing uploads +376 |CL|14Processing uploads ...|CR +; BLIND dupe search +377 |12ž |03Searching for duplicate files : |XX +; BLIND dupe found +378 |12Duplicate found +; BLIND no dupe found +379 None +; importing file_id.diz +380 |12ž |03Importing file description : |XX +; file_id found +381 Found +; no file_id +382 None +; Post on message base (standard reader) +383 |12Post on |11|MB|12? |XX +; View text file filename prompt +384 |CR|09File name|CR: +; Download OK &1 = filename +385 |03- Transfer of |11|&1|03: OK +; Download failed &1 = filename +386 |03- Transfer of |11|&1|03: |12Failed! +; Mass mail prompt +387 |CL|09Send mass mail by|09:|CR|CR|11(|031|08) |09ACS level|CR|11(|032|08)|09 List of users|CR|11(|033|08)|09 All users|CR|11(|03Q|08)|09 Quit|CR|CRCommand |08-> |07 +; Mass mail ACS prompt +388 |CREnter ACS level: |XX +; Mass mail name info +389 |CR|11Enter user name, or search string.|CREnter a blank line to end.|CR +; Mass mail name prompt &1 = # of users in list +390 |CR|11|&1 |03users in list. Enter user name: |XX +; Mass mail name list +391 |CR|09User mailing list:|CR +; Mass mail name format &1 = name +392 |03|&1 +; Mass mail name list confirmation +393 |CR|12Send mass mail to this list? |11 +; Sending mass mail +394 |CR|CR|15Sending mass e-mail, please wait ... +; Node unavilable +395 |CR|14Sorry, this user is marked as unavailable. +; Msg search prompt from read messages menu command +396 |DFmsgsearch||CR|09Enter text to search for: |XX +; Info edit: Msg Read type +397 |CR|11(|030|08) |14Normal |15: |10View messages page by page|CR|11(|031|08) |14LightBar |15: |10Scroll message lists with arrow keys|CR|CR|15S|10ele|02ct |15T|10yp|02e: |15 +; New user: Msg Read type +398 |CR|11(|030|08) |14Normal |15: |10View messages page by page|CR|11(|031|08) |14LightBar |15: |10Scroll message lists with arrow keys|CR|CR|15S|10ele|02ct |15T|10yp|02e: |15 +; Ansi msg read: index list format +; &1 = msg # &2 = subject &3 = from &4 = to &5 = new? +399 |12|&5|07|$L04|&1 |$R40|&2 |$R15|&3 |$R15|&4 +; Ansi msg read: index list highlight +; &1 = msg # &2 = subject &3 = from &4 = to &5 = new? +400 |12|&5|08|23|$L04|&1|16 +; Ansi msg read: index list highlight OFF +; &1 = msg # &2 = subject &3 = from &4 = to &5 = new? +401 |12|&5|07|$L04|&1 +; Ansi msg read: delete msg +402 |CR|12Delete this mail? |11 +; Ansi msg read: jump to msg: &1 = cur msg num &2 = high msg num +403 |CR|09Jump to which message? (|101|09-|10|&2|09): |11 +; Ansi msg read: scan toggle &1 = message base name +404 |CR|11|&1 will NOT be scanned in new message scan! +405 |CR|11|&1 will be scanned in new message scan! +406 |CR|11|MB is marked as mandatory reading! +; Reply msg To: standard +407 |CR|09To: |XX +; Reply msg To: lightbar +408 |CR|09To: |XX +; User edit: Hotkeys +409 |CR|12Use hot-key input? +; New user: Hotkeys +410 |CR|12Use hot-key input? +411 |CR|15Msg # From To Subject|CR|09|$D79- +412 |15|$L05|&5 |09|$R20|&1 |$R20|&2 |10|$R30|&3 +413 |09|$D79-|CR|PA +; ansi msg read: export to file +414 Export to filename|CR: +; ansi msg read: local export +415 Export to filepath/filename|CR: +; mass email subj: prompt +416 |CR|09Subject: |XX +; General Invalid PW +417 |CR|12Invalid password. +; INFO EDIT: Do not match +418 |CR|12Passwords do not match! +; INFO EDIT: PW prompt +419 |CR|03Enter your desired password. It should have a minimum of:|CR|&1 characters, |&2 capital letter(s), |&3 number(s), and |&4 symbol(s)|CR|CR|09Password: |XX +; INFO EDIT: PW non compliant +; &1=min length &2=min caps &3=min nums &4=min symbols +420 |CR|12Password not compliant with password policy. +; INFO EDIT: Verify PW +421 |CR|11Enter your password again for verification.|CR|CR|09Password: |XX +; Invalid New User PW +422 |CR|12Invalid password! +; Invalid Matrix PW +423 |CR|12Invalid password! +; Upload: No files found +424 |CR|15No files found!|CR|CR|PA +; File list compile: No files found +425 |$D11 |15No files found.|DE|DE|DE +426 |CR|14You cannot login to more than one node at a time.|CR|CR|PA +; nodechat input &1 = username +427 |07<|15|&1|07> |03 +; Batch queue list footer +428 |09 |$D77Ä +; new user: use lightbar message index? +429 |CR|12Use lightbar message index? |11 +; msg scan setting footer +430 |09|$D77Ä|CR +; Lightbar file list: #/filename: +; &1 = filenum, &2 = filename, &3 = tag char &4 = size &5 = date &6 = DLs +431 |16 |07|&1|12|&3|15|$R57|&2 |09|$L07|&4 |&5 +; Lightbar file list: highlight on: &1 = #, &2 = filename, &3 = tag char +432 |16 |01|23|&1|16|12|&3 +; Lightbar file list: highlight off: &1 = #, &2 = filename, &3 = tag char +433 |16 |07|&1|12|&3 +; Lightbar file list: description/info +; &1 = size, &2 = date, &3 = DLs, &4 = desc, &5 = uploader +434 |07|$D29 |&4 +; Lightbar file list, ext desc: &4 = description +435 |07|$D29 |&4 +; Lightbar file list, uploaded by: &5 = uploader +436 |07|$D29 + Uploader: |&5 +; Standard file list, uploaded by: &5 = uploader +437 |07|$D29 + Uploader: |&5 +; post on msg base (lightbar reader) +438 |CR|12Post a message? |11 +; new user: enter email address +439 |01[|10ž|01] |09Enter your e-mail address -> |XX +; info edit: enter email address +440 |CR|09Enter E-mail address|CR: +; new user: enter user note +441 |CR|09Enter your desired user note|CR: +; info edit: enter user note +442 |CR|09Enter your desired user note|CR: +; new user: option 1 +443 |01[|10ž|01] |09How did you hear of this BBS -> |XX +; info edit: option 1 +444 |CR|09Enter optional field 1: |XX +; new user: option 2 +445 |CR|09Enter optional field 2: |XX +; info edit: option 2 +446 |CR|09Enter optional field 2: |XX +; new user: option 3 +447 |CR|09Enter optional field 3: |XX +; info edit: option 3 +448 |CR|09Enter optional field 3: |XX +; file new scan setting footer +449 |09|$D77Ä|CR +; private post (email) TO: +450 |CR|09To: |XX +; reply msg SUBJ +451 |CR|09Subject: |XX +; standard quote header +452 |15Quote mode: Select a range of text to quote|CR +; node chat: show users in chat footer +453 |09|$D77Ä|CR|PA +; no history data +454 |CR|12No history data available.|CR|CR|PA +; history header +455 |CL|15Daily System History|CR|CR Date Calls New Posts Email DLs DLkb ULs ULkb|CR|08|$D79- +; history list +; &1=date &2=calls &3=newusers &4=posts &5=emails &6=dls &7=dlkb +; &8=uls &9=ulkb +456 |07|&1 |$R05|&2 |$R05|&3 |$R05|&4 |$R05|&5 |$R05|&6 |$R09|&7 |$R05|&8 |&9 +; history footer &1=total days +457 |08|$D79-|CR|15* Total days: |&1|CR|CR|PA +; msg scan date prompt +458 |CR|09Enter new message scan date |01[|10|UF|01]|09: |11 +; msg scan date global prompt +459 |CR|12Set this date for all bases? |11 +; msg scan date: updating pointers +460 |CR|14Updating pointers: Please wait... +; Filename greater than max chars prompt &1=Max length +461 |CR|12File of this name already exists.|CR|CR|09Enter new filename (max |&1 chars)|CR: +; line editor edit subject +462 |CR|09Enter new subject: |XX +; New User application: Invalid e-mail format +463 |CR|12Invalid e-mail address format.|CR +; msgtext quote header &1=date &2=from &3=initials &4=time +464 On |&1, |&2 said the following... +; new email node msg: &1=from &2=subj +465 You've just received new e-mail from |&1. +466 UNUSED +467 UNUSED +468 UNUSED +469 UNUSED +470 UNUSED +471 UNUSED +472 UNUSED +473 UNUSED +474 UNUSED +; Password inquiry prompt +475 |CR|12Send a password inquiry message to the SysOp? |11 +; Displayed when account expired down to a security level > 0 +476 |CR|14Your account has expired. Downgrading security to |XS. +; Displayed when account expired down to level 0 (delete) +477 |CR|12Your account has expired and is now marked for deletion. +; User required password change +478 |CR|14This BBS requires a password change every |PW days. +; User2User chat page which node? +479 |CR|09Enter node to chat with |01[|10?|01/|10List|01]|09: |XX +; User2User node/user is unavailable +480 |CR|15That user is marked unavailable.|CR|CR|PA +; User2User force user into chat? +481 |CR|12Force user into chat? |XX +; User2User sending chat request &1=User &2=Node +482 |CR|15Sending chat request to |&1...|DE|DE|CR +; User2User chat mode starting +483 |16|CL|09|17 ° |15Chat mode engaged.|$X70 ESC/Quit |16|CR +; User2User chat mode ended +484 |16|CL|09|17 ° |15Chat mode end.|$X79 |16|DE|DE +; User2User accept chat page request? &1=user &2=Node +485 |16|CL|15|&1 is requesting private user chat. Accept? |11 +; User info edit: Invalid e-mail address format +486 |CR|12Invalid e-mail address format +; MsgBase quickscan Scanning prompt +; &1=basename &2=current base# &3=total bases# +487 |03Scanning |11|&1 |03[|11|&2 |03of |11|&3|03]|08... +; MsgBase quickscan base list prompt +; &4=msgs in base &5=new messages &6=your messages &7=global total msg +; &8=global new msgs &9=global your msgs +488 |03Base: |14|$R40|&1 |03Total: |09|$L04|&4|03 New: |11|$L04|&5 |03Yours: |12|$L03|&6 +; MsgBase quickscan footer prompt +; &7=global total msg &8=global new msgs &9=global your msgs +489 |CRQuick Scan complete. |CR|CR|PA +; Msg header flags text one word each separated by a comma +; 1=Local 2=Echo 3=Private 4=Sent 5=Delete, 6=Received +490 Local,Echo,Priv,Sent,Del,Read +; File base filesize flags one word separated by a space +; 1=offline 2=failed 3=unvalidated 4=GB 5=MB 6=KB 7=B +491 OFFLINE FAILED UNVALID GB MB KB B +; Forward msg: which base +492 |CR|09Forward message to which base (|10?|09/|10List|09): |11 +; Sysop password prompt +493 |CR|09Sysop Password: |XX +; Normal msg reader: Remove from newscan? (after I command) +494 |CR|12Remove |15|MB |12from message newscan? |XX +; Lightbar msg reader: Remove from newscan (after I command) +495 |CR|12Remove |15|MB |12from message newscan? |XX +; Netmail send address prompt with active nodelist searching +496 |CR|09Enter netmail address or search criteria (|10?|09/|10Help|09): |11 +; Nodelist browser prompt +497 |CR|09Enter nodelist search criteria (|10?|09/|10Help|09): |11 +; Nodelist search results header +498 |CR|15Node System Name Location SysOp |CR|09============ ========================== ================== ==================== +; Node list search results +; &1=addr &2=bbsname &3=location &4=sysop &5=phone &6=internet +499 |10|$R12|&1 |15|$R26|&2 |11|$R18|&3 |09|$R20|&4 +; Node list single result +500 |CR|03 Address: |14|&1|CR|03System Name: |11|&2|CR|03 Location: |11|&3|CR|03 Operator: |11|&4|CR|03 Phone: |11|&5|CR|03 Internet: |11|&6 +; Node list search "found X matches" &1=# of matches +501 |CR|03Found |11|&1 |03matches. +; Netmail send confirmation +; &1=addr &2=bbsname &3=location &4=sysop &5=phone &6=internet &7=to +502 |CR|12Send netmail to |15|&7|07 at |15|&1|12? |11 +; QWK .REP complete/results prompt +; &1=msgs imported &2=msgs failed &3=bases added to scan &4=bases removed +503 |10SUCCESS|01.|CR|CR|11- |03Posted |11|&1 |03new messages (|11|&2 |03failed)|CR|11- |03Added |11|&3 |03bases to new scan (|11|&4 |03removed).|CR|CR|PA +; Standard message reader: Lastread pointer set &1 = msg number +504 |CR|11Last read pointer has been set to message number |&1.|CR|CR|PA +; Lightbar reader: Lastread pointer set &1 = msg number +505 |CR|11Last read pointer has been set to message number |&1.|CR|CR|PA +; QuickScan message list header &2=basename +506 |15From Base Subject|CR|09=============== ==================== ========================================== +; QuickScan message list middle +; &1=msg# &2=basename &3=from &4=to &5=subject &6=date +507 |10|$R15|&3 |09|$R20|&2 |11|$R42|&5 +; QuicScan message list footer +508 |09|$D79=|CR +; Message reply options (standard) +; &1=base name &2=reply to name &3=msg subject +509 |16|CL|09|17 ° |15Message Reply |$X79 |16|CR|CR|03 Area: |11|&1|CR |03To: |11|&2|CR|03 Subject: |11|$R65|&3|CR|CR|09Reply area (|11ENTER|09) Current, |09(|11B|09)ase, |09(|11E|09)mail, |09(|11Q|09)uit? |14 +; Message reply options (lightbar) +; &1=base name &2=reply to name &3=msg subject +510 |16|CL|09|17 ° |15Message Reply |$X79 |16|CR|CR|03 Area: |11|&1|CR |03To: |11|&2|CR|03 Subject: |11|$R65|&3|CR|CR|09Reply area (|11ENTER|09) Current, |09(|11B|09)ase, |09(|11E|09)mail, |09(|11Q|09)uit? |14 +; Message reply select base prompt +511 |CR|09Select message base for reply [|10?|09/|10List|09]: |11 +; Message "replying to X base" prompt &1=base name +512 |CR|03Posting reply message to base |11|&1|03. +; Message post: "post msg as private" in pub/priv type base +513 |CR|12Post this as a private message? |11 +; Message reply: "post msg as private" in pub/priv type base +514 |CR|12Post this as a private message? |11 +; Line Editor: No permission to upload message text +515 |CR|12You do not have access to upload message text.|CR|CR|PA +; Terminal emulation for TE mci code +; word1=ASCII word2=ANSI +516 ASCII ANSI +; UB results (File list type) +; word1=Normal word2=Lightbar +517 Normal Lightbar +; UE results (message editor type) +; word1=line, word2=full word3=ask +518 Line Full Ask +; UG results (gender/sex) +; word1=female word2=male word3=undisclosed +519 Female Male Unknown +; UJ results (message reader type) +; word1=Normal word2=Lightbar +520 Normal Lightbar +; UQ results (lightbar quote style) +; word1=standard word2=windowed +521 Standard Windowed +; Yes and No text used in various places +; Word 1 is the No Yes hotkeys, Word 2 is No, Word 3 is Yes +522 NY No Yes +; Off and On text used in various places +; Word1=Off word2=On +523 Off On +; New scan toggle yes/no (on/off) toggle text +; Word1=no word2=Yes +524 No Yes +; Editing auto signature message subject +525 Signature Editor +; Months of the year (short name) one word per, Jan-Dec separated by a space +526 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec +; Months of the year (long name) one word per, Jan-Dec separated by a space +527 January February March April May June July August September October November December +; Download batch file queue via FTP/WEB prompt +528 |CR|14Download via [|15W|14]eb Site, [|15F|14]tp Site, or [|15ENTER|14/Protocol]? |15 +; Download batch file queue via FTP prompt +529 |CR|14Download via [|15F|14]tp Site, or [|15ENTER|14/Protocol]? |15 +; Download batch file queue via WEB prompt +530 |CR|14Download via [|15W|14]eb Site, or [|15ENTER|14/Protocol]? |15 +; Download batch queue URL prompt &1 = URL link +531 |CR|09Download your files at the following site (expires in 1 hour):|CR|CR|11|&1|CR|CR|PA +; Message draft header +532 |16|CL|09Ś|$D77Ä|01æ|CR|09³|17 ± |15Saved Message Drafts|$D54 |01|16³|CR|09Ą|01|$D77ÄŁ|CR|CR |07## Date Base Subject|CR |01ÄÄ ÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +; Message draft item list +; &1=draft # &2=date &3=time &4=to &5=subject &6=base name +533 |15|$L02|&1 |11|&2 |14|$R25|&6 |10|$R35|&5 +; Message draft prompt &1 = high draft # +534 |CR|09Select draft to resume (|111|09-|11|&1|09), (|11D|09)elete, or (|11Q|09)uit: |15 +; Message draft scan prompt +535 |CR|12You have |15|MF |12saved draft message(s). View them now? |11 +; Message draft no saved drafts +536 |CR|12You have no saved draft messages.|CR|CR|PA +; Message draft delete prompt &1=high draft # +537 |CR|09Delete which draft (|111|09-|11|&1|09), or (|11Q|09)uit: |15 +; Password reset by email prompt &1=email address +538 |CR|12Reset password using Internet E-mail? |11 +; Password reset by email sending e-mail +539 |CR|14Sending password reset E-mail ... |XX +; Password reset by email sent +540 Success!|CR +; Password reset by email send failed +541 |12Unable to send E-mail|CR +; Password reset by email code prompt +542 |CR|09Enter code found in the email to reset password|CR:|11 +; Password reset by email Enter new password +543 |CR|09Enter new password: |XX +; Password reset by email confirm password +544 |CR|09Confirm password: |XX +; Password reset by email passwords do not match +545 |CR|12Passwords do not match! +; Password reset by email password not compliant +; &1=min length &2=min caps &3=min nums &4=min symbols +546 |CR|12Password not compliant. Must have a minimum of:|CR|CR |&1 characters|CR |&2 capital letters|CR |&3 numbers|CR |&4 symbols +; Email validation: Sending e-mail &1=email address +547 |CR|14Sending validation code to |15|&1 |14... |XX +; Email validation: Sent +548 Sent|CR +; Email validation: Error +549 |12Unable to send|CR|CR|PA +; Email validation: Enter code +550 |CR|09Enter e-mail validation code: |11 +; Email validation: Success +551 |CR|14Your e-mail address has been verified!|CR|CR|PA +; Email validation: Failed (user entered wrong code too many times) +552 |CR|12E-mail validation failed.|CR|CR|PA +; Terminal columns (new user) +553 |CR|09Enter terminal columns: |XX +; Terminal columns (edit user) +554 |CR|09Enter terminal columns: |XX diff --git a/dbp/scripts/apply_sample.mps b/dbp/scripts/apply_sample.mps new file mode 100644 index 0000000..c5010e1 --- /dev/null +++ b/dbp/scripts/apply_sample.mps @@ -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. diff --git a/dbp/scripts/autocreate.mps b/dbp/scripts/autocreate.mps new file mode 100644 index 0000000..8039547 --- /dev/null +++ b/dbp/scripts/autocreate.mps @@ -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. diff --git a/dbp/scripts/automessage.mps b/dbp/scripts/automessage.mps new file mode 100644 index 0000000..7f73132 --- /dev/null +++ b/dbp/scripts/automessage.mps @@ -0,0 +1,184 @@ +// AUTOMESSAGE : Basic auto-message MPL for Mystic BBS +// =================================================== +// +// Options: 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. diff --git a/dbp/scripts/bbslist.mps b/dbp/scripts/bbslist.mps new file mode 100644 index 0000000..d53d8c0 --- /dev/null +++ b/dbp/scripts/bbslist.mps @@ -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; diff --git a/dbp/scripts/blackjack.ans b/dbp/scripts/blackjack.ans new file mode 100644 index 0000000..acc6817 --- /dev/null +++ b/dbp/scripts/blackjack.ans @@ -0,0 +1,22 @@ +ÜÜÜÜÜÜÜÜ ÜÜÜ°² ÜÜÜÜÜÜ ÜÜÜÜÜ ÜÜ ÜÜÜÜ ÜÜÜ ÜÜÜÜÜÜ ÜÜÜÜÜ ÜÜ ÜÜÜÜ Ü +ŽM ÜÜ ßŪŪ°ŽŪ° Ž²ŪŻ °Ūß ŽŪ°ŽŪ ŽŪ° ±ŪŻ ŽŪŪŻ °Ūß ŽŪ°ŽŪ ŽŪ±°gj!Ż + Y ŽŪ ŽŪŻŽŪ ÜÜ ŪŻŽŪ ŽŪ Ž²°ŽŪ ŽŪŻ ÜÜ °ŪŻ ŪŻŽŪ ŽŪ ŽŪ°ŽŪ ŽŪŻ ² + S ŽŪ ÜŪß ŽŪ °ŪŪÜ ŽŪ ŪŻ ŽŪ ŽŪ ŽŪ ÜŪß ÜŪŪ ŪŻ ŽŪ ŪŻ ŽŪ ŽŪ ŽŪ ÜŪß ° + T ŽŪ ßŪÜ Ū ŪŻ± ŪŻ ŽŪ ŽŪ ß ŽŪ ßŪÜ ŽŪ °ŪŻ ŪŻ ŽŪ ŽŪ° ß ŽŪ ßŪÜ ° + I Ž²° ŽŻŽÜ ŪŻ ŽŪ ßßßŪŻ°ŪŻ ŽÜ ŽŪ° ŽŪŻ ŽŪ ÜŪŻŽŪ±ßßßŪŻ±ŪŻ ŽÜ Ž² ŽŪŻ ° + C ߎŪßßßßß ßßßßŪŻßßßß ßßßßßßßßßßßßßß ßßß ŽŪ²ßßßßßßß ßßßßßßßßßßßßßß ßßß ° + ° ßßßß ßßßß ° + ÉÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄ» ÉÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ»  + ³ Ż³ Ż³ Ż³ Ż³ Ż³ ³²±° Dealer:°±²³° + ³ Ż³ Ż³ Ż³ Ż³ Ż³ ČÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄļŪ + ³ Ż³ Ż³ Ż³ Ż³ Ż³ ŪŪßßŪŪ + ČÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄļ ŪŻŽŪ + ŪŻŽŪ + Ū°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Ū ŪŪÜÜŪŪ + °ÉÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄĖÄÄÄÄÄÄÄÄ»° ÉÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ»Ū + °³ŪŻ³ŪŻ³ŪŻ³ŪŻ³ŪŻ³° ³²±° You:°±²³° + °³ŪŻ³ŪŻ³ŪŻ³ŪŻ³ŪŻ³° ĢĶÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ¹° + °³ŪŻ³ŪŻ³ŪŻ³ŪŻ³ŪŻ³° ³²±° Cash $ °±²³° + °ČÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄÄŹÄÄÄÄÄÄÄļ° ³²±° Wager : °±²³° +ŽŪ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°ŪŪČÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄļŻ + ß ß diff --git a/dbp/scripts/blackjack.mps b/dbp/scripts/blackjack.mps new file mode 100644 index 0000000..6943347 --- /dev/null +++ b/dbp/scripts/blackjack.mps @@ -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. + diff --git a/dbp/scripts/blackjack.ms b/dbp/scripts/blackjack.ms new file mode 100644 index 0000000..f2ea9cf --- /dev/null +++ b/dbp/scripts/blackjack.ms @@ -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. diff --git a/dbp/scripts/bulletin.mps b/dbp/scripts/bulletin.mps new file mode 100644 index 0000000..e1615ff --- /dev/null +++ b/dbp/scripts/bulletin.mps @@ -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 diff --git a/dbp/scripts/dayinhistory.mpy b/dbp/scripts/dayinhistory.mpy new file mode 100644 index 0000000..2b7861a --- /dev/null +++ b/dbp/scripts/dayinhistory.mpy @@ -0,0 +1,59 @@ +# ------------------------------------------ +# Phenom Productions Presents... +# mod: Day In History v1.0 +# author: Smooth +# 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() diff --git a/dbp/scripts/filelist.mpy b/dbp/scripts/filelist.mpy new file mode 100644 index 0000000..f6d8900 --- /dev/null +++ b/dbp/scripts/filelist.mpy @@ -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"); \ No newline at end of file diff --git a/dbp/scripts/mailread.mps b/dbp/scripts/mailread.mps new file mode 100644 index 0000000..9aca900 --- /dev/null +++ b/dbp/scripts/mailread.mps @@ -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. + diff --git a/dbp/scripts/menucmd.mps b/dbp/scripts/menucmd.mps new file mode 100644 index 0000000..49488c6 --- /dev/null +++ b/dbp/scripts/menucmd.mps @@ -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. diff --git a/dbp/scripts/mpldemo.mps b/dbp/scripts/mpldemo.mps new file mode 100644 index 0000000..7b1c015 --- /dev/null +++ b/dbp/scripts/mpldemo.mps @@ -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. diff --git a/dbp/scripts/mpltest.mps b/dbp/scripts/mpltest.mps new file mode 100644 index 0000000..74e2e2e --- /dev/null +++ b/dbp/scripts/mpltest.mps @@ -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 diff --git a/dbp/scripts/mrc_client.mps b/dbp/scripts/mrc_client.mps new file mode 100644 index 0000000..4ea1308 --- /dev/null +++ b/dbp/scripts/mrc_client.mps @@ -0,0 +1,1674 @@ +/// ::::: __________________________________________________________________ ::::: +// : ____\ ._ ____ _____ __. ____ ___ _______ .__ ______ .__ _____ .__ _. /____ : +// __\ .___! _\__/__ / _|__ / _/_____ __| \ gRK __|_ \ __ |_ \ !___. /__ +// \ ! ___/ |/ /___/ | \__\ ._/ __\/ \ \___/ |/ \/ \_./ \___ ! / +// /__ (___ /\____\____|\ ____| / /___|\ ______. ____\|\ ___) __\ +// /____ \_/ ___________ \_/ __ |__/ _______ \_/ ____ |___/ _____ \_/ ____\ +// : /________________________________________________________________\ : +// ::::: + p H E N O M p R O D U C T I O N S + ::::: +// ============================================================================== +// +// ----------------------------------------- +// - modName: MRC Mystic Client - +// - majorVersion: 1.2 - +// - minorVersion: 9a - +// - author: Stackfault - +// - publisher: Phenom Productions - +// - website: https://www.phenomprod.com - +// - email: stackfault@bottomlessabyss.net - +// - bbs: bbs.bottomlessabyss.net:2023 - +// ----------------------------------------- +// +// Update history +// +// Version 1.1 - Gryphon // Cyberia BBS +// Version 1.1.4 - Stackfault [sf] // The Bottomless Abyss +// Version 1.2.5 - Stackfault [sf] // The Bottomless Abyss +// Version 1.2.7 - Stackfault [sf] // The Bottomless Abyss +// Version 1.2.9 - Stackfault [sf] // The Bottomless Abyss +// Version 1.2.9a - Stackfault [sf] // The Bottomless Abyss +// +// List of changes/fixes: +// +// v1.1.4 +// - Input buffer is now unblocking, you can see received chats while typing +// - Input buffer length is maxed, with color coded character counter +// - Input buffer history still available with UP/DOWN arrow keys +// - Fixed a race condition when line cannot be word wrapped +// - Added CPU release in each loops +// - Visible heartbeat animation when server refresh is active +// - Improved responsiveness and buffer refresh rate +// - Enlarged view port, now using the full 24 lines screen height +// - Now shows connected chatters when logging in +// - Welcome text at connection +// - New /changes command +// - 100% compatible with current MRC server implementation +// - Various small fixes +// - Implemented command whitelisting around pipe codes +// - Implemented colors live switching with PgUp/PgDn +// - Implemented timestamp highlighting on nick mention +// - Various validation of string input and length checking +// - Show private message when sent +// - Changed mention indicator to better support present/absent clock +// - Change wrapping on multiline chats to better use available screen space +// - Added information scroller +// +// v1.2.5 +// - Added message queuing serialization +// - Added multi-line packet handling +// - Updated scrolling ticker behavior +// - Added new server commands support +// - Stale queue indicator (heartbeat change color) +// - User now marked as unavailable for node message when in MRC +// - Increased topic to 55 chars +// - Added file-locking check via exclusive open +// - Tilde character handling +// - Nick autocomplete +// - Fixed and optimized clear screen +// - Many other smaller changes +// - Small issues fixed and code cleanup +// +// v1.2.7 (Hotfix release) +// - Server banner support +// - Several fixes +// - Client/Server latency display +// - Changes scroller/banner behavior +// +// v1.2.9 (Hotfix release) +// - Topic can now contain colon +// - Addressed some bleeding in banners +// - Added server hello/iamhere dialog support +// - Fixed screen update for some calls +// - Fixed issue with userlist server refresh +// - Fixed issue with server-side banners +// - Added server stats in scrolling banner +// - Reply to last received private message using /r +// - Word-wrapping routine redone to support long strings +// - Updated skin to be more intuitive re latency, buffer, etc +// - Redone the formatting of the /SET features display +// - Added missing /SET command to code +// - Converted all loop timing events to prime numbers to avoid collisions +// - Addressed the cause for random crash +// +// v1.2.9a (Hotfix release) +// - Fixed scroller issues with some OS/Architecture combinations +// - Added support for scroller background color in customization block +// - Added an easter surprise +// +// +// ************************************************************************* +// * Starting with this release, only the current and previous version * +// * of the client will be able to connect to the server, make sure * +// * to keep your installation updated. * +// ************************************************************************* +// +// Installation instructions +// +// MRC Central server has relocated, please use the address below. +// ==================================================================== +// mrc.bottomlessabyss.net on port 5000 +// ==================================================================== +// +// - This release if distributed as a complete installation, including +// both the mrc_client.py and mrc_client.mps. +// - Make sure you update both to benefit all the changes. +// - Some customization variables added, specifically around input bar +// + +Uses Cfg +Uses User + +Const MRCVersion = 'Multi Relay Chat MPL v1.2.9a [sf]' +Const CLBuffer = 25 +Const InputSize = 255 +Const MaxBuffer = 140 // Max input buffer limit [sf] + +Type MRCRec = Record + FromUser : String[30] + FromSite : String[30] + FromRoom : String[30] + ToUser : String[30] + ToSite : String[30] + ToRoom : String[30] + Message : String[InputSize] +End + +Type UserRec = Record + RecIdx : Integer + PermIdx : Integer + EnterChatMe : String[80] + EnterChatRoom : String[80] + EnterRoomMe : String[80] + EnterRoomRoom : String[80] + LeaveChatMe : String[80] + LeaveChatRoom : String[80] + LeaveRoomMe : String[80] + LeaveRoomRoom : String[80] + Name : String[80] + DefaultRoom : String[80] + Temp1 : String[80] + Temp5 : String[80] + Temp6 : String[80] + Temp7 : String[80] + NameColor : String[16] + LtBracket : String[16] + RtBracket : String[16] + UseClock : Boolean + ClockFormat : Boolean +End + +Var Plyr : UserRec +Var WinTL, WinTT : Byte = 0 +Var WinBL, WinBB : Byte = 0 + +Var ChatLines : Array [1..CLBuffer] of String[160] +Var WinAttr : Byte = 0 +Var WinSize : Integer = 0 +Var PromptX : Byte = 0 +Var PromptY : Byte = 0 +Var PromptAttr : Byte = 0 +Var RoomX, RoomY : Byte = 0 +Var RoomAttr : Byte = 0 +Var TopicX, TopicY : Byte = 0 +Var TopicAttr : Byte = 0 +Var MyNamePrompt : String = '' +Var MyChatRoom : Integer = 1 +Var Loop : Integer = 1 +Var SiteTag : String = '' +Var UserTag : String = '' +Var MyRoom : String = '' +Var MyTopic : String = '' +Var ServFile : MRCRec +Var BBSTempStub : String = '' +Var ChatLog : String = '' +Var PInUse : String = '' +Var Scroller : String = '' +Var UserFile : String = JustPath(Progname)+'mrcusers.dat' +Var ChatSeed : Integer = 0 +Var NodeMsgFlag : Boolean = False +Var BufferHist : Array [1..10] of String [160] // Buffer history [sf] +Var BannerList : Array [1..20] of String [160] // Header banners [sf] +Var BannerOff : Byte = 0 // Banner scrolling offset [sf] +Var BanIdx : Byte = 1 // Banner index [sf] +Var ScrollWait : Byte = 0 // Banner scrolling wait [sf] +Var HBClr : Byte = 11 // Color of Heartbeat [sf] +Var RoomUsers : String = '' // Comma delimited user list [sf] +Var UserIdx : Byte = 1 // Index of UserList search [sf] +Var LastUSearch : String = '' // Last user search string [sf] +Var LastPrivMsg : String = '' // Last private message received [sf] +Var Latency : Integer = 0 // Network latency in ms [sf] +Var MRCStats : String = '' // MRC Stats string [sf] +Var RefreshChat : Boolean = False +Var IMaxBuffer : Byte = MaxBuffer + +// Align this path with the Python client config [sf] +// Default: mystic/data/mrc +Var SvrQueuePath : String = CfgDataPath + 'mrc' + +// +// Beginning of customization variables block [CUST] +// + +// Heartbeat animation sequence [sf] +Var Heartbeat : String = Chr(176) + Chr(177) + Chr(178) + Chr(219) + Chr(178) + Chr(177) + +Var HeartbeatX : Byte = 76 // X position of HeartBeat [sf] +Var HeartbeatY : Byte = 23 // Y position of HeartBeat [sf] +Var HeartbeatGood : Byte = 10 // Color of HeartBeat when local queue is flowing [sf] +Var HeartbeatBad : Byte = 12 // Color of HeartBeat when local queue is stalled [sf] + +Var LatX : Byte = 12 +Var LatY : Byte = 23 +Var LatCol : Byte = 7 + +Var UsrX : Byte = 29 +Var UsrY : Byte = 23 +Var UsrCol : Byte = 7 + +Var CounterX1 : Byte = 60 // X position of characters counter [sf] +Var CounterY1 : Byte = 23 // X position of characters counter [sf] + +Var CounterX2 : Byte = 64 // X position of max characters count [sf] +Var CounterY2 : Byte = 23 // X position of max characters count [sf] + +Var InputBg : String = Chr(250) // Input background character [sf] +Var InputClr : String = '|16|17|07' // Input field color [sf] +Var Cursor : String = Chr(178) // Virtual Cursor Character +Var CursorBg : String = '|25' // Cursor Background color +Var CIdx,TIdx : Byte = 7 // Chat text color index [sf] + +Var MClr : String = '|24|10' // Mention indicator colors (background+foreground) +Var MChr : String = Chr(175) // Mention indicator character +Var TClr : Byte = 8 // Timestamp color +Var BBg : Byte = 16 // Scroller background (16-23) [sf] +Var BClr : Byte = 11 // Scroller color [sf] +Var BFad1 : Byte = 3 // Scroller fader color 1 [sf] +Var BFad2 : Byte = 8 // Scroller fader color 2 [sf] +Var BannerX : Byte = 43 // XPosition of banner [sf] +Var BannerY : Byte = 2 // YPosition of banner [sf] +Var BannerLen : Byte = 36 // Length of banner [sf] +Var ScrollDly : Byte = 0 // Banner scrolling start delay +Var ScrollSpeed : Byte = 15 // Scroll speed factor (Lower = Faster) + +// Define banner to scroll, loaded at each banner change (for dynamic content for example) +Procedure LoadBanners +Begin + BannerList[1] := MRCVersion + MRCStats + BannerList[2] := 'Find more about the connected BBSes using the /INFO command' + BannerList[3] := 'Give a try to the new nick auto-completion feature using the TAB key' + BannerList[4] := 'Reply to your last received private message using the /R shortcut' + // SysOp can add their own banners +End + +// +// End of customization variables block [CUST] +// + +Function ReadPlyr(I:Integer):Boolean +Var Ret : Boolean = False +Var Fptr : File +Begin + fAssign(Fptr,UserFile,66) + fReset(Fptr) + If IoResult = 0 Then Begin + fSeek(Fptr,(I-1)*SizeOf(Plyr)) + If Not fEof(fptr) Then Begin + fReadRec(Fptr,Plyr) + Ret:=True + End + fClose(Fptr) + End + ReadPlyr:=Ret +End + +Procedure SavePlyr(I:Integer) +Var Fptr : File +Begin + fAssign(Fptr,Userfile,66) + fReset(Fptr) + If IoResult = 0 Then + fSeek(Fptr,(I-1)*SizeOf(Plyr)) + Else Begin + Plyr.RecIdx:=1 + fReWrite(Fptr) + End + fWriteRec(Fptr,Plyr) + fClose(Fptr) +End + +Function FindPlyr:Integer +Var X,Ret : Integer = 0 +Var Done : Boolean = False +Var UN : String = '' +Begin + X:=1 + UN:=Upper(StripMCI(Replace(UserAlias,' ','_'))) + While ReadPlyr(X) And Not Done Do Begin + If StripMCI(Upper(Plyr.Name)) = UN Then Begin + Done:=True + Ret:=X + End + X:=X+1 + End + FindPlyr:=Ret +End + +Procedure NewPlyr +Var I : Integer = 0 +Begin + I:=0 + While ReadPlyr(I+1) Do I:=I+1 + + Plyr.RecIdx :=I+1 + Plyr.PermIdx :=UserIndex + Plyr.EnterChatMe :='|07- |15You have entered chat' + Plyr.EnterChatRoom :='|07- |11%1 |03has arrived!' + Plyr.LeaveChatMe :='|07- |12You have left chat.' + Plyr.LeaveChatRoom :='|07- |12%1 |04has left chat.' + Plyr.EnterRoomMe :='|07- |11You are now in |02%3' + Plyr.LeaveRoomRoom :='|07- |02%1 |10has left the room.' + Plyr.LeaveRoomMe :='|07- |10You have left room |02%4' + Plyr.EnterRoomRoom :='|07- |11%1 |03has entered the room.' + Plyr.Defaultroom :='lobby' + Plyr.NameColor :='|11' + Plyr.LtBracket :='|03<' + Plyr.RtBracket :='|03>' + Plyr.UseClock :=True + Plyr.ClockFormat :=False + + Plyr.Name:=StripMCI(Replace(UserAlias,' ','_')) + + SavePlyr(Plyr.RecIdx) +End + +Procedure CleanOut +Var X : Byte = 0 +Begin + For X:=1 To 20 Do BannerList[X] := '' + For X:=1 To 10 Do BufferHist[X] := '' + For X:=1 To CLBuffer Do ChatLines[X] := '' + + FindFirst(CfgTempPath + '*.mrc',66) + While DosError = 0 Do Begin + If FileExist(CfgTempPath+DirName) Then + FileErase(CfgTempPath+DirName) + FindNext + End + FindClose + If FileExist(PInUse) Then + fileErase(PInUse) + If FileExist(ChatLog) Then + fileErase(ChatLog) +End + +// Add Banners from Server [sf] +Procedure AddBanner(Text:String) +Var BanExist : Boolean = False +Begin + BanIdx := 1 + Repeat + If BannerList[BanIdx] = Text Then + BanExist := True + BanIdx := BanIdx + 1 + Until Length(BannerList[BanIdx]) = 0 or BanIdx > 20 + If BanExist = False Then + Begin + If BanIdx < 21 Then + BannerList[BanIdx] := Text + BanIdx := 1 + End +End + +Procedure UpdateScreen +Begin + WriteXY(RoomX,RoomY,RoomAttr,PadRt('#'+MyRoom,30,' ')) + WriteXY(TopicX,TopicY,TopicAttr,PadRt(MyTopic,55,' ')) + WriteXY(LatX, LatY, LatCol, PadLt(Int2Str(Latency), 3, ' ')) + WriteXY(UsrX, UsrY, UsrCol, PadLt(Int2Str(WordCount(RoomUsers,',')), 2, ' ')) +End + +Procedure ShowChat(Top:Integer) +Var C,T,L,Y,X : Integer = 0 +Var G,V,W : String = '' +Var N2D : Boolean = True +Begin + If RefreshChat Then + Begin + Y:=CLBuffer-WinSize-Top + Write('|08') + For X:=1 To WinSize+1 Do Begin + GoToXy(1,WinTT+X-1) + Write(ChatLines[Y]+'|16|$X80 ') + Y:=Y+1 + End + RefreshChat := False + End +End + +// Return PIPE code based on byte +Function GetPipe(C:Byte) : String +Begin + If C < 32 Then + GetPipe := '|' + PadLT(Int2Str(C), 2, '0') +End + +// Parse chat into a message record +Function ParseChat(S:String) : MrcREc +Var MR : MrcRec +Begin + MR.FromUser := WordGet(1,S,'~') + MR.FromSite := WordGet(2,S,'~') + MR.FromRoom := WordGet(3,S,'~') + MR.ToUser := WordGet(4,S,'~') + MR.ToSite := WordGet(5,S,'~') + MR.ToRoom := WordGet(6,S,'~') + MR.Message := WordGet(7,S,'~') + ParseChat := MR +End + +Procedure CheckUserlist(U:String) +Var X : Integer = 0 +Var A : Boolean = True +Begin + For X := 1 to WordCount(RoomUsers, ',') Do + If Upper(U) = Upper(WordGet(X, RoomUsers, ',')) Then + A := False + + If U = 'SERVER' or U = 'CLIENT' Then + A := False + + If A = True Then + Begin + If Length(RoomUsers) > 0 Then + RoomUsers := RoomUsers + ',' + U + Else + RoomUsers := U + End +End + +Procedure RedrawScreen +Begin + DispFile('mrcmain') + UpdateScreen + RefreshChat:=True + ShowChat(0) +End + +// Cut string based on available space +// Word-wrap or string-cut based on the best option +Function StringCutter(S:String;L:Byte):Byte +Var P,W,O : Byte = 0 +Var S1,S2 : String = '' +Var Done : Boolean = False +Begin + P := Length(S) + Repeat + S1 := Copy(S,1,P) + If Length(StripMCI(S1)) < L Then + Begin + O := WordCount(S1, ' ') + W := WordPos(O, S1, ' ') + + If Length(StripMCI(S)) < L Or W < P - 10 Then + W := 0 + + If W > 0 Then + Begin + StringCutter := W - 1 + Done := True + End + Else + Begin + StringCutter := P + Done := True + End + End + P := P-1 + Until Done = True +End + +Procedure Add2Chat(S:String) +Var E,W,L,B,A,X : Integer = 0 +Var DS,S1,S2,S3,S4 : String = '' +Var HL : String = '' +Begin + // Highlight on nick mention [sf] + HL := '|16|00.' + If Pos(Upper(UserTag), Upper(StripMCI(Copy(S, Length(WordGet(1,S,' ')), Length(S))))) > 0 Then + Begin + Write('|[X02|[Y02|16|00|BE|07') + HL := MClr + MChr + '|16|07' + End + + S3:=' ' + Chr(28) + ' ' + If Plyr.UseClock Then Begin + Begin + DS:=TimeStr(DateTime,Plyr.ClockFormat) + If Not Plyr.ClockFormat Then + Delete(DS,6,3) + S:=GetPipe(TClr)+DS+HL+'|16|07'+S+'|16' + S3:=StrRep(' ', Length(DS)) + S3 + End + Else + S:=HL+'|16|07'+S + + S1:=S + Repeat + Delay(5) + + W := StringCutter(S1,79) + + If Length(S1) > W Then + Begin + S2 := Copy(S1, W+1, Length(S1)) + S4 := Copy(S1, 1, W) + S1 := S4 + End + Else + S2 := '' + + If (S1 <> '') Then + Begin + For X:=2 To CLBuffer Do + ChatLines[X-1]:=ChatLines[X] + ChatLines[CLBuffer]:='|16'+S1 + AppendText(ChatLog,ChatLines[CLBuffer]) + RefreshChat := True + S1:=S3+S2 + End + + Until S2='' +End + +// Check if stale outbound messages are stuck in queue +Procedure CheckStale +Begin + HBClr := HeartbeatGood + FindFirst(SvrQueuePath + PathChar + '*.mrc', 63) + While DOSError = 0 Do + Begin + If DateTime > DirTime Then + HBClr := HeartbeatBad + FindNext + End + FindClose +End + +Procedure MakeChatEntry(S:String) +Var Fil : String = SvrQueuePath + PathChar + + Int2Str(NodeNum) + Int2Str(ChatSeed) + + Int2Str(Random(9))+Int2Str(Random(9)) + '.mrc' +Begin + AppendText(Fil,S) + ChatSeed:=ChatSeed+1 +End + +Procedure SendOut(FU,FS,FR,TU,TS,TR,S:String) +Var TX : String = '' +Begin + TX:=FU+'~'+FS+'~'+FR+'~'+TU+'~'+TS+'~'+TR+'~'+S+'~' + MakeChatEntry(TX) +End + +Procedure SendToMe(S:String) +Begin + Add2Chat(S) + ShowChat(0) +End + +Procedure SendToAllNotMe(S:String) +Begin + SendOut(UserTag,SiteTag,MyRoom,'NOTME','','',S) +End + +Procedure SendToRoomNotMe(S:String) +Begin + SendOut(UserTag,SiteTag,MyRoom,'NOTME','',MyRoom,S) +End + +Procedure SendToAll(S:String) +Begin + SendOut(UserTag,SiteTag,MyRoom,'','','',S) +End + +Procedure SendToRoom(S:String) +Begin + SendOut(UserTag,SiteTag,MyRoom,'','',MyRoom,S) +End + +Procedure SendToUser(U,S:String) +Begin + SendOut(UserTag,SiteTag,MyRoom,U,'','',S) +End + +Procedure SendToClient(S:String) +Begin + SendOut(UserTag,SiteTag,MyRoom,'CLIENT',SiteTag,MyRoom,S) +End + +Procedure SendToServer(S:String) +Begin + SendOut(UserTag,SiteTag,MyRoom,'SERVER',SiteTag,MyRoom,S) +End + +Procedure ProcessChat(MR:MRCRec) +Var Ok2Send : Boolean = True +Var Command,Opt1,Opt2,Stats : String = '' +Begin + + // Handle topic set from server + If Mr.FromUser = 'SERVER' and + Pos('ROOMTOPIC',Mr.Message) > 0 Then + Begin + Ok2Send := False + Command:=WordGet(1,Mr.Message,':') + opt1:=WordGet(2,Mr.Message,':') + opt2:=Copy(Mr.Message, + WordPos(3,Mr.Message,':'), + Length(Mr.Message)-WordPos(3,Mr.Message,':')+1) + If Opt1 = MyRoom Then Begin + MyTopic:=Opt2 + UpdateScreen + End + End + + // Handle userlist from server + If Mr.FromUser = 'SERVER' and + Pos('USERLIST',Mr.Message) > 0 Then + Begin + Ok2Send := False + Command := WordGet(1,Mr.Message,':') + opt1 := WordGet(2,Mr.Message,':') + RoomUsers := opt1 + WriteXY(UsrX, UsrY, UsrCol, PadLt(Int2Str(WordCount(RoomUsers,',')), 2, ' ')) + End + + // Handle client hello request + If Mr.FromUser = 'SERVER' and + Mr.Message = 'HELLO' Then + Begin + Ok2Send := False + SendToServer('IAMHERE') + End + + // Handle Latency from client + If Mr.FromUser = 'SERVER' and + Pos('LATENCY',Mr.Message) > 0 Then + Begin + Ok2Send := False + Latency := Str2Int(WordGet(2,Mr.Message,':')) + If Latency > 999 Then + Latency := 999 + WriteXY(LatX, LatY, LatCol, PadLt(Int2Str(Latency), 3, ' ')) + End + + // Handle stats from client + If Mr.FromUser = 'SERVER' and + Pos('STATS',Mr.Message) > 0 Then + Begin + Ok2Send := False + Stats := WordGet(2,Mr.Message,':') + If Length(Stats) > 0 Then + Begin + MRCStats := ' :: Server Stats >> BBSes:' + WordGet(1, Stats, ' ') + + ' Rooms:' + WordGet(2, Stats, ' ') + + ' Users:' + WordGet(3, Stats, ' ') + LoadBanners + End + End + + // Handle Banners from server + If Mr.FromUser = 'SERVER' and + Pos('BANNER',Mr.Message) > 0 Then + Begin + Ok2Send := False + AddBanner(WordGet(2,Mr.Message,':')) + End + + // Message for another room + If MR.ToRoom <> '' Then + if Upper(MR.ToRoom) <> Upper(MyRoom) Then + Ok2Send:=False + + // Message not empty and not for me + If MR.ToUser <> '' Then + If Mr.ToUser <> 'NOTME' Then + If Pos(Upper(MR.ToUser),Upper(UserTag))=0 + Then Ok2Send:=False + Else + If Mr.ToUser <> 'NOTME' Then + If Upper(Mr.FromUser) = Upper(UserTag) Then + Ok2Send:=False + + If Upper(Mr.FromUser) = Upper(UserTag) and + Mr.ToUser = 'NOTME' Then + Ok2Send:=False + + If Mr.FromUser <> 'SERVER' and Mr.FromUser <> 'CLIENT' Then + If Upper(Mr.ToUser) = Upper(UserTag) Then + LastPrivMsg := Mr.FromUser + + If Ok2Send Then + Begin + Add2Chat(MR.Message) + CheckUserlist(MR.FromUser) + End +End + +Procedure ReadChatFiles +Var F1 : File +Var S : String = '' +Var Ret : Boolean = False +Var TLines : Array [1..100] of String [255] +Var TSorted : Array [1..100] of String [255] +Var TStamp : LongInt = 0 +Var LCount : Byte = 0 +Var Largest : LongInt = 0 +Var LIndex : Byte = 0 +Var A,B,F,L : Byte = 0 +Begin + FindFirst(CfgTempPath+'*.mrc',66) + While DOSError = 0 Do Begin + Ret:=True + fAssign(F1,CfgTempPath+DirName,66) + fReset(F1) + L:=0 + While Not fEof(F1) Do Begin + fReadLn(F1,S) + LCount:=LCount+1 + TStamp := Str2Int(Copy(DirName, 1, 8)) + L + TLines[LCount] := Int2Str(TStamp) + ' ' + S + L:=L+1 + End + fClose(F1) + fileErase(CfgTempPath+DirName) + FindNext + End + FindClose + + // Little home-made sorting routine + // Sort loop 1 - Populate array from largest to lowest + For A:=LCount DownTo 1 Do + Begin + // Sort loop 2 - Read original array from + Largest := 0 + + For B:=1 to LCount Do + Begin + If Str2Int(WordGet(1, TLines[B], ' ')) > Largest Then + Begin + Largest := Str2Int(WordGet(1, TLines[B], ' ')) + LIndex := B + End + End + TSorted[A] := Copy(TLines[LIndex], + WordPos(2, TLines[LIndex], ' '), + Length(TLines[LIndex]) - WordPos(2, TLines[LIndex], ' ') + 1) + TLines[LIndex] := '0' + End + + // Process messages from the sorted array + For F:=1 to LCount Do + Begin + If WordCount(TSorted[F], '~') > 6 Then + Begin + ServFile:=ParseChat(TSorted[F]) + ProcessChat(ServFile) + End + End + + If Ret Then ShowChat(0) +End + +Function UpdateStrings(S,M,U,NR,OR:String):String +Begin + S:=Replace(S,'%1',M) + S:=Replace(S,'%2',U) + S:=Replace(S,'%3','#'+NR) + S:=Replace(S,'%4','#'+OR) + UpdateStrings:=S +End + +// Display error message to chat window [sf] +Procedure ShowError(S:String) +Begin + Add2Chat('|15!|12 ' + S) + ShowChat(0) +End + +Procedure JoinRoom(S:String;B:Boolean) +Var NewRoom,OldRoom : String = '' +Begin + If Length(S) > 30 Then + ShowError('Room name is limited to 30 chars max') + Else Begin + If Length(S) > 0 Then Begin + OldRoom:=MyRoom + NewRoom:=lower(S) + StripB(S,'#') + SendToServer('NEWROOM:'+MyRoom+':'+S) + If B Then Begin + SendToMe(UpdateStrings(Plyr.LeaveRoomMe,Plyr.Name,'',NewRoom,OldRoom)) + SendToRoomNotMe(UpdateStrings(Plyr.LeaveRoomRoom,Plyr.Name,'',NewRoom,OldRoom)) + MyRoom:=NewRoom + SendToMe(UpdateStrings(Plyr.EnterRoomMe,Plyr.Name,'',NewRoom,OldRoom)) + SendToRoomNotMe(UpdateStrings(Plyr.EnterRoomRoom,Plyr.Name,'',NewRoom,OldRoom)) + End + MyRoom:=S + SetPromptInfo(4,'#'+S) + UpdateScreen + SendToServer('USERLIST') + End + End +End + +Procedure ChangeNick(LRNC,N:String;Announce:Boolean) +Var ON : String = '' +Begin + + Case LRNC Of +// 'N': Plyr.Name:=StripMCI(N) + + // Limit left bracket to 1 visible character [sf] + 'L': Begin + If Length(StripMCI(N)) > 1 Then + ShowError('Left bracket max length is 1 char') + Else + Plyr.LtBracket:=N + End + + // Limit right bracket to 8 visible character [sf] + // Record length stays at 16 for compatibility + 'R': Begin + If Length(StripMCI(N)) > 8 or Length(N) > 16 Then + ShowError('Right brackets max length is 8 chars (16 including Pipe codes)') + Else + Plyr.RtBracket:=N + End + + // Make sure Nick color is a color PIPE code [sf] + 'C': Begin + If Length(StripMCI(N)) > 0 or Length(N) <> 3 Then + ShowError('Only color pipe codes allowed for nick color') + Else + Plyr.NameColor:=N + End + End + + SavePlyr(Plyr.RecIdx) + MyNamePrompt:=Plyr.LtBracket+Plyr.NameColor+StripMCI(Plyr.Name)+Plyr.RtBracket+'|16|07 ' +End + +Procedure Init +Var X,Y : Integer = 0 +Var K,S : String = '' +Begin + S:=Int2Str(NodeNum) + For X:=1 To 3 Do + S:=S+Int2Str(Random(9)) + ChatSeed:=Str2Int(S) + ChatLog:=CfgTempPath+'mrcchat.log' + PInUse:=CfgTempPath+'tchat.inuse' + + If Upper(UserAlias) = 'SERVER' or + Upper(UserAlias) = 'CLIENT' or + Upper(UserAlias) = 'NOTME' Then + Begin + WriteLn('|16|12|CL|CRUnfortunately, your User Alias is a reserved word and therefore cannot be used.') + WriteLn('|12Please ask your SysOp to change your User Alias to use MRC.') + WriteLn('|CR|PA|07|CL') + Halt + End + + BBSTempStub:=CfgTempPath + Y:=Pos(Int2Str(NodeNum),BBSTempStub) + If Y > 0 Then + Delete(BBSTempStub,Y,Length(Int2Str(NodeNum))+1) + + Y:=FindPlyr + If Y = 0 Then NewPlyr + Else ReadPlyr(Y) + + SiteTag:=StripMCI(Replace(MCI2Str('BN'),' ','_')) + UserTag:=StripMCI(Replace(UserAlias,' ','_')) + ChangeNick('N',UserTag,False) + DispFile('mrcmain') + GetScreenInfo(1,WinTL,WinTT,WinAttr) + GetScreenInfo(2,WinBL,WinBB,WinAttr) + GetScreenInfo(3,PromptX,PromptY,PromptAttr) + GetScreenInfo(4,RoomX,RoomY,RoomAttr) + GetScreenInfo(5,TopicX,TopicY,TopicAttr) + WinSize:=WinBB-WinTT + + AppendText(PInUse,'0') + MenuCmd('NA','Multi Relay Chatting') +End + +Procedure DoHelp +Begin + Write('|16|11') + DispFile('mrchelp') + RedrawScreen +End + +Procedure DoWho +Begin + Write('|16|11') + MenuCmd('NW','') + RedrawScreen +End + +Procedure ChangeTopic(S:String) +Var R : String = '' +Begin + if Length(S) > 55 Then + ShowError('Topic is limited to 55 chars max') + Else Begin + SendToServer('NEWTOPIC:'+MyRoom+':'+S) + UpdateScreen + End +End + +Procedure DoPrivateMsg(S:String) +Var M,U : String = '' +Var L : Integer = 0 +Begin + U:=Upper(WordGet(2,S,' ')) + L:=Pos(U,Upper(S)) + L:=L+Length(U)+1 + M:='|15* |08(|15'+Plyr.Name+'|08/|14PrivMsg|08) |07'+Copy(S,L,Length(S)-L+1) + SendToUser(U,M) + Add2Chat('|15* |08(|14PrivMsg|08->|15' + U + '|08) '+ GetPipe(CIdx) + Copy(S,L,Length(S)-L+1)) + ShowChat(0) +End + +Procedure DoBroadcast(S:String) +Var M : String = '' +Begin + M:='|15* |08(|15'+Plyr.Name+'|08/|14Broadcast|08) |07'+Copy(S,4,Length(S)-3) + SendToAll(M) +End + +Procedure DoMeAction(S:String) +Var R : String = '' +Begin + R:=Copy(S,5,Length(S)-4) + SendToRoom('|15* |13'+Plyr.Name+' ' + R) +End + +// Buffer history handling [sf] +Procedure AddToBufferHistory(B:String) +Var I : Byte = 0 +Begin + For I := 10 DownTo 2 Do + Begin + If Length(BufferHist[I-1]) > 0 Then + BufferHist[I] := BufferHist[I-1] + End + BufferHist[2] := B +End + +// Select next banner from the defined list [sf] +Procedure NextBanner +Begin + Repeat + BanIdx := BanIdx + 1 + If BanIdx > 20 Then BanIdx := 1 + Until Length(BannerList[BanIdx]) > 0 + ScrollWait := 0 + BannerOff := 0 +End + +// Display and scroll banners [sf] +Function ScrollBanner +Var BS: String = StripMCI(BannerList[BanIdx]) +Begin + // This is a scrolling banner + + // Add white padding for nice scroll entry/exit + BS:=StrRep(' ', BannerLen) + BS + StrRep(' ', BannerLen) + + // Initial display before we start scrolling + If ScrollWait = 0 Then + Begin + BS:=GetPipe(BBg)+GetPipe(BClr) + Copy(BS, 1, BannerLen-2) + + GetPipe(BFad1) + Copy(BS, BannerLen-1, 1) + + GetPipe(BFad2) + Copy(BS, BannerLen, 1) + '|16' + BannerOff := BannerOff + 1 + GoToXy(BannerX, BannerY) + Write(BS) + GoToXy(HeartBeatX, HeartBeatY) + End + + // We have made it to the end + If BannerOff > Length(BS) - BannerLen Then + Begin + BS:=GetPipe(BBg)+GetPipe(BFad2) + Copy(BS, BannerOff, 1) + + GetPipe(BFad1) + Copy(BS, BannerOff+1, 1) + + GetPipe(BClr) + Copy(BS, BannerOff+2, BannerLen-2) + '|16' + GoToXy(BannerX, BannerY) + Write(BS) + GoToXy(HeartBeatX, HeartBeatY) + ScrollWait := 0 + NextBanner + End + + // Let's start the scrolling shall we + If ScrollWait > ScrollDly Then + Begin + BS:=GetPipe(BBg)+GetPipe(BFad2) + Copy(BS, BannerOff, 1) + + GetPipe(BFad1) + Copy(BS, BannerOff+1, 1) + + GetPipe(BClr) + Copy(BS, BannerOff+2, BannerLen-4) + + GetPipe(BFad1) + Copy(BS, BannerOff+BannerLen-2, 1) + + GetPipe(BFad2) + Copy(BS, BannerOff+BannerLen-1, 1) + '|16' + BannerOff := BannerOff + 1 + GoToXy(BannerX, BannerY) + Write(BS) + GoToXy(HeartBeatX, HeartBeatY) + End + + // Not yet + Else + Begin + ScrollWait := ScrollWait + 1 + GoToXy(HeartBeatX, HeartBeatY) + End +End + +// Buffer history seeker [sf] +Function GetBufferIndex(Idx:Byte;Dir:Integer) : Byte +Var NIdx: Byte = 0 +Begin + NIdx := Idx + Dir + GetBufferIndex := Idx + + If NIdx > 1 and NIdx < 10 and Length(BufferHist[NIdx]) > 0 Then + GetBufferIndex := NIdx + + If NIdx = 1 Then + GetBufferIndex := NIdx +End + +// Color Index seeker [sf] +Function GetColorIndex(Idx:Byte;Dir:Integer) : Byte +Var MIdx: Byte = 0 +Begin + MIdx := Idx + Dir + + // Span from Blue... + If MIdx < 1 Then + MIdx := 1 + + // ... to Bright White + If MIdx > 15 Then + MIdx := 15 + + GetColorIndex := MIdx +End + +Function RainbowString(InString:String) : String +Var PlString : String = '' +Var RbString : String = '' +Var PlStrPos : Byte = 0 +Var PlStrLen : Byte = 0 +Var X : Byte = 0 +Begin + PlStrPos := WordPos(2, InString, ' ') + PlStrLen := Length(InString) - (PlStrPos-1) + PlString := Copy(InString, PlStrPos, PlStrLen) + For X:=1 To PlStrLen Do + RbString := RbString + GetPipe(Random(14)+1) + Copy(PlString, X, 1) + + RainbowString := RbString +End + +Function InputLine:String +Var IX,UL : Integer = 0 +Var Ch : Char = #13 +Var IBuf : String = '' // Input buffer [sf] +Var DBuf : String = '' // Displayed buffer [sf] +Var RBuf : Boolean = False // Refresh buffer flag [sf] +Var Done : Boolean = False // Done getting input (Enter) [sf] +Var Anim : Byte = 1 // Animation step [sf] +Var BIdx : Byte = 1 // Buffer Current Idx [sf] +Var NIdx : Byte = 1 // Buffer Target Idx [sf] +Var CClr : Byte = 7 // Char counter color [sf] +Var Words : String = '' +Var LastW : String = '' +Var PrefixLen : Byte = 0 +Begin + UL:=Length(StripMCI(MyNamePrompt)) + IX:=PromptX+Length(StripMCI(MyNamePrompt)) + + // Derive the maximum allowed buffer bnased on packet fields + PrefixLen := Length(UserTag) + Length(SiteTag) + Length(MyRoom)*2 + Length(MyNamePrompt) + 20 + + // Init the characters counter [sf] + WriteXY(CounterX1, CounterY1, 7, PadLt(Int2Str(Length(IBuf)), 3, '0')) + WriteXY(CounterX2, CounterY2, 7, PadLt(Int2Str(IMaxBuffer), 3, '0')) + + // Init the buffer input bar [sf] + GoToXy(PromptX,PromptY) + Write('|16' + MyNamePrompt + InputClr + GetPipe(CIdx) + DBuf + + CursorBg + Cursor + InputClr + '|$X78' + InputBg) + + Repeat + While Not Keypressed Do + Begin + // Improved polling time to keyboard [sf] + Delay(10) + + // Read chat files every 7 cycles [sf] + // Slightly improve file access rate + If Loop % 7 = 0 Then + ReadChatFiles + + // Read chatroom userlist [sf] + If Loop % 1999 = 0 Then + SendToServer('USERLIST') + + // Heartbeat to server every 12000 cycles + // Maintain server heartbeat rate + If Loop % 11987 = 0 Then Begin + SendToServer('IAMHERE') + End + + // Also re-read banners from server and add new ones + If Loop > 47948 Then Begin + SendToServer('BANNERS') + Loop:=1 + End + + If Loop % ScrollSpeed = 0 Then + ScrollBanner + + If Loop % 499 = 0 Then + CheckStale + + If Loop % 997 = 0 Then + Begin + If HBClr = HeartbeatGood Then + SendToClient('LATENCY') + End + + // Animate the heartbeat animation every 53 cycles [sf] + If Loop % 53 = 0 Then + Begin + Anim := Anim + 1 + If Anim > Length(HeartBeat) Then + Anim := 1 + WriteXY(HeartBeatX, HeartBeatY, HBClr, Copy(HeartBeat, Anim, 1)) + GoToXy(HeartBeatX, HeartBeatY) + End + + Loop:=Loop+1 + End + + // Handle arrow keys [sf] + AllowArrow := True + Ch := ReadKey + + // Buffer history handling [sf] + If IsArrow Then + Begin + Case Ch Of + Chr(72) : NIdx := GetBufferIndex(BIdx, 1) // Scroll back input (Up) + Chr(80) : NIdx := GetBufferIndex(BIdx, -1) // Scroll forward input (Dn) + Chr(81) : TIdx := GetColorIndex(CIdx, -1) // Decrease color index (PgDn) + Chr(73) : TIdx := GetColorIndex(CIdx, 1) // Increase color index (PnUp) + Else + NIdx := BIdx + TIdx := CIdx + End + + Ch := Chr(0) + + If BIdx <> NIdx Then + Begin + IBuf := BufferHist[NIdx] + BIdx := NIdx + RBuf := True + End + Else + If CIdx <> TIdx Then + Begin + CIdx := TIdx + RBuf := True + End + End + + // PIPE codes whitelist [sf] + If Copy(IBuf, Length(IBuf), 1) = '|' Then + Begin + Case Ch Of + '0', + '1', + '2', + '3', + '|', + Chr(32), + Chr(8), + Chr(27) : Ch := Ch + Else + Ch := Chr(0) + End + End + + If Ch = Chr(32) and Length(IBuf) < 1 Then + Ch := Chr(0) + + // Nick auto-completion [sf] + If Ch = Chr(9) Then + Begin + Var WC : Byte = WordCount(IBuf, ' ') // Count of words in buffer + Var LW : String = WordGet(WC, IBuf, ' ') // Last word in buffer + Var WL : Byte = Length(LW) // Length of the last word in buffer + + // Define display if at the beginning or mid-sentence + Var Tail : String = '' + If WC < 2 Then + Tail := ': ' + Else + Tail := ' ' + + If LastUSearch = '' Then + LastUSearch := LW + + If WL > 0 and Length(RoomUsers) > 0 Then + Begin + Var PF :String = Copy(IBuf, 1, WordPos(WC, IBuf, ' ')-1) // Buffer prefix + Var UMatch : Boolean = False + Var SLoop : Byte = 0 + + While Not UMatch Do + Begin + If UserIdx > WordCount(RoomUsers, ',') Then UserIdx := 1 + Var UHandle : String = WordGet(UserIdx, RoomUsers, ',') + If Length(UHandle) > 0 and + Upper(LastUSearch) = Upper(Copy(UHandle, 1, Length(LastUSearch))) Then + Begin + UMatch := True + IBuf := PF + UHandle + Tail + End + UserIdx:=UserIdx+1 + SLoop:=SLoop+1 + If SLoop > WordCount(RoomUsers, ',') Then UMatch := True + End + End + End + Else + Begin + LastUSearch := '' + UserIdx := 1 + End + + IMaxBuffer := 255 - PrefixLen + If IMaxBuffer > MaxBuffer Then IMaxBuffer := MaxBuffer + + If Lower(WordGet(1, IBuf, ' ')) = '/rainbow' Then + IMaxBuffer := Abs(IMaxBuffer/4) - 4 + + // Send to server and add to buffer history [sf] + If Ch = Chr(13) Then + Begin + If Lower(WordGet(1, IBuf, ' ')) = '/rainbow' Then + InputLine := RainbowString(IBuf) + Else + InputLine := IBuf + + AddToBufferHistory(IBuf) + IBuf := '' + BIdx := 1 + IMaxBuffer := MaxBuffer + WriteXY(CounterX1, CounterY1, 7, PadLt(Int2Str(Length(IBuf)), 3, '0')) + WriteXY(CounterX2, CounterY2, 7, PadLt(Int2Str(IMaxBuffer), 3, '0')) + Done := True + End + Else + + // Clear input buffer with ESC [sf] + If Ch = Chr(27) Then + Begin + IBuf := '' + BIdx := 1 + RBuf := True + End + Else + Begin + // Handle backspace [sf] + If Ch = Chr(8) Then + Begin + Delete (IBuf, Length(IBuf), 1) + RBuf := True + End + Else + + // Allow characters between #32 and #126 only [sf] + Begin + If Ord(Ch) > 31 and Ord(Ch) < 127 Then + Begin + // Limit input buffer length [sf] + If Length(IBuf) < IMaxBuffer Then + Begin + IBuf := IBuf + Ch + RBuf := True + End + End + + // Ignore any other character [sf] + Else + Ch := '' + End + End + + if Upper(Copy(IBuf,1,3)) = '/R ' and LastPrivMsg <> '' Then + IBuf := '/t ' + LastPrivMsg + ' ' + + // Refresh buffer only if changed [sf] + If RBuf Then + Begin + // Scroll input buffer [sf] + If Length(IBuf) > 78-PromptX-UL Then + DBuf := Copy(IBuf, Length(IBuf) - (77-PromptX-UL), 78-PromptX-UL) + Else + DBuf := IBuf + + // Update input bar [sf] + GoToXy(PromptX,PromptY) + + Write('|16' + MyNamePrompt + InputClr + GetPipe(CIdx) + + DBuf + CursorBg + Cursor + InputClr + '|$X78' + InputBg + '|16') + + // Handle counter color coding [sf] + CClr := 7 + If Length(IBuf) > IMaxBuffer -20 Then + CClr := 14 + If Length(IBuf) > IMaxBuffer -10 Then + CClr := 12 + + // Update characters counter [sf] + WriteXY(CounterX1, CounterY1, CClr, PadLt(Int2Str(Length(IBuf)), 3, '0')) + WriteXY(CounterX2, CounterY2, CClr, PadLt(Int2Str(IMaxBuffer), 3, '0')) + End + GoToXy(PromptX,PromptY) + Until Done +End + +// Clear screen +Procedure DoCls +Var X : Integer = 0 +Begin + For X:=1 To CLBuffer Do + ChatLines[X]:='' + RedrawScreen +End + +Procedure DoScrollBack +Begin + MenuCmd('GV','mrcscrl;x;y;'+ChatLog+';END') + RedrawScreen +End + +Procedure ShowWelcome +Begin + // Welcome info text [sf] + Add2Chat('* |10Welcome to ' + MRCVersion) + Add2Chat('* |15ESC|10 to clear input buffer, |15UP|10/|15DN|10 arrows for buffer history') + Add2Chat('* |15PGUP|10/|15PGDN|10 to change your chat text color and |15TAB|10 for nick completion') + Add2Chat('* |10The bottom-right heartbeat indicates your status with BBS and server') + Add2Chat('* |10Your maximum message length is |15' + Int2Str(IMaxBuffer)+ '|10 characters') + ShowChat(0) +End + +Procedure ShowChanges +Begin + // Changes info text [sf] + Add2Chat('* |15List of changes from MRC v1.1') + Add2Chat('* |10Completely redesigned Input routine [sf]') + Add2Chat('* |10Ability to receive chat while typing (non-blocking) [sf]') + Add2Chat('* |10Built-in input buffer history [sf]') + Add2Chat('* |10Chat text color changing using PgUp and PgDn [sf]') + Add2Chat('* |10Visual indicator when your nick is mentioned [sf]') + Add2Chat('* |10Input buffer with color coded characters counter [sf]') + Add2Chat('* |10Server latency and synchronization heartbeat indicator [sf]') + Add2Chat('* |10Enlarged view port, more lines are available for the chat [sf]') + Add2Chat('* |10Customizable information scroller [sf]') + Add2Chat('* |10Improvement of performance and responsiveness of the interface [sf]') + Add2Chat('* |10Brand new backend for improved speed and scalability [sf]') + Add2Chat('* |10Nick auto-completion using TAB [sf]') + Add2Chat('* |10Reply to last private message using /r [sf]') + ShowChat(0) +End + + +Procedure EnterChat +Begin + ShowWelcome // Show welcome text [sf] + + Add2Chat(UpdateStrings(Plyr.EnterChatMe,Plyr.Name,'',MyRoom,MyRoom)) + SendToAllNotMe(UpdateStrings(Plyr.EnterChatRoom,Plyr.Name,'',MyRoom,MyRoom)) + + Delay(20) + SendToServer('IAMHERE') + Delay(20) + SendToServer('BANNERS') + ShowChat(0) +End + +Procedure LeaveChat +Var Str1 : String = '' +Begin + Add2Chat(UpdateStrings(Plyr.LeaveChatMe,Plyr.Name,'',MyRoom,MyRoom)) + SendToAllNotMe(UpdateStrings(Plyr.LeaveChatRoom,Plyr.Name,'',MyRoom,MyRoom)) + ShowChat(0) + Delay(500) + SendToServer('LOGOFF'); + ShowChat(0) +End + +Procedure DoSetList +Var R,S : String = '' +Var B : Boolean = False +Begin + S:='False' + If Plyr.UseClock Then + S:='True' + + R:='12Hour (HH:MMa or HHMMp)' + If Not Plyr.ClockFormat Then + R:='24Hour (HH:MM)' + + B:=Plyr.UseClock + Plyr.UseClock:=False + Add2Chat('|11List of current |15/SET |11values from your account') + Add2Chat('|15ENTERCHATME |08:|07 '+Plyr.EnterChatMe) + Add2Chat('|15ENTERCHATROOM |08:|07 '+Plyr.EnterChatRoom) + Add2Chat('|15ENTERROOMME |08:|07 '+Plyr.EnterRoomMe) + Add2Chat('|15ENTERROOMROOM |08:|07 '+Plyr.EnterRoomRoom) + Add2Chat('|15LEAVECHATME |08:|07 '+Plyr.LeaveChatMe) + Add2Chat('|15LEAVECHATROOM |08:|07 '+Plyr.LeaveChatRoom) + Add2Chat('|15LEAVEROOMME |08:|07 '+Plyr.LeaveRoomMe) + Add2Chat('|15LEAVEROOMROOM |08:|07 '+Plyr.LeaveRoomRoom) + Add2Chat('|15DEFAULTROOM |08:|07 '+Plyr.DefaultRoom) + Add2Chat('|15NICKCOLOR |08:|07 '+Plyr.NameColor+Plyr.Name) + Add2Chat('|15LTBRACKET |08:|07 '+Plyr.LtBracket) + Add2Chat('|15RTBRACKET |08:|07 '+Plyr.RtBracket) + Add2Chat('|15USECLOCK |08:|07 '+S) + Add2Chat('|15CLOCKFORMAT |08:|07 '+R) + ShowChat(0) + Plyr.UseClock:=B +End + +Procedure DoSetHelp +Var B : Boolean = False +Begin + B:=Plyr.UseClock + Plyr.UseClock:=False + Add2Chat('|15/SET |08<|03tag|08> <|03text|08>') + Add2Chat('|11Use |15SET |11to set various fields to your account') + Add2Chat('|15HELP |03This helps message') + Add2Chat('|15LIST |03List all fields and tabs') + Add2Chat('|15ENTERCHATME |03Displayed to |11me |03when I enter chat.') + Add2Chat('|15ENTERCHATROOM |03Displayed to |11room |03when I enter chat.') + Add2Chat('|15ENTERROOMME |03Displayed to |11me |03when I enter room.' ) + Add2Chat('|15ENTERROOMROOM |03Displayed to |11room |03when I enter room.' ) + Add2Chat('|15LEAVECHATME |03Displayed to |11me |03when I leave chat.' ) + Add2Chat('|15LEAVECHATROOM |03Displayed to |11room |03when I leave chat.' ) + Add2Chat('|15LEAVEROOMME |03Displayed to |11me |03when I leave room.') + Add2Chat('|15LEAVEROOMROOM |03Displayed to |11room |03when I leave room.') + Add2Chat('|15DEFAULTROOM |03Join this room when you join chat.') + Add2Chat('|15NICKCOLOR |03Change my nickname color |11(MCI Pipe codes).' ) + Add2Chat('|15LTBRACKET |03Change my left bracket / color |11(MCI Pipe codes).' ) + Add2Chat('|15RTBRACKET |03Change my right bracket / color |11(MCI Pipe codes).' ) + Add2Chat('|15USECLOCK |03(|15Y|03/|15N|03) Use timestamp in chat') + Add2Chat('|15CLOCKFORMAT |1112 |03or |1124 |03hour clock format') + ShowChat(0) + Plyr.UseClock:=B +End + +Procedure ChangeClock(T:Integer;S:String) +Begin + S:=StripB(Upper(S),' ') + Case T Of + 1: Begin + If Pos('YE',S) > 0 Or Pos('TR',S) > 0 Then Begin + Plyr.UseClock:=True + Add2Chat('|11CLOCKFORMAT |08: |15True') + End Else Begin + If Pos('NO',S) > 0 Or Pos('FA',S) > 0 Then Begin + Plyr.UseClock:=False + Add2Chat('|11CLOCKFORMAT |08: |15False') + End Else + Add2Chat('|11Usage: |15/SET USECLOCK YES||TRUE|08 or |15/SET USECLOCK NO||FALSE') + End + ShowChat(0) + End + 2: Begin + If S = '12' Then Begin + Plyr.ClockFormat:=True + Add2Chat('|07CLOCKFORMAT |08: |0712 hour') + End Else Begin + If S = '24' Then Begin + Plyr.ClockFormat:=False + Add2Chat('|07CLOCKFORMAT |08: |0724 hour') + End Else + Add2Chat('|11Usage: |08"|03/SET CLOCKFORMAT 12|08" or "|03/SET CLOCKFORMAT 24|08"') + End + ShowChat(0) + End + End + SavePlyr(Plyr.RecIdx) +End + +Procedure DoSet(Line:String) +Var Tag,Txt : String = '' +Var P : Integer = 0 +Begin + Tag:=WordGet(1,Line,' ') + P:=Length(Tag)+1 + Delete(Line,1,P) + StripB(line,' ') + + Case Upper(Tag) Of + 'HELP': DoSetHelp + 'LIST': DoSetList + 'ENTERCHATME' : Plyr.EnterChatMe:=Line + 'ENTERCHATROOM' : Plyr.EnterChatRoom:=Line + 'ENTERROOMME' : Plyr.EnterRoomMe:=Line + 'ENTERROOMROOM' : Plyr.EnterRoomRoom:=Line + 'LEAVECHATME' : Plyr.LeaveChatMe:=Line + 'LEAVECHATROOM' : Plyr.LeaveChatRoom:=Line + 'LEAVEROOMME' : Plyr.LeaveRoomMe:=Line + 'LEAVEROOMROOM' : Plyr.LeaveRoomRoom:=Line + 'DEFAULTROOM' : Plyr.DefaultRoom:=Line + 'NICKCOLOR' : ChangeNick('C',Line,False) + 'LTBRACKET' : ChangeNick('L',Line,False) + 'RTBRACKET' : ChangeNick('R',Line,False) + 'USECLOCK' : ChangeClock(1,Line) + 'CLOCKFORMAT' : ChangeClock(2,Line) + '' : DoSetHelp + End + SavePlyr(Plyr.RecIdx) +End + +Procedure DLChatLog +Var X,Y,TS,DS,TempChat : String = '' +Var fptr : File +Begin + DS:=Replace(DateStr(DateTime,1),'/','') + TS:=Replace(TimeStr(DateTime,False),':','') + TempChat:=CfgTempPath+'mrc_chat_'+Replace(SiteTag,' ','_')+'_'+DS+'_'+TS+'.log' + Write('|16|11|CL') + If InputYN('Strip MCI color codes? ') Then Begin + fAssign(fptr,ChatLog,66) + fReset(Fptr) + While Not fEof(Fptr) Do Begin + fReadLn(Fptr,X) + Y:=StripMCI(X) + AppendText(TempChat,Y) + End + fClose(Fptr) + End Else + FileCopy(ChatLog,TempChat) + MenuCmd('F3',TempChat); + FileErase(TempChat) + RedrawScreen; +End + +Procedure Main +Var Done : Boolean = False +Var RestOfLine : String = '' +Var W1,W2,UIL : String = '' +Var IL : String = '' +Begin + Loop:=1 + UpdateScreen + Repeat + Delay(10) + IL:=InputLine + + // Support slash commands even if prefixed with a PIPE code + If Pos('/',StripMCI(IL)) = 1 Then Begin + W1:=Upper(WordGet(1,StripMCI(IL),' ')) + W2:=WordGet(2,IL,' ') + RestOfLine:=IL + Delete(RestOfLine,1,Length(W1)) + RestOfLine:=StripB(RestOfLine,' ') + + Case W1 Of + '/CHANGES' : ShowChanges // Display changes [sf] + '/?' : DoHelp + '/B' : DoBroadcast(IL) + '/BBSES' : SendToServer('CONNECTED') + '/CHANNEL' : SendToServer('CHANNEL') + '/CHATTERS' : SendToServer('CHATTERS') + '/CLS' : DoCls + '/DLCHATLOG' : DLChatLog + '/JOIN' : JoinRoom(W2,True) + '/LIST' : SendToServer('LIST') + '/ME' : DoMeAction(IL) + '/Q','/QUIT' : + Begin + LeaveChat + Done := True + End + '/ROOMS' : SendToServer('LIST') + '/SCROLL' : DoScrollBack + '/SET' : DoSet(RestOfLine) + '/TOPIC' : ChangeTopic(RestOfLine) + '/T','/MSG','/M', + '/TELL' : DoPrivateMsg(IL) + '/USERS' : SendToServer('USERS') + '/WHO' : DoWho + '/WHOON' : SendToServer('WHOON') + '/MOTD' : SendToServer('MOTD') + '/HELP' : SendToServer('HELP') + '/INFO' : SendToServer('INFO '+W2) + '/QUOTE' : SendToServer(RestOfLine) + '/VERSION' : + Begin + SendToServer('VERSION') + Add2Chat('|07- |13'+MRCVersion) + End + End + End Else Begin + If Length(IL) > 0 Then + Begin + IL:=Replace(IL, '~', ' ') + SendToRoom(MyNamePrompt+GetPipe(CIdx)+IL) + End + End + Until Done +End + +Begin + CleanOut + GetThisUser + + + // Check if we toggle the NodeMsgFlag + If ACS('OA') Then + Begin + NodeMsgFlag:=True + MenuCmd('GE', '18') + End + + Init + RedrawScreen + EnterChat + JoinRoom(Plyr.DefaultRoom,False) + LoadBanners + NextBanner +// ScrollBanner + Main + Write('|16|11|CL') + + // Reset the NodeMsgFlag if changed + If NodeMsgFlag Then + MenuCmd('GE', '18') + + CleanOut + Halt + +End + diff --git a/dbp/scripts/mrc_stat1.mps b/dbp/scripts/mrc_stat1.mps new file mode 100644 index 0000000..85daa04 --- /dev/null +++ b/dbp/scripts/mrc_stat1.mps @@ -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 + diff --git a/dbp/scripts/mrc_stat2.mps b/dbp/scripts/mrc_stat2.mps new file mode 100644 index 0000000..2a16181 --- /dev/null +++ b/dbp/scripts/mrc_stat2.mps @@ -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 + diff --git a/dbp/scripts/msgread.mpy b/dbp/scripts/msgread.mpy new file mode 100644 index 0000000..5e8d027 --- /dev/null +++ b/dbp/scripts/msgread.mpy @@ -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"); \ No newline at end of file diff --git a/dbp/scripts/onlyonce.mps b/dbp/scripts/onlyonce.mps new file mode 100644 index 0000000..1841a1b --- /dev/null +++ b/dbp/scripts/onlyonce.mps @@ -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. diff --git a/dbp/scripts/rumors.mps b/dbp/scripts/rumors.mps new file mode 100644 index 0000000..28831c9 --- /dev/null +++ b/dbp/scripts/rumors.mps @@ -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 +// 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") +} diff --git a/dbp/scripts/testbox.mps b/dbp/scripts/testbox.mps new file mode 100644 index 0000000..d9c8245 --- /dev/null +++ b/dbp/scripts/testbox.mps @@ -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. diff --git a/dbp/scripts/testinput.mps b/dbp/scripts/testinput.mps new file mode 100644 index 0000000..f1d7c8c --- /dev/null +++ b/dbp/scripts/testinput.mps @@ -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. diff --git a/dbp/scripts/testparams.mpy b/dbp/scripts/testparams.mpy new file mode 100644 index 0000000..a306bf6 --- /dev/null +++ b/dbp/scripts/testparams.mpy @@ -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") diff --git a/dbp/scripts/testpy3.mpy b/dbp/scripts/testpy3.mpy new file mode 100644 index 0000000..a3b16c8 --- /dev/null +++ b/dbp/scripts/testpy3.mpy @@ -0,0 +1,5 @@ +import mystic_bbs as bbs +import sqlite3 + +bbs.writeln("Hello from Python 3") +bbs.writeln("|PA") diff --git a/dbp/scripts/testpython.mpy b/dbp/scripts/testpython.mpy new file mode 100644 index 0000000..984f519 --- /dev/null +++ b/dbp/scripts/testpython.mpy @@ -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"); \ No newline at end of file diff --git a/dbp/scripts/tetris.ans b/dbp/scripts/tetris.ans new file mode 100644 index 0000000..c13422e --- /dev/null +++ b/dbp/scripts/tetris.ans @@ -0,0 +1,23 @@ +±±ŪŪŪŪŪŪŪ°ŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪ°²ßßßß²ŪŪŪŪŪŪŪŪ²ŪŪŪŪŪŪ²± +²°ßßßßßßßßßßß߲߲Ū²ßßßßßßßß²ßßßßßßßßßßßß²ŪŪ°ßßßßßßßßßŪ°ßÜܲ° Üß²ŪŪ²ßßßßßßßß²°Ū² +Ū ²°ÜŪ ± °±°ÜÜ ±° Ü°±²ŪŪ² Ż²°ÜŪ ± °±°ÜÜ ²ŻÜ°±²ŪŪŪ²Ü ±Ż±°°Ū²ß ²ß ÜÜ°ŪŪ°ŪŪ° ŪŪŪ +Ū±Žß² °²° ° °Ū °Ū²ܲÜÜ ±Žß² °²° ° °Ū ±°Ū²Ū²ß² ²² ±ß ÜÜܲ ± Ž±²±° °°± ŪŪŪ +Ū²ÜÜÜ ÜÜÜÜ °Üßß߯  Ūßßß± ±² ÜÜ ÜÜÜÜ °Üßß߯ ±²Ūß Ü²ß° ±²±²ŪŪ Ž²ßß²ÜܲÜÜ ܲŪŪ +ŪŪŪŪ²ŻŽŪ°² ²ŪŪŪ²Ü ßÜܲÜܲ° °ŻŽ²ŻŽŪ°² ²ŪŪŪ²Ü ²ŪŪŻß²²Üܱ ²Ż²°²ŪŻ±° ßßßß±°²Ū² ŪŪŪ +ŪŪŪ²Ū Ž²ŪŪ± ²ŪŪŪ² Ž²°± ± ±Ū Ū Ž²ŪŪ± ²ŪŪŪ² Ū²Ū² Ū ° Ü Ž±²Ūß°² ÜܲŪŪܲŪŪß ŪŪŪ +ŪŪŪŪŪ²° ß² ²Ū²ŪŪŪ² ßßßßßßßß Ü²Ū²° ß² ²Ū²ŪŪŪÜÜÜÜܲ± °°°° ² ÜÜÜܲŪÜÜÜÜÜÜÜÜÜÜܲŪŪ° +²ŪŪŪŪŪ°²ÜܲŪŪŪŪŪŪŪ°ŪŪŪ²°ŪŪŪŪŪŪŪŪŪ°ÜܲŪŪŪŪŪŪ²ŪŪŪ²Ū² ±²²° ßÜ°ŪŪŪŪŪ°ŪŪfiŪŪ°ŪŪŪŪŪ°± +°  °Ū ² ²±ß߱ܲ °± ° + ²ßßßßßßßßß߲߲ ßßß² ²ŻŽ°  ° + °°level± ± °ŻŽ²   move block + ° ŻŽ   drop block +  lines ° ŻŽ z x  rotate block + Ū scoreŪ ŻŽ²   + ²Ü² ŻŽ esc exit tetris  + Ū²ŪŪŪŪŪ° Ū ŪŪŪŪŪ²ÜŪŪ ŻŽ°   + °ŻŽ   + Ū ŻŽ + ŻŽ +° ±ŻŽ² +± ° °ŻŽŪ +ßßßßßßßßßßßßßßßßßßßßßßßßßßßß²ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß diff --git a/dbp/scripts/tetris.ms b/dbp/scripts/tetris.ms new file mode 100644 index 0000000..2268686 --- /dev/null +++ b/dbp/scripts/tetris.ms @@ -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. \ No newline at end of file diff --git a/dbp/scripts/to-prmpt.mps b/dbp/scripts/to-prmpt.mps new file mode 100644 index 0000000..2d96c6c --- /dev/null +++ b/dbp/scripts/to-prmpt.mps @@ -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. diff --git a/dbp/scripts/usage.mps b/dbp/scripts/usage.mps new file mode 100644 index 0000000..34fab82 --- /dev/null +++ b/dbp/scripts/usage.mps @@ -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 diff --git a/dbp/text/5mooth-mist25.ans b/dbp/text/5mooth-mist25.ans new file mode 100644 index 0000000..56723f8 --- /dev/null +++ b/dbp/text/5mooth-mist25.ans @@ -0,0 +1,58 @@ + +ž +Üß ÜÜŪŪŻ ß± +ÜÜÜÜÜßßßŪŪßß±±±± +Üßß ÜÜÜÜ ßßÜ°° Ü ßßÜÜÜŪŪŪŪÜܲ² ±± +Üß Üßß ßßÜ ß Üß ßßßÜÜßßßß±±ÜÜßß° ° ° +Üß Ū  ÜŪŪŪŪÜÜ ² ²ŪŪŪÜßßŪŪÜßß Ü ßßßßßÜÜÜ °° ÜÜÜÜßßß +ÜÜÜÜÜŪ Ū ŪŪŪŪŪŪŪŪŪÜ Üßß°ßß ž ß Üßß°° ŪŪŪ ÜÜßßß± ± ± +Üßß  ß²ßÜßÜßß ÜÜŪŪŪŪŪßßß Üܲ²° °°ÜÜÜßß ÜÜ ±ŪŪŪ  °°² ² ² + Ū  ÜßßßßÜ ± ±ÜÜÜÜÜ ßßß ßßßŪß ÜŪŪÜÜßß ÜÜßßß ÜÜÜß  ŪŪŪŻ ±± +° Ū Ū ÜŪŪÜ ܲŪŪŪŪŪŪŪŪŪŪŪÜÜÜÜÜÜÜÜ° ßŪŪŪÜÜÜ ÜÜßßßß ÜÜÜßßßŪŪŪ° ²²²Ü°°° ° ÜŪ Ū Ū +°  Ū ßŪŪß° ÜŪ ÜÜßßßßßßßßßßßŪŪŪŪŪŪŪŪÜÜŪŪŪŪÜÜÜÜÜÜÜÜ ßßßÜŪŪŪŪ Ū²žß±±ÜßßÜŪ Ū Ū +žÜ  ŪŪŪŪܱ ßŪŪÜ ßßß Üžßßß° Ü ßßßßßßßßßßŪŪŪŪŪŪŪŪŪŪÜÜÜÜÜÜŪŪŪŪŪß ÜŪßÜÜßŪÜ Ū Ū ŪŪŪ Ū Ū +Üž ŪŪŪŪŪŪß Ūß ÜÜßßßÜ ÜŪŪß ßßßßßÜ ŪŪŪŪ ÜÜßß ° žÜÜÜ ßßßßŪŪŪŪŪ²ßß Üßß ÜßßßßÜ ßßÜß  ßŪŪ Ū Ū +²² ßßß Ū žŪÜ Ūß ÜÜÜŪŪŪÜÜ ŪŪŪŪ°ÜŪŪŪŪÜÜ Ü ß ßŪÜžÜß žŪÜ ßÜŪ ÜÜÜŪŪŪÜÜ Ū Ū Ū +ÜÜÜŪß ÜÜßŪŪÜÜ Üž ÜÜß ÜŪŪŪŪŻŪ² žß ßŪŪŪŪŻŽŪŪŪŻ °°ßŪŪŪŪŪÜŪŻÜßß ÜÜŪÜß ÜŪŪŪŪŻ ŪŪŪžß ßŪŪŪŪŻ° ° ° +ÜÜŪŪŪŪßßÜŪŪßŪŪÜŪŪß ÜŪŪÜÜÜÜŪŪ ŪŪŪŪŪŪ ŪÜß ÜÜŪŪŪŪŪ ŪŪŪŪÜÜŪŪŪŪŪßŪŪŪŪŪŪŪÜßÜÜžŪŪßßßŪ ŪŪŪŪŪŪ ŪÜÜŪŪŪŪŪ Ū Ū Ū + ÜŪŪŪßßß ŪŪß ßßß±ÜÜÜŻßÜŪŪßŪŪ žŪŪŪß Üß ÜÜŻŪŪŪŪßß ŽŪŻŪŻ Üܲ ÜÜŻŪŪŪŪßß Ü ßßßßŪŪŪŪŪŪŪŪŪŪŻŪŪ žŪŪŪß Üß ÜÜŻŪŻŪŪßß Ū Ū Ū +ŪŪŪŪÜÜ ßßßß ²ÜŻÜÜ ßÜÜÜÜŻÜŻÜŻÜŻß ÜŻÜßÜÜÜÜÜß ÜÜÜŻÜŻßßß Ü ŪÜŻÜ ßßß ßÜÜÜŻÜŻßßß ÜÜŻž ßßßßßßßßß ßÜŻÜŻßÜÜß ÜÜß ÜÜÜŻÜŻßßß ÜßßßŪßŪßŪ +ŪŪŪŪŪŪ ŽŪŪŪŪŪŪŪŪŪŪŪŪŪŪŻŪŪŪŻ ŪŪŪ ²ŪŪŻžŪŪŪŪß ÜÜßß  ߯ŪŪßÜÜßßßßŪß ÜÜÜŪŪßŪŪ ßÜÜÜÜÜÜÜÜŪŪŪŪŪŪß ŪŪßß² žŪŪŪŪß ÜÜŪŪ Ū +ßŪŪŪŪßßßß ŪŪŪŻßŪŪŪŻŪŪŪ ßŪŪŪŻŪŪßß ÜÜŪŪß ÜŻŽŪÜ  ± ŻÜÜÜÜ ÜßŪŪŪŪŻŪŪŪŻßŪÜÜÜßßßßßߎŪŪŪŪŻ ŪŪßß ÜÜŪŪßŪŪŪŻ +ßßßßß ° ± ² Ū ŪŪŪŪ ŪŪŻŪŪŪ² ŪŪŪßŪŪŪŪŪßß ŽŪŪŪŻßß Ż ŽŪÜÜŽÜÜ Ü ŪŪŪŻŽŪŪŪŻ ßßßŪŪŪÜÜÜÜÜ ŪŪŪŪŪ ŪŪŪŪŪŪßß ŽŪŪŪŻ Ž +ßßßßß ° ± ² Ū ÜÜÜß ŪŪŪŪ žß ŪŪŪŻ ŪŪŪŻ ßß ÜÜ°  ÜÜŪŪŪ ŪŪŪŻŪŪß ±° ŪŪŪŪŪ ŪŪŪŪ ßßŪŪŪŪŪŻŪŪŪŪŻ ßßß °° ŪŪŪŪ Ž +ßßßßß °_±_²_Ū ÜŪŪŪß ŽŪŻŪ °° ŪŪŪŻ ŪŪŪŻ ±ÜÜ ßßßÜ  Ž ŪŪŪ ß ÜŻŪŪŪŪ ŽŪŪŪŻ °°°°° ÜŪŪŪŪŪŪŪ ±ÜÜ ŪŪŪŪ² Ž +ßßßßßßßßßßßßŪŪŽŪŪŪÜÜÜ Ž߯ŪŻ ŽŪŪŪŻŽŪŪŪßßŪŪÜÜÜÜÜŻ Ū²ŪŪŻßŪßߎŪßßßŪŪŪŪÜßß ŽŪŪ²Ū ²²±±Ż ßßŪŪŪŪŪ Ū²ŪŪßßßßŪŪßÜÜßŪŪßßßŪÜÜß߯ŪŻ +ßßßŪŪŪŪ²²ÜŪŪ߯ŪžÜŪŪŪŪ ßß ÜŪŪ²²ßßß²²ŻÜŪ±ŪŻŻßŪßßŪŪŪ²ßÜŪ²²ŪÜß Ū²ŪŪŪŻßßŪŪÜŪÜܲ²°°ŪŪ±±²ŪŪŪŪŻ +ßßßßß±±±°ŻŪŻßŪŪßÜÜܱ²²ŪŪßß ÜÜ ßŻ°ŪŪ°Ż² ßÜÜÜÜܲ ŪŪ±ŪŪŪŪŪŪÜŪŪ ÜŪ°ßß߯ÜÜŪÜÜŪŪßßßß ßß±ŪŪ²Ū² ßÜ + ÜÜÜß ÜÜŪßßßŪ²ÜÜÜ ßßŪ°Ż°Ū ÜŪ²²ŪŪ²ß ÜŪŪŪŪ±ŽŻ ß°°ŻŪ ŽŪŻ ÜŪŪßß ßŪŪ Ū°°°ŻßßßŪŪŪŻ ÜŪŪ°ŪŪßÜ°°±±Ū²ßßŪ°ŪÜÜÜŪŻ + ßßß ÜÜžßßßŪŪŪÜÜŽŪŻŪ±ÜÜŪŪŪÜÜ Ü Ū ßŪŪŪŪ°ŽŻŪÜ ŪŻŪŪŪß ÜŪŪßŪŪŪ°°Ū ßßßŪŪßßßßŪŪŪ°°ŪŪßß ÜÜÜßßŪŪÜ° ŪŪ²²²Ü + °° ŪŪŪŪŪÜÜ ÜÜÜÜŪÜŪŪÜŪÜÜŪßßßÜ ÜÜÜ ßÜ ßÜÜ ßß Ż Ü ²ŪŻßß ŽŪŪÜ ÜÜÜÜ°ŪßßŪßŪÜÜÜžß ÜÜŪŪßß ÜÜßßÜŪßŪ°°Ü °° +ßŪ²²Ū°°°Ū±²²²ŪŪŪŪßŪŪŻŪÜÜ ß ŪŪŪÜ ßÜ  ßßÜÜ°Żß  ßß ŪŪŪÜÜܲ²²±±°°ßßÜÜŪÜÜŪŪŪ ŪŪŪ ÜßßßßÜŪÜß Ū +±± ßßßŪŪŪŪŪ±±±ŪŪÜÜÜÜ ÜÜŪŪŪŪÜ ßßŪÜ ßßÜÜ  Ū Üß ß °° ŪŪŪŪßßŪŪ ßßßß Üßß °ßŪŪŪŪŪŪŽŪŪŪŪ ßÜÜÜÜßß ÜÜŪ +ßŪÜ ßßÜÜÜÜßßßß ÜÜÜÜÜ ßßßŪŪŪßßÜ ßß±ŪŽŪŪÜÜÜßßß ÜŪŪŪŪž ÜŪÜßßßßßß ÜŪŪŪŪÜÜÜÜÜÜžÜÜÜÜßß ÜŪŪŪŪß +ßßÜÜÜÜÜÜÜŪŪßß ßßŪÜ ßÜŪŪŪŪßßß Üß ßßÜÜ ßßßŪÜ  ÜžßÜÜŪŪŪŪŪÜ   ÜÜŪßßßß +ßßßßßŪŪ ÜÜܲ Üß ŪŪŪ°Ū ° ÜÜÜÜÜÜÜŪŪ ²Ū ßßÜ ŪŪßßÜÜ ÜÜŪŪŪŪÜ ßß +ŽŪŻ ÜÜܱŪŪßß ŪŪŪŪ°Ż° ßß ÜÜÜŪŪŪÜŽŪŪ Üßß ŪŪ ßßß ÜŪŪŪ± 5m<LEGACY> +²² žÜßßßßÜ Ż ßŪŪ ° ßŪ±ŪŪ± ÜÜ ßß ŽŪ²°ŪÜÜß ßŪÜ +±± ÜÜ °°Ū Üß²Ü ² Ż Ū²² ÜÜÜÜßŪßßŪßÜŪŪß°° ߎ²Ūß°± +° ßž   Ū ßŪŪß Ū Ż ŪÜß±± ßßßŪŪŪÜßŪŪŪŪß ÜÜ ŪŪŻÜÜŪßßßßŪÜ ÜŪßŪ ° ÜßßßÜ ÜÜ +ÜÜÜ°ßÜÜÜÜŪÜÜÜŪÜßß°° ß ßŪÜÜÜÜŪ ÜŪß ÜŪß ŪŪŪÜÜÜŪŪŪ ŪßßŪŪŪŪ ÜÜÜÜŪ  Ū +Üß ÜÜßÜÜÜ ÜŪÜܱÜÜÜ ÜÜßŪŪŪßÜŪŪŪÜÜŪÜÜÜŪŪŪŪÜŽŪŪŪŪÜŪŪß ßŪŪŪßßÜÜŪŪÜÜŪŪŪŪŪÜÜÜÜßßŪŪÜÜÜÜŪßŪ +ÜÜŪŪÜŪŪ²°ŪÜÜÜŪŪŪŪÜÜŪŪßßß±°ß  ± Ū  ±ŪŪ Ü ÜŪŪß ÜÜŪßßß°  ßß    ŪßßßŪ Ü ŪŪ²² ßßßßß + ßßßŪÜÜßßßßÜÜßßŪŪÜÜßß ÜßÜÜ ÜÜÜÜŪŪÜÜ ÜÜÜÜ ßÜÜ Ż ²²  ÜÜŪŪß ŻŪŪŪŪŪŪŪ::Ż ::  ::  ßßß:: °° ±±°° ßß +ßßß ßÜÜÜßß ÜŪÜÜŪŪ²±° ÜßÜÜ  ßÜ ßßÜÜÜ  ±±  ŪŪŪŪŪßßŪ  ŪŪ ß°° °°ßßß +ßŪßßßßŪŪŪßß  ŪßÜ°°ŪŪ±±Üßßßß²±±°°Ü °° ŪßßŪ ßŪŪß Ū  Ü Ü ÜÜÜŪŪÜžÜ ŪÜÜŪ ŪßÜÜŪ°°ŪÜßß + ŪßßÜßß  ßÜ ßŪŪŪŪß  ßßß °ßÜÜÜÜß °°ÜÜŪŪŪßßß߯Ż ßŪÜ  ßÜ ßßßßßŪ +ßß ßßßß ÜŪŪ߯ß Ż: ÜÜßß ßßÜÜÜß + ßßŪŻŻśßßß + Ž Üß ŻŻ + Ž ßÜŪŪŻ +ßßß²ÜÜ +ÜŪßß +ŽŽ + ŽŪŻ +Žß + Ū +ß +COMNTThe Whole Shabang Logo for Mistigris 25th Anniversary by Smooth.SAUCE00Mistigris Shabang Smooth Legacy Krew 20191124.4‚9IBM VGA \ No newline at end of file diff --git a/dbp/text/amsghlp1.asc b/dbp/text/amsghlp1.asc new file mode 100644 index 0000000..0b34193 --- /dev/null +++ b/dbp/text/amsghlp1.asc @@ -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 diff --git a/dbp/text/amsghlp2.asc b/dbp/text/amsghlp2.asc new file mode 100644 index 0000000..0b0c871 --- /dev/null +++ b/dbp/text/amsghlp2.asc @@ -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 diff --git a/dbp/text/ansichat.ans b/dbp/text/ansichat.ans new file mode 100644 index 0000000..18603df --- /dev/null +++ b/dbp/text/ansichat.ans @@ -0,0 +1 @@ +|CLŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ³Ż śśś śśś Ž³ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´³Ūßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßܳ³Ū Ū³³Ū Ū³³Ū Ū³³Ū Ū³³Ū Ū³³Ū Ū³³ßÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜŪ³ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´³Ż śśś śśś Ž³ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´³Ūßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßܳ³Ū Ū³³Ū Ū³³Ū Ū³³Ū Ū³³Ū Ū³³Ū Ū³³ßÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜŪ³ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ|!1|!2|!3|!4|!5|!6|!7|!8|&1|&2|!0|!9mins left diff --git a/dbp/text/ansieditor.ans b/dbp/text/ansieditor.ans new file mode 100644 index 0000000..8b3bb71 --- /dev/null +++ b/dbp/text/ansieditor.ans @@ -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 ĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ¼ diff --git a/dbp/text/ansiflst.ans b/dbp/text/ansiflst.ans new file mode 100644 index 0000000..54c6d2b --- /dev/null +++ b/dbp/text/ansiflst.ans @@ -0,0 +1 @@ +|CLŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ³ ± File Listing ³ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|$L40|FB|!1|!2|!3|!4 \ No newline at end of file diff --git a/dbp/text/ansihelp.ans b/dbp/text/ansihelp.ans new file mode 100644 index 0000000..723bf9b --- /dev/null +++ b/dbp/text/ansihelp.ans @@ -0,0 +1 @@ +|CL Mystic BBS Online Help ESC/Quit ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ|[X02|[Y03|!1|[X79|[Y22|!2 \ No newline at end of file diff --git a/dbp/text/ansimlst.ans b/dbp/text/ansimlst.ans new file mode 100644 index 0000000..c37efab --- /dev/null +++ b/dbp/text/ansimlst.ans @@ -0,0 +1 @@ +|CLŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ³ ± Message Index Listing |$L40|MB ³ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ##SubjectFromToÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ(Arrows)Move(ESC)Quit(ENTER)Read(G)GotoNextBase(?)Help|!1|!2|!3 \ No newline at end of file diff --git a/dbp/text/ansimrd.ans b/dbp/text/ansimrd.ans new file mode 100644 index 0000000..4cd5892 --- /dev/null +++ b/dbp/text/ansimrd.ans @@ -0,0 +1 @@ +|CLFrom:|$R40|&1Msg#:|&5of|&6To:|$R40|&2MsgDate:|&4 |&0Subj:|$R40|&3Referto:|&7Stat:|$R40|&9SeeAlso:|&8ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄReading:?forHelp|!1|!2|MB \ No newline at end of file diff --git a/dbp/text/ansitele.ans b/dbp/text/ansitele.ans new file mode 100644 index 0000000..6ed424d --- /dev/null +++ b/dbp/text/ansitele.ans @@ -0,0 +1 @@ +|CLŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ³ ± Multinode Teleconference ³ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁChannel->/?forHelpTopic->ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|!4|!5|!1|!2|!3 \ No newline at end of file diff --git a/dbp/text/ansitext.ans b/dbp/text/ansitext.ans new file mode 100644 index 0000000..b4f45ba --- /dev/null +++ b/dbp/text/ansitext.ans @@ -0,0 +1 @@ +|CLŚÄÄÄÄ[śśśMysticBBSTextEditorśśś]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[śśśCtrl-ZSaveśśśś[]śśś]ÄÄÄÄŁĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ|!3|!1|!2 diff --git a/dbp/text/ansiview.ans b/dbp/text/ansiview.ans new file mode 100644 index 0000000..f840a7c --- /dev/null +++ b/dbp/text/ansiview.ans @@ -0,0 +1,24 @@ + ° ANSI Viewer  +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³ Title [] Group [] Cols [ ] ³ +³ Author []Lines [ ] ³ +ĮÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĮ + + + + + + + + + + + + + + + + + + +ÄÄÄ[]ÄÄÄÄÄ ?/Help ÄÄÄÄÄ[] % ÄÄÄ \ No newline at end of file diff --git a/dbp/text/ansiview.ini b/dbp/text/ansiview.ini new file mode 100644 index 0000000..68432b9 --- /dev/null +++ b/dbp/text/ansiview.ini @@ -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 diff --git a/dbp/text/ansiview_help.ans b/dbp/text/ansiview_help.ans new file mode 100644 index 0000000..eee7e11 --- /dev/null +++ b/dbp/text/ansiview_help.ans @@ -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 \ No newline at end of file diff --git a/dbp/text/archive_view.ans b/dbp/text/archive_view.ans new file mode 100644 index 0000000..8698573 --- /dev/null +++ b/dbp/text/archive_view.ans @@ -0,0 +1,24 @@ + ° Viewing + + Files............:Compressed Size....: + Directories......:Decompressed Size..: + + ° Path + +Ś File Name ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Size ÄÄÄ Date ÄÄÄ Time Äæ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ \ No newline at end of file diff --git a/dbp/text/archive_view.ini b/dbp/text/archive_view.ini new file mode 100644 index 0000000..3e29a6e --- /dev/null +++ b/dbp/text/archive_view.ini @@ -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 |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 |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# diff --git a/dbp/text/bankhdr.asc b/dbp/text/bankhdr.asc new file mode 100644 index 0000000..09f450f --- /dev/null +++ b/dbp/text/bankhdr.asc @@ -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 + diff --git a/dbp/text/bullet1.asc b/dbp/text/bullet1.asc new file mode 100644 index 0000000..8eab2bd --- /dev/null +++ b/dbp/text/bullet1.asc @@ -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. diff --git a/dbp/text/bullet2.asc b/dbp/text/bullet2.asc new file mode 100644 index 0000000..22d6b07 --- /dev/null +++ b/dbp/text/bullet2.asc @@ -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. diff --git a/dbp/text/bulletin.asc b/dbp/text/bulletin.asc new file mode 100644 index 0000000..dcdd12e --- /dev/null +++ b/dbp/text/bulletin.asc @@ -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 diff --git a/dbp/text/closed.asc b/dbp/text/closed.asc new file mode 100644 index 0000000..e16dfbb --- /dev/null +++ b/dbp/text/closed.asc @@ -0,0 +1,2 @@ + +Sorry, this system is currently closed. diff --git a/dbp/text/doorhdr.asc b/dbp/text/doorhdr.asc new file mode 100644 index 0000000..31525de --- /dev/null +++ b/dbp/text/doorhdr.asc @@ -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 + diff --git a/dbp/text/emailhlp.asc b/dbp/text/emailhlp.asc new file mode 100644 index 0000000..e505f92 --- /dev/null +++ b/dbp/text/emailhlp.asc @@ -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 diff --git a/dbp/text/feedback.asc b/dbp/text/feedback.asc new file mode 100644 index 0000000..82fe295 --- /dev/null +++ b/dbp/text/feedback.asc @@ -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 diff --git a/dbp/text/file_index.ans b/dbp/text/file_index.ans new file mode 100644 index 0000000..eeb8d6d --- /dev/null +++ b/dbp/text/file_index.ans @@ -0,0 +1,23 @@ + ° File Base Listings +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³  N  Area Description Files New Last Upload ³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³Tagged:Search Text³ +³Showing:>³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ \ No newline at end of file diff --git a/dbp/text/file_index.ini b/dbp/text/file_index.ini new file mode 100644 index 0000000..321fbb5 --- /dev/null +++ b/dbp/text/file_index.ini @@ -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 diff --git a/dbp/text/file_index_help.ans b/dbp/text/file_index_help.ans new file mode 100644 index 0000000..3c3fd22 --- /dev/null +++ b/dbp/text/file_index_help.ans @@ -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 \ No newline at end of file diff --git a/dbp/text/filehdr.asc b/dbp/text/filehdr.asc new file mode 100644 index 0000000..cb33cf2 --- /dev/null +++ b/dbp/text/filehdr.asc @@ -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 + diff --git a/dbp/text/flisthlp.ans b/dbp/text/flisthlp.ans new file mode 100644 index 0000000..70faaeb --- /dev/null +++ b/dbp/text/flisthlp.ans @@ -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 diff --git a/dbp/text/fsearch.asc b/dbp/text/fsearch.asc new file mode 100644 index 0000000..5e33e17 --- /dev/null +++ b/dbp/text/fsearch.asc @@ -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" diff --git a/dbp/text/gallery.ans b/dbp/text/gallery.ans new file mode 100644 index 0000000..f942b72 --- /dev/null +++ b/dbp/text/gallery.ans @@ -0,0 +1,23 @@ +[?7h ° ANSI Gallery ESCAPE/Quit CTRL+Z/Help  + + Path: + +Ś FileName ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Group ÄÄÄÄÄÄ Artist ÄÄÄÄÄÄæ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +³ +ĄÄÄŁ \ No newline at end of file diff --git a/dbp/text/gallery.ini b/dbp/text/gallery.ini new file mode 100644 index 0000000..b9dc62d --- /dev/null +++ b/dbp/text/gallery.ini @@ -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 diff --git a/dbp/text/helpdemo.hlp b/dbp/text/helpdemo.hlp new file mode 100644 index 0000000..0d41233 --- /dev/null +++ b/dbp/text/helpdemo.hlp @@ -0,0 +1,86 @@ + 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 Execute MPL |08³ |07Help System Commands + |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ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + ABOUT + +This is the about section. There is no previous link so press backspace to +go back to the previous topic! + + + + 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 + +PREVIOUS (or press backspace) + + \ No newline at end of file diff --git a/dbp/text/logoff.ans b/dbp/text/logoff.ans new file mode 100644 index 0000000..e622d81 --- /dev/null +++ b/dbp/text/logoff.ans @@ -0,0 +1,46 @@ +|PO|16|CL +ÜÜÜŪŪÜÜÜÜŪ ÜŪŪŪÜ ÜÜÜ ŽŪŪ +ÜÜÜ ŽŪŪ ÜÜÜ ŪŪŪ ŽŪŪŪŪŪŪŪŪŪ ŪŪŪŪŻ ŽŪŪŪŪŪŻŪŪŪ ŪŪŻ +ŽŪŪŪ ŪŪŻ ŽŪŪŪŪ ŽŪŪ ŽŪŪŪŽŪŪŻ ßŪŪ ŽŪŻŪŪŪ ŪŪß ßŪŪŽŪŪŽŪŪ +ŽŪŪŪŽŪŪ ßŪŪŻŪŪŻŽŪŪŻß ŪŪŪ ßßßßßߎŪŪÜ~ÜŪŪ ŪŪ ŽŪŪŻŪŪ ßß ŪŪŪŪŪŪ +ŪŪŪŪŪŪ ŽŪŪ ŽŪŪ ŪŪŻ ŪŪŪ ÜÜ ŽŪŪßŪŪŪ ŽŪŪŪŪŪŪŪŽŪŻ ÜÜŽŪŪŪŪŪŻ +ŪŪŪŪŪŪŻŪŪŪŪŪŪŪŻŪŪŻ ÜÜŽŪŪŪŪŪ ŪŪß ŪŪŻŪŪŪ ŪŪŪŻŪŪÜŪŪŪŻŪŪŻŪŪŪ +ŽŪŪŻŪŪŪŽŪŻ ŪŪŪŽŪŪŪŪŪŽŪŪŪŪŪ ŪŪŪÜŪŪŪŽŪŪŻ ŽŪŪŪŽŪŪŪŪߎŪŪŻŽŪŪŻ +ŽŪŪŻŽŪŪŻŪ ŽŪŪŻŪŪŪßߎŪßßßßßŪŪ Ūßß ßß ßßß ŽŪŪŻ +ŽŪŪŻ ÜÜߎ +ÜÜÜÜßßßßÜ ÜßßßßÜŻ +ŪŻŻ.ŽßÜŪŪŪŪÜßßÜŪŪŪŪÜßÜŻ +ŽŪŽ...ŻŻŪŪŪŪŪŪŪŻŪŪŪŪŪŪŪŪŽŪÜŻ +ŽŪŽ...ŻŽŪŪŪŪŪŪŪŽŪŪŪŪŪŪŪŪŻßßŪÜÜŻ +ŪŻÄ ŽŪŪŪŪŪŪŪŻŪŪŪŪŪŪŪŪŪŪŽŪÜ ŪŪŪÜŻ +ŽŪŪßŪŪŪ ŪŪŪŻŪŪŪ ŪŪŪŪŪŪŽŻŪŻŪŪŪŪŻÄŻ +ÜÜßß ÜŪÜŪŪŪŪŪŪŪŻŪŪŪŪŪŪŪŪŪŪŽŪŽŻŪŪŪŪ \Ż +ŪßÜŪŻŪŪŪŪŪÜÜÜÜŽŪŪŪŪŪŪŪŽŪŪŪŪŪŪŪŪŻŪŪŽŻŪŪŪŻŻ +ŽŪŪŪߎŪŪŪŽŪ ÜÜŪŪŪŪŪŪŪŪŪŻŻŪŪŪŪŪŪŪŻŪŪŪŪŪŪŪŪŽŪŻŽŻŪÜÜÜŽ +ßßÜŪŻßßÜŪŪŪŪŪŪŪŪŪŪŪŪŪŪŽŪÜßŪŪŪŪßÜÜßŪŪŪŪßÜŪŪ ŪŻŪŪŪŪŪŽ +ŽŪŪßÜ ÜŻßßŪŪŪŪŪŪŪŪŪŪŪŪŽŪŪŪÜÜÜÜßŪßŪÜÜÜÜŪŪßŪŽŪŻŪŪŪŪŪŻ Ž +ßÜŪŪŻŪÜŪßÜßßŪŪŪŪßß ßß ßŪŪŪŪŪßßßŪŪŪŪŪŪß ŽÜŪŪŻŪŪŪŪŪŻ Ž +ŽŪŪßÜŪŪ'..ŻŪŪÜŻÜÜŪ ŪŪŪ ŪŪŪŪŪŽ +ßÜŪŻŪŪ³..ŽŪŪŪŻŪŪŪŻŽŪŪ³ŪŪŪŪŪŻ Ž +ŪŪ ŪÜÄ ŻŽŪŪŻŪŪŪŻŽŻŪŽŪŪŪŪŪ Ż +ŽŪŻŽ ßßßÜÜ ßßß ßßŪŽŻŪŪŪŪŪŪ Ż +ß Ż ŻÜŪŪŪÜÜÜ Ü ßŻŪŪŪŪŪŪŻ Ż +Ż ŽŽŪŪŪŪŪŪŪŪŪŪŪÜÜÜ Ü ŪÜŽ ŽŽŪŪŪŪŪ Ż +Ż ŻßŪŪŪŪßßßŪŪŪŪŪŪŪŪŪÜ ŻŪ ŻŻŪŪŪŪŻ Ż +Ž ŽÜŪŪŪÜÜßßŪŪŪŪŪß  ŪŪŽŪŻŪŽŪŪŪŪ Ż +Ž /\ŽŪŪŪŪŪŪŪŪÜÜÜÜÜŪŪŽ ŪŻŪ ŽŽŪŪŪŪŽ Ž +ŽŪßŪŪŪŪŪŪŪŪŪŪŪŪŪŪŻ ŻŪ ŽŪŪŪŻŪŻ Ž +ŽÜßßßßÜßŪŪŪŪŪŪŪŪŪŻ ŪŻŪ ŪŪŪŽŪŪ Ž +ÜÜ ÜŪŪÜ ÜŪŪŪŪŪŪŪŪÜßßŪÜŪßÜŪŽ ŪŽŪ ŻŽŪŪŻŪŪŪŻŽ +ÜÜÜŽŪŪŪŽŪßŪŻŪŽŪŪŽŪŪŪŪŪŪŪŪŪŪŪÜÜÜŪŪŪŽ ŪŽŪ ŻŪŪŪŻŪŪŪ Ž +ŪŪŪŪŽŻŽŪŻŻ ŪŻŪŻŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŻ ŪŽ ŽŪŪŪÜ߯ßß +ŽŪŪ ÄŪ ŪŻŻŽŪŻŪŪŪŪŻßßß ŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŽŪŪŪŻŪ ŽŪŪŪŪŪÜÜ +ŽŪŪŪŪŽŻŽŪŻŪŪŪŽŻŪŪŪŻ ŽŪŪŪžŪŪŪŪŪŪŪŪŪŪŪŪŽŪŪŽŻŪ ŽŪŪŪŪŪŪŪŪŪŪŻ +ßßŪŪŻŪŪŪ ßßÜŪŻŽŪßßŪŪŪŪŪŪŪŪŪŪŪŪŪŪŻ ŪŪŻŻŪ ŻÜßŪŪŪŻŪ ßßß +ŪŪŪŪ ßß ßßßßŪŪŪŪŪŪŪŪß߯ŪŪŪŪŽ ŽŪŻŪŻŪŻß +ßßß ÜÜÜÜÜÜÜÜÜÜŪŪŪŽ ŪŪÜŻŻ ßŪŪŻß +ŽŪŪÜŚßŪŪÜßŪŪŪÜŪŪŪŪŪŪŪŪŪßÜŪŪŪÜß ß ßÜŪÜ DH ÜŪÜ +ßŪßŪÜŪÜÜßß ßŪŪŪŪŪŪŪŪŪŪŻŪßÜÜÜÜßÜßÜŪŪŪŪŪŪŪÜÜÜÜŪŪŪŪ +ÜßÜŪßÜŪŪŽŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŽŻÜÜÜÜÜÜ߯ŪŪÜßŪŪÜßŪŪÜÜßŪß +ŽŪŽŪŪŽŪŪŪŻŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŽŪŪŪŪŪŪŪŪŻŪŪŪŪŻŪŪŪŻŪŪŪŻ +ß ßß ßŪŪß ßŪŪŪŪŪß ßŪŪŪß ßŪŪŪŪŪŪß ßŪŪŪ ßŪŪ ßŪŪ diff --git a/dbp/text/mainhdr.asc b/dbp/text/mainhdr.asc new file mode 100644 index 0000000..5d78e37 --- /dev/null +++ b/dbp/text/mainhdr.asc @@ -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 diff --git a/dbp/text/mrchelp.ans b/dbp/text/mrchelp.ans new file mode 100644 index 0000000..1c87d4c --- /dev/null +++ b/dbp/text/mrchelp.ans @@ -0,0 +1,23 @@ +[?7h|PO + MULTI RELAY CHAT COMMANDS  +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³Ū/BŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪBroadcastŪmessageŪtoŪallŪchannelsŪŪŪŪ³ +³Ū/CLSŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪClearsŪwindowŪandŪscrollbackŪtextŪŪŪŪ³ +³Ū/MSGŪorŪ/MŪŪŪŪŪŪSendsŪaŪprivateŪmessageŪŪŪŪŪŪŪŪŪŪŪŪŪŪ³ +³Ū/TELLŪorŪ/TŪŪŪŪŪSendsŪaŪprivateŪmessageŪŪŪŪŪŪŪŪŪŪŪŪŪŪ³ +³Ū/TOPICŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪSetŪtheŪTOPICŪofŪtheŪcurrentŪchannelŪ³ +³Ū/WHOŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪListŪallŪusersŪonŪcurrentŪBBSŪsystemŪ³ +³Ū/MEŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪPerformŪanŪactionŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪ³ +³Ū/JOINŪŪŪŪŪŪŪŪŪŪŪŪŪŪ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 diff --git a/dbp/text/mrcmain.ans b/dbp/text/mrcmain.ans new file mode 100644 index 0000000..d522bb3 --- /dev/null +++ b/dbp/text/mrcmain.ans @@ -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 diff --git a/dbp/text/mrcscrl.ans b/dbp/text/mrcscrl.ans new file mode 100644 index 0000000..d5febea --- /dev/null +++ b/dbp/text/mrcscrl.ans @@ -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 diff --git a/dbp/text/mrcstat.ans b/dbp/text/mrcstat.ans new file mode 100644 index 0000000..f1e5962 --- /dev/null +++ b/dbp/text/mrcstat.ans @@ -0,0 +1,6 @@ +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³ MRC Chat Status ³ +³ ³ +³ BBS ³ Rms ³ Usr ³ Act ³  +³ ³ ³ ³ ³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ diff --git a/dbp/text/msg_editor.ans b/dbp/text/msg_editor.ans new file mode 100644 index 0000000..bafb5c8 --- /dev/null +++ b/dbp/text/msg_editor.ans @@ -0,0 +1,23 @@ + ° Full Screen Message Editor  Press Escape for Menu +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³ To[] Insert Mode [] ³ +³ Subject [] Spell Check [] ³ +ĮÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĮ + + + + + + + + + + + + + + + + + +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ \ No newline at end of file diff --git a/dbp/text/msg_editor.c132x36.ans b/dbp/text/msg_editor.c132x36.ans new file mode 100644 index 0000000..a68666a --- /dev/null +++ b/dbp/text/msg_editor.c132x36.ans @@ -0,0 +1,35 @@ + ° Full Screen Message Editor  Press Escape for Menu  +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³ To [ ] Insert Mode [ ] ³ +³ Subject [ ] Spell Check [ ] ³ +ĮÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĮ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ \ No newline at end of file diff --git a/dbp/text/msg_editor.c132x36.ini b/dbp/text/msg_editor.c132x36.ini new file mode 100644 index 0000000..97f1c48 --- /dev/null +++ b/dbp/text/msg_editor.c132x36.ini @@ -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 = diff --git a/dbp/text/msg_editor.ini b/dbp/text/msg_editor.ini new file mode 100644 index 0000000..e24e21c --- /dev/null +++ b/dbp/text/msg_editor.ini @@ -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 = + \ No newline at end of file diff --git a/dbp/text/msg_editor_help.ans b/dbp/text/msg_editor_help.ans new file mode 100644 index 0000000..3c017e2 --- /dev/null +++ b/dbp/text/msg_editor_help.ans @@ -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 \ No newline at end of file diff --git a/dbp/text/msg_editor_quote.ans b/dbp/text/msg_editor_quote.ans new file mode 100644 index 0000000..f4317c5 --- /dev/null +++ b/dbp/text/msg_editor_quote.ans @@ -0,0 +1,23 @@ + + + + + + + + + + + + + +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Quote Window ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + + + + + + +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Enter/Add Escape/Quit ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ \ No newline at end of file diff --git a/dbp/text/msg_index.ans b/dbp/text/msg_index.ans new file mode 100644 index 0000000..8e22c22 --- /dev/null +++ b/dbp/text/msg_index.ans @@ -0,0 +1,24 @@ +|CL ° Message Base Listings +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³  N  Area Description Total New Yours Last Post ³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³Tagged:Search Text³ +³Showing:>³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ \ No newline at end of file diff --git a/dbp/text/msg_index.ini b/dbp/text/msg_index.ini new file mode 100644 index 0000000..c332197 --- /dev/null +++ b/dbp/text/msg_index.ini @@ -0,0 +1,233 @@ +; MSG_INDEX.INI +; ============= +; Configuration options for Mystic's ANSI message base index reader + +[Info] + description = Message Base Index Reader + display_file = msg_index + help_file = msg_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 = read messages + ; 1 = change area + ; 2 = toggle newscan + ; 3 = toggle QWKscan + + ; Note when action mode is not set to read messages, users will not be able + ; to tag bases, or change view with CTRL+V + + action_mode = 0 + + ; Start reading at message index or not + + no_index = false + + ; 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 message bases with new messages at the top of each category list + + new_at_top = true + + ; If there are bases with new messages, automatically move the lightbar to + ; highlight them on startup, after reading, and after updating + + snap_new = true + + ; last modified 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,18,A + + ; Contains the X/Y position and attribute of the area search text + + Coord3 = 56,21,15 + +[Percent] + + ; Use a percentage bar meter? + active = true + + ; 0 = horizontal, 1 = vertical + bar_format = 1 + + ; length of bar in characters + bar_length = 14 + + ; 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=message base name &2=network description + ; &3=total messages &4=new messages + ; &5=last post date &6=# of tagged bases + ; &7=scan on/off &8=# of messages to you + + ; NON SELECTED, PROMPTS 1-6 + + ; No new messages + str1 = |07 |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5 + + ; No new message but base is tagged + str2 = |14 |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5 + + ; New messages + str3 = |15 NEW |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5 + + ; New messages and base is tagged + str4 = |15 NEW |14|$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5 + + ; New personal messages + str5 = |15 NEW |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5 + + ; New personal message and base tagged + str6 = |15 NEW |14|$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5 + + ; SELECTED, PROMPTS 7-12 + + ; No new messages + str7 = |07|17 |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5|16 + + ; No new message but base is tagged + str8 = |14|17 |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5|16 + + ; New messages + str9 = |15|17 NEW |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5|16 + + ; New messages and base is tagged + str10 = |15|17 NEW |14|$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5|16 + + ; New personal message + str11 = |15|17 NEW |$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5|16 + + ; New personal messages and base tagged + str12 = |15|17 NEW |14|$R35|&1 |$L07|&3 |$L07|&4 |$L05|&8 |09|&5|16 + + ; OTHER MISC PROMPTS + + ; displayed while browsing the list + + str13 = |[Y23|[X17|07Select base, type to search, or |15CTRL-Z|07 for help + + ; displayed while searching the list + + str14 = |[Y23|[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) + + str15 = |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 + + str16 = |#I#1#10# Info #Calculating message base statistics, please wait# + + ; Display number of tagged bases (blank to disable) + + str17 = |[X17|[Y20|15|&6 base(s)|$X30 |XX + + ; Showing: ALL BASES + + str18 = |[X17|[Y21|15|16All Message Bases |XX + + ; Showing: New scan flagged + + str19 = |[X17|[Y21|15|16Subscribed Bases |XX + + ; Showing: Bases NOT flagged for new scan + + str20 = |[X17|[Y21|15|16Unsubscribed Bases + + ; Select view type prompt + + str21 = ASU |#V#2#26#9# View Mode #-,S-All Subscribed Bases,U-All Unsubscribed Bases,A-All Message Bases,-# + + ; Add bases to subscription list &1=# of bases? + + str22 = |#Y#2#10#Confirm#Add |&1 base(s) to subscription list?# + + ; Delete bases from subscription list &1=# of bases? + + str23 = |#Y#2#10#Confirm#Remove |&1 base(s) from subscription list?# + + ; Catch up? &1=# of bases? + + str24 = |#Y#2#10#Confirm#Catch up new message stats for |&1 base(s)?# + + ; If show gaps is on, this is the line shown between groups + + str25 = |$X78 |XX + + ; Shown when running in "all groups" mode + + str26 = |[X69|[Y01|15|17All Groups + + ; Shown when running in current group mode + + str27 = |[X49|[Y01|15|17|$L30|FG + + ; post a message to bases? &1=number of bases + ; Note this prompt is likely to change + + str28 = |16|CL|14Posting message|CR + + ; Prompt for message searching + str29 = |16|CL|DFmsgsearch||CR|09Enter text to search for: |11 diff --git a/dbp/text/msg_index_help.ans b/dbp/text/msg_index_help.ans new file mode 100644 index 0000000..d836bed --- /dev/null +++ b/dbp/text/msg_index_help.ans @@ -0,0 +1,24 @@ +|CL|AO|PO ° Message Base Index Help Press Any Key to Exit +ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³³ +³ MOVEMENT AND SEARCHING³ +³³ +³ Use the arrow/page keys to select a message base, or use mouse scroll³ +³ wheel or mouse click if using a compatible terminal. Search for message ³ +³ bases can be done by simply typing text to search for at any time.³ +³³ +³ COMMANDS³ +³³ +³ ENTER Read messages in the highlighted message base³ +³TAB Tag a message base for further actions³ +³ ESCAPE Quit back to the BBS menus³ +³ CTRL+S Subscribe to the highlighted or tagged message bases³ +³ CTRL+U Unsubscribe from the highlighted or tagged message bases³ +³ CTRL+V Toggle between showing all, subscribed, or unsubscribed bases³ +³ CTRL+P Post a message in currently highlighted message base³ +³ CTRL+C Update/catch up new message scan for highlighted or tagged bases ³ +³ CTRL+F Search highlighted or tagged bases using boolean search engine ³ +³ CTRL+N Jump to next base in the list that has new messages³ +³ CTRL+R Recalculate message base statistics and redraw listing³ +³³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ|PN \ No newline at end of file diff --git a/dbp/text/msghdr.asc b/dbp/text/msghdr.asc new file mode 100644 index 0000000..453a379 --- /dev/null +++ b/dbp/text/msghdr.asc @@ -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 |16Ū|17 |16|07 |17|09±|16|01ŪŪŪ ÜÜ ßßŪŪŪ|17 |16|07 |17|01 +|16ŪŪŪŪ Ū |17 |16Ü|17 |16ŪŪ|17 |16|07 |01ŪŪŪŪÜÜŪ ŪÜŪŪŪ|17 +|16|07 diff --git a/dbp/text/msgsearch.asc b/dbp/text/msgsearch.asc new file mode 100644 index 0000000..a8d1c9b --- /dev/null +++ b/dbp/text/msgsearch.asc @@ -0,0 +1,18 @@ +|07|16|CL|09ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³|17 ± |15Message Searching |01|16³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + +|03 Search by typing in a word or phrase. All searches are case insensitive and + will target the To, From, Subject, and message body of each message. + + 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 |11John Doe + +|03 |09 |03This search will search for messages containing exactly "John Doe" + + |09 Search text|01:|09 |11(mystic|telegard)!renegade + +|03 |09 |03The above example uses boolean operators to search for any message that +|09 |03 |09 |03contains "mystic" OR "telegard"|09 |03but does NOT contain "renegade" diff --git a/dbp/text/mysticlogo1.ans b/dbp/text/mysticlogo1.ans new file mode 100644 index 0000000..119420a --- /dev/null +++ b/dbp/text/mysticlogo1.ans @@ -0,0 +1,16 @@ +°°°° ßÜ ± Üß° +°Üž°²²²ÜÜÜ ß ß Üܲ +± ÜÜ ßÜÜŪß± ±°²²±±°°²±± ±°ŪŪ²±° ²ŪŪŪ²Ü ± +²²±ß ßŪ°ŪŪŻ°°Ü²²²Ü ²²²ßßŪŪ²²±± ß²²±±ßßßŪŪ²Ū²ß±±Ü ² +ŪŪ²ÜÜž ŽŪ°°Ż²²°ŪŪ²²° Ü ŪŪŪ° ÜßßÜŪŪŪ ß²Ū° +°Ū°±° ° žÜÜŪŪŪ° °²Ū Ūß ß°°° ²Ū²° ß ŪŪÜ ±ŪŪ ²ŪŪ° +²Ū²ß°²± °° Ū °°Ū ŪŪ² ßŪŪÜ °°°° °ŪŪ Ü ŪŪŪ ß ŪŪ± Üß°° +°ŪŪŻ ÜŪÜ ÜŪŪ ßŪŪÜ °°² ß²Ū²ÜŪß Üß ²°° ŪŪ² +²ŪŪ ßŪ²ÜŪ²²Ū° ß²²Ü°²ÜÜ ßßßŪÜ  ° ÜŪ°²°ŪŪŪŪ °°° +Ū°ŪßŪß ŪŪ²ŪŪ²²ŪŪŪ ß²ŪŪ² ± ²Ū² ܲŪŪ²± ±ŪŪ± °²ŪŪ + °Ū°ŪŻÜßŪ± ŪŪ² ²²ŪÜܲŪŪŪ²²°²ß °ŪŪ °°²Ū²²Ü ßßŪÜ ²ŪŪ° +Ü Ü²±±°°ŪÜÜŪŪŪ²²Ü ²Ū² ß°°°ŪŪ°²ß  Ū²° ±ŪÜß ±±± ²ßß ŪŪ±±ÜÜ ßŪ° +ßßß²²²Ü žßßßß ²²ß ° °°ßßß  ²   ߲ܲßß²²Ū²Ū²ßÜ +°°° °Üß ° ° ßžÜ ² ßß²° ß +žß°ß ÜÜ ° ° °° +ß° diff --git a/dbp/text/mysticlogo2.ans b/dbp/text/mysticlogo2.ans new file mode 100644 index 0000000..69812ff --- /dev/null +++ b/dbp/text/mysticlogo2.ans @@ -0,0 +1,19 @@ +anotherbbsrunning... +²ÜÜŻ ÜÜÜÜܲ°ÜÜÜÜܲ +Ü°° ÜÜÜ °  Ž°ŪŪ° Ž°ŪŪ° °° + ° ß ²Ü  ßß °°Ż Ü °°  ŽÜÜÜ °°  ŽÜÜÜ ß °° ÜÜÜÜ +Ž Ż Ž Ż Ż  °  Ž ² ßß²Ū²ŪŪÜ  ² ßß²Ū²²ŪÜ °ŪŪÜ ßß°°±±²Ü + ° ²  ² °² Ż  °  ŽŪŪ²²Ż °  ŽŪ²Ū²Ż ° Ž²²ŪŪŻ +Ž°° °Ż ŽßŽ ° Ż °° °ŪŪŪ²²° °ŪŪŪ²²° °ßŪŪ²ŪÜ +Ž°±±°ŻŽ  ±°°°±ŪŪŪ²Ū±°°°± °ŪŪŪ²²°°°°Ż + °°±±²±±ß  Ž²±±±± ßßŪŪŪŪ²±±±±ßŪŪŪ²ß°°±±°±±±±±²ÜÜ + °²²²²±°Ü  ß²±±±²²ŪŪ²Ū²±±±²²ŪŪŪŪÜÜÜß±±±²ŪŻ + ° ß°ß°²  Ū²±²ŪŪŪŪŪŪŪ²±²ŪŪŪ²Ū²²²ŪŪß Ž²²²ŪŪ + ² ° ÜŽ ° Ż Ū²²²Ū° ŪŪŪŪŪŪ²²²Ū° ŪŪŪŪŪŪŪŪŻŪ²ŪŪ² + ŽŻ  ßß²ŻŽ ° Ż ŪŪ²ŪŪ ŽŪŪŪŪŻŪŪ²ŪŪ ŽŪŪŪŪŻŪŪŪ²ŽŪŪŪŪŻ + ß ŽÜ°±° ° ²ŪŪŪŪÜÜÜܲŪŪŪß ²ŪŪŪŪÜÜÜܲŪŪŪß ŪŪŪŪŪÜÜÜÜŪŪŪ²ß +°±±°°Ż²ßßßßßß²ßßßßßß²ßßßßßß +ß kg°±²±ß°Ż ÜÜÜ ß +ß ŽÜÜÜÜÜ° ß Üܲ²±±°°ßßß mysticbbssoftware .. . +Ž²²ßßß +° \ No newline at end of file diff --git a/dbp/text/newinfo.asc b/dbp/text/newinfo.asc new file mode 100644 index 0000000..6206a2b --- /dev/null +++ b/dbp/text/newinfo.asc @@ -0,0 +1,10 @@ +|16|CL|07|09ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|01æ +|09³|17 ± |15Application Completed! |16|01³ +|09Ą|01ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + + |07Your new account application has been completed. If you've made mistakes or + do not wish to create an account, you may abandon your application now and + disconnect. Please select an option: + + |01[|10ENTER|01] |09Create Account +|07 |01[|10!|01] |09Abandon Application / Disconnect|16|07 diff --git a/dbp/text/newuser.asc b/dbp/text/newuser.asc new file mode 100644 index 0000000..dc759ae --- /dev/null +++ b/dbp/text/newuser.asc @@ -0,0 +1,8 @@ +|16|07|CL|09ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|01æ +|09³|17 ± |15Welcome to Mystic BBS Demo System |16|01³ +|09Ą|01ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + + |07The account name you entered was not located in our account database. If you + wish to create a new account, answer YES below to continue on to the new + account application. If you've mistyped your account name, answer NO and you + will be returned to the login prompt.|16|07 diff --git a/dbp/text/newuser1.asc b/dbp/text/newuser1.asc new file mode 100644 index 0000000..7214e33 --- /dev/null +++ b/dbp/text/newuser1.asc @@ -0,0 +1,14 @@ +|16|CL|07|09ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|01æ +|09³|17 ± |15New Account Application |16|01³ +|09Ą|01ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + +|07 Welcome to the new user account application. All aspects of the new user + account application can be edited or toggled on or off. In addition, a MPE + (Mystic Programming Executable) module can be ran before, during, or after + to allow almost endless possibilities. + + We've decided to keep the new user application fairly simple in this system, + but it can easily be changed via the System Configuration. |15Please |07make sure + you visit your account settings found on the Main Menu for more account + options.|16|07 + diff --git a/dbp/text/nodesearch.asc b/dbp/text/nodesearch.asc new file mode 100644 index 0000000..38fd41c --- /dev/null +++ b/dbp/text/nodesearch.asc @@ -0,0 +1,8 @@ + +|10SEARCH BY ADDRESS (? or * = WildCard): SEARCH BY NAME, LOCATION, SYSOP, ETC: + +|111:123/? |03List all nodes in Net 123 |11John |03List all matching John +|111:?/? |03List all nodes in Zone 1 |11PA |03List all matching PA +|11?:?/? |03List all nodes in all zones |11My BBS |03List all matching My BBS + + |12LIST ZONE |03List all zones |12LIST NET [Zone] |03Show all NETs in [Zone] diff --git a/dbp/text/prepass.asc b/dbp/text/prepass.asc new file mode 100644 index 0000000..76719d7 --- /dev/null +++ b/dbp/text/prepass.asc @@ -0,0 +1,12 @@ +|07|16|CL|09ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ|01æ +|09³|17 ± |15Selecting An Account Password |01|16³ +|09Ą|01ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + +|07 You must now select a password for your account. This password should + be kept secure so that no one else can login under your account. It can be + any sequence of characters, numbers, or symbols up to 25 characters long. + + Passwords are case sensitive and are never stored on the local BBS system by + default. Mystic meets enterprise level standards for password storage. + +|01ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ diff --git a/dbp/text/preuser.ans b/dbp/text/preuser.ans new file mode 100644 index 0000000..5c0cdd3 --- /dev/null +++ b/dbp/text/preuser.ans @@ -0,0 +1,11 @@ +|16|CLßßßßßßß ÜÜÜÜŪ²° ßßßß ÜÜÜÜÜÜ Ž²²ßßßß °²²ŪŪŪŪ° ß ŪŪ² ßßßß°±ÜÜÜ ß²ß ÜÜÜÜ Ü ²° Ū²° + ²°²²ŪŻŪŪŪŪŻŻ ŪÜÜÜŪ°²ŪŪ²°² ±ß Ü°Ū°° °²ŪŪŪܲŪŪŪŪ²Ü±Ü°Ū²ÜŽŪÜŪ ÜÜŪŪŪ²±° ²° ±² +²°ÜÜ ±²ŪŪŪ²°Ž°ßß²ŪŪ°°°°Ū± ±ÜŪ±° Ū ßßßßß±ßßÜßŪŪ±ßÜÜÜÜßŪ²²ŪŻ²²ŪŪ²²ßß ÜÜÜÜܲŻ +²Ū°²Ż °°°° ßÜ°ÜŪÜß±±±ŻßÜ ŪÜÜ°° Ü ßßÜŪŪÜÜ Ü °Ū²°Ż ÜÜ Ž°°Ū°Ū°°°ŽŻ Ü ÜÜŪ²ßßßÜ +ŪßÜßÜŻ ŪŪ °ßßß Ž ±ÜÜ ßßßßß² °Ū±Ü ßÜ°±°Ü Ż±Ū°°ŻŽ±ŻŪŪ°²²ŽŪ °Ū±°²Ū²Ū²²ßßÜ +ÜŪßß±±Ü°±²ŻŽܱŻ ° °° Ž°ÜܲŻŻ± °²ŻŽßßŪ Ž±²ŪŪŻ±ÜÜ°²Ū ß°ßß²²ŪŻ ß°±²Ü ß °±ŪŪ²ŪŪÜ +ßߎ°²ß ßßß ßß ßߎŪ²Ż ßßßßßß ßßßßß Ü ÜÜŪ²Żßß ßßßß ßßß ßßgj! ßßß Ü ß °²±±° + +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +Welcome to the Disconnected by Peer BBS +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ diff --git a/dbp/text/qwkhdr.asc b/dbp/text/qwkhdr.asc new file mode 100644 index 0000000..707d1b5 --- /dev/null +++ b/dbp/text/qwkhdr.asc @@ -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|01ŪŪŪÜß |17 +|16ŪŪŪŪÜŪŪÜ ŪŪŪŪÜŪÜŪ ŪŪŪŪ Ū +|16|07 diff --git a/dbp/text/readhlp.asc b/dbp/text/readhlp.asc new file mode 100644 index 0000000..00b38b6 --- /dev/null +++ b/dbp/text/readhlp.asc @@ -0,0 +1,8 @@ + +|03(|11A|03) Read Again (|11N|03) Next Message +|03(|11P|03) Previous Message (|11R|03) Reply to Message +|03(|11[|03) Back in Thread (|11]|03) Forward in Thread +|03(|11G|03) Goto Next Base (|11I|03) Ignore Remaining +|03(|11T|03) Toggle New Scan (|11J|03) Jump to Message +|03(|11L|03) List Messages (|11H|03) Set HighRead Pointer +|03(|11X|03) Export Message (|11Q|03) Quit Reading diff --git a/dbp/text/readshlp.asc b/dbp/text/readshlp.asc new file mode 100644 index 0000000..60e1419 --- /dev/null +++ b/dbp/text/readshlp.asc @@ -0,0 +1,13 @@ + +|03(|11A|03) Read Again (|11N|03) Next Message +|03(|11P|03) Previous Message (|11R|03) Reply to Message +|03(|11[|03) Back in Thread (|11]|03) Forward in Thread +|03(|11G|03) Goto Next Base (|11I|03) Ignore Remaining +|03(|11T|03) Toggle New Scan (|11J|03) Jump to Message +|03(|11L|03) List Messages (|11H|03) Set HighRead Pointer +|03(|11X|03) Export Message (|11Q|03) Quit Reading + +|12Message Owner Commands: + +|03(|14D|03) Delete Message (|14F|03) Forward Message +|03(|14E|03) Edit Message (|14M|03) Move Message diff --git a/dbp/text/sysophdr.asc b/dbp/text/sysophdr.asc new file mode 100644 index 0000000..c467eeb --- /dev/null +++ b/dbp/text/sysophdr.asc @@ -0,0 +1,5 @@ +|16|07|CL +|17|09±|16|01ßßßßß|07 |17|09²|16|07 |01ŪŪŪŪ|07 |17|09±|16|01ßßßßß|07 |17|09²|16|01ŪŪŪßŪ|07 |17|09²|16|01ŪŪŪßŪ +ßß|17 |16Ū|17 |16|07 |17|09±|16|01ÜŪŪŪŪ|07 |01ßß|17 |16Ū|17 |16|07 |17|09±|16|01ŪŪŪ|07 |01Ū|07 |17|09± |16|01ŪŪÜŪ|07 |17|09 +|01 |16Ü|17 |16ŪŪ|17 |16|07 |01ŪŪŪŪ|07 |17|01 |16Ü|17 |16ŪŪ|17 |16|07 |01ŪŪŪŪÜŪ|07 |01ŪŪŪŪ + diff --git a/dbp/text/taglines.ans b/dbp/text/taglines.ans new file mode 100644 index 0000000..e6cad27 --- /dev/null +++ b/dbp/text/taglines.ans @@ -0,0 +1,23 @@ + ° Choose your Tagline... Escape/Abort + +ŚÄÄ Taglines ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +³³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + +ŚÄÄ Database ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³Viewing:Info:³ +³ Taglines:Search:³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + +ŚÄÄ Commands ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³ [ENTER] Select[CTRL-K] Copy to Personal [CTRL-N] New Tagline ³ +³ [CTRL-R] Random Tagline [CTRL-V] Change Database [CTRL-D] Delete³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ \ No newline at end of file diff --git a/dbp/text/taglines.ini b/dbp/text/taglines.ini new file mode 100644 index 0000000..ee5fc58 --- /dev/null +++ b/dbp/text/taglines.ini @@ -0,0 +1,96 @@ +; TAGLINES.INI +; ========-=== +; Configuration options for Mystic's Tagline selection + +[Options] + ; Description of template + description = Tagline selection + + ; Display file if not blank will be shown at startup + display_file = taglines + + ; Help file leave blank to disable + help_file = + + ; Size of input field for search text + search_size = 26 + +[Coords] + ; All Coords follow the X,Y,A format + + ; Contains the top/left X and Y location of the tagline window + Coord1 = 2,4,0 + + ; Contains the bottom/right X and Y location of the tagline window + Coord2 = 78,12,0 + + ; Contains the X/Y position and attribute of the area search text + + Coord3 = 52,17,15 + +[Percent] + ; Use a percentage bar meter? + active = true + + ; 0 = horizontal, 1 = vertical + bar_format = 1 + + ; length of bar in characters + bar_length = 9 + + ; X location of meter + location_X = 79 + + ; Y location of meter + location_Y = 4 + + ; 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] + ; Str1/2 are off and on bars &1=Tagline text &2=Tagline number + + str1 = |07|16 |$R75|&1 |XX + str2 = |15|17 |$R75|&1 |XX + + ; Status text while browsing the list + str3 = |[X52|[Y16|07|16Type to start searching |XX + + ; Status text while searching the list + str4 = |[X52|[Y16|09|16CTRL-A|07 again |09CTRL-Y|07 reset + + ; Display total Taglines and Global Tagline database type &1=# of taglines + str5 = |[X16|[Y16|15|16Global Taglines |XX|[X16|[Y17|$R05|&1 + + ; Display total Taglines and Personal Tagline database type &1=# of taglines + str6 = |[X16|[Y16|15|16Personal Taglines|[X16|[Y17|$R05|&1 + + ; Select Database Type (Set to blank to disable changing) + str7 = GP |#V#2#26#9# Select Database #-,G-Global Tagline Database,P-Personal Tagline Database,-# + + ; Copy to Personal database question + str8 = |#Y#2#10# Confirm #Copy selected Tagline to personal Tagline database?# + + ; Delete selected Tagline + str9 = |#Y#2#10# Confirm #Delete selected Tagline?# + + ; Loading prompt (displayed when doing database work) + str10 = |#I#1#10# Info #Loading, Please wait# + + ; Access denied shown when user does not have access to modify database + str11 = |#B#2#10# Status #You do not have access to this function# + + ; Entering new Tagline + str12 = |SS|#X#2# New Tagline #9#8#72#10#|[X11|[Y09 + + ; Displayed after input from new tagline (can be used to erase input for example) + str13 = |RS diff --git a/dbp/text/telehelp.asc b/dbp/text/telehelp.asc new file mode 100644 index 0000000..4c1995e --- /dev/null +++ b/dbp/text/telehelp.asc @@ -0,0 +1,18 @@ +|07|16|CL|03ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³|09|17 ± |15Teleconference Command Reference |03|16³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ + +|15/B|13 |07 |11 |07 |08-|07 Broadcast message to all channels +|15/CLS|07 or|11 |15/CLEAR|07 |11 |07 |08-|07 Clears window and scrollback text +|15/NAMES|07 |11 |07 |08-|07 Shows whos currently in chat +|15/MSG|07 |13 |07 |11 |07 |08-|07 Send private message +|15/T|14 |07or|14 |15/TELL|10 |07 |02 |08 - |07Send private message +|15/TOPIC|07 |11 |07 |08-|07 Sets the topic of the current channel +|15/WHO|07 |11 |07 |11 |07 |08-|07 List all users on bbs system +|15/ME|07 |11 |07 |08-|07 Perform an action +|15/JOIN|07 |11 |07 |08-|07 Join a new channel (1-99) +|15/SCROLL|14 |07or|14 |15/SB|07 |11 |07 |08-|07 Enter scrollback mode +|15/REPLY|14 |07or|14 |15/R|11 |08-|11 |07Reply to last person who sent private msg +|15/QUIT|14 |07or|14 |15/Q|07 |14 |07 |11 |07 |11 |07 |08-|07 Quit teleconference + +|PA diff --git a/dbp/text/userchat.ans b/dbp/text/userchat.ans new file mode 100644 index 0000000..3b1dd7c --- /dev/null +++ b/dbp/text/userchat.ans @@ -0,0 +1,24 @@ +|CLŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ +³Ūßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßܳ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³ßÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜŪ³ +ĆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³Ūßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßܳ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³Ū Ū³ +³ßÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜŪ³ +ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ +Ż Private User Chat Ctrl-R/Redraw ESCAPE/Quit Ż diff --git a/dbp/text/userchat.ini b/dbp/text/userchat.ini new file mode 100644 index 0000000..d59dc96 --- /dev/null +++ b/dbp/text/userchat.ini @@ -0,0 +1,33 @@ +; USERCHAT.INI +; ============= +; Configuration options for Mystic's user to user split screen chat + +[Info] + description = User to User Split Chat + +[Coords] + + ; Contains the top/left X and Y location of the remote user's chat + ; window and the text attribute of their text + + Coord1 = 3,3,113 + + ; Contains the bottom/right X and Y location of the remote user's + ; chat window + + Coord2 = 77,10,A + + ; Contains the top/left X and Y location of the user's chat + ; window and the text attribute of their text + + Coord3 = 3,14,113 + + ; Contains the bottom/right X and Y location of the user's + ; chat window + + Coord4 = 77,21,A + +[Prompts] + + ; Display user names &1 = Remote User name &2 = User name + str1 = |[X02|[Y01|14|16 |&1 |[X02|[Y12 |&2 |XX diff --git a/dbp/text/votehdr.asc b/dbp/text/votehdr.asc new file mode 100644 index 0000000..d9bdba6 --- /dev/null +++ b/dbp/text/votehdr.asc @@ -0,0 +1,5 @@ +|16|07|CL +|17|09²|16|01ŪŪŪ Ū|07 |17|09²|16|01ŪŪŪßŪ|07 |01ßŪŪŪŪß|07 |17|09²|16|01ŪŪŪßß +|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 |01ŪŪŪŪÜÜ + diff --git a/dbp/theme.ini b/dbp/theme.ini new file mode 100644 index 0000000..5f096fc --- /dev/null +++ b/dbp/theme.ini @@ -0,0 +1,228 @@ +; Mystic BBS Theme Definition + +; These files do not have to be edited with a text editor, they can be edited +; using the Configuration's Theme Editor + +[Info] + + ; Theme author details + + name = DbP + author = geos_one + group = Disconnected by Peer BBS + contact = bbs.disconnected-by-peer.at + + ; Display and access details + + Order = 1 + Access = + + ; Font and color defaults + + Font = 0 + Color = 0 + +[Flags] + + ; Miscellaneous settings and flags + + ASCII = true + ANSI = true + LightBarYN = true + FileTagChar = 251 + NewMsgChar = 78 + NewVoteChar = 42 + +[Fallback] + + ; Fall back to the "default" theme if there is a missing prompt, text, + ; menu or script (true or false). Each theme can also fallback to + ; specific themes using the options below. + + Def_Prompt = true + Def_Text = true + Def_Menu = true + Def_Script = true + + ; Theme fallback associations: Specify theme directory as its named in root + ; theme directory. Example: To fallback to theme in /mystic/themes/mytheme + ; specify "mytheme" (without quotes) as the fallback. + + ; If set to a theme directory name, Mystic will attempt to load any prompts + ; that are not defined in this theme from another theme, before ultimately + ; loading the default prompt if no other is found. + + Prompt = default + + ; If set to a theme directory, Mystic will attempt to look at the theme for + ; display files and template configurations, if they are not found as part + ; of this theme. + + Text = default + + ; If set to a theme directory, Mystic will attempt to look at the theme for + ; menu files if the menu file is not found as part of this theme. + + Menu = default + + ; If set to a theme directory, Mystic will attempt to look at the theme for + ; script files if the script file is not found as part of this theme. + + Script = dbp + +[Input] + + ; User input settings. Characters are specified by their ASCII number and + ; attributes are specified by DOS attribute number ( (fore + back) * 16 ) + + FillColor = 25 + TextColor = 31 + FillChar = 32 + PassChar = 42 + + ; Characters used to surround input field (Set to 0 to disable one or both) + + LeftChar = 0 + LeftAttr = 14 + RightChar = 0 + RightAttr = 14 + FileTagChar = 251 + NewMsgChar = 78 + NewVoteChar = 42 + +[Colors] + + ; Custom theme colors T# MCI code where # is 0-9 as defined below + + 0 = 1 + 1 = 9 + 2 = 11 + 3 = 8 + 4 = 7 + 5 = 15 + 6 = 24 + 7 = 23 + 8 = 25 + 9 = 31 + +; Theme box style attributes + +[Box1] + + Frame = 6 + Attr1 = 127 + Attr2 = 120 + Attr3 = 127 + Attr4 = 120 + Shadow = true + ShadowAttr = 8 + HeaderType = 0 + HeaderAttr = 31 + OKAttr = 30 + TextAttr = 113 + BarLow = 113 + BarLowKey = 127 + BarHigh = 30 + BarHighAttr = 31 + BarHighKey = 31 + +[Box2] + + Frame = 1 + Attr1 = 9 + Attr2 = 1 + Attr3 = 9 + Attr4 = 9 + Shadow = true + ShadowAttr = 8 + HeaderType = 0 + HeaderAttr = 11 + OKAttr = 30 + TextAttr = 7 + BarLow = 7 + BarLowKey = 15 + BarHigh = 31 + BarHighKey = 31 + +[Box3] + + Frame = 8 + Attr1 = 127 + Attr2 = 120 + Attr3 = 127 + Attr4 = 120 + Shadow = true + ShadowAttr = 8 + HeaderType = 0 + HeaderAttr = 31 + OKAttr = 30 + TextAttr = 113 + BarLow = 113 + BarLowKey = 127 + BarHigh = 30 + BarHighAttr = 31 + BarHighKey = 31 + +[Box4] + + Frame = 5 + Attr1 = 127 + Attr2 = 120 + Attr3 = 127 + Attr4 = 120 + Shadow = true + ShadowAttr = 8 + HeaderType = 0 + HeaderAttr = 31 + OKAttr = 30 + TextAttr = 113 + BarLow = 113 + BarLowKey = 127 + BarHigh = 30 + BarHighAttr = 31 + BarHighKey = 31 + +; Percentage bar definitions: These are being depreciated and will +; eventually be moved into templates for each specific function + +; Bar used in voting booth results + +[Bar_Voting] + + Active = false + Format = 0 + Size = 10 + X = 79 + Y = 1 + LowAttr = 8 + LowChar = 176 + HighAttr = 9 + HighChar = 219 + +; Bar used in file listings + +[Bar_File] + + Active = false + Format = 0 + Size = 10 + X = 79 + Y = 1 + LowAttr = 8 + LowChar = 176 + HighAttr = 9 + HighChar = 219 + +; Bar used when reading a message + +[Bar_Msg] + + Active = false + Format = 0 + Size = 10 + X = 79 + Y = 1 + LowAttr = 8 + LowChar = 176 + HighAttr = 9 + HighChar = 219