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

📄 fprint.cpp

📁 串行通信编程源码
💻 CPP
字号:
// ******************************************************************** //
//                                                                      //
//      FPRINT.CPP                                                      //
//      Copyright (c) 1993, Michael Holmes and Bob Flanders             //
//      C++ Communication Utilities                                     //
//                                                                      //
//      This file contains the routines under the PRINT main            //
//      menu entry.                                                     //
//                                                                      //
// ******************************************************************** //


/* ******************************************************************** *
 *
 *  f_lpt() -- format and print the fax to a printer
 *
 * ******************************************************************** */

int     f_lpt(int c, int r,                 // column and row
              int pn)                       // printer number
{
int     i, j, k, l,                         // loop counters
        qf = 0;                             // quit flag
char    huge *p, huge *q,                   // work pointer
        buf[128];                           // ..and work buffer
Window  p_win(c, r,                         // define temporary window
            c + 40, r + 4,                  // ..to hold message
            menu_cn, menu_cr);              // ..using system colors
int     f;                                  // printer file number


if (f_handle == -1)                         // q. file open?
    return(ESC);                            // a. no .. just return

p_win.Open(double_line);                    // open window with a border
p_win.Display(print_msg);                   // give filename prompt

sprintf(buf, "LPT%d", pn);                  // build printer name
f = open(buf, O_WRONLY | O_BINARY);         // open file for binary output

for (i = 1; f_read_g3(i) == 0 &&            // for each page..
            NOT qf; i++)
    {
    sprintf(buf, page_msg, i, f_pgcnt);     // format page status
    p_win.Display(buf);                     // ..and keep user informed

    sprintf(buf, ESC_CHAR "E"               // reset printer
                 ESC_CHAR "*p336x450Y"      // position printer cursor
                 ESC_CHAR "*t300R"          // 300 dots per inch
                 ESC_CHAR "*r0F"            // specify orientation
                 ESC_CHAR "*r1A");          // start raster graphics
    _write(f, buf, strlen(buf));            // ..write the line

    for (j = 0, p = page; j < LINES;        // for each line
                j++, p += LINE)             // ..in the bitmap
        {
        for (k = LINE, q = &p[k-1];         // starting at the end of line
                k > 1 && NOT *q; k--, q--)  // ..and working backwards
            ;                               // ..look for non-null data

        sprintf(buf, ESC_CHAR "*b%dW", k);  // give graphic command
        _write(f, buf, strlen(buf));        // ..send to the printer
        l = _write(f, p, k);                // ..and print the data line
        assert(l == k);

        sprintf(buf, ESC_CHAR "*b%dW", k);  // give graphic command
        _write(f, buf, strlen(buf));        // ..send to the printer
        l = _write(f, p, k);                // ..and print the data line
        assert(l == k);

        if (get_key(ALLOW_ALT))             // q. key hit?
            {
            qf = 1;                         // a. yes .. set quit flag
            break;                          // ..and exit loop
            }
        }

    sprintf(buf, ESC_CHAR "*rB");           // end graphic mode
    _write(f, buf, strlen(buf));            // ..write the line
    }

sprintf(buf, ESC_CHAR "E");                 // re-initialize printer
_write(f, buf, strlen(buf));                // ..write the line
close(f);                                   // ..and close file
return(ESC);                                // finally, rtn to caller

}



/* ******************************************************************** *
 *
 *  f_lpt1() -- print the fax to LPT1:
 *
 * ******************************************************************** */

int     f_lpt1(int c, int r)                // column and row
{

f_lpt(c, r, 1);                             // print on LPT1:
return(ESC);                                // ..and return to menu

}




/* ******************************************************************** *
 *
 *  f_lpt2() -- print the fax to LPT2:
 *
 * ******************************************************************** */

int     f_lpt2(int c, int r)                // column and row
{

f_lpt(c, r, 2);                             // print on LPT2:
return(ESC);                                // ..and return to menu

}



/* ******************************************************************** *
 *
 *  f_lpt3() -- print the fax to LPT3:
 *
 * ******************************************************************** */

int     f_lpt3(int c, int r)                // column and row
{

f_lpt(c, r, 3);                             // print on LPT3:
return(ESC);                                // ..and return to menu

}

⌨️ 快捷键说明

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