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

📄 zscreen.c

📁 unix下的界面工具
💻 C
📖 第 1 页 / 共 2 页
字号:
                  || S->fs[fld].t == 'L' || S->fs[fld].t == 'I' ){
                if( key == '-' ){
                  ToNegative( S->fs + fld );
                }
                else if( key == '+' ){
                  ToPositive( S->fs + fld );
                }
                else{
                  if( ( S->fs[fld].t == 'D' || S->fs[fld].t == 'F' )
                      && S->fs[fld].d != 0 ){
                    if( key == '.' ){
                      if( pos < S->fs[fld].w - S->fs[fld].d ){
                        pos = S->fs[fld].w - S->fs[fld].d;
                      }
                    }
                    else{
                      if( pos >= S->fs[fld].w - S->fs[fld].d ){
                        B->b[pos] = key;
                        if( ( key = FirstPos( S->fs + fld, pos + 1 ) ) >= 0 ){
                          pos = key;
                        }
                      }
                      else{
                        ZFtodata( S->fs + fld, B->b );
                        p = ( void * ) S->fs[fld].p;
                        S->fs[fld].p = 0;
                        ZFtotext( S->fs + fld, B->t.c );
                        Zstrmovf( B->t.c, S->fs[fld].w - S->fs[fld].d - 1, 1 );
                        B->t.c[S->fs[fld].w - S->fs[fld].d - 2] = key;
                        ZFtodata( S->fs + fld, B->t.c );
                        S->fs[fld].p = ( char * ) p;
                        ZFtotext( S->fs + fld, B->b );
                      }
                    }
                  }
                  else{
                    ZFtodata( S->fs + fld, B->b );
                    p = ( void * ) S->fs[fld].p;
                    S->fs[fld].p = 0;
                    ZFtotext( S->fs + fld, B->t.c );
                    Zstrmovf( B->t.c, S->fs[fld].w, 1 );
                    B->t.c[S->fs[fld].w - 1] = key;
                    ZFtodata( S->fs + fld, B->t.c );
                    S->fs[fld].p = ( char * ) p;
                    ZFtotext( S->fs + fld, B->b );
                  }
                }
              }
              else{
                if( Zideocode( key ) ){
                  l = 0;
                  for( n = 0; n < pos; n ++ )
                    if( !ZFfixpic( S->fs[fld].p, n ) )
                      l ++;
                  if( S->fs[fld].w - l >= 2 ){
                    p = S->fs[fld].v;
                    S->fs[fld].v = B->t.c;
                    ZFtodata( S->fs + fld, B->b );
                    Zstrmovb( ( ( char * ) S->fs[fld].v ) + l,
                        S->fs[fld].w - l, 2 );
                    *( ( ( char * ) S->fs[fld].v ) + l ) = key;
                    key = 0;
                    while( key < ' ' || key >= 256 || key == 0x7F )
                      key = Zinkey();
                    *( ( ( char * ) S->fs[fld].v ) + l + 1 ) = key;
                    ZFtotext( S->fs + fld, B->b );
                    S->fs[fld].v = p;
                    SpaceEnd( pos + 1, S->fs[fld].w );
                    if( ( key = FirstPos( S->fs + fld, pos + 1 ) ) >= 0 ){
                      if( ( key = FirstPos( S->fs + fld, key + 1 ) ) >= 0 ){
                        pos = key;
                      }
                    }
                  }
                }
                else{
                  l = 0;
                  for( n = 0; n < pos; n ++ )
                    if( !ZFfixpic( S->fs[fld].p, n ) )
                      l ++;
                  p = S->fs[fld].v;
                  S->fs[fld].v = B->t.c;
                  ZFtodata( S->fs + fld, B->b );
                  Zstrmovb( ( ( char * ) S->fs[fld].v ) + l,
                      S->fs[fld].w - l, 1 );
                  *( ( ( char * ) S->fs[fld].v ) + l ) = key;
                  ZFtotext( S->fs + fld, B->b );
                  S->fs[fld].v = p;
                  SpaceEnd( pos + 1, S->fs[fld].w );
                  if( ( key = FirstPos( S->fs + fld, pos + 1 ) ) >= 0 ){
                    pos = key;
                  }
                }
              }
              key = 0;
              dsp = 1;
            }
          }
          else{
            switch( key ){
            case TAB:
              key = DOWN;
              break;
            case ENTER:
              if( ZBkey( S->bs, S->bc, ENTER ) < 0 )
                key = DOWN;
              break;
            case LEFT:
              if( ( key = LastPos( S->fs + fld, pos ) ) >= 0 )
                pos = key;
              key = 0;
              break;
            case RIGHT:
              if( ( key = FirstPos( S->fs + fld, pos + Zideocode( B->b[pos] ) + 1 ) ) >= 0 )
                pos = key;
              key = 0;
              break;
            case BACK_SPACE:
              if( S->fs[fld].t == 'D' || S->fs[fld].t == 'F'
                  || S->fs[fld].t == 'L' || S->fs[fld].t == 'I' ){
                if( ( S->fs[fld].t == 'D' || S->fs[fld].t == 'F' )
                    && S->fs[fld].d != 0
                    && ( key = LastPos( S->fs + fld, pos ) ) >= 0 ){
                  if( key >= S->fs[fld].w - S->fs[fld].d ){
                    n = Zideocode( B->b[key] ) + 1;
                    if( pos != S->fs[fld].w )
                      Zstrmovf( B->b + key, S->fs[fld].w - key, n );
                    memset( B->b + S->fs[fld].w - n, '0', n );
                  }
                  pos = key;
                }
                else{
                  B->b[pos] = ' ';
                  ZFtodata( S->fs + fld, B->b );
                  ZFtotext( S->fs + fld, B->b );
                }
              }
              else{
                if( ( key = LastPos( S->fs + fld, pos ) ) >= 0 ){
                  pos = key;
                  p = S->fs[fld].v;
                  S->fs[fld].v = B->t.c;
                  ZFtodata( S->fs + fld, B->b );
                  key = 0;
                  for( n = 0; n < pos; n ++ )
                    if( !ZFfixpic( S->fs[fld].p, n ) )
                      key ++;
                  Zstrmovf( ( ( char * ) S->fs[fld].v ) + key,
                      S->fs[fld].w - key,
                      Zideocode( *( ( ( char * ) S->fs[fld].v ) + key ) ) + 1 );
                  ZFtotext( S->fs + fld, B->b );
                  S->fs[fld].v = p;
                }
              }
              key = 0;
              dsp = 1;
              break;
            }
          }
        }
        if( key != 0 && ZBkey( S->bs, S->bc, key ) < 0
          && ( fld < 0 || key != UP && key != DOWN ) )
          key = 0;
        if( fld >= 0 && key != 0 ){
          ZFtodata( S->fs + fld, B->b );
          if( S->fs[fld].a != 0 ){
            if( dsp != 0 )
              DispField( S->fs + fld, ZF_EDIT );
            ZWattr( ZA_TEXT );
            if( ( n = ( *S->fs[fld].a )( key, fld, S->fs + fld ) ) != 0 ){
              if( n > 0 && n<=S->fc && ( key = FieldPos( S->fs, n - 1 ) ) >= 0 ){
                ZFtotext( S->fs + fld, B->b );
                DispField( S->fs + fld, ZF_NORMAL );
                pos = key;
                fld = n - 1;
                key = 0x7FFF;
              }
              else if( n < -1 && ( key = FirstPos( S->fs + fld, -n - 2 ) ) >= 0 ){
                pos = key;
                key = 0;
              }
              else if( n == -1 )
              {
                key=0;
              }
            }
          }
        }
        if( fld >= 0 && key != 0 ){
          ZFtotext( S->fs + fld, B->b );
          DispField( S->fs + fld, ZF_NORMAL );
        }
      }
      if( ( n = ZBkey( S->bs, S->bc, key ) ) >= 0 ){
        if( ( S->bs + n )->p != 0 ){
          ZWattr( ZA_TEXT );
          if( ( l = ( *( S->bs + n )->p )( key, n ) ) != 0 ){
            if( l > 0 && l<=S->fc && fld>=0 && ( n = FieldPos( S->fs, l - 1 ) ) >= 0 ){
                ZFtotext( S->fs + fld, B->b );
                DispField( S->fs + fld, ZF_NORMAL );
                pos = n;
                fld = l - 1;
                key = 0x7FFF;
            }
            else if( l < -1 && fld>=0 && ( n = FirstPos( S->fs + fld, -l - 2 ) ) >= 0 ){
              pos = n;
              key = 0;
            }
            else
              key = 0;
            if( fld >= 0 )
              dsp = 1;
/*
            if( key != -1 && fld >= 0
                && ( n = FieldPos( S->fs, key - 1 ) ) >= 0 ){
              fld = key;
              pos = n;
            }
            key = 0;
            if( fld >= 0 )
              dsp = 1;
*/
          }
        }
      }
      if( fld >= 0 ){
        switch( key ){
        case 0x7FFF:
          key = 0;
          dsp = 1;
          break;
        case UP:
          while( 1 ){
            if( fld > 0 )
              fld --;
            else
              fld = S->fc - 1;
            if( ( pos = FieldPos( S->fs, fld ) ) >= 0 )
              break;
          }
          dsp = 1;
          key = 0;
          break;
        case DOWN:
          while( 1 ){
            if( fld < S->fc - 1 )
              fld ++;
            else
              fld = 0;
            if( ( pos = FieldPos( S->fs, fld ) ) >= 0 )
              break;
          }
          dsp = 1;
          key = 0;
          break;
        case ENTER:
          fld ++;
          while( fld < S->fc ){
            if( ( pos = FieldPos( S->fs, fld ) ) >= 0 )
              break;
            fld ++;
          }
          if( fld < S->fc ){
            dsp = 1;
            key = 0;
          }
          else
            fld --;
          break;
        }
      }
    }
    if( fld >= 0 ){
      curs_set( 0 );
      ZFdisplay( S->fs, S->fc, ZF_DISPLAY );
    }
    ZWlocate( or, oc );
    ZWattr( oa );
  }
  free( B );
  B = t;
  return( key );
}

⌨️ 快捷键说明

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