Source file: /~heha/ewa/Ofen/prozess.zip/msvc/o1/plot.h

#pragma once
#include <windows.h>
#include <windowsx.h>
#include "datareader.h"

#define elemof(x) (sizeof(x)/sizeof(*(x)))
#define nobreak

struct Rect:public RECT{
 int width() const {return right-left;}
 int height() const {return bottom-top;}
 const int&operator[](int x) const {return (const int&)(&left)[x];}
};

struct RANGE{
 float a,e;
};

enum{
 TOPX = 0,
 BOTTOMX = 2,
 LEFTY = 5,
 RIGHTY = 7,
};
struct SCALE{
 char*name,*format,*unit;
 DWORD unitcode;
 BYTE side;	// Bit 2:0 = Position und Spiegelung, Bit 5 = logarithmisch
 BYTE autoscale;
 BYTE delaytime;
 BYTE flags;
};

struct SCALEPAIR{
 float f,o;
};

// Geeignet für einen globalen Sample-Puffer für alle Plots mit Round-Robin-Befüllung
// Die Daten sollten Array-Of-Struct sein, wobei sich mehrere Samples einen X-Wert teilen können
// oder keine X-Werte haben. (Das kommt dann auf die richtige Initialisierung von SAMPLEREADER an.)
// Die Daten im Sample-Puffer sollten schlicht Rohdaten sein.
// Liefert die Applikation dem Plot keinen Sample-Puffer, beschafft sich der Plot seinen eigenen.
// NaNs und INFs werden ausgeblendet.
struct SAMPLES{
 FLEXDATA ptr;		// Universeller Zeiger auf Samples
 UINT siz,start,fill,inc;	// „fill“ und ggf. „start“ rücken mit jedem Sample-Schreiben vor
};
struct SAMPLEREADER{
 SAMPLES*sa;
 BYTE typeX,typeY;	// Datentyp der X- und Y-Werte, 0..9 für analog
 BYTE alloc;		// Wer „sa“ und „sa->ptr“ wie freizugeben hat, Default: 0
 BYTE flags;		// Ob X-Werte vorliegen (Bit 0) und ob sx.o verwendet wird (Bit 1)
 UINT ofsX,ofsY;	// wo sich X- und Y-Daten im (Ring-)Puffer befinden
 SCALEPAIR sx;		// Wenn Zeit dann sx.f = Zeitschritt und sx.o = Zeit-Ursprung
 SCALEPAIR sy;		// Faktor und Offset für die Rohdaten
};

struct PLOT{
 const char*name;
 char index,xscale,yscale;
 char lineStyle,lineWidth,interpol,fillTo,marker;
 SAMPLEREADER sr;
};

// Für die Anwendung im Dialog (wenig ++) 
enum{
 PM_DELETEPLOT=0x401,	// Plot Nr. <wParam> löschen; wParam=-1: Alle Plots löschen
 PM_SETPLOT,		// Plot Nr. <wParam> ersetzen, wParam=-1: Plot an Plotliste anhängen
 PM_ADDSAMPLE,	// Sample <lParam> an Plot <wParam> anhängen; wParam=-1: Sample-Liste an Plots anhängen
 PM_ADDSAMPLES,	// Mehrere Samples an alle Plots anhängen
 PM_SETSCALE,	// Skale <wParam> ersetzen oder hinzufügen
 PM_SAVE,	// Speichern des Plots in Registry-Key <wParam>, Name <lParam> oder in Puffer <lParam> Länge <wParam>
 PM_RESTORE,	// Laden des Plots aus Registry-Key <wParam>, Name <lParam> oder aus Puffer <lParam> Länge <wParam>
};

BOOL PlotInit(void);
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded