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

📄 zmsg.c

📁 unix下的界面工具
💻 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 + -