196 lines
5.2 KiB
ObjectPascal
196 lines
5.2 KiB
ObjectPascal
Program MTYPE;
|
|
|
|
// ====================================================================
|
|
// 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/>.
|
|
//
|
|
// ====================================================================
|
|
|
|
{$I M_OPS.PAS}
|
|
|
|
// Add screen pause option
|
|
// Add delay option similar to Mystic
|
|
// Processing formatting MCI codes, etc
|
|
|
|
Uses
|
|
m_Output,
|
|
m_Strings,
|
|
m_DateTime,
|
|
m_Term_Ansi;
|
|
|
|
Var
|
|
Screen : TOutput;
|
|
Terminal : TTermAnsi;
|
|
Buffer : Array[1..4096] of Char;
|
|
dFile : File;
|
|
Ext : String[4];
|
|
Code : String[2];
|
|
dRead : LongInt;
|
|
Old : Boolean;
|
|
Str : String;
|
|
A : Word;
|
|
Ch : Char;
|
|
Done : Boolean;
|
|
|
|
Function GetChar : Char;
|
|
Begin
|
|
If A = dRead Then Begin
|
|
BlockRead (dFile, Buffer, SizeOf(Buffer), dRead);
|
|
A := 0;
|
|
If dRead = 0 Then Begin
|
|
Done := True;
|
|
Buffer[1] := #26;
|
|
End;
|
|
End;
|
|
|
|
Inc (A);
|
|
GetChar := Buffer[A];
|
|
End;
|
|
|
|
Function Ansi_Color (B : Byte) : String;
|
|
Var
|
|
S : String;
|
|
Begin
|
|
S := '';
|
|
Ansi_Color := '';
|
|
|
|
Case B of
|
|
00: S := #27 + '[0;30m';
|
|
01: S := #27 + '[0;34m';
|
|
02: S := #27 + '[0;32m';
|
|
03: S := #27 + '[0;36m';
|
|
04: S := #27 + '[0;31m';
|
|
05: S := #27 + '[0;35m';
|
|
06: S := #27 + '[0;33m';
|
|
07: S := #27 + '[0;37m';
|
|
08: S := #27 + '[1;30m';
|
|
09: S := #27 + '[1;34m';
|
|
10: S := #27 + '[1;32m';
|
|
11: S := #27 + '[1;36m';
|
|
12: S := #27 + '[1;31m';
|
|
13: S := #27 + '[1;35m';
|
|
14: S := #27 + '[1;33m';
|
|
15: S := #27 + '[1;37m';
|
|
End;
|
|
|
|
If B in [00..07] Then B := (Screen.TextAttr SHR 4) and 7 + 16;
|
|
|
|
Case B of
|
|
16: S := S + #27 + '[40m';
|
|
17: S := S + #27 + '[44m';
|
|
18: S := S + #27 + '[42m';
|
|
19: S := S + #27 + '[46m';
|
|
20: S := S + #27 + '[41m';
|
|
21: S := S + #27 + '[45m';
|
|
22: S := S + #27 + '[43m';
|
|
23: S := S + #27 + '[47m';
|
|
End;
|
|
|
|
Ansi_Color := S;
|
|
End;
|
|
|
|
Procedure OutStr (S: String);
|
|
Begin
|
|
Terminal.ProcessBuf(S[1], Length(S));
|
|
End;
|
|
|
|
Var
|
|
BaudEmu : LongInt;
|
|
Begin
|
|
WriteLn;
|
|
|
|
If ParamCount < 1 Then Begin
|
|
WriteLn('MTYPE [filename] [delay]');
|
|
Exit;
|
|
End;
|
|
|
|
Assign (dFile, ParamStr(1));
|
|
Reset (dFile, 1);
|
|
|
|
If IoResult <> 0 Then Begin
|
|
WriteLn('MTYPE: File ' + ParamStr(1) + ' not found.');
|
|
Exit;
|
|
End;
|
|
|
|
Screen := TOutput.Create(True);
|
|
Terminal := TTermAnsi.Create(Screen);
|
|
|
|
BaudEmu := strS2I(ParamStr(2));
|
|
Done := False;
|
|
A := 0;
|
|
dRead := 0;
|
|
Ch := #0;
|
|
|
|
While Not Done Do Begin
|
|
Ch := GetChar;
|
|
|
|
If BaudEmu > 0 Then Begin
|
|
Screen.BufFlush;
|
|
|
|
If A MOD BaudEmu = 0 Then WaitMS(6);
|
|
End;
|
|
|
|
If Ch = #26 Then
|
|
Break
|
|
Else
|
|
If Ch = #10 Then Begin
|
|
Terminal.Process(#10);
|
|
End Else
|
|
If Ch = '|' Then Begin
|
|
Code := GetChar;
|
|
Code := Code + GetChar;
|
|
|
|
If Code = '00' Then OutStr(Ansi_Color(0)) Else
|
|
If Code = '01' Then OutStr(Ansi_Color(1)) Else
|
|
If Code = '02' Then OutStr(Ansi_Color(2)) Else
|
|
If Code = '03' Then OutStr(Ansi_Color(3)) Else
|
|
If Code = '04' Then OutStr(Ansi_Color(4)) Else
|
|
If Code = '05' Then OutStr(Ansi_Color(5)) Else
|
|
If Code = '06' Then OutStr(Ansi_Color(6)) Else
|
|
If Code = '07' Then OutStr(Ansi_Color(7)) Else
|
|
If Code = '08' Then OutStr(Ansi_Color(8)) Else
|
|
If Code = '09' Then OutStr(Ansi_Color(9)) Else
|
|
If Code = '10' Then OutStr(Ansi_Color(10)) Else
|
|
If Code = '11' Then OutStr(Ansi_Color(11)) Else
|
|
If Code = '12' Then OutStr(Ansi_Color(12)) Else
|
|
If Code = '13' Then OutStr(Ansi_Color(13)) Else
|
|
If Code = '14' Then OutStr(Ansi_Color(14)) Else
|
|
If Code = '15' Then OutStr(Ansi_Color(15)) Else
|
|
If Code = '16' Then OutStr(Ansi_Color(16)) Else
|
|
If Code = '17' Then OutStr(Ansi_Color(17)) Else
|
|
If Code = '18' Then OutStr(Ansi_Color(18)) Else
|
|
If Code = '19' Then OutStr(Ansi_Color(19)) Else
|
|
If Code = '20' Then OutStr(Ansi_Color(20)) Else
|
|
If Code = '21' Then OutStr(Ansi_Color(21)) Else
|
|
If Code = '22' Then OutStr(Ansi_Color(22)) Else
|
|
If Code = '23' Then OutStr(Ansi_Color(23)) Else
|
|
Begin
|
|
Terminal.Process('|');
|
|
Dec (A, 2);
|
|
Continue;
|
|
End;
|
|
End Else
|
|
Terminal.Process(Ch);
|
|
End;
|
|
|
|
Close (dFile);
|
|
|
|
Terminal.Free;
|
|
Screen.Free;
|
|
End.
|