📄 zprt.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 + -