From c3f006af1259c790b5a4d8d02cdf0f771f2328b1 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 19 Jul 2014 07:44:42 +0000 Subject: [PATCH] Initial import git-svn-id: http://moon:8086/svn/software/trunk/libsrc/aeclib@1 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- aeclib.c | 431 +++++++++++++++++++++++++++++++++++++++++++++++++++++ aeclib.dsp | 100 +++++++++++++ aeclib.dsw | 29 ++++ aeclib.ncb | Bin 0 -> 58368 bytes aeclib.opt | Bin 0 -> 49664 bytes aeclib.plg | 27 ++++ 6 files changed, 587 insertions(+) create mode 100755 aeclib.c create mode 100755 aeclib.dsp create mode 100755 aeclib.dsw create mode 100755 aeclib.ncb create mode 100755 aeclib.opt create mode 100755 aeclib.plg diff --git a/aeclib.c b/aeclib.c new file mode 100755 index 0000000..9401d9d --- /dev/null +++ b/aeclib.c @@ -0,0 +1,431 @@ +#define AVNEEDFLOAT +#include "avtypes.h" +#include "averror.h" +#include "avrtl.h" +#include "math.h" +#include "aeclib.h" + +#define LAMBDA 0.6 +#define pTHIS pObj + +/*************************************************************************/ +/* Average Magnitude Estimation +/* Rekursive Schaetzung der mittleren Amplitude +/*************************************************************************/ +void AECame( +FLOAT32 *pOut, /* Ausgabevektor */ +FLOAT32 *pIn, /* Eingabevektor */ +INT32 len, /* Laenge der Vektoren */ +FLOAT32 a_rf, /* Anstiegs-und Abfallzeitkonstante */ +FLOAT32 *ic) /* Initial Condition Anfangswert */ +{ + INT32 i; + register FLOAT32 arf2; + + arf2 = (FLOAT32)(1.0-a_rf); + + pOut[0] = a_rf*(FLOAT32)fabs(pIn[0]) + arf2* *ic; + + for (i=1; i < len; i++) + pOut[i] = a_rf*(FLOAT32)fabs(pIn[i]) + arf2*pOut[i-1]; + + *ic = pOut[len-1]; +} + +/*************************************************************************/ +/* Average Magnitude Estimation +/* Rekursive Schaetzung der mittleren Amplitude +/*************************************************************************/ +void AECame2(FLOAT32 *pOut, FLOAT32 *pIn, INT32 len, FLOAT32 a_r, FLOAT32 a_f, FLOAT32 *ic) +{ + INT32 i; + register FLOAT32 ar2, af2; + + ar2 = (FLOAT32)(1.0-a_r); + af2 = (FLOAT32)(1.0-a_f); + + if (pIn[0] > *ic) + pOut[0] = a_r*(FLOAT32)fabs(pIn[0]) + ar2* *ic; + else + pOut[0] = a_f*(FLOAT32)fabs(pIn[0]) + af2* *ic; + + for (i=1; i < len; i++) + { + if (pIn[i] > pOut[i-1]) + pOut[i] = a_r*(FLOAT32)fabs(pIn[i]) + ar2 * pOut[i-1]; + else + pOut[i] = a_f*(FLOAT32)fabs(pIn[i]) + af2 * pOut[i-1]; + } + + *ic = pOut[len-1]; +} + +/*************************************************************************/ +/* Average Background Noise Estimation +/* Rekursive Schaetzung des Hintergrundgeraeuschs (entferntes Ende) +/*************************************************************************/ +void AECXnoise_PH( +FLOAT32 *pOut, +FLOAT32 *pTalk, +FLOAT32 *pIn, +FLOAT32 *pInAme, +INT32 len, +FLOAT32 a_r, +FLOAT32 kth, +FLOAT32 *ic) +{ + INT32 i; + register FLOAT32 ar2; + + ar2 = (FLOAT32)(1.0-a_r); + + if ((pTalk[0]=(FLOAT32)(pInAme[0] > (kth* *ic)))) + pOut[0] = *ic; + else + pOut[0] = a_r*(FLOAT32)fabs(pIn[0]) + ar2* *ic; + + for (i=1; i < len; i++) + { + if ((pTalk[i]=(FLOAT32)(pInAme[i] > (kth*pOut[i-1])))) + pOut[i] = pOut[i-1]; + else + pOut[i] = a_r*(FLOAT32)fabs(pIn[i]) + ar2 * pOut[i-1]; + } + *ic = pOut[len-1]; +} + +/*************************************************************************/ +/* Average Background Noise Estimation +/* Rekursive Schaetzung des Hintergrundgeraeuschs (nahes Ende) +/*************************************************************************/ +void AECDnoise_PH( +FLOAT32 *pNL, +FLOAT32 *pTalk, +FLOAT32 *pE, +FLOAT32 *pXS, +FLOAT32 *pXL, +FLOAT32 *pES, +FLOAT32 *pEL, +INT32 len, +FLOAT32 a_f, +FLOAT32 PL, +FLOAT32 *ic) +{ + INT32 i; + register FLOAT32 af2; + + af2 = (FLOAT32)(1.0-a_f); + + if ((pTalk[0]=(FLOAT32)((pXS[0] > (PL*pXL[0])) && (pES[0] > (PL*pEL[0]))))) + pNL[0] = *ic; + else + pNL[0] = a_f*(FLOAT32)fabs(pE[0]) + af2* *ic; + + for (i=1; i < len; i++) + { + if ((pTalk[i]=(FLOAT32)((pXS[i] > (PL*pXL[i])) && (pES[i] > (PL*pEL[i]))))) + pNL[i] = pNL[i-1]; + else + pNL[i] = a_f*(FLOAT32)fabs(pE[i]) + af2 * pNL[i-1]; + } + *ic = pNL[len-1]; +} + + +/*************************************************************************/ +/* Average Power Estimation +/* Rekursive Schaetzung der mittleren Leistung +/*************************************************************************/ +void AECape(FLOAT32 *pOut, FLOAT32 *pIn, INT32 len, FLOAT32 a_rf, FLOAT32 *ic) +{ + INT32 i; + register FLOAT32 arf2; + + arf2 = (FLOAT32)(1.0-a_rf); + + pOut[0] = a_rf*pIn[0]*pIn[0] + arf2* *ic; + + for (i=1; i < len; i++) + pOut[i] = a_rf*(FLOAT32)pIn[i]*pIn[i] + arf2*pOut[i-1]; + + *ic = pOut[len-1]; +} + +/*************************************************************************/ +/* Normalized Correlation +/* Rekursive Schaetzung der mittleren Leistung +/* Variante nach Peter Heitkämper +/*************************************************************************/ +void AECnormXcorr_PH(FLOAT32 *pOut, FLOAT32 *pInX, FLOAT32 *pInY, UINT32 nLags, UINT32 len) +{ + FLOAT32 sumMag; + FLOAT32 sum; + UINT32 i, j; + + for (i=0; i < nLags; i++) + { + sum = 0; + sumMag = 0; + for (j=nLags; j < len; j++) + { + sum += pInX[j-i]*pInY[j]; + sumMag += (FLOAT32)fabs(pInX[j-i]*pInY[j]); + } + pOut[i] = (FLOAT32)(fabs(sum)/(sumMag+0.001)); + } +} + +/*************************************************************************/ +/* Normalized Correlation +/* Rekursive Schaetzung der mittleren Leistung +/* Variante aus der Statistik (nach Papula) +/*************************************************************************/ +void AECnormXcorr_LP(FLOAT32 *pOut, FLOAT32 *pInX, FLOAT32 *pInY, UINT32 nLags, UINT32 len) +{ + FLOAT32 sum; + FLOAT32 sumX, sumY; + UINT32 i, j; + + for (i=0; i < nLags; i++) + { + sum = 0; + sumX = 0; + sumY = 0; + for (j=nLags; j < len; j++) + { + sumX += pInX[j-i]*pInX[j-i]; + sumY += pInY[j]*pInY[j]; + sum += (FLOAT32)(pInX[j-i]*pInY[j]); + } + pOut[i] = (FLOAT32)((sum*sum)/(sumX*sumY+0.001)); + } +} + +/*************************************************************************/ +/* AEC +/* +/*************************************************************************/ +AVERR AECInit( +AEC *pObj, /* Zeiger auf Objekt */ +UINT32 N, /* Filterlaenge N */ +UINT32 P, /* Anzahl Filterpartitionen */ +UINT32 S, /* Anzahl Filtersegmente pro Partition */ +UINT32 L, /* Laenge der Eingangsdaten (Blocklaenge */ +UINT32 C /* FFT-Laenge */ +) +{ + UINT32 i, s, NP, C_L; + REALBUF *pMu; /* Temporaerer Zeiger fuer Bufferinit.*/ + + /* PFFT initialisieren */ + pObj->pFilter = (PFFT*)AvMemAlloc(sizeof(PFFT)); + PfftInit(pObj->pFilter, N, P, S, L, C); + + /* Objekt initialisieren */ + pObj->L = pObj->pFilter->L; + pObj->N = pObj->pFilter->N; + pObj->P = pObj->pFilter->P; + pObj->S = pObj->pFilter->S; + pObj->C = pObj->pFilter->C; + NP = pObj->S * pObj->L; + C_L = pObj->C - pObj->L; + + /*-------------------------------------------------------*/ + /* Speicher allokieren */ + /*-------------------------------------------------------*/ + /* Speicher fuer Mu[P*S][C] (reell) */ + pObj->pBufMu = (REALBUF*)AvMemAlloc(pObj->P*pObj->S*sizeof(REALBUF)); + + for (i=0; i < pObj->P*pObj->S; i++) + { + pObj->pBufMu[i].pData = (FLOAT32*)AvMemAlloc(pObj->C*sizeof(FLOAT32)); + AvZeroMem(pObj->pBufMu[i].pData,pObj->C*sizeof(FLOAT32)); + pObj->pBufMu[i].pNext = &pObj->pBufMu[i+1]; + pObj->pBufMu[i].pLast = &pObj->pBufMu[i-1]; + pObj->pBufMu[i].pLastPS = NULL; + pObj->pBufMu[i].user = i; + } + pObj->pBufMu[i-1].pNext = &pObj->pBufMu[0]; + pObj->pBufMu[0].pLast = &pObj->pBufMu[i-1]; + + /* Zeiger auf Mu[k-p*S] */ + for (i=0; i < pObj->P*pObj->S; i++) + { + pMu = pObj->pBufMu[i].pLast; + for (s=1; s < pObj->S; s++) + pMu = pMu->pLast; + + pObj->pBufMu[i].pLastPS = pMu; + } + + /* Speicher fuer PX[C] (reell) */ + pObj->pBufPX = (FLOAT32*)AvMemAlloc(pObj->C*sizeof(FLOAT32)); + AvZeroMem(pObj->pBufPX,pObj->C*sizeof(FLOAT32)); + + /* Ergebnis 'Y' der Faltung (komplex) */ + pObj->pTemp = (COMPLEX*)AvMemAlloc(sizeof(COMPLEX)); + pObj->pTemp->pReal = (FLOAT32*)AvMemAlloc(pObj->C*sizeof(FLOAT32)); + pObj->pTemp->pImag = (FLOAT32*)AvMemAlloc(pObj->C*sizeof(FLOAT32)); + AvZeroMem(pObj->pTemp->pReal,pObj->C*sizeof(FLOAT32)); + AvZeroMem(pObj->pTemp->pImag,pObj->C*sizeof(FLOAT32)); + + /* Speicher fuer AGC-Gain allokieren */ + pObj->pAgcGain = (FLOAT32*)AvMemAlloc(pObj->L*sizeof(FLOAT32)); + + /* FFT initialisieren */ + pObj->pFFT = (FFT*)AvMemAlloc(sizeof(FFT)); + FFTinit(pObj->pFFT, pObj->C); + + /* Speicher fuer WS[P][C] (komplex) zuweisen */ + PfftFilterAlloc(pObj->pFilter, &pObj->pBufWS); + + /* Arbeitszeiger initialisieren */ + pObj->pX = pObj->pFilter->pBufX; + pObj->pPj = pObj->pBufWS; + pObj->pMu = pObj->pBufMu; + + /* Sicherheitskonstannte vermeidet Division durch Null */ + pObj->gamma = (FLOAT32)1.0/pObj->C; + + return AV_E_OK; +} + +/*-----------------------------------------------------------------------*/ +/* Partitioned FLMS Filterinitialisierung +/* 1. Partitionierung der Filterstartwerte in P-Partitionen +/* 2. Transformation der P Teil-Filter in den Frequenzbereich +/* Element pBufWS wird veraendert +/*-----------------------------------------------------------------------*/ +AVERR AECInitFilter( +AEC *pObj, /* Zeiger auf Objekt */ +FLOAT32 *pWTD) /* N Filterkoeffizienten im Zeitbereich */ +{ + return PfftFilterInit(pObj->pFilter, pWTD, pObj->pBufWS); +} + +/*-----------------------------------------------------------------*/ +/* Partitioned FLMS +/*-----------------------------------------------------------------*/ +AVERR AECcancel( +AEC *pObj, /* Zeiger auf Objekt */ +AGC *pAGCobj, /* Zeiger auf AGC Objekt */ +FLOAT32 *pInTDx, /* Ein: Daten x[0..L-1] */ +FLOAT32 *pInTDd, /* Ein: Referenzsignal d[0..L-1] */ +FLOAT32 *pOutTDy, /* Aus: Filterausgang y[0..L-1] */ +FLOAT32 *pOutTDe, /* Aus: Fehlersignal e[0..L-1] */ +FLOAT32 alpha) +{ + + UINT32 i, p, NP, C_L; + + CMPXBUF *pX, *pWS, *pPj; + REALBUF *pMu; + COMPLEX *pTemp; + FLOAT32 muNom, gain; + + /* Arbeitszeiger */ + pX = pObj->pX; /* Aktueller Zeiger X[k] */ + pWS = pObj->pBufWS; /* Aktueller Zeiger WS[0] */ + pPj = pObj->pPj; /* Aktueller Zeiger Pj[] */ + pMu = pObj->pMu; /* Aktueller Zeiger Mu[k] */ + pTemp = pObj->pTemp; /* 'Y' wird nach der Filterung als + temporaerer Speicher benutzt */ + + NP = pObj->S*pObj->L; /* N/P = S*L */ + C_L = pObj->C - pObj->L; /* C-L */ + + /*---------------------------------------------------------------*/ + /* Partitioned FFT-Filterung + /*---------------------------------------------------------------*/ + /* TODO: PFFT Kommentar */ + PfftFilter(pObj->pFilter, pObj->pBufWS, pInTDx, pOutTDy); + + /*---------------------------------------------------------------*/ + /* Fehlersignal 'e = d - y' berechnen */ + /* Transformation von 'e' in den Frequenzbereich */ + /*---------------------------------------------------------------*/ + for (i=0; i < pObj->L; i++) + pOutTDe[i] = pInTDd[i] - pOutTDy[i]; + + /* Variable Y wird fuer E missbraucht, da nicht mehr gebraucht */ + /* Imaginaerteil von 'Y' auf Null setzen Im{Y[0..C-1]} = {0} */ + + AvZeroMem(pTemp->pImag,pObj->C*sizeof(FLOAT32)); + + /* Re{Y[0..C-L-1]} = {0} */ + AvZeroMem(pTemp->pReal,C_L*sizeof(FLOAT32)); + + /* Re{Y[C-L..C-1]} = e[0..L-1] */ + AvMemCpy(&pTemp->pReal[C_L], + pOutTDe,pObj->L*sizeof(FLOAT32)); + + if (pAGCobj != NULL) + { + (*pAGCobj->pAGCfunc)(pAGCobj, pInTDx, pInTDd, pOutTDy, pOutTDe, + pObj->pAgcGain, pObj->L); + + /* Gewichtung des Fehlersignal mit AGC-Gain */ + for (i=0; i < pObj->L; i++) + pTemp->pReal[C_L+i] *= pObj->pAgcGain[i]; + + } + + /* E = 1/C*fft{e[0[0..C-L-1],e[0..L]} */ + ffts(pObj->pFFT, pTemp->pReal, pTemp->pImag); + + /*---------------------------------------------------------------*/ + /* Berechnung PX und Mu + /*---------------------------------------------------------------*/ + /* Zaehler Alpha*Gamma/P */ + muNom = (FLOAT32)(alpha*pObj->gamma/pObj->P); + + for (i=0; i < pObj->C; i++) + { + /* Schaetzung der mittleren Eingangsleistung PX */ + pObj->pBufPX[i] = (FLOAT32)fabs((1.0-LAMBDA) * pObj->C + * (pX->cmpxData.pReal[i]*pX->cmpxData.pReal[i] + + pX->cmpxData.pImag[i]*pX->cmpxData.pImag[i]) + + LAMBDA*pObj->pBufPX[i]); + + /* Berechnung der variablen Schrittweite Mu */ + /* mu[k] = (Alpha*Gamma) / (P*(PX+Gamma)) */ + pObj->pMu->pData[i] = muNom / (pObj->pBufPX[i] + pObj->gamma); + } + + /* Aktualisierung der Filterkoeffizienten */ + for (p=0; p < pObj->P; p++) + { + for (i=0; i < pObj->C; i++) + { + gain = pMu->pData[i] * pObj->C; + pWS->cmpxData.pReal[i] += ((pX->cmpxData.pReal[i] * pTemp->pReal[i] + + pX->cmpxData.pImag[i] * pTemp->pImag[i]) + * gain); + pWS->cmpxData.pImag[i] += ((pX->cmpxData.pReal[i] * pTemp->pImag[i] + - pX->cmpxData.pImag[i] * pTemp->pReal[i]) + * gain); + } + pWS = pWS->pNext; + pX = pX->pLastPS; + pMu= pMu->pLastPS; + } + + /* Effiziente Projektion der Filterkoeffizienten */ + ifft(pObj->pFFT, pPj->cmpxData.pReal, pPj->cmpxData.pImag); + AvZeroMem(pPj->cmpxData.pImag, pObj->C*sizeof(FLOAT32)); + AvZeroMem(&pPj->cmpxData.pReal[NP],(pObj->C-NP)*sizeof(FLOAT32)); + ffts(pObj->pFFT, pPj->cmpxData.pReal, pPj->cmpxData.pImag); + + /* Fuer den naechsten Aufruf Zeiger aktualisieren */ + /* Naechstes X[k] ist: */ + pObj->pX = pObj->pX->pNext; + + /* Naechstes Mu[k] ist: */ + pObj->pMu = pObj->pMu->pNext; + + /* Naechstes Teilfilter fuer Projektion ist: */ + pObj->pPj = pObj->pPj->pNext; + + return AV_E_OK; + +} diff --git a/aeclib.dsp b/aeclib.dsp new file mode 100755 index 0000000..b0fd299 --- /dev/null +++ b/aeclib.dsp @@ -0,0 +1,100 @@ +# Microsoft Developer Studio Project File - Name="aeclib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=aeclib - Win32 Debug +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "aeclib.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "aeclib.mak" CFG="aeclib - Win32 Debug" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "aeclib - Win32 Release" (basierend auf "Win32 (x86) Static Library") +!MESSAGE "aeclib - Win32 Debug" (basierend auf "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "aeclib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"../../lib/Release/aeclib.lib" + +!ELSEIF "$(CFG)" == "aeclib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"../../lib/Debug/aeclib.lib" + +!ENDIF + +# Begin Target + +# Name "aeclib - Win32 Release" +# Name "aeclib - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\aeclib.c +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\Include\aeclib.h +# End Source File +# End Group +# End Target +# End Project diff --git a/aeclib.dsw b/aeclib.dsw new file mode 100755 index 0000000..0734a1d --- /dev/null +++ b/aeclib.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! + +############################################################################### + +Project: "aeclib"=.\aeclib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/aeclib.ncb b/aeclib.ncb new file mode 100755 index 0000000000000000000000000000000000000000..6bfa2dd5cf6a13a11e234110a6104880b71d063a GIT binary patch literal 58368 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 literal 0 HcmV?d00001 diff --git a/aeclib.opt b/aeclib.opt new file mode 100755 index 0000000000000000000000000000000000000000..f809ae567d9a59ef16b095fd9667f5845dd7dc6d GIT binary patch literal 49664 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 literal 0 HcmV?d00001 diff --git a/aeclib.plg b/aeclib.plg new file mode 100755 index 0000000..c7b0962 --- /dev/null +++ b/aeclib.plg @@ -0,0 +1,27 @@ + + +
+

Erstellungsprotokoll

+

+--------------------Konfiguration: aeclib - Win32 Debug-------------------- +

+

Befehlszeilen

+Erstellen der temporären Datei "E:\WIN98SE\TEMP\RSP42F1.TMP" mit Inhalten +[ +/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"Debug/aeclib.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"H:\Develop\80X86\LIBSRC\aeclib\aeclib.c" +] +Creating command line "cl.exe @E:\WIN98SE\TEMP\RSP42F1.TMP" +Erstellen der Befehlzeile "link.exe -lib /nologo /out:"../../lib/Debug/aeclib.lib" .\Debug\aeclib.obj " +

Ausgabefenster

+Kompilierung läuft... +aeclib.c +Bibliothek wird erstellt... + + + +

Ergebnisse

+aeclib.lib - 0 Fehler, 0 Warnung(en) +
+ +