?? zmsg.c
字號:
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <malloc.h>
#include "zlib.h"
#define MSG_WIN (ZW_BOX)
static void Zdspmsg( int w, char *b, int l )
{
int r;
if( l > 0 )
{
r = 1;
while( l > 0 )
{
if( l <= w )
{
if( r == 1 )
ZWprint( 1, ( w - l ) / 2 + 2, b, l );
else
ZWprint( r, 2, b, l );
l = 0;
}
else
{
ZWprint( r, 2, b, w );
l -= w;
b += w;
r ++;
}
}
}
}
static void Zackmsgsub( int Row, int Col, char *Title, char *Fmt, va_list argptr )
{
ZWINDOW Window = { 0, 0, 0, 0, MSG_WIN, 0 };
ZBUTTON Button = { 3, 0, 1, 6, " 繼續 ", 0, 0, 0 };
ZSCREEN Screen = { 1, 0, 0, 0, 0 };
int l, w, h;
char *b, *p;
if( Row <= Z_SCR_LINES - 6 && Col <= Z_SCR_COLS - 12
&& ( b = ( char * ) malloc( 1024 ) ) != NULL )
{
vsprintf( b, Fmt, argptr );
l = strlen( b );
if( l > Z_SCR_COLS - Col - 6 )
w = Z_SCR_COLS - Col - 6;
else if( l > 6 )
w = l;
else
w = 6;
if( l > 0 )
h = ( l - 1 ) / w + 5;
else
h = 3;
Window.r = Row;
Window.c = Col;
Window.h = h;
Window.w = w + 4;
Window.t = Title;
if( !ZWopen( &Window ) )
{
Button.r = h - 2;
Button.c = ( w - 2 ) / 2;
Screen.bs = &Button;
Zdspmsg( w, b, l );
Zscreen( &Screen );
ZWclose();
}
free( b );
}
}
int Zmessage( int Row, int Col, char *Title, char *Fmt, ... )
{
ZWINDOW Window = { 0, 0, 0, 0, MSG_WIN, 0 };
char *b, *p;
int l, w, h, r;
va_list argptr;
r = -1;
if( Row <= Z_SCR_LINES - 4 && Col <= Z_SCR_COLS - 6
&& ( b = ( char * ) malloc( 1024 ) ) != NULL )
{
va_start( argptr, Fmt );
vsprintf( b, Fmt, argptr );
va_end( argptr );
l = strlen( b );
if( l > Z_SCR_COLS - Col - 6 )
w = Z_SCR_COLS - Col - 6;
else
w = l;
if( l > 0 )
h = ( l - 1 ) / w + 3;
else
h = 1;
Window.r = Row;
Window.c = Col;
Window.h = h;
Window.w = w + 4;
Window.t = Title;
if( !ZWopen( &Window ) )
{
r = 0;
Zdspmsg( w, b, l );
}
free( b );
}
return( r );
}
int Zask( int Row, int Col, char *Title, char *Fmt, ... )
{
ZWINDOW Window = { 0, 0, 0, 0, MSG_WIN, 0 };
ZBUTTON Button[] = {
{ 0, 0, 1, 10, "Esc 放棄", ESC, 0, 0 },
{ 0, 0, 1, 10, "Enter 確認", ENTER, 0, 0 }
};
ZSCREEN Screen = { 2, 0, 0, 0, 0 };
int l, w, h, r;
char *b;
va_list argptr;
r = 0;
if( Row <= Z_SCR_LINES - 6 && Col <= Z_SCR_COLS - 27
&& ( b = ( char * ) malloc( 1024 ) ) != NULL )
{
va_start( argptr, Fmt );
vsprintf( b, Fmt, argptr );
va_end( argptr );
l = strlen( b );
if( l > Z_SCR_COLS - Col - 6 )
w = Z_SCR_COLS - Col - 6;
else if( l > 21 )
w = l;
else
w = 21;
if( l > 0 )
h = ( l - 1 ) / w + 5;
else
h = 3;
Window.r = Row;
Window.c = Col;
Window.h = h;
Window.w = w + 4;
Window.t = Title;
if( !ZWopen( &Window ) )
{
Button[0].r = h - 2;
Button[1].r = h - 2;
Button[0].c = ( w - 17 ) / 2;
Button[1].c = ( w + 6 ) / 2;
Screen.bs = Button;
Zdspmsg( w, b, l );
if( Zscreen( &Screen ) == ENTER )
r = 1;
ZWclose();
}
free( b );
}
return( r );
}
void Zwaitmsg( int Row, int Col, int ( *NoKey )(), char *Title, char *Fmt, ... )
{
ZWINDOW Window = { 0, 0, 0, 0, MSG_WIN, 0 };
ZBUTTON Button = { 3, 0, 1, 8, "Esc 放棄", ESC, 0, 0 };
ZSCREEN Screen = { 1, 0, 0, 0, 0 };
int l, w, h;
char *b;
va_list argptr;
if( Row <= Z_SCR_LINES - 6 && Col <= Z_SCR_COLS - 14
&& ( b = ( char * ) malloc( 1024 ) ) != NULL )
{
va_start( argptr, Fmt );
vsprintf( b, Fmt, argptr );
va_end( argptr );
l = strlen( b );
if( l > Z_SCR_COLS - Col - 6 )
w = Z_SCR_COLS - Col - 6;
else if( l > 8 )
w = l;
else
w = 8;
if( l > 0 )
h = ( l - 1 ) / w + 5;
else
h = 3;
Window.r = Row;
Window.c = Col;
Window.h = h;
Window.w = w + 4;
Window.t = Title;
if( !ZWopen( &Window ) )
{
Button.r = h - 2;
Button.c = ( w - 2 ) / 2;
Screen.bs = &Button;
Screen.nk = NoKey;
Zdspmsg( w, b, l );
Zscreen( &Screen );
ZWclose();
}
free( b );
}
}
void Zackmsg( int Row, int Col, char *Title, char *Fmt, ... )
{
va_list argptr;
va_start( argptr, Fmt );
Zackmsgsub( Row, Col, Title, Fmt, argptr );
va_end( argptr );
}
void Zwarning( int Row, int Col, char *Fmt, ... )
{
va_list argptr;
va_start( argptr, Fmt );
Zackmsgsub( Row, Col, " 警 告 ", Fmt, argptr );
va_end( argptr );
}
void Zerror( int Row, int Col, char *Fmt, ... )
{
va_list argptr;
va_start( argptr, Fmt );
Zackmsgsub( Row, Col, " 錯 誤 ", Fmt, argptr );
va_end( argptr );
}
void Znotice( int Row, int Col, char *Fmt, ... )
{
va_list argptr;
va_start( argptr, Fmt );
Zackmsgsub( Row, Col, " 注 意 ", Fmt, argptr );
va_end( argptr );
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -