Графическое клиент-серверное приложение на примере интерполяции. Кусочно-линейная интерполяция, страница 4

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

/* Local headers */

#include "ablibs.h"

#include "abimport.h"

#include "proto.h"

#include <sys/dispatch.h>

#define ATTACH_POINT "Inter_channel"

typedef struct _pulse msg_header_t;

typedef struct _my_data {

msg_header_t          hdr;

int                                                                                                             len, maxX, maxY;

double                                                             h, dataX[100], dataY[100];

} my_data_t; // Формат отправляемого и принимаемого сообщения

my_data_t                    msg,// отправляемое сообщение

msg_reply; // принимаемое сообщение

int net_send();

char            *file_name, // Имя открываемого файла

buf[40]; // Строка для промежуточного хранения данных

int                                   bpointx = 119, // начало графика ( левая граница )

bpointy = 35,  // начало графика ( верхняя граница )

epointx, epointy, // конец области рисования графика

dx, dy, // дискретизация сетки графика

h, i, k; // переменные для выполнения циклов

int               //---------- Нажатакнопка Load and Run

Button1_Click( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo ){

double       scalex, scaley; // масштабпоосям

/* eliminate 'unreferenced' warnings */

widget = widget, apinfo = apinfo, cbinfo = cbinfo;

PtGetResource(ABW_Text, Pt_ARG_TEXT_STRING,&file_name, 0 );

buf[0] = '\0';

epointx = bpointx + 361 -2;

epointy = bpointy + 385 -4;

// ------- Net_send()

switch( net_send() ){

// ------- Удачно ли выполнилось net_send() ?

case 1:

PtSetResource(ABW_Label1, Pt_ARG_TEXT_STRING, "Not find File", 0 );

strcat(buf, "\"" );

strcat(buf, file_name );

strcat(buf, "\"" );

PtSetResource(ABW_Label2, Pt_ARG_TEXT_STRING, buf, 0 );

return( Pt_CONTINUE );

case 2:

PtSetResource(ABW_Label1, Pt_ARG_TEXT_STRING, "Not Attach to", 0 );

PtSetResource(ABW_Label2, Pt_ARG_TEXT_STRING, "    channel ", 0 );

return( Pt_CONTINUE );

}

// Сообещение об удачном выполнении функции net_send()

PtSetResource(ABW_Label1, Pt_ARG_TEXT_STRING, "Sucsessful Load", 0 );

PtSetResource(ABW_Label2, Pt_ARG_TEXT_STRING, " ", 0 );

// Масштабированиеосейграфика

scalex = (double)(epointx - bpointx)/(double)msg_reply.maxX;

scaley = (double)(epointy - bpointy)/(double)msg_reply.maxY;

// Выводмасштабанаосиграфика

itoa( msg_reply.maxX, buf, 10 );

PtSetResource(ABW_Xm, Pt_ARG_TEXT_STRING,buf, 0 );

itoa( msg_reply.maxY, buf, 10 );

PtSetResource(ABW_Ym, Pt_ARG_TEXT_STRING,buf, 0 );

//---------------- Рисованиеграфика

PgSetStrokeColor( Pg_GREEN );

for(  i=0; i<msg_reply.len-1; i++ ){

PgDrawILine( bpointx+(int)(msg_reply.dataX[i]*scalex),epointy-(int)(msg_reply.dataY[i]*scaley),

bpointx+(int)(msg_reply.dataX[i+1]*scalex),epointy- (int)(msg_reply.dataY[i+1]*scaley ) );

}

// Рисование сетки на графике

dx = 10; dy = 10;

PgSetStrokeColor( Pg_BLACK );

for( i=1; i<dx; i++ ){

h =( epointx-bpointx )/ dx;

PgDrawILine( bpointx+h*i, bpointy,bpointx+h*i, epointy );           

}

for( i=1; i<dy; i++ ){

h =( epointy-bpointy )/ dy;

PgDrawILine( bpointx, bpointy+h*i, epointx,bpointy+h*i );          

}

return( Pt_CONTINUE );

}

// NET SEND -read and send message

int net_send(){

int                                                                     fd, i;

FILE                                                                 *p;              // ссылка на открываемый файл

char *combo_text, // строка для считывания идентификатора ( локальный или глобальный канал )

*str_step; // строка хранящая шаг интерполяции

// --------- Открытиефайла

if( (p = fopen( file_name, "r" )) == NULL ){

return 1;   

}

// --------- Подключениекканалу

PtGetResource(ABW_Combo, Pt_ARG_TEXT_STRING,&combo_text, 0 );