summaryrefslogtreecommitdiff
path: root/tvision/classes/teditorf.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tvision/classes/teditorf.cc')
-rw-r--r--tvision/classes/teditorf.cc106
1 files changed, 106 insertions, 0 deletions
diff --git a/tvision/classes/teditorf.cc b/tvision/classes/teditorf.cc
new file mode 100644
index 0000000..e4db81e
--- /dev/null
+++ b/tvision/classes/teditorf.cc
@@ -0,0 +1,106 @@
+/* Modified by Robert Hoehne and Salvador Eduardo Tropea for the gcc port */
+/*----------------------------------------------------------*/
+/* */
+/* Turbo Vision 1.0 */
+/* Copyright (c) 1991 by Borland International */
+/* */
+/*----------------------------------------------------------*/
+/*****************************************************************************
+
+ These are the routines that formats the lines before writing to the buffer.
+They are a hack, the original TV had it made in assembler (edits.asm) and
+Robert did a quick hack. We still using some of this code so isn't too bad
+;-)
+
+ JASC -> Jul 2000, endian stuff
+
+*****************************************************************************/
+
+#define Uses_TEditor
+#include <tv.h>
+
+#if defined(TV_BIG_ENDIAN)
+ #define endianCol( letra, color ) ((((unsigned)letra)<<8) | ((unsigned)color))
+#else
+ #define endianCol( letra, color ) ((((unsigned)color)<<8) | ((unsigned)letra))
+#endif
+
+#define CALL if (call10(this,(ushort *)DrawBuf,color,count,offset,LinePtr,bufptr,Width) == False) return
+
+Boolean call10(const TEditor *edit, ushort *drawBuf, ushort color, int cx,
+ int &offset, unsigned &lineptr, int &bufptr, int Width)
+{
+ uchar c;
+ int count = cx - lineptr;
+ if (count<=0) return True;
+ do {
+ c = edit->buffer[lineptr++];
+ if (c == 0x0a || c == 0x0d || c == 0x09)
+ {
+ if (c == 0x09)
+ {
+ do
+ {
+ drawBuf[bufptr++] = endianCol(' ', color);
+ offset++;
+#if 1
+ } while (offset & 7);
+#else
+ } while ((offset % TEditor::tabSize) != 0);
+#endif
+ }
+ else
+ {
+ count = Width-offset;
+ if (count<=0)
+ return True;
+ while (count--)
+ drawBuf[bufptr++] = endianCol(' ', color);
+ return False;
+ }
+ }
+ else
+ {
+ drawBuf[bufptr++] = endianCol(c, color);
+ offset++;
+ }
+ if (offset >= Width)
+ {
+ return False;
+ }
+ count--;
+ } while (count);
+ return True;
+}
+
+#define normalColor (Colors & 0xff)
+#define selectColor (Colors >> 8)
+
+void TEditor::formatLine( void *DrawBuf, uint32 LinePtr, int Width,
+ ushort Colors )
+{
+ int count,offset,bufptr;
+ ushort color;
+ bufptr = 0;
+ offset = 0;
+ if (selStart > LinePtr)
+ {
+ color = normalColor;
+ count = selStart;
+ CALL;
+ }
+ color = selectColor;
+ count = curPtr;
+ CALL;
+ LinePtr += gapLen;
+ count = selEnd+gapLen;
+ CALL;
+ color = normalColor;
+ count = bufSize;
+ CALL;
+ count = Width-offset;
+ //if (count<=offset) return;
+ if (count<1) return;
+ while (count--) ((ushort *)(DrawBuf))[bufptr++] = endianCol(' ', color);
+}
+