Source file: /~heha/hsn/AD9834.zip/src/AD9834.h

#include <windows.h>
#ifdef UNICODE
# define _UNICODE
#endif
#define T(x) TEXT(x)		// Schreibfaulheit...
#define elemof(x) (sizeof(x)/sizeof(*(x)))	// Elemente eines Arrays
#define nobreak			// expliziter Durchlauf bei switch/case
#ifndef __cplusplus
 typedef enum {false, true} bool;
#endif

#if _MSC_VER < 1400	// Visual C++ 6
__forceinline char _BitScanForward(DWORD*Index, DWORD v) {
 _asm	bsf	eax,v
 _asm	mov	ecx,Index	// ohne ECX einzusauen geht es hier nicht
 _asm	mov	[ecx],eax
 _asm	setnz	al
}
__forceinline void __stosd(void*p, DWORD val, DWORD count) {
 _asm	mov	edi,p
 _asm	mov	eax,val
 _asm	mov	ecx,count
 _asm	rep stosd
}
#endif

typedef struct {
 BYTE iomode;	// 1 = seriell, 2 = parallel, 3 = USB-Drucker, 0 = uninitialisiert
 BYTE comnum;	// COM-Port-Nummer, 0 = COM1 usw.
 WORD paradr;	// Parallelportadresse (Basisadresse)
 BYTE u2pnum;	// Nummer des USB-Drucker-Konverters, null-basiert
 BYTE rsv[3];
 POINTS winpos;	// Fensterposition
 float mclk;	// Speisefrequenz in Hz
 char unitpre;	// Einheitenvorsatz-Auswahl, 6=MHz, 3=kHz, 0=Hz
 BYTE radix;	// Zahlenbasis-Auswahl, 10=dezimal, 16=hex, 2=binär
 WORD control;	// Steuerregister des AD9834 (14 bit)
 DWORD freq[2];	// Frequenzregister (28 bit)
 WORD phase[2];	// Phasenregister (12 bit)
 float sweep[2];// Sweep-Anfang und -ende, Frequenzen in Hz
 char swunit;	// "unitpre" für Sweep-Dialog
 BYTE swflag;	// Sweep-Flags (f1/f0, linear/logarithmisch, single/cont., sawtooth/triangle, 7=Dialog offen)
 WORD swtime;	// Sweep-Zeit in 1/100 s (also max. 655 s = ca. 11 min.)
}TConfig;

// AD9834.c
void _fastcall InitStruct(void*,size_t);
int vMBox(HWND Wnd, UINT id, UINT style, va_list arglist);
int _cdecl MBox(HWND Wnd, UINT id, UINT style,...);
extern TConfig Config;
extern const LPCTSTR S[];
extern HINSTANCE hInstance;		// Quelle der Ressourcen
extern int nInstance;			// Instanz-Nummer, 0..31
extern HWND hMainWnd;			// zum Fehler zusenden
#define WM_IOERROR (WM_USER+255)
#define WM_GETINST (WM_USER+256)
double E10(int);			// liefert Zehnerpotenz des Einheitenpräfix' (hier nur positives Argument)
DWORD FromHz(double f);			// Programmierwert (28 bit) aus Frequenz (in Hz) ermitteln
void UpdateValues(DWORD m);		// Dialogelemente im Hauptfenster aktualisieren, m = Maske
void UpdateChip(BYTE m);		// Datenausgabe auf AD9834, m = Maske (welche Details)
int StringToFloat(char*,double*);	// soviel wie strtod(), aber mit Komma. Liefert Position des Dezimaltrenners
void FloatToEdit(double,int,HWND,UINT);	// soviel wie fcvt(), aber mit Komma
BOOL HandleUpDownNotify(HWND,LPARAM);	// Murks

// Interface.c (Hardware-Zugriff, NICHT MT-abgesichert!)
int GetNumUsbPorts(void);

void SpiSend(WORD);
void SetResetPin(void);
void SetTrigger(bool);
void SpiFlush(void);
bool SpiOpen(HWND);
void SpiClose(void);

// Sweep.c (nichtmodaler Dialog)
extern HWND hSweep;
extern HANDLE hMutex;
INT_PTR CALLBACK SweepDlgProc(HWND,UINT,WPARAM,LPARAM);
Detected encoding: UTF-80