diff --git a/scripts/to-prmpt.mps b/scripts/to-prmpt.mps new file mode 100644 index 0000000..1990991 --- /dev/null +++ b/scripts/to-prmpt.mps @@ -0,0 +1,437 @@ +// .--------------------------. +// | TO-PRMPT.MPS : RELEASE 2 |----------------------------------------------- +// `--------------------------' +// +// 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, I think it's okay. +// +// 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 code itself isn't as pretty as it could be since MPL has evolved over +// time, but it is still functional and seems to be widely used. +// +// The original authors contact info follows: +// +// Testoverride - testoverride@comcast.net +// g00r00 - mysticbbs@gmail.com +// +// 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) +// - Some conversions of IF statements to CASE statements for code clarity +// --------------------------------------------------------------------------- + +Var + Selection : Byte; + +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] := '|[X40' + Xpos[2] := '|[X45' + Xpos[3] := '|[X54' + Xpos[4] := '|[X59' + Xpos[5] := '|[X64' + + 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] := '|[X23' + Xpos[2] := '|[X28' + Xpos[3] := '|[X37' + Xpos[4] := '|[X43' + Xpos[5] := '|[X49' + Xpos[6] := '|[X54' + Xpos[7] := '|[X61' + + 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 + Ch : Char + Done : Boolean + Bar : Byte + Cmd : Array[1..6] of String[80] + Xpos : Array[1..6] of String[80] +Begin + Done := False + Bar := 1 + + Xpos[1] := '|[X38' + Xpos[2] := '|[X43' + Xpos[3] := '|[X52' + Xpos[4] := '|[X58' + Xpos[5] := '|[X64' + Xpos[6] := '|[X69' + + 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); + Done := True; + 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] := '|[X22' + Xpos[2] := '|[X26' + Xpos[3] := '|[X29' + + Cmd[1] := '|15y|07es' + Cmd[2] := '|15n|07o' + Cmd[3] := '|15c|07ontinuous' + + Repeat + If Graphics > 0 Then + Write ('|11|19' + 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|05[|13=|14!|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 + + 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('Q') +End + +Procedure DOPAUSE +Begin + Write ('|05[|13=|14!|07 paused |13-|07 more|08 // |15y|09es |15n|07o |15c|07ontinuous |00') + + Selection := PPromptMenu + + If Selection = 1 Then + stuffkey('Y') + Else + If Selection = 2 Then + stuffkey('N') + Else + If Selection = 3 Then + stuffkey('C') +End + +Procedure Email +Begin + Write ('|CR|05[|13=|14!|07 reading 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 File +Begin + Write ('|CR|07(|07|$R31|FB|07) |08// |15n|07ext |15p|07revious |15f|07lag |15v|07iew |15q|07uit >>') + + 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 + +// MAIN PROGRAM BLOCK! + +Const + FailStr = '|CRUSAGE: to-prmpt [ MESSAGE | FILE | EMAIL | PAUSE ]|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; + Else + WriteLn(FailStr); + End; +End.