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

📄 hexviewdlg.c

📁 Linux 上的socket嗅探器
💻 C
字号:
/* * * Copyright (C) 2003 Xiangbin Lee <honeycombs@sina.com> <honeycombs@263.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation. */#include "common.h"#include "hexviewdlg.h"void GtkHexView_Draw(GtkHexView *lpview, gushort from, gushort len){    gchar msgtxt[20];    gushort curcline=0,curpos=0;    GdkColor color;    if(lpview==NULL||len<=0)      return ;    /* Realizing a widget creates a window for it,     * ready for us to insert some text */    gtk_text_backward_delete(GTK_TEXT (lpview->areaid),gtk_text_get_length(GTK_TEXT (lpview->areaid)));    gtk_text_backward_delete(GTK_TEXT (lpview->areahex),gtk_text_get_length(GTK_TEXT (lpview->areahex)));    gtk_text_backward_delete(GTK_TEXT (lpview->areatext),gtk_text_get_length(GTK_TEXT (lpview->areatext)));        gtk_text_thaw (GTK_TEXT (lpview->areaid));    gtk_text_thaw (GTK_TEXT (lpview->areahex));    gtk_text_thaw (GTK_TEXT (lpview->areatext));    /*    show here     */    if(from>lpview->hexdatalen-1)      return ;    if(from+len>lpview->hexdatalen)      len = lpview->hexdatalen-from;    /* show normal here( hFontWide, hFontHeight ) */    for(curpos=from;curpos<len;curpos++)    {      msgtxt[0]=0;      curcline=curpos/lpview->chnperline;      // header      if(curpos%lpview->chnperline==0)      {        gushort selfromline, seltoline;        sprintf(msgtxt, " %06X",(guint)(curcline*lpview->chnperline));        selfromline=lpview->sho_frombufpos/lpview->chnperline;        seltoline=(lpview->sho_frombufpos+(lpview->sho_length-1))/lpview->chnperline;        if(lpview->sho_length<=0 || curcline<selfromline || curcline >seltoline)        {            color.red=lpview->m_idFontColor.red;            color.green=lpview->m_idFontColor.green;            color.blue=lpview->m_idFontColor.blue;        }        else if(curcline>selfromline&&curcline<seltoline)        {            color.red=lpview->m_idSelColor.red;            color.green=lpview->m_idSelColor.green;            color.blue=lpview->m_idSelColor.blue;        }        else if(curcline==selfromline||curcline==seltoline)        {            color.red=(lpview->m_idFontColor.red+lpview->m_idSelColor.red)/2;            color.green=(lpview->m_idFontColor.green+lpview->m_idSelColor.green)/2;            color.blue=(lpview->m_idFontColor.blue+lpview->m_idSelColor.blue)/2;        }        if(curcline)        {            gtk_text_insert (GTK_TEXT(lpview->areaid), NULL, &color, NULL,"\n", -1);            gtk_text_insert (GTK_TEXT(lpview->areahex), NULL, &color, NULL,"\n", -1);            gtk_text_insert (GTK_TEXT(lpview->areatext), NULL, &color, NULL,"\n", -1);        }        gtk_text_insert (GTK_TEXT(lpview->areaid), NULL, &color, NULL,msgtxt, -1);      }      // hex      if(lpview->sho_length<=0)      {          color.red=lpview->m_hexFontColor.red;          color.green=lpview->m_hexFontColor.green;          color.blue=lpview->m_hexFontColor.blue;      }      else if(curpos>=lpview->sho_frombufpos&&curpos<lpview->sho_frombufpos+lpview->sho_length)      {          color.red=lpview->m_hexSelColor.red;          color.green=lpview->m_hexSelColor.green;          color.blue=lpview->m_hexSelColor.blue;      }      else      {          color.red=lpview->m_hexFontColor.red;          color.green=lpview->m_hexFontColor.green;          color.blue=lpview->m_hexFontColor.blue;      }      sprintf(msgtxt," %02X",lpview->hexbuffer[curpos]);      gtk_text_insert (GTK_TEXT(lpview->areahex), NULL, &color, NULL,msgtxt, -1);      // text      if(lpview->sho_length<=0)      {          color.red=lpview->m_txtFontColor.red;          color.green=lpview->m_txtFontColor.green;          color.blue=lpview->m_txtFontColor.blue;      }      else if(curpos>=lpview->sho_frombufpos&&curpos<lpview->sho_frombufpos+lpview->sho_length)      {          color.red=lpview->m_txtSelColor.red;          color.green=lpview->m_txtSelColor.green;          color.blue=lpview->m_txtSelColor.blue;      }      else      {          color.red=lpview->m_txtFontColor.red;          color.green=lpview->m_txtFontColor.green;          color.blue=lpview->m_txtFontColor.blue;      }      msgtxt[0]=msgtxt[1]=0;      if(lpview->hexbuffer[curpos]>31&&lpview->hexbuffer[curpos]<127)        msgtxt[0]=lpview->hexbuffer[curpos];      else        msgtxt[0]='.';      gtk_text_insert (GTK_TEXT(lpview->areatext), NULL, &color, NULL,msgtxt, -1);    }   gtk_text_insert (GTK_TEXT(lpview->areaid), NULL, &color, NULL,"\n", -1);   gtk_text_insert (GTK_TEXT(lpview->areahex), NULL, &color, NULL,"\n", -1);   gtk_text_insert (GTK_TEXT(lpview->areatext), NULL, &color, NULL,"\n", -1);}GtkWidget *GtkHexView_Create(GtkHexView *lpview, GtkWidget * window){    GtkWidget *hbox;    if(lpview==NULL)      return NULL;    else if(lpview->regsignal==GTK_WIDGET_REG)      return (lpview->scrolled_window);    else lpview->regsignal=GTK_WIDGET_REG;    /* here create view with text area */    lpview->hexdatalen=0;    lpview->chnperline=0;    lpview->sho_frombufpos=0;    lpview->sho_length=0;    lpview->old_frombufpos=0;    lpview->old_length=0;    lpview->view =gtk_frame_new (NULL);    gtk_frame_set_shadow_type (GTK_FRAME (lpview->view), GTK_SHADOW_ETCHED_OUT);    hbox=gtk_hbox_new(FALSE, 0);    gtk_container_add(GTK_CONTAINER(lpview->view),hbox);    lpview->areaid=gtk_text_new (NULL, NULL);    gtk_text_set_editable (GTK_TEXT(lpview->areaid), FALSE);    lpview->areahex=gtk_text_new (NULL, NULL);    gtk_text_set_editable (GTK_TEXT (lpview->areahex), FALSE);    lpview->areatext=gtk_text_new (NULL, NULL);    gtk_text_set_editable (GTK_TEXT (lpview->areatext), FALSE);    gtk_box_pack_start(GTK_BOX(hbox),lpview->areaid, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(hbox),lpview->areahex, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(hbox),lpview->areatext, FALSE, FALSE, 0);    /* end create view */    lpview->scrolled_window =  gtk_append_scrollviewport(lpview->view);    if(window!=NULL)      gtk_container_add (GTK_CONTAINER (window), lpview->scrolled_window);    gtk_widget_show_all (lpview->scrolled_window);    return lpview->scrolled_window;}void GtkHexView_SetFontColor(GtkHexView *lpview,      GdkColor idcolor,GdkColor idselcolor,      GdkColor hexcolor,GdkColor hexselcolor,      GdkColor txtcolor,GdkColor txtselcolor      ){   if(lpview!=NULL&&lpview->regsignal==GTK_WIDGET_REG)   {      lpview->m_idFontColor.red=idcolor.red;        lpview->m_idFontColor.green=idcolor.green;        lpview->m_idFontColor.blue=idcolor.blue;      lpview->m_idSelColor.red=idselcolor.red;        lpview->m_idSelColor.green=idselcolor.green;        lpview->m_idSelColor.blue=idselcolor.blue;      lpview->m_hexFontColor.red=hexcolor.red;        lpview->m_hexFontColor.green=hexcolor.green;        lpview->m_hexFontColor.blue=hexcolor.blue;      lpview->m_hexSelColor.red=hexselcolor.red;        lpview->m_hexSelColor.green=hexselcolor.green;        lpview->m_hexSelColor.blue=hexselcolor.blue;      lpview->m_txtFontColor.red=txtcolor.red;        lpview->m_txtFontColor.green=txtcolor.green;        lpview->m_txtFontColor.blue=txtcolor.blue;      lpview->m_txtSelColor.red=txtselcolor.red;        lpview->m_txtSelColor.green=txtselcolor.green;        lpview->m_txtSelColor.blue=txtselcolor.blue;   }}/* set buffer to show */void GtkHexView_SetLineCharNum(GtkHexView *lpview, gushort num, gint ifredraw){   if((lpview!=NULL)&&(lpview->regsignal==GTK_WIDGET_REG)&&(num>8))   {      gushort colum=0;      lpview->chnperline = num;      colum=HEXMAX_CHARS/lpview->chnperline;      if((HEXMAX_CHARS%lpview->chnperline)!=0)colum++;      gtk_widget_set_size_request (GTK_WIDGET (lpview->view), lpview->chnperline*32+140, colum*18+80);      gtk_widget_set_size_request (GTK_WIDGET (lpview->areaid), 60, colum*18+40);      gtk_widget_set_size_request (GTK_WIDGET (lpview->areahex), lpview->chnperline*24+40,colum*18+40);      gtk_widget_set_size_request (GTK_WIDGET (lpview->areatext),lpview->chnperline*8+40,colum*18+40);      if(ifredraw)         GtkHexView_Draw(lpview,0,lpview->hexdatalen);   }}void GtkHexView_SetSelOption(GtkHexView *lpview, gushort _bufpos, gushort _slen, gint ifredraw){   if(lpview!=NULL&&lpview->regsignal==GTK_WIDGET_REG)   {      lpview->sho_frombufpos = _bufpos;      lpview->sho_length = _slen;      if(ifredraw)         GtkHexView_Draw(lpview,0,lpview->hexdatalen);   }}void GtkHexView_SetBufferData(GtkHexView *lpview, guchar *buf, gushort len, gint ifredraw){   if(lpview!=NULL&&lpview->regsignal==GTK_WIDGET_REG)   {      lpview->hexdatalen=0;      if(len>0)      {          if(len>=HEXMAX_CHARS)              len=HEXMAX_CHARS-1;          memcpy(lpview->hexbuffer,buf,sizeof(guchar)*len);          lpview->hexdatalen = len;      }      if(ifredraw)         GtkHexView_Draw(lpview,0,lpview->hexdatalen);   }           }

⌨️ 快捷键说明

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