Theme/prompt editor complete!

This commit is contained in:
mysticbbs 2012-03-05 21:18:37 -05:00
parent 896d5478ca
commit c7044c641f
8 changed files with 786 additions and 55 deletions

View File

@ -244,7 +244,9 @@ Begin
Str := Default;
StrPos := Length(Str) + 1;
Junk := Length(Str) - Field + 1;
If Junk < 1 Then Junk := 1;
CurPos := StrPos - Junk + 1;
Console.CursorXY (X, Y);
@ -254,9 +256,11 @@ Begin
Repeat
Ch := Key.ReadKey;
Case Ch of
#00 : Begin
Ch := Key.ReadKey;
Case Ch of
#77 : If StrPos < Length(Str) + 1 Then Begin
If (CurPos = Field) and (StrPos < Length(Str)) Then ScrollRight;

View File

@ -682,18 +682,20 @@ Begin
//If PosY > ScreenSize Then PosY := ScreenSize;
BufSize.Y := PosY - (Y - 1);
BufSize.X := Width;
BufCoord.X := 0;
BufCoord.Y := 0;
Region.Left := X - 1;
Region.Top := Y - 1;
Region.Right := Width - 1;
Region.Bottom := PosY - 1;
// If Active Then Begin
BufSize.Y := PosY - (Y - 1);
BufSize.X := Width;
BufCoord.X := 0;
BufCoord.Y := 0;
Region.Left := X - 1;
Region.Top := Y - 1;
Region.Right := Width - 1;
Region.Bottom := PosY - 1;
WriteConsoleOutput (ConOut, @Screen[1][1], BufSize, BufCoord, Region);
WriteConsoleOutput (ConOut, @Screen[1][1], BufSize, BufCoord, Region);
CursorXY(PosX, PosY);
CursorXY(PosX, PosY);
// End;
End;
Function TOutputWindows.ReadCharXY (X, Y: Byte) : Char;

View File

@ -94,18 +94,49 @@ Uses
Procedure WriteXY (X, Y, A: Byte; S: String);
Begin
Session.io.AnsiGotoXY(X, Y);
Session.io.AnsiColor(A);
Session.io.OutRaw(S);
Session.io.AnsiGotoXY (X, Y);
Session.io.AnsiColor (A);
Session.io.OutRaw (S);
End;
Procedure WriteXYPipe (X, Y, A, SZ: Byte; S: String);
Var
Count : Byte;
Code : String[2];
Begin
Session.io.AnsiGotoXY(X, Y);
Session.io.AnsiColor(A);
Session.io.OutPipe(S);
Session.io.AnsiGotoXY (X, Y);
Session.io.AnsiColor (A);
While Screen.CursorX < SZ Do Session.io.BufAddChar(' ');
Count := 1;
While Count <= Length(S) Do Begin
If S[Count] = '|' Then Begin
Code := Copy(S, Count + 1, 2);
If (Code[1] in ['0'..'2']) and (Code[2] in ['0'..'9']) Then Begin
Inc (Count, 2);
Session.io.BufAddStr(Session.io.Pipe2Ansi(strS2I(Code)));
End Else Begin
Session.io.BufAddChar(S[Count]);
Dec (SZ);
End;
End Else Begin
Session.io.BufAddChar(S[Count]);
Dec (SZ);
End;
If SZ = 0 Then Break;
Inc (Count);
End;
While SZ > 0 Do Begin
Session.io.BufAddChar(' ');
Dec(SZ);
End;
Session.io.BufFlush;
End;
Function InXY (X, Y, Field, Max, Mode: Byte; Default: String) : String;
@ -189,7 +220,8 @@ Begin
Until False;
End;
MsgBox.Close;
If BoxType < 2 Then MsgBox.Close;
MsgBox.Free;
End;
@ -556,6 +588,8 @@ Begin
Inc (A);
End;
Update;
End;
Until False;
End;

View File

