⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 showansi.cpp

📁 国外网站上的一些精典的C程序
💻 CPP
字号:
// Ansi/AVT0+ file viewer// public domain// by David Nugent <davidn@unique.blaze.net.au>// 3:632/348@fidonet// V1.1 David Nugent  Added cmdline wildcard expansion using//                    SNIPPETS dirport.h//                    Added avatar/0+ file support.#define PROGRAM   "showansi"#define VERSION   "V1.10-PD"#if defined(__WATCOMC__)  // Turn off warnings for resolution of temp object#pragma warning 604 9#pragma warning 595 9#endif#include <fstream.h>#include <string.h>#include <ctype.h>#include <errno.h>#include "ansisys.hpp"#include "avatar.hpp"extern "C"{ // SNIPPETS portable directory routines  #include "dirport.h"}intmain(int argc, char * argv[]){  if (argc == 1)    cout << PROGRAM "; ANSI & AVT/0+ file interpreter; " VERSION "\n"    "This program is in the public domain. Compiled " __DATE__ "\n"    "by David Nugent <davidn@unique.blaze.net.au> 3:632/348@fidonet\n\n"    "  usage: " PROGRAM " [-p] [-a] [-f] file1 [file2 ...]\n"    "    Displays file1[,file2..] to the screen handling ANSI/Avatar\n"    "    -p     Toggles screen pausing (default=ON)\n"    "    -a     Toggles file type (default=ANSI)\n"    "    -f     Toggles flush after every character (default=OFF)\n"    << endl;  else  {    char pause = 1;    char done = 0;    char doavt0 = 0;    char doflush = 0;    scrinterp * interpreter = 0;    video V;    for (int carg = 0 ; !done && ++carg < argc ;)    {      char * argp = argv[carg];      if (*argp == '-' || *argp == '/')      {        ++argp;        switch(tolower(*argp))        {          case 'p':     // -p toggles pause between files            pause = !pause;            break;          case 'a':     // -a toggles ansi/avt0 display            doavt0 = !doavt0;            delete interpreter;            interpreter = 0;            break;          case 'f':     // -f flush each character (slows output)            doflush = !doflush;            break;        }      }      else      {        DOSFileData ff;        char * p;        char tmpstr[128] = "";        while ((p = strchr(argp, '/')) != 0)          *p = '\\';        p = strrchr(argp, '\\');        if (p == 0)          *(p = tmpstr) = '\0';        else        {          ++p;          int n = p - argp;          strncpy(tmpstr, argp, n);          p = tmpstr + n;        }        if (FIND_FIRST(argp, _A_NORMAL, &ff) != 0)          cerr << "can't find file: " << argp << endl;        else do        {          argp = tmpstr;          strcpy(p, ff_name(&ff));    // Append it to path, if any          ifstream ansifile(argp, ios::in|ios::binary);          if (!ansifile)            cerr << "showansi: can't open file " << argp                 << ':' << strerror(errno) << endl;          else          {            V.setattr(7);            V.cls();            V.gotoxy(0, 0);            if (interpreter == 0)   // Nothing allocated yet              interpreter = (doavt0) ? (scrinterp *)new avatar(V) :                                       (scrinterp *)new ansisys(V);            interpreter->flusheverychar(doflush);            interpreter->display(ansifile);            if (pause)            {              cell_t x, y;              V.maxxy(x, y);              V.gotoxy(0, --y);              V.setattr(15);              V.put(argp);              V.put(" -- press any key to continue --");              unsigned short k = V.getkey();              V.gotoxy(0, y);              V.repchr(' ', x);              V.gotoxy(0, --y);              if ((k & 0xff) == 27) // ESC              {                ++done;                break;              }            }          }        }        while (FIND_NEXT(&ff)==0);        FIND_END(&ff);      }    }    delete interpreter;  }  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -