|
|
1.1 root 1: //---------------------------------------------------------------------------
2:
3: #include <vcl.h>
4: #pragma hdrstop
5:
6: #include "MainFormUnit.h"
7: #include "PreviewFormUnit.h"
8: //---------------------------------------------------------------------------
9: #pragma package(smart_init)
10: #pragma resource "*.dfm"
11: TPreviewForm *PreviewForm;
12: //---------------------------------------------------------------------------
13: __fastcall TPreviewForm::TPreviewForm(TComponent* Owner)
14: : TForm(Owner)
15: {
16: Width=MainForm->SpyTerminalWidth;
17: Height=MainForm->SpyTerminalHeight;
18: Terminal = new TEmulVT(this);
19: Terminal->Parent=this;
20: Terminal->Align=alClient;
21: Terminal->Rows=MAX_ROW;
22: Terminal->Font=MainForm->SpyTerminalFont;
23: Terminal->AutoWrap=true;
24: ActiveControl=Terminal;
25: }
26: //---------------------------------------------------------------------------
27: __fastcall TPreviewForm::~TPreviewForm()
28: {
29: delete Terminal;
30: }
31:
32: #define ANSI_ESC "\x1b["
33:
34: //---------------------------------------------------------------------------
35: void __fastcall TPreviewForm::FormShow(TObject *Sender)
36: {
37: char str[128];
38:
39: Caption="Previewing " + Filename.UpperCase();
40:
41: Terminal->Clear();
42:
43: FILE* fp=fopen(Filename.c_str(),"rb");
44:
45: if(fp==NULL)
46: return;
47:
48: int ch;
49: while(!feof(fp)) {
50: ch=fgetc(fp);
51: if(ch==EOF)
52: break;
53: if(ch==1) { /* ctrl-a */
54: ch=fgetc(fp);
55: if(ch==EOF)
56: break;
57: switch(toupper(ch)) {
58: case 'A':
59: sprintf(str,"\1");
60: break;
61: case '<':
62: sprintf(str,"\b");
63: break;
64: case '>':
65: sprintf(str,ANSI_ESC"K");
66: break;
67: case '[':
68: sprintf(str,"\r");
69: break;
70: case ']':
71: sprintf(str,"\n");
72: break;
73: case 'L':
74: sprintf(str,ANSI_ESC"2J");
75: break;
76: case '-':
77: case '_':
78: case 'N':
79: sprintf(str,ANSI_ESC"0m");
80: break;
81: case 'H':
82: sprintf(str,ANSI_ESC"1m");
83: break;
84: case 'I':
85: sprintf(str,ANSI_ESC"5m");
86: break;
87: case 'K':
88: sprintf(str,ANSI_ESC"30m");
89: break;
90: case 'R':
91: sprintf(str,ANSI_ESC"31m");
92: break;
93: case 'G':
94: sprintf(str,ANSI_ESC"32m");
95: break;
96: case 'Y':
97: sprintf(str,ANSI_ESC"33m");
98: break;
99: case 'B':
100: sprintf(str,ANSI_ESC"34m");
101: break;
102: case 'M':
103: sprintf(str,ANSI_ESC"35m");
104: break;
105: case 'C':
106: sprintf(str,ANSI_ESC"36m");
107: break;
108: case 'W':
109: sprintf(str,ANSI_ESC"37m");
110: break;
111: case '0':
112: sprintf(str,ANSI_ESC"40m");
113: break;
114: case '1':
115: sprintf(str,ANSI_ESC"41m");
116: break;
117: case '2':
118: sprintf(str,ANSI_ESC"42m");
119: break;
120: case '3':
121: sprintf(str,ANSI_ESC"43m");
122: break;
123: case '4':
124: sprintf(str,ANSI_ESC"44m");
125: break;
126: case '5':
127: sprintf(str,ANSI_ESC"45m");
128: break;
129: case '6':
130: sprintf(str,ANSI_ESC"46m");
131: break;
132: case '7':
133: sprintf(str,ANSI_ESC"47m");
134: break;
135: case '.':
136: case ',':
137: case ';':
138: /* ignore delay codes */
139: continue;
140: default:
141: if(ch>=0x7f) /* move cursor right x columns */
142: sprintf(str,ANSI_ESC"%uC",ch-0x7f);
143: else
144: sprintf(str,"\1%c",ch);
145: break;
146: }
147: Terminal->WriteBuffer(str,strlen(str));
148: }
149: else
150: Terminal->WriteBuffer(&ch,1);
151: }
152: fclose(fp);
153: }
154: //---------------------------------------------------------------------------
155: void __fastcall TPreviewForm::FormClose(TObject *Sender,
156: TCloseAction &Action)
157: {
158: MainForm->SpyTerminalWidth=Width;
159: MainForm->SpyTerminalHeight=Height;
160:
161: }
162: //---------------------------------------------------------------------------
163:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.