@ -23,11 +23,11 @@ Type
Constructor Create;
Destructor Destroy; Override;
Function GetStr (X, Y, Field, Len, Mode: Byte; Default: String) : String;
Function GetNum (X, Y, Field, Len: Byte; Min, Max, Default: LongInt) : LongInt;
Function GetChar (X, Y : Byte; Default: Char) : Char;
Function GetStr (X, Y, Field, Len, Mode: Byte; Default: String) : String;
Function GetNum (X, Y, Field, Len: Byte; Min, Max, Default: LongInt) : LongInt;
Function GetChar (X, Y : Byte; Default: Char) : Char;
Function GetEnter (X, Y, Len: Byte; Default : String) : Boolean;
Function GetYN (X, Y : Byte; Default: Boolean) : Boolean;
Function GetYN (X, Y : Byte; Default: Boolean) : Boolean;
End;
Implementation
@ -161,24 +161,191 @@ Begin
GetEnter := Res;
End;
// 0 = numbers only 1 = as typed 2 = all caps 3 = date input
Function TAnsiMenuInput.GetStr (X, Y, Field, Len, Mode : Byte; Default : String) : String;
{ mode options: }
{ 0 = numbers only }
{ 1 = as typed }
{ 2 = all caps }
{ 3 = date input }
Var
Str : String;
Begin
Session.io.AnsiGotoXY(X, Y);
Ch : Char;
Str : String;
StrPos : Integer;
Junk : Integer;
CurPos : Integer;
Case Mode of
0,
1 : Str := Session.io.GetInput(Field, Len, 11, Default);
2 : Str := Session.io.GetInput(Field, Len, 12, Default);
3 : Str := Session.io.GetInput(Field, Len, 15, Default);
Procedure ReDraw;
Var
T : String;
Begin
T := Copy(Str, Junk, Field);
WriteXY (X, Y, Attr, T);
WriteXY (X + Length(T), Y, FillAttr, strRep(FillChar, Field - Length(T)));
Session.io.AnsiGotoXY (X + CurPos - 1, Screen.CursorY);
End;
Procedure ReDrawPart;
Begin
Session.io.AnsiColor (Attr);
Session.io.BufAddStr (Copy(Str, StrPos, Field - CurPos + 1));
Session.io.AnsiColor (FillAttr);
Session.io.BufAddStr (strRep(FillChar, (Field - CurPos + 1) - Length(Copy(Str, StrPos, Field - CurPos + 1))));
Session.io.AnsiMoveX (X + CurPos - 1);
End;
Procedure ScrollRight;
Begin
Inc (Junk);
If Junk > Length(Str) Then Junk := Length(Str);
If Junk > Len then Junk := Len;
CurPos := StrPos - Junk + 1;
ReDraw;
End;
Procedure ScrollLeft;
Begin
If Junk > 1 Then Begin
Dec (Junk);
CurPos := StrPos - Junk + 1;
ReDraw;
End;
End;
Procedure AddChar (Ch : Char);
Begin
If Length(Str) >= Len Then Exit;
If (CurPos >= Field) and (Field <> Len) Then ScrollRight;
Insert (Ch, Str, StrPos);
If StrPos < Length(Str) Then ReDrawPart;
Inc (StrPos);
Inc (CurPos);
Session.io.AnsiColor (Attr);
Session.io.BufAddChar (Ch);
End;
Begin
Changed := False;
Str := Default;
StrPos := Length(Str) + 1;
Junk := Length(Str) - Field + 1;
If Junk < 1 Then Junk := 1;
CurPos := StrPos - Junk + 1;
ReDraw;
Repeat
Ch := Session.io.GetKey;
If Session.io.IsArrow Then Begin
Case Ch of
#77 : If StrPos < Length(Str) + 1 Then Begin
If (CurPos = Field) and (StrPos < Length(Str)) Then ScrollRight;
Inc (CurPos);
Inc (StrPos);
Session.io.AnsiGotoXY (Screen.CursorX + 1, Screen.CursorY);
End;
#75 : If StrPos > 1 Then Begin
If CurPos = 1 Then ScrollLeft;
Dec (StrPos);
Dec (CurPos);
Session.io.AnsiGotoXY (Screen.CursorX - 1, Screen.CursorY);
End;
#71 : If StrPos > 1 Then Begin
StrPos := 1;
Junk := 1;
CurPos := 1;
ReDraw;
End;
#79 : Begin
StrPos := Length(Str) + 1;
Junk := Length(Str) - Field + 1;
If Junk < 1 Then Junk := 1;
CurPos := StrPos - Junk + 1;
ReDraw;
End;
#83 : If (StrPos <= Length(Str)) and (Length(Str) > 0) Then Begin
Delete (Str, StrPos, 1);
ReDrawPart;
End;
Else
If Pos(Ch, HiChars) > 0 Then Begin
ExitCode := Ch;
Break;
End;
End;
End Else
Case Ch of
#08 : If StrPos > 1 Then Begin
Dec (StrPos);
Delete (Str, StrPos, 1);
If CurPos = 1 Then
ScrollLeft
Else Begin
Session.io.AnsiMoveX(Screen.CursorX - 1);
Dec (CurPos);
ReDrawPart;
End;
End;
^Y : Begin
Str := '';
StrPos := 1;
Junk := 1;
CurPos := 1;
ReDraw;
End;
#32..
#254: Case Mode of
0 : If Ch in ['0'..'9', '-'] Then AddChar(Ch);
1 : AddChar (Ch);
2 : AddChar (UpCase(Ch));
3 : If (Ch > '/') and (Ch < ':') Then
Case StrPos of
2,5 : Begin
AddChar (Ch);
AddChar ('/');
End;
3,6 : Begin
AddChar ('/');
AddChar (Ch);
End;
Else
AddChar (Ch);
End;
End;
Else
If Pos(Ch, LoChars) > 0 Then Begin
ExitCode := Ch;
Break;
End;
End;
Until False;
Changed := (Str <> Default);
Result := Str;
End;

