|
|
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.