Source file: /~heha/messtech/sensokom.zip/source/D_OUTPUT.C

#include <windows.h>
#include <windowsx.h>		//message crackers
//#include <stdio.h>		//sprintf
//#include <stdlib.h>		//atof
#include "dialog.h"		//GetRadioCheck, exp10
#include "driver.h"		//Get_Komma usw.
#include "d_output.h"
#include "sensokom.rh"		//ID der Dialogressource
#include "toolstat.h"		//HelpFileName

/* Die IDs der Dialog-Ressource sind für einfachen Zugriff sorgfältig
 * ausgewählt: die Buttons ab 80 (links) bzw. 100 (rechts), die Editfelder
 * in der Reihenfolge der Speicherstellen für die Schwellen ab 10.
 * Deshalb kann ich symbolische Bezeichner für Ressourcen nicht ausstehen.
 * Man vergleiche mal mit der Länge des ursprünglichen Quelltextes!
 */

void SetButtons(HWND Wnd, BYTE bits, UINT ID) {
//Setzt das Button-Rudel ab <ID> gemäß <bits>
 CheckDlgButton(Wnd,ID+0+(bits&1),TRUE); bits>>=1;	// Bit 0 (Steuerung)
 CheckDlgButton(Wnd,ID+2+(bits&1),TRUE); bits>>=1;	// Bit 1 (obere Schw.)
 CheckDlgButton(Wnd,ID+4+(bits&3),TRUE); bits>>=2;	// Bits 2 und 3
 CheckDlgButton(Wnd,ID+8+(bits&1),TRUE); bits>>=1;	// Bit 4 (untere Schw.)
 CheckDlgButton(Wnd,ID+10+(bits&1),TRUE);		// Bit 5 (Eingang)
}

void EnableButtons(HWND Wnd, UINT IDfirst, UINT IDlast, BOOL state) {
//Schaltet eine Reihe aufeinanderfolgender IDs ein oder aus
 for (; IDfirst<=IDlast; IDfirst++) EnableDlgItem(Wnd,IDfirst,state);
}

BYTE GetButtons(HWND Wnd, UINT ID) {
//Holt die Bits vom Button-Rudel
 BYTE ret=(BYTE)IsDlgButtonChecked(Wnd,ID+11); ret<<=1;
 ret|=(BYTE)IsDlgButtonChecked(Wnd,ID+9); ret<<=1;
 ret|=(BYTE)GetRadioCheck(Wnd,ID+4,ID+7); ret<<=2;
 ret|=(BYTE)IsDlgButtonChecked(Wnd,ID+3); ret<<=1;
 ret|=(BYTE)IsDlgButtonChecked(Wnd,ID+1); return ret;
}

BOOL CALLBACK OutputDlgProc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
#define m_Adresse (BYTE)lParam
 switch (Msg) {
  case WM_INITDIALOG: {
   int k,i;
   long n;
   char buf[16];
   BYTE o;
   SetWindowLong(Wnd,DWL_USER,lParam);
   k=Get_Komma(m_Adresse);
   if ((unsigned)k>6) k=0;
   n=exp10(k);
   for (i=0;i<4;i++) {
    SetDlgItemFloat(Wnd,10+i,k,(float)Get_Schwelle(m_Adresse,i)/n);
   }
   Get_Einheit(m_Adresse,buf);
   for (i=14;i<18;i++) {
    SetDlgItemText(Wnd,i,buf);	// 4x Einheit setzen
   }
   o=Get_IoputSettings(m_Adresse);
   SetButtons(Wnd,o,80);
   if (o&0x20) {		// Eingang
    EnableButtons(Wnd,80,89,FALSE);
   }else if (!(o&1)){		// bei Rechnersteuerung
    EnableButtons(Wnd,82,89,FALSE);
   }
   o=Get_OutputSettings(m_Adresse);
   SetButtons(Wnd,o,100);
   if (!(o&1)){			// bei Rechnersteuerung
    EnableButtons(Wnd,102,109,FALSE);
   }
  }return TRUE;
  case WM_COMMAND: {
   switch (LOWORD(wParam)) {
    case 80: {			// bei Buttonklick übrige Buttons schalten
     EnableButtons(Wnd,82,89,FALSE);
    }break;
    case 81: {
     EnableButtons(Wnd,82,89,TRUE);
    }break;
    case 90: {
     EnableButtons(Wnd,80,IsDlgButtonChecked(Wnd,81)?89:81,TRUE);
    }break;
    case 91: {
     EnableButtons(Wnd,80,89,FALSE);
    }break;
    case 100: {			// bei Buttonklick übrige Buttons schalten
     EnableButtons(Wnd,102,109,FALSE);
    }break;
    case 101: {
     EnableButtons(Wnd,102,109,TRUE);
    }break;
    case 9: {			// Hilfe
     WinHelp(Wnd,HelpFileName,HELP_CONTEXT,CM_KONFIGURATION_D_OUTPUT);
    }break;
    case 3:			// Übernehmen
    case 1: {			// OK
     int k,i;
     long n;
     float level[4];
     for (i=0;i<4;i++) if (!GetDlgItemFloat(Wnd,10+i,level+i)) return FALSE;
     SetWaitCursor(Wnd,TRUE);
     lParam=GetWindowLong(Wnd,DWL_USER);
     Set_IoputSettings (m_Adresse, (BYTE)(GetButtons(Wnd,80) &0x3F));
     Set_OutputSettings(m_Adresse, (BYTE)(GetButtons(Wnd,100)&0x1F));
     k=Get_Komma(m_Adresse);
     if ((unsigned)k>6) k=0;
     n=exp10(k);
     for (i=0;i<4;i++) Set_Schwelle(m_Adresse,i,(long)(level[i]*n));
     SetWaitCursor(Wnd,FALSE);
    }if (LOWORD(wParam)!=1) break;	// nur bei OK das Fenster schließen
    case 2: EndDialog(Wnd,wParam);
   }/*switch*/
  }return FALSE;
 }/*switch*/
 return FALSE;
#undef m_Adresse
}

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