// ==================================================================== // 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 . // // ==================================================================== // .-------------------------. // | 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.