Source file: /~heha/ewa/Ofen/prozess.zip/msvc/o1/dlgProcess.cpp

#include "main.h"
#include <richedit.h>
#include <stdio.h>

// Bekannte Report-Struktur für Programmschritte
struct ReportP{
 BYTE repid;	// = 4
 BYTE nstep;
 struct STEP{
  WORD time;
  short temp;
  BYTE outb,outc;
 }steps[10];
};

void onEditInit(HWND hEdit) {
}

void onEditChange(HWND hEdit) {
 bool ok=true;
 int rows=HIWORD(SendMessage(hEdit,TE_GETCOUNT,0,0))-2;	// Kopf- und Fußzeile wegrechnen
 for (int j=0; j<rows; j++) {
  ReportP::STEP&step=((ReportP*)(regler.report))->steps[j];
  for (int i=0; i<3; i++) {
   char*p=(char*)SendMessage(hEdit,TE_GETTEXTPTR,MAKELONG(i,j+1),0);
   switch (i) {
    case 0: ok=s2time(p,step.time,regler.reportk.tp_ms); break;
    case 1: ok=s2dec(p,step.temp,regler.reportk.T_mK); break;
    case 2: ok=s2bin2(p,step.outb,step.outc); break;
   }
   if (!ok) return;
  }
 }
 regler.report[0]=4;
 regler.report[1]=rows;
 regler.setfeature();
}

void onEditRevert(HWND hEdit) {
 if (!regler.getfeature(4)) return;
 byte lines=regler.report[1];
 SendMessage(hEdit,TE_INITHEADERFOOTER,3,LPARAM("Zeit\0s\0Temp.\0°C\0Digital\0"));
 TE_METRICS*m=(TE_METRICS*)SendMessage(hEdit,TE_GETMETRICS,0,0);
 m->yMin=4;		// mindestens 2 Datenzeilen
 m->yMax=12;		// höchstens 10 Datenzeilen
 for (UINT j=0; j<lines; j++) {
  SendMessage(hEdit,TE_INSERT,MAKELONG(j+1,1),0);
  ReportP::STEP&step=((ReportP*)(regler.report))->steps[j];
  for (UINT i=0; i<3; i++) {
   char s[32];
   switch (i) {
    case 0: time2s(s,step.time,regler.reportk.tp_ms); break;
    case 1: dec2s(s,step.temp,regler.reportk.T_mK); break;
    case 2: bin2s2(s,step.outb,step.outc); break;
   }
   SendMessage(hEdit,TE_SETTEXT,MAKELONG(i,j+1),(LPARAM)s);
  }
 }
}

Detected encoding: UTF-80