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

📄 zprt.c

📁 unix下的界面工具
💻 C
字号:
#include <stdio.h>
#include <stdarg.h>
#include <curses.h>
#include <string.h>
#include "zlib.h"

#define ZBUF_SIZE 256
static int Zbuf[ZBUF_SIZE];

static int Zprtstatus()
{
  int r, k, l, p;
  int s[6];

  if( write( 1, "\x1B[?15n", 6 ) < 6 )
    return( 0 );
  p = 0;
  for( l = 0; l < 5; l ++ )
    if( ( k = getch() ) == ERR )
      goto Exit;
    else
      s[l] = k;
  r = 0;
  while( 1 )
  {
    if( s[0] == 0x1B && s[1] == 0x5B || s[0] == 0x9B )
    {
      if( s[0] == 0x1B )
      {
        if( ( k = getch() ) == ERR )
          goto Exit;
        s[5] = k;
        l ++;
      }
      if( s[l-4] == '?' && s[l-3] == '1' && s[l-1] == 'n' )
      {
        if( s[l-2] == '0' )
          r = 1;
        else
          r = -1;
        goto Exit;
      }
    }
    if( p == ZBUF_SIZE )
      goto Exit;
    Zbuf[p] = s[0];
    p ++;
    for( k = 1; k < l; k ++ )
      s[k-1] = s[k];
    if( l == 6 )
      l --;
    else
    {
      if( ( k = getch() ) == ERR )
        goto Exit;
      s[4] = k;
    }
  }
Exit:
  while( p )
  {
    p --;
    ungetch( Zbuf[p] );
  }
  if( !r )
    while( l )
    {
      l --;
      ungetch( s[l] );
    }
  if( r == 1 )
    return( 1 );
  return( 0 );
}

static int Zprtbyte( char c )
{
  int r;

  if( !Zsleep( 1, Zprtstatus ) )
    return( -1 );
  if( printf( "\x1B[5i" ) == EOF )
    return( -1 );
  if( putchar( c ) == EOF )
    r = -1;
  else
    r = 0;
  printf( "\x1B[4i" );
  return( r );
}

int Zprint( char *s, int l )
{
  int r=1;

  while( r && l )
  {
    if( Zprtbyte( *s ) )
      r = Zask( 10, 26, " 打印机错误 ", "设置好打印机后继续打印?" );
    else
    {
      s ++;
      l --;
    }
  }
  return( l );
}

int Zprintf( char *s, ... )
{
  char *b;
  int r;
  va_list argptr;

  r = 0;
  va_start( argptr, s );
  if( ( b = ( char * ) malloc( 256 ) ) != NULL ){
    vsprintf( b, s, argptr );
    r = Zprint( b, ( int ) strlen( b ) );
    free( b );
  }
  va_end( argptr );
  return( r );
}

⌨️ 快捷键说明

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