PaulS_UK Ответов: 0

Конвертировать флэш-графики звонков помощью gnuplot


Я работаю над старым консольным проектом C++ , который использовал Flash-графику для построения данных. Я хочу обновить этот проект, чтобы он вызывал GNUPlot для отображения данных. Исходный код был написан так, чтобы он мог вместить другое программное обеспечение для построения графиков, поместив все вызовы Flash Graphics в один файл C++, чтобы было относительно просто перевести их в аналогичные вызовы в другом пакете построения графиков, если это необходимо. У меня нет старых Flash-графических библиотек/кода, и поэтому мне пришлось закомментировать ссылки на них, чтобы скомпилировать проект.

Я понимаю, что GNUPlot, вероятно, является одним из лучших пакетов для построения графиков с открытым исходным кодом, но не могу заставить GNUPlot компилироваться в проекте. Я думаю, что GNUPlot был больше разработан для использования через "трубы" из проекта users, который вызывал GNUPLot .exe для построения данных. В любом случае я сейчас немного не в своей тарелке и был бы признателен за любую помощь в преобразовании вызовов Flash Graphics в GNUPlot (или любой другой предложенный пакет построения графиков). Я новичок в C++, который учится, настраивая старый проект, но проблема графики действительно увязла во мне. Любая помощь будет оценена по достоинству. Использование консольного проекта VS2008.

/*                                                                            */
/*  GRAPHICS - These are Flash Graphics interface routines.                   */
/*             All routines that are specific to that library are here.       */
/*             Other routines call routines here to do graphics operations.   */
/*                                                                            */
/*  This also includes Symantec text-mode save and restore routines.          */
/*                                                                            */


#include "stdafx.h"

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include "disp.h"
#include <dos.h>
#include "const.h"  // System, limitation constants, typedefs, structs
#include "classes.h"  // Includes all class headers
#include "funcdefs.h" // Function prototypes
#include "fg.h"                 // FlashGraphics

static int mode ;           // Display mode
static int drows, dcols ;   // Dimensions in pixels
static int crows, ccols ;   // Size of a character
static double aspect ;      // Aspect ratio




/*
--------------------------------------------------------------------------------

   Call this routine at the start of the program.
   It returns 0 if all went well, 1 if the adapter is not supported.

--------------------------------------------------------------------------------
*/

int init_graphics ()
{
#ifdef FLASH_GRAPHICS
   mode = fg_get_first () ;
   while (mode) {
      if (mode == FG_VGA12) {
         drows = 480 ;
         dcols = 640 ;
         fg_set_8x16_font () ;
         crows = fg.charbox[FG_Y2] + 1 ;
         ccols = fg.charbox[FG_X2] + 1 ;
         aspect = 3.0 / 4.0 ;
         return 0 ;   // Normal return
         }
      mode = fg_get_next () ;
      }

   mode = fg_get_first () ;
   while (mode) {
      if (mode == FG_VESA3) {
         drows = 600 ;
         dcols = 800 ;
         fg_set_8x16_font () ;
         crows = fg.charbox[FG_Y2] + 1 ;
         ccols = fg.charbox[FG_X2] + 1 ;
         aspect = 3.0 / 4.0 ;
         return 0 ;   // Normal return
         }
      mode = fg_get_next () ;
      }

   drows = -1 ; // Flag error
   return 1 ;   // And tell caller
#endif // FLASH_GRAPHICS   
return 1;  // TPR - tell caller there's no graphics
}

/*
--------------------------------------------------------------------------------

   Switch to graphics mode.

--------------------------------------------------------------------------------
*/

void goto_graphics ( int *nrows , int *ncols , int *chrows , int *chcols ,
                     double *aspect_ratio )
{
#ifdef FLASH_GRAPHICS
   if (drows <= 0)
      return ;

   fg_init_mode ( mode ) ;

   *nrows = drows ;
   *ncols = dcols ;
   *aspect_ratio = aspect ;
   *chrows = crows ;
   *chcols = ccols ;
#endif // FLASH_GRAPHICS   
}

/*
--------------------------------------------------------------------------------

   Return to text mode

--------------------------------------------------------------------------------
*/

void exit_graphics ()
{
#ifdef FLASH_GRAPHICS
   if (drows <= 0)
      return ;

   fg_term () ;
#endif // FLASH_GRAPHICS   
}

/*
--------------------------------------------------------------------------------

   Draw a line

--------------------------------------------------------------------------------
*/

void drawline ( int x1 , int y1 , int x2 , int y2 , int color )
{
#ifdef FLASH_GRAPHICS
   fg_line_t line ;

   if (drows <= 0)
      return ;

   line[FG_X1] = x1 ;
   line[FG_X2] = x2 ;
   line[FG_Y1] = y1 ;
   line[FG_Y2] = y2 ;
   fg_drawline ( color , FG_MODE_SET , ~0 , FG_LINE_SOLID , line ) ;
#endif // FLASH_GRAPHICS
}

void write_graphics_text ( int row , int col , char *text , int color )
{
#ifdef FLASH_GRAPHICS
   fg_box_t box ;

   if (drows <= 0)
      return ;

   fg_make_box ( box , col , row , col + strlen ( text ) * ccols - 1 ,
                 row + crows - 1 ) ;
   fg_box_normalize ( box ) ;
   fg_fillbox ( 0 , FG_MODE_SET , ~0 , box ) ;
   fg_puts ( color , FG_MODE_SET , ~0 , FG_ROT0 , col ,
             row , text , fg.displaybox ) ;
#endif // FLASH_GRAPHICS
}

/*
--------------------------------------------------------------------------------

   These are for Symantic text-mode operations (not Flash Graphics)

--------------------------------------------------------------------------------
*/

static unsigned short *screen = NULL ;
static unsigned short cursor_row, cursor_col ;

void init_textmode ()
{
#ifdef DISP_LIBRARY
   if (disp_getmode () != 3)
      disp_setmode ( 3 ) ;
   disp_open () ;
#endif   
}

void close_textmode ()
{
#ifdef DISP_LIBRARY
   disp_close () ;
#endif   
}

int save_screen ()
{
#ifdef DISP_LIBRARY
   union REGS r ;
   MEMTEXT ( "GRAPHICS: screen" ) ;
   screen = MALLOC ( 25 * 80 * 2 ) ;
   if (screen == NULL)
      return 1 ;

   r.h.ah = 3 ;    // Read cursor
   r.h.bh = 0 ;    // Page
   int86 ( 0x10 , &r , &r ) ;
   cursor_row = r.h.dh ;
   cursor_col = r.h.dl ;
   disp_peekbox ( screen , 0 , 0 , 24 , 79 ) ;
#endif   
   return 0 ;
}

void restore_screen ()
{
#ifdef DISP_LIBRARY
   union REGS r ;
   if (screen == NULL)
      return ;
   disp_pokebox ( screen , 0 , 0 , 24 , 79 ) ;
   MEMTEXT ( "GRAPHICS: screen" ) ;
   FREE ( screen ) ;
   r.h.ah = 2 ;    // Set cursor
   r.h.bh = 0 ;    // Page
   r.h.dh = cursor_row ;
   r.h.dl = cursor_col ;
   int86 ( 0x10 , &r , &r ) ;
#endif   
}


Что я уже пробовал:

Я пробовал компилировать GNUPlot в рамках проекта, но столкнулся с таким количеством проблем, что я не могу продолжать это решение в краткосрочной перспективе.

0 Ответов