View File

@ -82,7 +82,6 @@ Var
Box : TAnsiMenuBox;
Image : TConsoleImageRec;
MenuPos : Array[0..4] of Byte = (1, 1, 1, 1, 1);
ThemeOld : RecTheme;
Res : Char;
Procedure BoxOpen (X1, Y1, X2, Y2: Byte);
@ -284,16 +283,6 @@ Begin
#77 : MenuPtr := 4;
End;
End Else Begin
ThemeOld := Session.Lang;
Session.Lang.FieldColor1 := 15 + 1 * 16;
Session.Lang.FieldColor2 := 7 + 1 * 16;
Session.Lang.FieldChar := #176;
Session.Lang.EchoChar := '*';
// theme will need to be reloaded after the theme edito
// just in case that specific theme is changed.
Case Res of
'A' : Configuration_ArchiveEditor;
'B' : Configuration_MessageBaseEditor;
@ -311,8 +300,6 @@ Begin
Else
MenuPtr := 0;
End;
Session.Lang := ThemeOld;
End;
End;
4 : Begin

View File

@ -9,13 +9,546 @@ Function Configuration_ThemeEditor (Select: Boolean) : String;
Implementation
Uses
m_Types,
m_FileIO,
m_Strings,
bbs_Ansi_MenuBox,
bbs_Ansi_MenuForm,
bbs_Ansi_MenuInput,
bbs_Core,
bbs_Common,
bbs_Cfg_Common;
Procedure CompileTheme (Var Theme: RecTheme);
Var
LastPer : Byte = 0;
Procedure UpdateBar (Cur : Integer);
Var
Percent : Byte;
Begin
Percent := Round(Cur / mysMaxThemeText * 100 / 5);
If Percent <> LastPer Then Begin
LastPer := Percent;
WriteXY (34, 12, 113, strRep(#178, Percent) + strRep(#176, 20 - Percent) + strPadL(strI2S(Percent * 5) + '%', 5, ' '));
End;
End;
Var
InFile : Text;
PromptFile : File of RecPrompt;
Prompt : RecPrompt;
Count : Integer;
Done : Array[0..mysMaxThemeText] of Boolean;
Temp : String;
DoneNum : Integer;
Begin
Assign (PromptFile, Config.DataPath + Theme.FileName + '.thm');
{$I-} ReWrite (PromptFile); {$I+}
If IoResult <> 0 Then Begin
ShowMsgBox(0, 'Cannot compile theme while using it');
Exit;
End;
Assign (InFile, Config.SystemPath + Theme.FileName + '.txt');
Reset (InFile);
ShowMsgBox (3, 'Compiling: ');
Prompt := '';
DoneNum := 0;
For Count := 0 to mysMaxThemeText Do Begin
Done[Count] := False;
Write (PromptFile, Prompt);
End;
Reset (PromptFile);
While Not Eof(InFile) Do Begin
ReadLn (InFile, Temp);
If Copy(Temp, 1, 3) = '000' Then Count := 0 Else
If strS2I(Copy(Temp, 1, 3)) > 0 Then Count := strS2I(Copy(Temp, 1, 3)) Else
Count := -1;
If Count <> -1 Then Begin
Inc (DoneNum);
UpdateBar(DoneNum);
If Count > mysMaxThemeText Then Begin
ShowMsgBox(0, 'String #' + strI2S(Count) + ' was not expected');
Close (InFile);
Close (PromptFile);
Erase (PromptFile);
Exit;
End;
Done[Count] := True;
Seek (PromptFile, Count);
Prompt := Copy(Temp, 5, Length(Temp));
Write (PromptFile, Prompt);
End;
End;
Close (InFile);
Close (PromptFile);
For Count := 0 to mysMaxThemeText Do Begin
If Not Done[Count] Then Begin
ShowMsgBox (0, 'String #' + strI2S(Count) + ' was not found');
Erase (PromptFile);
Break;
End;
End;
End;
Procedure EditPrompts (Var Theme: RecTheme);
Const
MaxText = 3000;
LinesPerPage = 16;
WinStartX = 3;
WinStartY = 1;
Var
Box : TAnsiMenuBox;
Input : TAnsiMenuInput;
InFile : Text;
TotalText : Word;
StrData : Array[1..MaxText] of ^String;
Comment : Array[1..LinesPerPage] of Array[1..3] of String[75];
PageData : Array[1..LinesPerPage] of Integer;
PageStart : Array[1..100] of Integer;
PageTotal : Integer;
CurPage : Byte = 1;
CurLine : Byte = 1;
CurPageLines : Byte;
TotalPrompt : Integer;
SearchMask : String;
CopyStr : String = '';
Procedure DisposeStringData;
Var
Count : Word;
Begin
For Count := TotalText DownTo 1 Do
Dispose (StrData[Count]);
End;
Function LoadStringData : Boolean;
Var
Str : String;
Buffer : Array[1..4096] of Byte;
Begin
Result := False;
Assign (InFile, Config.SystemPath + Theme.FileName + '.txt');
SetTextBuf (InFile, Buffer, SizeOf(Buffer));
{$I-} Reset (InFile); {$I+}
If IoResult <> 0 Then Begin
ShowMsgBox (0, 'Unable to open ' + Config.SystemPath + Theme.FileName + '.txt');
Exit;
End;
ShowMsgBox (2, 'Loading ' + Theme.FileName + '.txt');
TotalText := 0;
While Not Eof(InFile) Do Begin
If TotalText = MaxText Then Begin
Close (InFile);
ShowMsgBox (0, 'File too large');
DisposeStringData;
Exit;
End;
ReadLn (InFile, Str);
Inc (TotalText);
New (StrData[TotalText]);
StrData[TotalText]^ := Str;
End;
Close (InFile);
Result := True;
End;
Procedure GetTotalPages;
Var
Str : String;
Count : Integer;
Lines : Integer;
Last : Integer;
Begin
PageTotal := 0;
Lines := 0;
Last := 1;
Count := 0;
TotalPrompt := -1;
While Count < TotalText Do Begin
Inc (Count);
Str := StrData[Count]^;
If (Str <> '') and (Str[1] <> ';') and (Str[1] <> '#') Then Begin
Inc (TotalPrompt);
Inc (Lines);
If Lines = 1 Then Begin
Inc (PageTotal);
PageStart[PageTotal] := Last;
End;
End;
If Lines = LinesPerPage Then Begin
Lines := 0;
Last := Count + 1;
End;
End;
End;
Procedure DrawPage (Silent: Boolean);
Var
Str : String;
A : Byte;
Count : Integer;
Begin
For A := 1 to LinesPerPage Do Begin
Comment[A][1] := '';
Comment[A][2] := '';
Comment[A][3] := '';
End;
CurPageLines := 0;
Count := PageStart[CurPage];
While (CurPageLines < LinesPerPage) and (Count <= TotalText) Do Begin
Str := StrData[Count]^;
Inc (Count);
If Str[1] = ';' Then Begin
Delete (Str, 1, 2);
Comment[CurPageLines + 1][1] := Comment[CurPageLines + 1][2];
Comment[CurPageLines + 1][2] := Comment[CurPageLines + 1][3];
Comment[CurPageLines + 1][3] := Str;
End Else
If (Str <> '') and (Str[1] <> '#') Then Begin
Inc(CurPageLines);
PageData[CurPageLines] := Count - 1;
If Not Silent Then
WriteXYPipe (WinStartX, WinStartY + CurPageLines, 7, 75, Copy(Str, 5, 255));
End;
End;
If Not Silent Then
If CurPageLines < LinesPerPage Then
For A := CurPageLines + 1 to LinesPerPage Do
WriteXY (WinStartX, A + WinStartY, 7, strRep(' ', 75));
End;
Procedure DrawComments;
Begin
WriteXY (3, 19, 15, strPadR(Comment[CurLine][1], 75, ' '));
WriteXY (3, 20, 15, strPadR(Comment[CurLine][2], 75, ' '));
WriteXY (3, 21, 15, strPadR(Comment[CurLine][3], 75, ' '));
End;
Procedure JumpToPrompt (Cur : Word);
Var
Box : TAnsiMenuBox;
Input : TAnsiMenuInput;
Num : Word;
Count : Word;
PageEnd : Word;
LineNum : Word;
B : Word;
Begin
Box := TAnsiMenuBox.Create;
Input := TAnsiMenuInput.Create;
Box.Open (27, 8, 53, 12);
WriteXY (30, 10, 112, 'Jump to prompt #:');
Num := Input.GetNum(48, 10, 4, 4, 0, mysMaxThemeText, Cur);
Box.Close;
Input.Free;
Box.Free;
If Num <> Cur Then
For Count := 1 to PageTotal Do Begin
If Count = PageTotal Then
PageEnd := TotalText
Else
PageEnd := PageStart[Count + 1] - 1;
LineNum := 0;
For B := PageStart[Count] to PageEnd Do Begin
If (StrData[B]^[1] <> ';') and (StrData[B]^[1] <> '#') Then Begin
Inc (LineNum);
If strS2I(Copy(StrData[B]^, 1, 3)) = Num Then Begin
If Not ((Count = CurPage) and (CurLine = LineNum)) Then Begin
CurPage := Count;
CurLine := LineNum;
DrawPage(False);
Exit;
End;
End;
End;
End;
End;
DrawPage(False);
End;
Procedure Search (Again : Boolean);
Var
Temp : String;
Start : Byte;
A : Byte;
B : Integer;
PageEnd : Integer;
LineNum : Integer;
Box : TAnsiMenuBox;
Input : TAnsiMenuInput;
Begin
If (Not Again) or ((Again) and (SearchMask = '')) Then Begin
Box := TAnsiMenuBox.Create;
Input := TAnsiMenuInput.Create;
Box.Header := ' Search ';
Box.Open(14, 8, 67, 10);
SearchMask := Input.GetStr(16, 9, 50, 50, 1, SearchMask);
Input.Free;
Box.Free;
If SearchMask = '' Then Begin
DrawPage(False);
Exit;
End;
Start := 1;
Again := False;
End Else
Start := CurPage;
For A := Start to PageTotal Do Begin
If A = PageTotal Then
PageEnd := TotalText
Else
PageEnd := PageStart[A+1]-1;
LineNum := 0;
For B := PageStart[A] to PageEnd Do Begin
Temp := StrData[B]^;
If (Temp[1] <> ';') and (Temp[1] <> '#') Then Begin
Inc (LineNum);
If Again and (A = CurPage) Then
If (LineNum <= CurLine) and (LineNum < LinesPerPage) Then Continue;
If Pos(strUpper(SearchMask), strUpper(strStripPipe(StrData[B]^))) > 0 Then Begin
If Not ((A = CurPage) and (CurLine = LineNum)) Then Begin
CurPage := A;
CurLine := LineNum;
DrawPage(False);
Exit;
End;
End;
End;
End;
End;
ShowMsgBox(0, 'No maching text was found');
DrawPage(False);
End;
Var
EditStr : String;
UndoStr : String;
CurStr : String[3];
Changed : Boolean = False;
Saved : Boolean = False;
Count : Integer;
Image : TConsoleImageRec;
Begin
Screen.GetScreenImage(1, 1, 79, 24, Image);
If Not LoadStringData Then Exit;
GetTotalPages;
Session.io.AnsiColor(7);
Session.io.AnsiClear;
Box := TAnsiMenuBox.Create;
Input := TAnsiMenuInput.Create;
Box.FrameType := 1;
Box.BoxAttr := 8;
Box.Box3D := False;
Box.Shadow := False;
Input.HiChars := #72#73#80#81;
Input.LoChars := #01#02#06#07#11#16#20#21#27;
Box.Open (1, 1, 79, 22);
WriteXY (2, 18, 8, strRep('Ä', 77));
WriteXY (3, 1, 8, ' / ');
WriteXY (8, 1, 7, strI2S(TotalPrompt));
WriteXY (73 - Length(Theme.FileName), 1, 7, ' ' + Theme.FileName + '.txt ');
WriteXYPipe (1, 23, 112, 79, ' Prompts ³ |01Press |15CTRL |01+ |15T|01op |15B|01ottom |15F|01ind |15A|01gain |15G|01oto |15K|01ut |15P|01aste |15U|01ndo |00³ ESC/Quit ');
DrawPage(False);
Repeat
DrawComments;
CurStr := Copy(StrData[PageData[CurLine]]^, 1, 3);
EditStr := Copy(StrData[PageData[CurLine]]^, 5, 255);
UndoStr := EditStr;
WriteXY (4, 1, 7, CurStr);
EditStr := Input.GetStr(WinStartX, WinStartY + CurLine, 75, 254, 1, EditStr);
Case Input.ExitCode of
#16 : If CopyStr <> '' Then Begin
EditStr := CopyStr;
Input.Changed := True;
End;
#21 : Begin
EditStr := UndoStr;
Input.Changed := False;
End;
End;
WriteXYPipe (WinStartX, WinStartY + CurLine, 7, 75, EditStr);
StrData[PageData[CurLine]]^ := CurStr + ' ' + EditStr;
If Input.Changed Then Changed := True;
Case Input.ExitCode of
#01 : Search(True);
#02 : Begin
CurPage := PageTotal;
DrawPage(False);
CurLine := CurPageLines;
End;
#06 : Search(False);
#07 : JumpToPrompt(strS2I(CurStr));
#11 : CopyStr := EditStr;
#20 : Begin
CurPage := 1;
CurLine := 1;
DrawPage(False);
End;
#27 : Break;
#72 : If CurLine > 1 Then
Dec(CurLine)
Else Begin
If CurPage > 1 Then Begin
Dec (CurPage);
DrawPage(False);
CurLine := CurPageLines;
End;
End;
#73 : If CurPage > 1 Then Begin
Dec (CurPage);
DrawPage(False);
End Else
CurLine := 1;
#80 : If CurLine < CurPageLines Then
Inc(CurLine)
Else Begin
If CurPage < PageTotal Then Begin
Inc (CurPage);
DrawPage(False);
CurLine := 1;
End;
End;
#81 : If CurPage < PageTotal Then Begin
Inc (CurPage);
DrawPage(False);
CurLine := 1;
End Else
CurLine := CurPageLines;
End;
Until False;
If Changed Then
If ShowMsgBox(1, 'Save changes?') Then Begin
Saved := True;
Assign (InFile, Config.SystemPath + Theme.FileName + '.txt');
ReWrite (InFile);
For Count := 1 to TotalText Do Begin
EditStr := StrData[Count]^;
WriteLn (InFile, EditStr);
End;
Close (InFile);
End;
DisposeStringData;
If Saved Then
CompileTheme(Theme);
Box.Free;
Input.Free;
Session.io.RemoteRestore(Image);
End;
Procedure EditBars (Var Theme: RecTheme);
Var
Box : TAnsiMenuBox;
@ -136,6 +669,7 @@ Begin
Repeat
Case Form.Execute of
'1' : EditPrompts(Theme);
'2' : EditOptions(Theme);
'3' : Begin
Box.Hide;

View File

@ -1094,7 +1094,7 @@ End;
{$IFDEF UNIX}
Function TBBSIO.InKey : Char;
Begin
Result := #1;
Result := #255;
IsArrow := False;
If Input.KeyWait(1000) Then Begin
@ -1109,7 +1109,7 @@ Begin
Exit;
End;
Result := #1;
Result := #255;
End;
End;
End;
@ -1121,7 +1121,7 @@ Var
Handles : Array[0..1] of THandle;
InType : Byte;
Begin
Result := #1;
Result := #255;
Handles[0] := Input.ConIn;
@ -1162,10 +1162,10 @@ Begin
ProcessSysopCommand(Result);
Result := #1;
Result := #255;
End;
If Not Screen.Active Then Result := #1;
If Not Screen.Active Then Result := #255;
End;
2 : Begin // SOCKET read event
If TBBSCore(Core).Client.ReadBuf(Result, 1) < 0 Then Begin
@ -1179,12 +1179,14 @@ Begin
IsArrow := True;
Case Result of
(*
#03 : Result := #81; { pgdn }
#04 : Result := #77; { right }
#05 : Result := #72; { up }
#18 : Result := #73; { pgup }
#19 : Result := #75; { left }
#24 : Result := #80; { down }
*)
#27 : Begin
If Not TBBSCore(Core).Client.DataWaiting Then WaitMS(25);
If Not TBBSCore(Core).Client.DataWaiting Then WaitMS(25);
@ -1218,7 +1220,7 @@ Var
TimeCount : LongInt;
LastSec : LongInt;
Begin
Result := #1;
Result := #255;
TBBSCore(Core).TimeOut := TimerSeconds;
@ -1286,7 +1288,7 @@ Begin
End;
Result := InKey;
Until Result <> #1;
Until Result <> #255;
End;
Function TBBSIO.GetYNL (Str: String; Yes: Boolean) : Boolean;

View File

@ -20,6 +20,7 @@ BUGS AND POSSIBLE ISSUES
FPC BUG? DirAttr is suspect in MPL is it 1 byte or 4 in size?
! MDL screensave/restore in local console is broken in Windows(?) only?
! View archive not working if its external view? [Griffin]
! Editing current theme will prob not save right [g00r00]
FUTURE / IDEAS / WORK IN PROGRESS / NOTES
=========================================