From 91545dce6e8bb518fca56e59cdaa5ab50aa3fb16 Mon Sep 17 00:00:00 2001 From: mysticbbs Date: Sat, 31 Aug 2013 00:38:55 -0400 Subject: [PATCH] wth is going on?!? --- mystic/bbs_edit_ansi.pas | 162 ++++++++++++++++++++++++++------------- 1 file changed, 109 insertions(+), 53 deletions(-) diff --git a/mystic/bbs_edit_ansi.pas b/mystic/bbs_edit_ansi.pas index 646e343..8cd66e3 100644 --- a/mystic/bbs_edit_ansi.pas +++ b/mystic/bbs_edit_ansi.pas @@ -11,6 +11,20 @@ Uses Const fseMaxCutText = 60; + GlyphTypeMax = 10; + GlyphTypeStr : Array[1..10] of String[10] = ( + ('ڿijô'), + ('ɻȼͺ̹'), + ('ոԾͳƵ'), + ('ַӽĺǶ'), + ('雜'), + (''), + (' '), + (''), + (''), + ('') + ); + Type TEditorANSI = Class Owner : Pointer; @@ -31,6 +45,7 @@ Type InsertMode : Boolean; DrawMode : Boolean; GlyphMode : Boolean; + GlyphPtr : Byte; WrapMode : Boolean; ClearEOL : Boolean; LastLine : LongInt; @@ -44,6 +59,8 @@ Type Done : Boolean; Subject : String; Template : String; + DrawTemplate : String; + SavedInsert : Boolean; MaxMsgLines : Word; MaxMsgCols : Byte; @@ -81,7 +98,8 @@ Type Function Edit : Boolean; Procedure Quote; Procedure QuoteWindow; - Procedure Commands; + Procedure EditorCommands; + Procedure DrawCommands; Procedure MessageUpload; End; @@ -114,6 +132,7 @@ Begin InsertMode := True; DrawMode := False; GlyphMode := False; + GlyphPtr := 6; WrapMode := True; ClearEOL := RowSize >= 79; LastLine := 1; @@ -387,7 +406,7 @@ Begin Session.io.AnsiColor (Session.io.ScreenInfo[3].A); Session.io.AnsiGotoXY (Session.io.ScreenInfo[3].X, Session.io.ScreenInfo[3].Y); - If InsertMode Then Session.io.BufAddStr('INS') else Session.io.BufAddStr('OVR'); { ++lang++ } + If InsertMode Then Session.io.BufAddStr('INS') Else Session.io.BufAddStr('OVR'); { ++lang++ } End; Procedure TEditorANSI.ReDrawTemplate (Reset: Boolean); @@ -398,9 +417,23 @@ Begin TBBSCore(Owner).io.AllowArrow := True; - Session.io.PromptInfo[2] := Subject; + If DrawMode Then Begin + // temp until we show file + Session.io.ScreenInfo[1].Y := 3; + Session.io.ScreenInfo[2].Y := 24; - Session.io.OutFile (Template, True, 0); + Session.io.AnsiColor(7); + Session.io.AnsiClear; + + WriteXY (1, 1, 7, 'Draw Mode ESC/Menu - Insert: ' + Session.io.OutON(InsertMode) + ' GlyphMode: ' + Session.io.OutON(GlyphMode) + ' Set: '); + WriteXY (53, 1, CurAttr, GlyphTypeStr[GlyphPtr]); + WriteXY (1, 2, 8, strRep('-', 79)); + End Else Begin + Session.io.PromptInfo[2] := Subject; + Session.io.OutFile (Template, True, 0); + + ToggleInsert (False); + End; WinX1 := 1; WinX2 := MaxMsgCols; //79 @@ -431,8 +464,6 @@ Begin End; DrawPage (1, WinSize, False); - - ToggleInsert (False); End; Procedure TEditorANSI.LocateCursor; @@ -446,17 +477,6 @@ Begin While TopLine + CurY - 1 > LastLine Do Dec (CurY); -(* - If Not DrawMode Then Begin - If (CurX > 1) and (CurX = CurLength + 1) Then - CurAttr := ANSI.Data[CurLine][CurX - 1].Attr - Else - CurAttr := ANSI.Data[CurLine][CurX].Attr; - - If CurAttr = 0 Then CurAttr := 7; - End; -*) - // With TBBSCore(Owner).io Do Begin // AnsiGotoXY (1, 1); // BufAddStr ('X:' + strI2S(CurX) + ' Y:' + strI2S(CurY) + ' CL:' + strI2S(CurLine) + ' TopL:' + strI2S(TopLine) + ' Last:' + strI2S(LastLine) + ' Len:' + strI2S(GetLineLength(ANSI.Data[CurLine], 80)) + ' Row:' + strI2S(RowSize) + ' '); @@ -688,16 +708,20 @@ Procedure TEditorANSI.DoChar (Ch: Char); Var CharAttr : Byte; Begin - If (Session.io.ScreenInfo[6].A <> 0) and (Pos(Ch, '0123456789') > 0) Then - CharAttr := Session.io.ScreenInfo[6].A - Else - If (Session.io.ScreenInfo[5].A <> 0) and (Pos(Ch, '.,!@#$%^&*()_+-=~`''"?;:<>\/[]{}|') > 0) Then - CharAttr := Session.io.ScreenInfo[5].A - Else - If (Session.io.ScreenInfo[4].A <> 0) and (Ch = UpCase(Ch)) Then - CharAttr := Session.io.ScreenInfo[4].A - Else - CharAttr := CurAttr; + CharAttr := CurAttr; + + If DrawMode Then Begin + If (Ch in ['0'..'9']) And GlyphMode Then + Ch := GlyphTypeStr[GlyphPtr][strS2I(Ch) + 1] + End Else + If (Session.io.ScreenInfo[6].A <> 0) and (Pos(Ch, '0123456789') > 0) Then + CharAttr := Session.io.ScreenInfo[6].A + Else + If (Session.io.ScreenInfo[5].A <> 0) and (Pos(Ch, '.,!@#$%^&*()_+-=~`''"?;:<>\/[]{}|') > 0) Then + CharAttr := Session.io.ScreenInfo[5].A + Else + If (Session.io.ScreenInfo[4].A <> 0) and (Ch = UpCase(Ch)) Then + CharAttr := Session.io.ScreenInfo[4].A; If InsertMode Then Begin Move (ANSI.Data[CurLine][CurX], ANSI.Data[CurLine][CurX + 1], SizeOf(RecAnsiBufferChar) * (CurLength - CurX + 1)); @@ -813,8 +837,13 @@ Begin If Not LineDown(True) Then DrawPage (CurY - 1, WinSize, True); End; - End Else - LineDown(True); + End Else Begin + If CurLine = LastLine Then + InsertLine (CurLine + 1); + + If Not LineDown(True) Then + DrawPage (CurY - 1, WinSize, True); + End; End; Procedure TEditorANSI.Quote; @@ -1142,7 +1171,7 @@ Begin End; End; -Procedure TEditorANSI.Commands; +Procedure TEditorANSI.EditorCommands; Var Ch : Char; Str : String; @@ -1153,7 +1182,11 @@ Begin Repeat Session.io.OutFull (Session.GetPrompt(354)); + {$IFDEF TESTEDITOR} + Ch := Session.io.OneKey ('?ACDHQRSTU', True); + {$ELSE} Ch := Session.io.OneKey ('?ACHQRSTU', True); + {$ENDIF} Case Ch of '?' : Session.io.OutFullLn (Session.GetPrompt(355)); @@ -1162,9 +1195,17 @@ Begin Exit; End Else Begin Done := Session.io.GetYN(Session.GetPrompt(356), False); + Exit; End; 'C' : Exit; + 'D' : Begin + DrawMode := True; + SavedInsert := InsertMode; + InsertMode := False; + + Exit; + End; 'H' : Begin Session.io.OutFile ('fshelp', True, 0); Exit; @@ -1196,6 +1237,32 @@ Begin Until Done; End; +Procedure TEditorANSI.DrawCommands; +Var + Ch : Char; +Begin + Repeat + Session.io.OutFull ('|CR|09Draw Commands (?/Help): '); + + Ch := Session.io.OneKey ('?GQ', True); + + Case Ch of + '?' : Session.io.OutFullLn ('|CR(Q)uit Draw Mode (G)lyph Mode'); + 'G' : Begin + GlyphMode := Not GlyphMode; + + Exit; + End; + 'Q' : Begin + DrawMode := False; + InsertMode := SavedInsert; + + Exit; + End; + End; + Until False; +End; + Procedure TEditorANSI.MessageUpload; Var FN : String[100]; @@ -1334,21 +1401,11 @@ Begin End; End Else Case Ch of -(* - ^A : Begin - If Forced Then - Session.io.OutFull (Session.GetPrompt(307)) - Else - Done := Session.io.GetYN(Session.GetPrompt(356), False); - - If Not Done Then ReDrawTemplate(False); - End; -*) ^B : ReformParagraph; ^F : CurX := 1; ^G : CurX := CurLength + 1; ^H : DoBackSpace; - ^I : Begin + ^I : If CurLength < RowSize Then Begin If (CurX < RowSize) and (CurX MOD 5 = 0) Then DoChar(' '); @@ -1379,7 +1436,7 @@ Begin Session.io.OutFile('fshelp', True, 0); ReDrawTemplate(False); End; - ^Q : Begin + ^Q : If Not DrawMode Then Begin If Session.User.ThisUser.UseLBQuote Then QuoteWindow Else @@ -1410,24 +1467,23 @@ Begin End; ^Z, ^[ : Begin - Commands; + If DrawMode Then + DrawCommands + Else + EditorCommands; If (Not Save) and (Not Done) Then ReDrawTemplate(False); - - Session.io.AllowArrow := True; End; #32.. - #254 : If (CurLength >= RowSize) and (GetWrapPos(ANSI.Data[CurLine], RowSize, RowSize) = 0) Then Begin + #254 : If (CurLength >= RowSize) and (GetWrapPos(ANSI.Data[CurLine], RowSize, RowSize) = 0) And InsertMode Then Begin // dont do anything End Else - If (CurX = 1) and (Ch = '/') Then Begin - Commands; + If (CurX = 1) and (Ch = '/') and (Not DrawMode) Then Begin + EditorCommands; - If (Not Save) and (Not Done) Then ReDrawTemplate(False); - - Session.io.AllowArrow := True; - End Else - DoChar(Ch); + If (Not Save) and (Not Done) Then ReDrawTemplate(False); + End Else + DoChar(Ch); End; Until Done;