mysticbbs/scripts/mpldemo.mps

310 lines
9.0 KiB
Plaintext

// ====================================================================
// Mystic BBS Software Copyright 1997-2013 By James Coyle
// ====================================================================
//
// This file is part of Mystic BBS.
//
// Mystic BBS is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Mystic BBS is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Mystic BBS. If not, see <http://www.gnu.org/licenses/>.
//
// ====================================================================
// ---------------------------------------------------------------------------
// 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.