#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-8 | 0
|