📄 faxutil.cpp
字号:
// ******************************************************************** //
// //
// FAXUTIL.CPP //
// Copyright (c) 1993, Michael Holmes and Bob Flanders //
// C++ Communication Utilities //
// //
// This file contains the main function for the fax utility //
// program. This program allows the user to view, print and //
// encode ASCII text files into fax formated files. This code //
// is Borland C++ version 3.x specific. Code for Microsoft //
// C/C++ version 7 is on diskette. //
// //
// Compile with: BCC -O2-i -mc faxutil.cpp //
// //
// ******************************************************************** //
#include <stdio.h> // standard i/o library
#include <stdarg.h> // variable argument list
#include <string.h> // string handling routines
#include <stdlib.h> // std conversion routines
#include <assert.h> // assertion routines
#include <dos.h> // dos functions
#include <ctype.h> // character routines
#include <conio.h> // console functions
#include <bios.h> // bios functions
#include <dir.h> // directory routines
#include <malloc.h> // memory routines
#include <io.h> // file i/o functions
#include <fcntl.h> // access symbolics
#include <graphics.h> // graphics routines
#include <sys\stat.h> // dos create fnc flags
#include "keys.h" // keyboard definitions
#define CURSOR() _setcursortype(_NORMALCURSOR) // normal text cursor
#define BIGCURSOR() _setcursortype(_SOLIDCURSOR) // insert mode cursor
#define NOCURSOR() _setcursortype(_NOCURSOR) // turn off cursor
#define COUNT(x) (sizeof(x) / sizeof(x[0])) // item count
#define NOT ! // shorthand logical
#define BYTE char // single byte
#define UINT unsigned int // unsigned integer
#define UCHAR unsigned char // unsigned char
#define MAX_PATH 79 // maximum path length
#define MIX(x,y) ((x << 4) + (y)) // mix colors for fg and bg
#define FG(x) (unsigned char) x >> 4 // extract foreground color
#define BG(x) x & 0x07 // ..and background color
#define IN(x) inportb(base + x) // read a UART register
#define OUT(x,y) outportb(base + x, y) // ..and write a register
#define PELS 1728 // pixels per line
#define LINE PELS / 8 // bytes per line
#define LINES 1143 // lines per page
#define PAGE ((long)LINE * LINES) // bitmap size
#define COLUMNS PELS / 16 // max chars per line
#define ROWS LINES / 22 // ..and max lines per page
#define DLE 0x10 // DLE character
#define ETX 0x3 // ..and ETX character
#define ESC_CHAR "\x1b" // escape char for printer
/* ******************************************************************** *
*
* Routine definitions
*
* ******************************************************************** */
void initialization(int, char **), // initialization
wait(long); // wait a number of ticks
int f_exit(int, int), // menu exit routine
f_open(int, int), // fax file open routine
f_format(int, int), // format ASCII file routine
f_lpt1(int, int), // fax print for LPT1:
f_lpt2(int, int), // ..LPT2:
f_lpt3(int, int), // ..and LPT3:
f_view(int, int), // view fax onscreen
get_key(int); // get any type of key
/* ******************************************************************** *
*
* Includes
*
* ******************************************************************** */
#include "window.cpp" // window class
#include "menu.cpp" // menu class
#include "fglobal.cpp" // strings and global data
#include "futility.cpp" // utility functions
#include "codeword.cpp" // codewords for G3 encoding
#include "asciimap.cpp" // bitmap of ASCII chars
#include "fconvert.cpp" // conversion routines
#include "ffile.cpp" // file menu functions
#include "fprint.cpp" // print menu functions
#include "fview.cpp" // view menu functions
/* ******************************************************************** *
*
* main() -- mainline
*
* ******************************************************************** */
void main(int argc, // command line token count
char *argv[]) // ..and command line tokens
{
printf(copyright); // display copyright msg
initialization(argc, argv); // init and parse cmd line
while(NOT quit_flag) // loop 'til user requests out
main_menu.Display(0x100); // ..else display menu, always
clrscr(); // clean up screen
rc = 0; // clear DOS errorlevel
quit_with(done); // ..and give completion msg
}
/* ******************************************************************** *
*
* initialization() -- perform framework initializations
*
* ******************************************************************** */
void initialization(int ac, // command line token count
char *av[]) // ..and command line tokens
{
struct text_info screen; // screen info structure
old_break = _dos_getvect(0x1b); // get old ^break handler addr
if (ac > 1 || // q. need help..
NOT strcmp(av[1], "/?")) // ..or want help?
quit_with(help); // a. yes .. give help/quit
_dos_setvect(0x1b, control_break); // set up control break
_dos_setvect(0x24, critical_routine); // ..and DOS critical handler
gettextinfo(&screen); // get current screen info
max_lines = screen.screenheight; // save max lines on screen
if (screen.screenwidth < 80) // q. less than 80 columns?
quit_with(bad_width); // a. yes .. give error/quit
if (screen.currmode == BW80 || // q. black and white mode..
screen.currmode == MONO) // ..or monochrome mode?
{
main_menu.SetColors(mono_1, mono_2); // a. yes .. set up for
term_cn = mono_2; // ..monochrome display
term_cr = mono_1; // ..for all windows
stat_cn = mono_1;
}
page = (char *) malloc_chk(PAGE); // get memory for bitmap
wait_ms(1000L); // wait a little bit
full_screen = 1; // show init complete
_wscroll = 1; // set scrolling mode
term = new Window(1, 1, 80, 24, // define main window
term_cn, term_cr); // ..and its colors
term->Open(none); // ..then open w/o borders
status_line(status, ""); // clear status line
}
/* ******************************************************************** *
*
* f_exit() -- user exit request, called from memu entry
*
* ******************************************************************** */
#pragma argsused // hold unused arg messages
int f_exit(int c, int r) // column and row
{
quit_flag = 1; // set termination flag
return(ESC); // return with an ESC to
// ..cause menu to return
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -